From 610069130863b16166c6117ade6b651a48e07430 Mon Sep 17 00:00:00 2001 From: wingo Date: Wed, 27 Apr 2022 07:10:53 +0000 Subject: [PATCH 01/14] deploy: 13fc9da01a2b048e86378b2cfcf4f65e072d8251 --- .nojekyll | 0 core/.buildinfo | 4 + core/.nojekyll | 0 core/_download/WebAssembly.pdf | Bin 0 -> 1510762 bytes core/_static/alabaster.css | 707 + core/_static/basic.css | 904 + core/_static/custom.css | 76 + core/_static/doctools.js | 321 + core/_static/documentation_options.js | 12 + core/_static/file.png | Bin 0 -> 286 bytes core/_static/jquery-3.5.1.js | 10872 +++++++++ core/_static/jquery.js | 2 + core/_static/language_data.js | 297 + core/_static/minus.png | Bin 0 -> 90 bytes core/_static/plus.png | Bin 0 -> 90 bytes core/_static/pygments.css | 74 + core/_static/searchtools.js | 522 + core/_static/underscore-1.12.0.js | 2027 ++ core/_static/underscore.js | 6 + core/_static/webassembly.png | Bin 0 -> 43955 bytes core/appendix/algorithm.html | 311 + core/appendix/changes.html | 212 + core/appendix/custom.html | 222 + core/appendix/embedding.html | 572 + core/appendix/implementation.html | 219 + core/appendix/index-instructions.html | 3154 +++ core/appendix/index-rules.html | 358 + core/appendix/index-types.html | 178 + core/appendix/index.html | 152 + core/appendix/properties.html | 741 + core/bikeshed/index.html | 17117 +++++++++++++++ core/bikeshed/katex/dist/README.md | 119 + .../katex/dist/contrib/auto-render.js | 327 + .../katex/dist/contrib/auto-render.min.js | 1 + .../katex/dist/contrib/auto-render.mjs | 222 + core/bikeshed/katex/dist/contrib/copy-tex.css | 14 + core/bikeshed/katex/dist/contrib/copy-tex.js | 116 + .../katex/dist/contrib/copy-tex.min.css | 1 + .../katex/dist/contrib/copy-tex.min.js | 1 + core/bikeshed/katex/dist/contrib/copy-tex.mjs | 86 + .../katex/dist/contrib/mathtex-script-type.js | 112 + .../dist/contrib/mathtex-script-type.min.js | 1 + .../dist/contrib/mathtex-script-type.mjs | 24 + core/bikeshed/katex/dist/contrib/mhchem.js | 3216 +++ .../bikeshed/katex/dist/contrib/mhchem.min.js | 1 + core/bikeshed/katex/dist/contrib/mhchem.mjs | 3109 +++ .../katex/dist/contrib/render-a11y-string.js | 875 + .../dist/contrib/render-a11y-string.min.js | 1 + .../katex/dist/contrib/render-a11y-string.mjs | 794 + .../katex/dist/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 63604 bytes .../katex/dist/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 33504 bytes .../katex/dist/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28088 bytes .../dist/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12336 bytes .../dist/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7704 bytes .../dist/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6932 bytes .../dist/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12316 bytes .../dist/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7648 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6912 bytes .../katex/dist/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19552 bytes .../katex/dist/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13284 bytes .../katex/dist/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11344 bytes .../dist/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19544 bytes .../dist/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13196 bytes .../dist/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11304 bytes .../katex/dist/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 51304 bytes .../katex/dist/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 29904 bytes .../katex/dist/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25336 bytes .../dist/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32940 bytes .../dist/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19400 bytes .../dist/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16752 bytes .../katex/dist/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 33548 bytes .../katex/dist/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 19664 bytes .../katex/dist/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16976 bytes .../katex/dist/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 53552 bytes .../katex/dist/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 30764 bytes .../katex/dist/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26252 bytes .../dist/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31168 bytes .../dist/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18656 bytes .../dist/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16464 bytes .../katex/dist/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 31276 bytes .../katex/dist/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 18736 bytes .../katex/dist/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16444 bytes .../katex/dist/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24472 bytes .../dist/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14396 bytes .../dist/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12172 bytes .../dist/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22332 bytes .../dist/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14100 bytes .../dist/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 11956 bytes .../dist/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19408 bytes .../dist/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12296 bytes .../dist/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10368 bytes .../katex/dist/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 16620 bytes .../dist/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 10576 bytes .../dist/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9620 bytes .../katex/dist/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12200 bytes .../katex/dist/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6484 bytes .../dist/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5420 bytes .../katex/dist/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11480 bytes .../katex/dist/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6180 bytes .../dist/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5192 bytes .../katex/dist/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7560 bytes .../katex/dist/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4412 bytes .../dist/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3612 bytes .../katex/dist/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10336 bytes .../katex/dist/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5972 bytes .../dist/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4888 bytes .../dist/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27528 bytes .../dist/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16016 bytes .../dist/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13552 bytes core/bikeshed/katex/dist/katex.css | 1094 + core/bikeshed/katex/dist/katex.css.orig | 1079 + core/bikeshed/katex/dist/katex.js | 18185 ++++++++++++++++ core/bikeshed/katex/dist/katex.min.css | 1 + core/bikeshed/katex/dist/katex.min.js | 1 + core/bikeshed/katex/dist/katex.mjs | 17807 +++++++++++++++ core/bikeshed/pygments.css | 74 + core/binary/conventions.html | 192 + core/binary/index.html | 167 + core/binary/instructions.html | 775 + core/binary/modules.html | 539 + core/binary/types.html | 217 + core/binary/values.html | 208 + core/exec/conventions.html | 207 + core/exec/index.html | 162 + core/exec/instructions.html | 2443 +++ core/exec/modules.html | 729 + core/exec/numerics.html | 1565 ++ core/exec/runtime.html | 557 + core/genindex.html | 1947 ++ core/index.html | 172 + core/intro/index.html | 119 + core/intro/introduction.html | 181 + core/intro/overview.html | 228 + core/objects.inv | Bin 0 -> 10897 bytes core/search.html | 115 + core/searchindex.js | 1 + core/syntax/conventions.html | 186 + core/syntax/index.html | 164 + core/syntax/instructions.html | 634 + core/syntax/modules.html | 355 + core/syntax/types.html | 271 + core/syntax/values.html | 222 + core/text/conventions.html | 214 + core/text/index.html | 175 + core/text/instructions.html | 857 + core/text/lexical.html | 193 + core/text/modules.html | 617 + core/text/types.html | 215 + core/text/values.html | 294 + core/valid/conventions.html | 270 + core/valid/index.html | 152 + core/valid/instructions.html | 1354 ++ core/valid/modules.html | 618 + core/valid/types.html | 371 + index.html | 74 + js-api/index.html | 4177 ++++ web-api/index.html | 1146 + 157 files changed, 109404 insertions(+) create mode 100644 .nojekyll create mode 100644 core/.buildinfo create mode 100644 core/.nojekyll create mode 100644 core/_download/WebAssembly.pdf create mode 100644 core/_static/alabaster.css create mode 100644 core/_static/basic.css create mode 100644 core/_static/custom.css create mode 100644 core/_static/doctools.js create mode 100644 core/_static/documentation_options.js create mode 100644 core/_static/file.png create mode 100644 core/_static/jquery-3.5.1.js create mode 100644 core/_static/jquery.js create mode 100644 core/_static/language_data.js create mode 100644 core/_static/minus.png create mode 100644 core/_static/plus.png create mode 100644 core/_static/pygments.css create mode 100644 core/_static/searchtools.js create mode 100644 core/_static/underscore-1.12.0.js create mode 100644 core/_static/underscore.js create mode 100644 core/_static/webassembly.png create mode 100644 core/appendix/algorithm.html create mode 100644 core/appendix/changes.html create mode 100644 core/appendix/custom.html create mode 100644 core/appendix/embedding.html create mode 100644 core/appendix/implementation.html create mode 100644 core/appendix/index-instructions.html create mode 100644 core/appendix/index-rules.html create mode 100644 core/appendix/index-types.html create mode 100644 core/appendix/index.html create mode 100644 core/appendix/properties.html create mode 100644 core/bikeshed/index.html create mode 100644 core/bikeshed/katex/dist/README.md create mode 100644 core/bikeshed/katex/dist/contrib/auto-render.js create mode 100644 core/bikeshed/katex/dist/contrib/auto-render.min.js create mode 100644 core/bikeshed/katex/dist/contrib/auto-render.mjs create mode 100644 core/bikeshed/katex/dist/contrib/copy-tex.css create mode 100644 core/bikeshed/katex/dist/contrib/copy-tex.js create mode 100644 core/bikeshed/katex/dist/contrib/copy-tex.min.css create mode 100644 core/bikeshed/katex/dist/contrib/copy-tex.min.js create mode 100644 core/bikeshed/katex/dist/contrib/copy-tex.mjs create mode 100644 core/bikeshed/katex/dist/contrib/mathtex-script-type.js create mode 100644 core/bikeshed/katex/dist/contrib/mathtex-script-type.min.js create mode 100644 core/bikeshed/katex/dist/contrib/mathtex-script-type.mjs create mode 100644 core/bikeshed/katex/dist/contrib/mhchem.js create mode 100644 core/bikeshed/katex/dist/contrib/mhchem.min.js create mode 100644 core/bikeshed/katex/dist/contrib/mhchem.mjs create mode 100644 core/bikeshed/katex/dist/contrib/render-a11y-string.js create mode 100644 core/bikeshed/katex/dist/contrib/render-a11y-string.min.js create mode 100644 core/bikeshed/katex/dist/contrib/render-a11y-string.mjs create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Bold.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Bold.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Bold.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Main-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-Italic.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-Italic.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Math-Italic.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Script-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Script-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Script-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size2-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size2-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 core/bikeshed/katex/dist/katex.css create mode 100644 core/bikeshed/katex/dist/katex.css.orig create mode 100644 core/bikeshed/katex/dist/katex.js create mode 100644 core/bikeshed/katex/dist/katex.min.css create mode 100644 core/bikeshed/katex/dist/katex.min.js create mode 100644 core/bikeshed/katex/dist/katex.mjs create mode 100644 core/bikeshed/pygments.css create mode 100644 core/binary/conventions.html create mode 100644 core/binary/index.html create mode 100644 core/binary/instructions.html create mode 100644 core/binary/modules.html create mode 100644 core/binary/types.html create mode 100644 core/binary/values.html create mode 100644 core/exec/conventions.html create mode 100644 core/exec/index.html create mode 100644 core/exec/instructions.html create mode 100644 core/exec/modules.html create mode 100644 core/exec/numerics.html create mode 100644 core/exec/runtime.html create mode 100644 core/genindex.html create mode 100644 core/index.html create mode 100644 core/intro/index.html create mode 100644 core/intro/introduction.html create mode 100644 core/intro/overview.html create mode 100644 core/objects.inv create mode 100644 core/search.html create mode 100644 core/searchindex.js create mode 100644 core/syntax/conventions.html create mode 100644 core/syntax/index.html create mode 100644 core/syntax/instructions.html create mode 100644 core/syntax/modules.html create mode 100644 core/syntax/types.html create mode 100644 core/syntax/values.html create mode 100644 core/text/conventions.html create mode 100644 core/text/index.html create mode 100644 core/text/instructions.html create mode 100644 core/text/lexical.html create mode 100644 core/text/modules.html create mode 100644 core/text/types.html create mode 100644 core/text/values.html create mode 100644 core/valid/conventions.html create mode 100644 core/valid/index.html create mode 100644 core/valid/instructions.html create mode 100644 core/valid/modules.html create mode 100644 core/valid/types.html create mode 100644 index.html create mode 100644 js-api/index.html create mode 100644 web-api/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/core/.buildinfo b/core/.buildinfo new file mode 100644 index 00000000..1fca0ce5 --- /dev/null +++ b/core/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: e756ba4ccf1084d9440b0a7f56b4bd2c +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/core/.nojekyll b/core/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/core/_download/WebAssembly.pdf b/core/_download/WebAssembly.pdf new file mode 100644 index 0000000000000000000000000000000000000000..821bee21855f57db8f9b8a6e18761d9855047bcc GIT binary patch literal 1510762 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
JlY2@d)H`j84uj}v&xm_#mSzm2wOWl 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

c*?_dP+ndQWjWpePHcR!ci;N{ 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

KI5 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 |dy!8-lSjEI$L_EaL|UA6O7JZcw+_nmPPI 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�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%0Aaf$|I60t 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 z zD0TWZ1Y@hLYMYjpwRN;kwVG=Uzaa%wVHKOhB{5xDJJznHN7akk*l#{V$=3a`u%iaGE>P`qE+d zOU0KmGuwx>t%tus?7mOm12Z>s&(?0&bE6L{Qb&~f6#mr^0{I@e3`A%Wm4Hz`hV9VN zlb{16-6Jc2p~d>B)K-17g1v{T|LW+<8UCCR;_u>NOyn?OA_t_0^{Vl*@vKt%b2foV zXL8Wj#SR~U!knBMX~c+8B9j-4ja@8T2`2g1=pS{0V`YYs0fyM-!N3x+E%@|KI@>U? z>d#FRx}SGfhX&;v-ZxFRlFx%dgYyfE3*tI5 zV_`P1J{HSiYophnvybnc&MneK8{V)8YF3!k1W2sJ&=l@1s6((3i*q5^SgV|F|2|cO z>=~=MS#6e&+Z>YDoQ8ej1zwP485>#mw21B8K)Y4#%RYoU#0O1=+of`8#K}Mz+qjVW zKXMo3rj7tnsFgHG+J_c=%5&(px|&X-<=*E0i&|5m zq3s5?`##5HvTo!$?~d|y3@WQ*jmG|(Df&kl6S_}|g{OG17qP;vQx~%`Y|4v8VtTiU z*RW5dXe|>GL73c&%i~zWM;X7}3%(MhXe^5r=^z327IO(LQ@v z#Il1z#r;{QP|_0+GL`i*Tf*j8IZsRHc+f^UO)ZVTydw4!E1jOfToKN-3kr>CVcwfi zdxIiKoRX(GH6eN2A`I+6b@Qkj2@A9t+V8%c&xvC7Y#z-jF4(B|;QTOq!5NGjquPk{ zSf%xNE`mf1RhMe_VlL6x(SkK~X+nZqwB>%^V!162e_Sx(Iv#w|_PjXb{Vk zufJMFvs5*?l**I_!bX`vLS~W_DJe~lbk%M?BkDz`%WJkyk&Yrulmr8fiN=JhdW}Nu z7Ma35^y}by+>st?LS0am(PFe2YSPG1sFI;jB}1V`j!c0Z8V@!!5vpg(SO1^OOU}v* z2F1eVC54%>rd*k4<|Tz0|M$s&JHaq8BixQb({P0gWW3JQOS`8FH%z| zE92y2+5VHnc%Yb7JeKxKe#WP6{L@uYD#45XV{)=R@BE@ju+K7=r-ZKjXY_s51fs3( z@{;htC6X}2u4C^%L z^yB&PA#?shn`Qh@x6r_syBZHt=0yrM?`_NzT+~b%YPAQjD+0sn)??$^ErEdKs>c#| zZP)o8ypJGfU2pm03&!tD!5c4hOT^2}U1u&xcAAyetX|UHyEKH}Nh#zHr8ump2aV2?d0F5m9hsJ?1YVAe1_BB>>mbgpsLS*Gs5NyafCHEjN=`0v;!k z9#z0!75EYVoeXtqx!X-VqWR!&Ta>+|Ru&5Kk-mJ6MFL(hfhR%r?%1^jcc>4R=#Pps zHX0~41E5;niU%4qCkhR_>W;0`mb=dbrh`TTt#d8rNYHT^KmrRMU<>Xj&=D-S%!_qM zy82Q=oX^-H!VB$dkm@d+=-W{3NqWHLMRf2t*5VE?aG@c&sU z-V{UYzEHbe9W0`5rUyGlAa{t@hr<*f!@1NKaQTCT9Jv^uOgdHjyHI>B>r$yU5l$dL z5;f$x@zO$s4Xy?V=gZ;c<@@}^9SR&2UBtxE0~4MfZiGou_#^SeC75GER(~MzG>4N<`Gk#nj-=CL$W+1P_fRHGlXq-r5pixtEMUhEfS|Kpj-F72Z?`{5h#X&2m;v+d0Bm#+9X+7k*h)4=k^43bmDkv?583CG7} z%21%LWf?i(S7V~kJ5L>S;|Cxl^$6h*i_)mX!Q>$U5-xLl$wkML;$7cH4JA!EjaE;t z+Q_@FK{ZIj+mp-+kl%RDwH+r|kTCyGquKLcb+LSd$!A?Gu3SQIfd|8wW%1QmjL2XU zlWx&lzvZ!fPm7T)t~dy$j8?4F4@w!U-ta_bSA)RXSHHhBRR*+I1g(c=C?F2@S@8uo1Z)y@8p^B$JeDE8f?&S38{rd zYT?0y8+{*X9~@8^Q}KGO$u$&8`y}OL2LWqejYm z|04H!$S)$$DaJs3m?a#41L#n50`Er{n`Se=GCPWSi44B879?uWNbl$K;(70wsL{hz zFGMRN=rg`FKn^0}5_ozs^@X+fVlds9oGuzPR!-s2#eJs>&Ub08!tg$3|K&xg66Tz( zseafVYLEu^r?XmOqp~rr^e5$zVPtfq7DiC4a;PjTTcO<7vM=DM#5&Mp$#cmYt(kA* z*IiOu?vrkE;lL6BHbpoF`$Uz3rOliKqr#2I|CkY&C9?tYc{tAH^GBG6CxB7hHVtFX zBPjnA?C+a7>3VZ2h!3b^v5)2_>sRBgh1J{HqdW(?H>^CV&@G_{LQ(BFu%$;;Dl*1S zjCyq>vVa#k!jfDXUT%5ci2SZA2vMi?f{~#BX`;Z|Qs9YA{>o)3p0K;vj&ki%qaH3!+*lqJb z!!48Zh1pwp8*y1p)rW62iweVGjG9V1p7+W=72e&HuY3y0j79+30)(%th zaTLXt!YefB($yT)&!R2rIc6QB$`7^(rkCrNA8Kt(R=if5A~9>+Bvn3%e^^T^wMX;C z+@+>%9ks~4Ts-+DR7J~%a`*a^xoh>ldyo$73HDb?q|QErm!fNz)I-#awfand zvMNWS&|fA9YA6OIZj6*3tS1h!Ej}Rpk_G+npcYlOF(2-meie7`NM<|maoN*1a2!?vIF|lBz~Q%%BQyKcdELN z*orN;rTcT2>kR!za1-DclgZ#Iq(E}Fiy{FG{~=$=owGO4j$>+TSm4EhIGKkWUdR$gP2TcZP4eA1vLRJpLj))kW7#0PE@c`=AFRq5hcZ`3q)?gC&dAdqe7j- zN74Q{9D4i8f@P3Gxa=Wyn7;)HPqBUR@7g->oTHlPGl13Mt1qVu>pcGSp|WQ63U#dfgHdq%;lCOvvv?h@e;~ak0xU^!${HW{O^`NHkDcF~#(~MyoI_EhDEyORD z>`q?3y(bvE+=QD}5(dm53Ewv^8Z zR$6$NbyM0R_D%*CHFr=5SmnOPP8K$`+jdigaL&tQ6efFF>&NS`4Tq11o7;!8ljqG- zCq>Wud|7ADc6N7%-{brJu8z=xuwZ-?bYR{%q62*pSffe z5<$%60;&uWgE?88lZJtwI$`06qBWEmFA+i!#?lp9%AiE553|gG-<>0(2&A)-$R>&Q ziIm@J;s;R>KkrH<(6w9=@`@g(9j;K!PBBr;P6uTBpq#Thq3DE^B9SY4wkR6N5O<)+ zT+k6;k*v;8hHsH_x{jNon7Y3WVe4EaP4573V^m^S_a<>B+ntNjaWQ@YHVK))bh=Y* z0XT|+wDeW1VZ*wSi}MVz;G7_ekrQH&<0;@h0fLCdME$|3W|^8sjkI# zRz(JK`3W?$GCiy2#cYq$jkd7}L)@~X4QMxe_*rHn?q|*(405wHqQUxApo*h|*4QQi zwZ+=wO1SXM;pX5II1|_^``_R#nqi`_7}c5yp;CR1u~k3K-(iPmq3*83u)Bv0=2PPxj@Vkmk`9J&t4QhA!*z zep%L61#l^=T)XA@J?_3uH;d%xA!|Mh39C#s&^6PPtcYlvQ+ncZSu zRo$wser}9t`gW`9EZz|1(|pz%p|^`HS4VKc-`zfRi%_=ApcgW~zD|(W|Kb;iRmcB& zet&SwmV0}DaXjk=mNQB`u>W=#7T3Bjjj#9qbpIkx(B1LD4pgUmB|2^T-VQC zfW5DUqg9uOm>1N*njU9uMQejB6Ga{v_0WvlR{5lpw243C-1wdXcza7(t(|Z+X`z`u zA4@(-c9u#Kr3jeHb-Ax@GRxsTJ<~9o=JHxP%so_Y;S|dla{vX_whE(i!o&$IHFGn4tmvZvc`Pw-s;eB6bYW$5u~!Nz|Yv z)uu)TOIK2pfBu7VME6`nJExG${my#2>y)5jlxnTQiiVDrq$#5wwq674Z*X z;iWE#rU%IaJJip26(=MWVd(jeQo}65G@xo3I)WY9FPoSFUE;*VVO}{BGH?luOi~*6 z+W`4Mf6}_C!`S=Tt2?r!Z)+#t*s2+nMEs&!Qzn5h@>c^<$Ry=rJnV`X@5wW4H-lo# zed88;W&y$lo#q_XBVSF|3>Rcfm~I2+Z;5b0<=r%^I*8b44|rC4^xas-`Fi~UKP&Jr z&Z-PuL*wNy=RP0B2{=hMgtc>58noYLWu$9n@vJLsY@13~-hyEd0F5@bYVve8c&T8m z!y*aa7bHpYo1|T5vAW1%z1NkXWs_0d7v z^t>$!%}b7ok2imBsb&W0n4bK=EPJlTZ9I{zEy>C;)k4Lvm@38%3^{Y3S&$9=)vP1Q zp7eu{?zVb1TbliAMWb5YPt5{c75I!t&5l)bQVqu@87KNp!Xe_!N+Nz32ewvh#=!m( zl1;5(&aW)%mXgo~QwWYQ`YTf-`jVH@;I_QK&80*gu4I(Yd}8OQWjS3*43%ZYN)oHq zkcIMoeU`Vqn`6`%TM<^K-E{4hH=y*IUedJwpkwDBpNk=t|87eB6Q#u=)^baZo!VL~ zjSte0Xj%Re0n0!%qN<7!vhz{}o;uZdILviXW#w$|&)u3a&^YwX`WR(mwo*{L;eqZR zz`uG-v<|;>Qg<^yc3fc8iiI9G%xuBazS}M5R9yhY>U!o;R%F6(M(x^5gC3<457@wvBd($xRx(sD7i81^h4Vi@=3tIc8b62HuyH zB-2BO^cYjF3F=9WiRQj=!cDvJO3tK$GnddD*7fsXG>!+F3=5+SHBIBEh=g}=54aqX zzgdQ{Gcx||haZmr+(b}Y%Wk6u#rL6ZW*>%P{L0s1HjFeT3d1HK3Fk;y32&scu_&mk zEpdb6>F!IU=4N&E_cdu_bw+(jZ3~X(N2jAae@^lXPV9f6s8V-(MN-u0(+!(tl52VVpd zpUJ)NBS_+iS7oi_1vXo$--5ut3ag>4pzuiEh%=QaPwe7d5WeT7@#l4Q@w}Wy`;V=V z$ce@VD{fhP+`r48O%}YGA(EIjKTvgA9XkjjsiI6_Ze5yv@D6w+MUfEC7)F;H-%Cn< z$MSVoc&uebAsT@aWLHDcXRXXm`Mf6qJn*3IhZjFOmb@=~niV6=S6=ped7Apo%?TW? z3f1f1pux$x16#?CNaWd4c0n2PgFlP-P15DwTWsO>CMFc?rF4#;*Punvtg6EIuJWvo zovkstn^dV4E0i3Ip+Yj7aMI+QLTe7xyg$RB+S8!*_puph!LkYpjmNZ6IwsL=x){| z>{flN82wpADf0^+&B#yFESn6W#N-wo`T-BLV*RWfHYW56S)714?F`}ZDh-ZBLf5lrEai%^>Nc!M_ZrJNU~^{92@B7*MqOM){PPX#sd*a0ZPm2Sg^?3}oo}D3bAniO z_>VnbgZ_5nMVXO-{lgl#{0}5*duf&k9{c?RxMIhE{vaz zLAw3G%T-Oed2#G}%spvY1Lw#=CpsV+V^h-p0`{wBwg|yFAbp1||1yk;J3g(z!RrB1 zfLZRroa0?{0F#l=re>9}M0J471xkTd|Fa1%qrMoN3KQW|4-!}%FvV!Ui42L=|Md$J z*hxN?zcbp#9wVV!Z|^BGm@1s}U_e<=fX-fT7BX1S1Y|y~{Gufbw?tb7waiD)23uR| z6^>4Mdb7JaapE+Z^!-&rpzmz_SFoE55rEUda(+ZJ3#3xlO|D**vvE z_P4p1_Hqif>#IM+31vsd4rzr_lJS0Gx+ua15K3sNO%safuLeL#;4q#CggdBD`Zo;= zhlJ~tqVE4lHvrqaB{JODV73-%?iS&uCZ>Nq%M$R8bBNLhb*cKTRV>Wi>pPu>z2~IW zM3lweVftP}<#|iC0a0SzS&77}L>HSE6=S<6vrx9ba=bS=u%d`a?>T)`K!}o|t2evZ z>a#@w&#(WLrkV$FjxckZ{n_>2;y|5{bhmlKn%DTVXqEYCtHbA48{>hKNf*aRkvw_G zj%$b}U#2*8JVJycXPZl@SaWDP%p`yc!`BM;YS7~@ z%^t{Bit;4n5O8u9FVqUd5KA8gW2=~C9{PP;Im6-fBy5>qQ)$IWKw}}ghbQCUjvFS~CdHoKQAtP-Z5PBLF>u0= zMI#OOv)6dltJ?mAlJ%>cw@dq_dwhvxbu`*eQ4L5O3H>Swm+I`jYiwaD@yqH|V$ zSAz9EOr0TmyOR~Bt=-nUxDI~nj~#eF)>p(&Dy7pn#9z=p;nREPA$^Mb>f#sr>F7Ow zR~q+|eLIAs#Aj`{;7{r0X~IJV$XAp1PUqqN4ChcY;jpt{Al_f0j>18PMSEMY8A}_cq$^ajVYX%qopG2)-EsxV{ZvxM$9myDXQ<| z%CD>WH0P^T&Iy=^wF*PZJ0!=!z_ea zlc4pz?Rb{yGL%L*S%fYYNT#Tp>1r~?GYsV9p)I+07e>U(LUzOt76LItceDD1B9;cM zqv-03O3V@Eas6Sv@L$TQ+QmXoN%7|gi?uaJrbv%1&vtPh6q#k{n;EeX8uE|~Os`dA zk_<{+bxecUtdHPYOR5~0R$bUax4XBsTp^z3=u^7_^ms{wV4K$`BqBBz>+jp0+1z!r zFV*#f*lbX+u~D>>Muzl%y|4;`-g(iCRLY#w!^~CQTDZ$<_ptvgdR)P%6d_S5uS_wn z|L&6^{q!2A(fe~3nC27+}UQ2SZukX-c;+CM`#MY8sj(ymxMOJcP zU(oV7P(8<v6L)K-r7dXeXfS44BMp+f7z1%ARmH`qY|bX zo^t}L4?P-HbbGq!XeY+LYTzZ^k1EO+fUX`H^n&3LMA{3780Zrp!lwV6xdUA{rMLU< zpZ4Bw`4_Wrr__WiRXqTCrYUucz0Y`>l4~+#Gm% zxm*01?3CP5cbIn2R2V@kDpWd+y7qJI2cxJ?-X^hroIQM5`z$wQVe*4SsfhFW?gF#(FevC%#wUdIa}NJH75+e)NV0ej#d2>3O-Gm$y@&8dM`6GQ?fCHzbal z&6yhXDwA~>hbNQAfc6_eEn=vrvE^Vfwi7-2IFgY za3u3E=5%h>{^|Uo_|1K*==0ttzkJw!s{r37FJJoFadXtNp*M$Lho9d`Pyyom`R(q0 zXW8L&DY`w1weXz{o2S;v{nOqiFMSXl_gI_M`e%Iq8QikSrI%9t#TJW*RCTNQW)WSI zIZAUhHYuD2F%6PMg+NCliOK{Ok_s`Um|`4BwnR(PMTyG3zkvi*k}5H^m}(piwnj_i z#gWRt5Q;H{IHGKkmS~HVm5M4wt2IFglHO_^LpeI17la--c_%w?u1oEb>py9Ii=vc_t*A(nu_!n}g zP!{DmX9(N*8xw^Pmcn46b057-Y7(?@(QMo43($D%^vsFzd#|=l)3Z#YGSL#)j!+kh zgU=$qhe-yB$ZC>g*v;i@$gIJz3>W(=#j2;EG0}Ib%n??MFUV>UWmqcNh+$?P2`IB~ z)v!8g6Z0^oRVfLzlJz`TOlqe=M07NZF>jX$7SY?3WbC7CHS6R@Nvmv=KQLPOANjU| zGW&JnGLE~pCYVGDOGdi5BPfKOgxNQXf1x9_oW&V+j>E_tDym_0lA(5|EU033l*s=c zCJrXTs|k`}H|wuKyEei+OvF>Zh&Y8ArsTtN)tNj?s6neqmT@_o4-6d?nqh>p|Fohv zMrlGigTMIzT8LlcKhbL5ON(J+oUyOq*y3v>_+`(0bcmN0=dTvM;~*yYX4TR;$wLf- zZZMNjP$CAhEMkm-0aQ$xENCY1lEQ7my_u+pgN)OpfW_u;M!l0DCJpEQ6nioc z(pE(w3hJj%VU<`YW=nh`htC`;{=D6_GThNYDbjdwYv`TKbyA2{(%wT6&vO zpj4Z>PWp@-08ctn6+yHF)wO{#ANnr6&3eM64E`BLijk>49qxk?gj*%?|J~|8-iH$D zxO%6K;ka#@&|G@1os-2ZNDPbuE~g&+z(4Ns~3Oi>c{ zub#145+bIvCgr4@=4>PNHlH4@E!pC`$p#e^dtW#@wN!WfW2eR{PUdUXtBKVO4L=?N z^53jd*jX6=b(iX&QDiwe+5WKyMF_(nW?}7Y;z-CKW^LeXB4T1>XKVt)#|Pu&>}X9_qB2Nn4FkoIg$ufy?SWrnex{0uwa1o-N%9qMPHTpt6 zbfDa8`$>n|$tY?WQL)QMI;478?A-U#C(#StrErZ=%GW-Bbf}XQI~L+x*GhrSMo4gn?1^W>7v@+e;I`g*1i z+28o?;1#Lc&%F%W7WOJOoAsZiD>0=|(W-M=?Gb#ul)C4B1$>UJ((th9Q$M10$#FnZ z;&JgQ%jCqeF*Om5^HZbIH8cn3uw-UjNXH5lG`}J|6E#56~lsG68V<= zt~zCicrZKeB~4D$)yZ`?b9ib|E6ycN)?dFIfxm=*yjZYujIynGeV^`qF!zE+_(1D! z-%W`6BsGaoR=*xvId?hEGeF5V5M-}ho{7E-Y-hT#n3t$}M{oru_zHBEQidr(S!6Af z7$;<%2+wY0p+vy_F>H7eUT(Ihg~Tcr(jfnf1}qO0*!hU&o*XN=fcj{V){UV0Vn6VoZTlDSV634P{bd4M4VD0 z0mH3~a!rcqSO@@jtH_ScF4J9Ro^VF4Wuh#EYtt`t6ObbEo{(>f`JzLGfo(jQX2&Oo zVad0B`jvHvydP_c3}TM@*3TzG0l`Wd((13Q@3{)v1b$yF8tIX#zUNgRWHRoi;vC~X zU^d;}#{J!_!T6s$oiH)~k8Z;R_|NyYHMgsPPA9(GJwkEEQEDvDY@n#&HrZ%6j4cG2 zIQ$$_N-_hRj+bo3A3i;^oSB|U2{SdBNA!nFvfs-Mj$w4h z1E(Hq>8_YKO2PTbhP6Erskr3|*d>M>4_s#KffAXva=1>BxZ89Nh}aCw~w^n zfPY|V9Y$d?4R2}4(WkD3Wi>?!<=D|9$ZApOXcru2s;GaRk?^i0!W}UKkoEmrAY05>lpi8zSu_E}Kyu zNFc1BA>Z?Fx}DLMZFrc87i_=BztX8uL5G*Aq>TV!A`QM+N<@{4(sJ!@Y(o#TK3<)n zPOPW3-7B8kTgsNu6++G~ugm<2GgK)AVNAPRi=dQGc9Gc+rg+gO0@IA+i6{XQ-SOa$ zX3nL?1`@a8Qo{m)zeIS7B&1oWozJ-;iOgnMKpIlvv|F~!GImqFq+jNw zZ6@Pu+l!^NZOMy}MI;)Ap1bIhyOG8x`cl*{xxCzX+i&}q6mI{e-@N_aH}ZR*KkV%J z5<5Npz@Kxm4N1$pI{?&f2;vyFl>IpHwzK(oJ08-P`3TpTqU_L{dJ^lfjH=HXw(>XG zFIHLHyia4dbGLIguS;G|cE{ro?ccq-Z&sTQ`P=Gx_;$A8S0rwu+u#5Rqp%ol7J$|H z^OZpy-dlD+M3THsCj86KQ}}P#2~vxvl|~8FeXUCOkqcu#h}p(Xvm|P)>s8(Rq}WFf z4iYSNm*cRSmcK!CHr3&9d?)wZ6Ubnt!9I)DP5UJY(2^X`5Am^+gk&&N-u#$$#Y@al%(fP`lhg6HyOe(t>0S|c%p7N+a(Eb=La9#qh#<2i_mnqLx0F^|#mlPByXu7gt|3ysSb2SuC zPBn_kI=TD>ixcm#xIha6#wup%J)3b&`tb%lCY@ay9K4}E1MQurl2T#?_UYsum5-a}%Qb+_Cr8>}X@NvZ$sIr)|tkj+@~Kf%;j(kJrP@XIi0ta%V@QEeK)Rt@py4NUi5Nx8nSaY+>?ti zjEU8Id~w~U7$aErftz!Mc*yXOCx`gP{53UgJJ0v|_4?@va~U&YqkciP%X&z#%;3J~ z-964$p`tVuGpu`t$G_h(rg|Y&>!(43#%#5*8lWm&brPj%tv=I$b-+Ay7On_ej3wF> zYmzb3pc%bL4;wLRV$a}L6#Ar;sYz3$#v(1#_)KI0x-d%!4 zgYOU2#7;)f;lDt|jw>=0H#-iJ3g2ClT%+P=L7TzO!ozQ#bm6Jj8PzmArJpLRTMJzJ z@!(o34Qc{?Yi+f@BHBO&E$|m1*j#0RUY1PigUPZQnT}eM$O?Q}sGSQ%YHQY7g9B8t zHW>pFN}(i*tE!=~oYrZqqGcz#(R0n3VgTQsY15jiJP8QKb^qi9%v-n2mKy8TzhnVC z!RedR070^7G8L@Trnokax6fJ_^Q9_!?ycXktwRA#z^o95nPci6NyzOTT3c{{h9mSF zo-CW@-2rK2vj+abW3k&w{G&5zk3so4-x#XCo0QqAURG=BUhLzpK8_ zb}q(0%$e3>uT3so6Zgjp@!|W!&{LN}J-E!0aWRh+@BC%dg93_L)*e zmi^)LhexXpnXKr>obDJLa}{%vb_+83ZZ%4sBRPp>qt+B0z)F;764*L11eLmElKszL zEkKSYXG~Kk0c(s?)ZQuV`Y9*2ESB{eG<$#1!&pb7)4Y4ca-Pcmk9_27#i30wDNz8C zF-r=Y=t)gv`KDDd+&+yG?ce0z4y0FT?4l$N)NY#q(vTJJU8C+HyhroV{r!pJ?fYZR-z{_4I9dM1 zgzulq5eEnJf36&5Y1yqYq784~P`##`58Sb}JYd+SJhvcNAlk5jL$RWM&J3>EEXyNO zm>q|aJe8V129vUs^Lfe%@_B8QnL$H#KKTZ@C7Fk6To0`g4uM*Xr6gul%ZU>`8}h-c zKPMlms7QLVdq!{0RPtswZk()(LNDf!LEkv7dhEe0y+;i6pH5d{$g31rJg@*v1_3<~ zmC$uiBs;Pa-F1Xs9bf8#8!(XXH#KK=EbR~OAhu$}ZPK6%RWZR+#R_IOI@^fNt;eU4 z`ZmmOy^Pqzg_I^#%(u;svK|&mUW7{x?M7rIWSVQ(i@!2!#=IPMY$kOByh2qBioVsD z7zx^@R7B%1{D5B4Jd3^%7hoju+!QtG84wDiY<=@ka`(0LDtq`MbWW4h`8=nfvS=f2 zgj@FV1J0?>?T4Q3GV=hnN@s^y6Mr1;7J-YjlXbWdom4|YBg6m{(!d<@001vknp@o5 zPmxzl;~2sm5@E)jhcDOQYmfmZ!hj*0Gin$w2i##*25zVi2i)*+ojAN!5hQ#Q@SI|! zaoZkdgW1`aeBV&5D3r*GnY+#W(J)+`c7wYX+kE?tc#0d$O~MA0lW+Wx0mAgSj{!c9 z1sMctVQ&f~(zAF9rD-ua)%BXa25nGhEhKJ1iv4}=r-?>T=KBuk@ZpzrcXAwF$i&0J$Jy;O>{nhFhoQclot9`$n~9*_`wdQ84=PvqporG z8qLa>J5(T(U|*JlT=bZf7(Qg6v2FB=ps{~quJ9r7Kw(FL0QV!F7Aj$ou-(3!l~On| zyij>W&~5Vo1dt(v%=QRj@Nfg~)6fElW@v5N<%m6<1i3iak&dxg55E`(M*;ko%j7Sp zeFjHTt4uZ=a5+@mrC^YIos`_Au#n}#CS{NozRuNWx4ZSurDr0a73TIORwF3$1)Ph| zMBoqxG{@v(hRF8pv6hrvPX-G0>N)c)yQQdJbUo*%1TJTHiZic6Fn1}Q~p0h?Ri_UH94qia2JV$xs^G{4! zhkbzFe$w6fyFvW_A&fgS%m3&qjQ_cX$PmyDSGyfKWcyJ4h{;2-s#1j-dZPaVha%wf z#2TVxG{N^R@^o4j15>yxzq~|e)mC=I2)t^j=uX?tlAF5S#08o8ZnreK9Jfe1ql4(MEM>ERRp#^Ly z2PPx*A4uA?R4piY!V)zi!&puOYDjV^$5{?3uO(IcDgbk?$=6f?q zX%{uUDmz^zo1S_us=2eOtwXpj(lprChf>?*8N=WRojwc_nNjpa^6JdzIX)Sn*)r_6 zQ#mc|reLnlgZfFrN^Bup<%Nx4Fx}gb0Hun+#o^u@;al0@g}vy)qCjVqSvNG8J5940 zzatlTF4q?;C$?6b_v((`E|5$W{{`-RMeumMDqEXih^jbM9UBvZs%b*k+)TdWDP?Z| zh8q>F#b!WDGfTBsQNm(UT~?9Ysm1)}?92%#W~OaU0Ofr{rF6qXi&!ek9Wd1;i{>I1 zqi^Bz<_@)yx6En8D`{EdBxYI0ESke2X5mmy%_P|2b-j1-`#$fZtz*3P;Q?{lEsZ_T z&)as`@74L^p>x~~F^*q{U>p1m4d#-er{{I|_Zzo4q+1$6EkWKUcmEmcX*+r$<~h9L z^|vhKM$G8v4!g}L%!}VYbbKGK?)!9fJGOaz-mfJg{XE+qj*7yzJM6mK=lS&lAZCDJ zHqd<*rcs4vjTAb5lBIkA9a(%uGY4>sh^`Y%a!q5{IUlPjF0MkQZn4eN*n`L+2ySU} zN;UT3F&Wl~Zp21TRqcUju`a>r8&<3D5hs!y(^OJBWVYO85R+G?slW;byXg}qvdVL4 z)*V^QDW8HZ{?sbLmzK40RHk2Q(~iwL>|&V-#C__Xk+oIePHX*TI)k@dVUbC;rBBuU zGi&41Q=mr@yBJHYaucu($;>VMtd6~9@apBPsE49p8(4nNQ+jKTi z{0vtO7V|=wqe!1WH7D?Hek~e@?SkAenFJZon66^**VqSsVR1Bysiki=>#W9RwN#YQ z6KMK@`?-!i(KLpho^qVt3LzcKhtdPzG=`<%G2O0u_M2$2O$9bmV-W9`^Wg zOf6mES!B%Y(IKOyZ>hzSd(vuCb~}iU7URWO%q-rP%zX8=*rfw%c6&f|j`SZ9+-4^} z%O2BC;@I8dvzKITK+$|T`)xV{XJ-m5t$gV)AZv@V=<-5u2QldYo(B|l%+@sY{4spc zoXz-Te!*G8Ifv}rUzL{poX4G;8u}x`24ACzKQCa`YXi^Du_#Wd1t`QLAM(ZNER9UI ztRz93Y6>dJ1r=hchDANPQ%ZBsDXJc?|qMn$}my zu7q~OI*y{J^c!T>8`);H7JOS^_7pHcJKB@+d#>zgRJuYDT-$FDlM-d_rJo<|q_ zAFnqrA6HU~ww*!0d%Axw4!k)H_=xrud_ED@{k2ywfG>WhPI}Dosa%{R){uAax?dq~ zhoiq(*)dP)j=qk7fUmo~((mH;^Di1V53jdht6d*1(zvtEwy9{+M^YYf>;MYDc zK9_|}#}U-MNgm0+A3x8RA#U@&?rC9 z(Q7`O4OC{STc|b2)J&?z%1OV1t7U|y|0{?AVytmiSsN{k=SNBtWJ$9ALJYA+TAWYa5 z^7UB#GGQIQ7-pT!L=V-SlIBa(RqD|x)1h%K;&kQz(+h=*m+!MSM9#CVfqjPa{x4k6 zPSD2B(67h9p`jnkAa820#DN+K*(M2ZxjomS`tr|g)$39266~;UGt<2~1ONypYrl#9 zY6tSuMz(Oyq{#aiw~`;`v38GTz(z=ZCQL6BSI2c`W77^~aHfj7_3fOZta~G$Yi^`w z2s(Lp^2;{;$ohJM@OUgc*Zr$;JWG(}dqxRx_K@5JpCWxe|+9wmk=qIXqm#KS+b$ zhv?Z!_jI<>vS!EJg!7bE);&JqI1!*hxOap}|9odGwi zZ{tP%ix10^g=G&(m%3@x+ix7pZ`YU;?));tO-CsHsc8#es&HC(s<4>_%FIey%qZ+{>-pn;=vq69cT&rcoJ ztzZkhctMh2JWeT#vAMJnhEqciqaGR^P9xAiWL+usP+>y7^rlgfLN~m<50CixoI;v_ zQK3EZ*^g3QwOW}(P;X#~bx)^>h$1o;uCP;6w}rMb-pDz%Ob8(Zk-_5Ek@>cUsB2jb8Q~VK%>r)Fw4ribZJ_WEHW#KzTIU$LVL;%qM z0~Le~hzja8WdD335^#zETISy?hQ{xRRt^@R``43zqTb14qWX;GYzWY2t;(W4H8{$6 zS;TOV=a05JLw{SStsm!4jJ;SWhI!ssvQYu!1HF6oSnlh1aIY&Wy>TD`O}eNXElB2% znfYN_P^{jvGbD7Mak|NmW|M^V+l(~6G7W^&Ri^$5yhk>_g~ zh1R?o@?+Zu`Lg8Nai(ZV9*&~vXTKR=+8I1@=v|03uvfyD5dOLPJ#!}%;K{I~fq=T? zoR)2#zHkj~*CCGu3{Xu?+rg?J!IfA737G# z%FawT%OSbc^Lmz)QZ7?P5-4s_5%$2i0A+2ADRo(S3crhmm{h z_3@l(KyWHOR_d(Jqwm-5wcg5u|D81)VKbj#fx99$-b4H{``sBw^V{(5n}}OXNH3ZM z&<1%#M7-#>pd~Bi>-q^Eny;?Ns5=_=dHJVnMN8{)as04tcP#)V8MUQBIp5XTel#=b zL@HT$iU)sR+Hr?-4;&{}Uon=mx_ZwcSdvP+61}=nk#upR-&|~ROq+g~*Ll5t7JoDq zO*%!TbY@i=wgk~o)X>}>JDT2^S3#ti<`j>f-QsATY_wWKJIYZ_ra2YvgRimi;+oIhn~h{gu-!S zY_o##8WDa4IcksNxE&#f3n%HJE@&Y=bW+zp^Bv0_eo&6ncf(jm6n{6!O<)+u)3OfC zq5sv(ARk&QOBc-CsOB0zHwc&xWuRdQ|Ky;l|1g`(Jr)@hT&)n)Bm}R4ZrO4xAQ`Xa z&KCXc7wV};HR_iVjXO}B)Nklc*+(8&VHNax4Q4BBztTT@=!mJR8EI~!)5j>&p_!yP z-iUA}F-t4aqbatTX;3!0;6XGP*KDMt$H@$tXz(x(kMAj}MM$3cDe^E=h(b=r+}ky| zJBQ;SLwo)(!w6iHVZ6Y&>=CLwvzhM)Kpy=Ili!!PU(fr7-G5fZfV*&rFV<*o~x zgSQ9i@CS}3UNw8hM08Is^9Zj|L;pdBY?Gm(>79Xt2i`KGYV~g$)zArpt?i23K(o&d z;#zJ5S(o(~57A}HyjWoNiobI2VF-;wN%&8Y@ZU)NP@?%?nmZHP{Nz_{msxqREpVl)R!>&x^X3m#T-GQqM+zdAi=Ff`iK;w3P}zy0>%rPDcgnU(qwdcBwPDVSpjrkTCPgfc!jwu|b zQQqL_YJ3&zOB|dPrGgCYkqSy296z;}Fmd&+%#VO5${Rt_!pAiImglYEh*z3tjF(0> zgk2?@LAFZQsr0KfaPTDD5OT=Ow89FK1}_eoB^$N*9I`CSvB;88q8jVN{vX<#z4D`#5Lq3{47GXZ3#D2Y8ysgz-R@0sY=ODKsvq_ z9MS!3vTOK4*nIYz(2pk8r8SCnqwT~b@ryl8*U$X6v>G?iJotB`5N)v9f=mZ61jRjX7J8m~DaqvB1o zjB+irJhUXb+gR)PCTpoJj|{J9^d^#;s?~`pZP|WDso*%i_#RVinWOuiBWL^d;~|RM z&%w{nhbu?V@ATCXd{X5ab!;`i=o*W$q4 zw_=5nsMJjSMq8_>&(|T64=?>)?z>ZUn@^{wSykLU&L1AHxAR5he&4seu15FGE^emf zpKsu-^WD`_qTwT#-E-leAESX^^~pRGC&K`iL5*5ulZ3)B`4rU}%)^vPePQ-hIJ76Y zyVMpCxF`&sp&6!5(EvQ}e4RyOHaX)IKoET6p=W!x2@w0$8>!o3-~^ApDyt7-^zasO z1+PffP_Hhf6u!dAL}L>U5YBhnY?(R9wC0bXsY=vZPV%Yi!% z!{(?#fAW30O;nS8i=J%x3}hx8pg6b;z8Nppllr~V8X}|nQ{KUEb_3mx*1J9i%0ah_ z*EdA|4m=%bjp>t}3;wtJ_0ERF&Aaysc%QUDD|rU3F&&ZRT)q1mVy?7s6YG%YR*rk? zgCmcxaw zkmYMUy8OJ}ZMO^seosB)(*)ao9&ZC|yprXcCrU!yn{2@Feu7~Z&~vDn6me1o{P(pB z&&rp`=uyTZNVJg{0ivVC&Ed4naEyN-+8Aq;G0}i@Kq52&js#nb`7gu_?utathJUzevJ z2e?^w*4+*N{}R`e>`ZV>aK~7exet43%D+LLWz}W^N4RtnCO)1QKj!jjFOZ!ux z9G2ztMVoi%$|lSDOdnat53q_LvJ4h*Yyf4+0decx>XQ{%DVxMa(G!f8i4#P8*crR? zC?=t@qK6Obu=Y^KG`Rc4LQ_Lk#@@Ni4qcvaALTRGQ1YK8toHa2Amdn!K`z0Sr)~<=HRGR;xDe zkabN~^qFQqn6BbEZQ)w~@UR0ut|(sAa^)?-DFLs8vz3DfB7ohUgKY(_Y{{G@8}xTu zSMN%;l%}|chW!8iFp}%+p3B5Z%8!Kh6j(6_8<5>Hh^$>8yP?WNo@-qjql%~D>bx~< zfICgy4?Ww|NtS6!g{qc~m7ja3K3Ae^)^du-dY2(t%0wQKRk>eqfn|Y{QZ_S?3br-4 zGRJ#7J6_R37m+G_Nt~?7KLZv>nYA3Lk-&@+9QeEi0^vZkd=?H$A9blNZVD-j&J%SLS z{+O3ui0aWF^E5z-6Ste|^b-rB%oaPw47B&WR(@uZCBHthn1cs~ggmZcNZ&`i;V$S3 zdL#8hLq*Xyt(Ap2^6mOqc{=aDv4fQPKg4}?R9wr_Z-796Ai*_2a0x!RySuv&?iSqL z-66O`aF;-UAcNbW!5xBIfH%2%?z`uG>wJH`skQc+-rZH*{p-DZw^Uc9)V;C9!rRpL z>@wQB)HuEdJ;f1;tJ0l4^3F|~5WY+3(?#u6$PwV?v}O^1O_!z4a+yZ6AvY$VZugvl zAaM}r;IB-Ma1H4#iZ1Yi3#m^hcAIoDjdE#uzrEf}%<>zX>G8U4kbAsA`5YgrD4MQW zgjYlpnW6YvnDJ6lX1VP{iuyb95Z&$TpJWlVDR0zm>ahwHqqd`n%4dnkC^m{8i1mAV z!=WutVPEZ%B{}o5yk?`_abJBEEGr;NJ0rae6E8`Zq83~l_mt!+9}xx6OJ&Yo_0c>L z>Pr}O$=LnQpDbBVfm)la+VN%92BvZ<54H9i zI-*+GbAoqGQY@5grHA3ETdr1YxM5H96fzWaKFXnSik8xIwv%sSyO#?lR#aG1M%IcL z@2~_T8Qbo7j&h6#$9kKNyDekXu)>YIGE4)|a0-wUBgnuB-tfb{!idg{W&az@Cy*OTT{1}>fb+m29ZGWvbFCQ z70qy#IxaMaI!y7)bHzC0yK5a09_>1bm)~$k%=YSzOXoBexGq`d%(O?%v_Bx^w7qr| zZc6g!EUi9GceyJP%B0z*R zs5kO-rWg5CmRIuWi-B*^0uaEg@E$cxNdP6OES)@}#D2_O{^@MOaU%6L`0{teh@mT!V-8oPr@z5uT2RCu!s*rZzV@AVtpk<* zjU@73(?LwjTZ8(hPJN%$j-eAe542iv4N|D!r!fO!utY{FYmKw0Srl-shYab8I-xD= z#Icn-2x8O6y>%c)p%I|5SRz{jn9jd3|p8uDjsUo#P}wpLc^h#BFbZp7a$%%m+#ZJlc3pCZIk57BFT!w~js(u@bHYr@xEF&|Idymo0vViHTUC9Y z?`dX3qMiFftM#3wPzh%SiCjNBwK;?Oq?b> zsrx4b01mGIIREfJp3-FI{I_-hE5~0xr8%JUH5PJ8v+GRbXZm*Uhe}CxEE3!=^wbFP zuL6rj(1qS;>Ei~*tO{yFjjxw}x9i5k`&ofHv)pT3(q1}z+rDPP#?=o}CJ4ivL4O)pn^%pCx<<(~{MLlXxBdb*I%=*hch=~=Fq+%`P?91sY z*phZYQZEHEV6M06Bj}^U%+#2&Vewkk4*Ftd?3d6)X9?@Jy|QUey8JIGXjarIX+Ui0 zq^W3SYH7=0h@IuajCCWBC4dYiMf$xFLW=9v4^?Z51B zR2#w8`n3)JpV%=Sh(z;~R{EY6Us2y=9xZ=M9R~nRPAqD^6y=LKM}&l8gV?b3Ia>#n zXZF8(rKyXf<~pFIpv{wr2W41SNu`dHm(lSEBOh9xSxi4QIylJM$~@?rU}*^>T6rLF zX;#Q+2DX`qYX+S&IbM!=h{FZ5*0I~H=$c$EA6nGZY2kxB+m$N{bK2Zhny0?>Q0^wM zUoNP&n~8x8R0u>HFXe30r8?4{P`ZeZViJ)!Eca4HANdaVo$jQPZZ79}un%gBTqAO5 zwWv1hL>zZ_I$MnK@sd#n%!(8}Uv!V0)+9clZWiRg)1j_xch$uJtRR-e!e9Z{2~w_H z>vXT;WUUq&XA?#?>gK*KNjzH_oeb;nRSi38U|8QMtPZ$b9)m##*Dudr1oG=^tE&Pl z+4_*(d?Uh_t^QR;j?%MJfoGS;bGZxXV1sMdlm!f+;p0S`HPO`h782 zVJr@`BPHQ#(-L`|;p4&?Y2b*9EU-ite7z9`HDE`|XCo-bu2NQQbAx78pCSD|DXUzy zqD~>HL=jw&NJud&4Lod28RO@M2#_5z1*VkaN)$#xrTo&{C&}p@RGBm9&jRaeQA?c6 z+zg9b5)vn8l_&37*m{U68Srbyq~`gGN&z|y$q17s_Ba~aYLusqt#E8UK05OME}#_i zHP#PR=~aoCSmocj+nP1RDJOwc57SpOEv3rKyxYR?S`x= z+>{(D<e^2A)+Q%Tf&wI|9f+NlX! zb7#F`pk1Ok?MXI4L3%Y|O4cxN7f6?-=hQz>3J$Tar*rQ`_Z~)G99yw5Yf!Lj6y0rr zSa)xON$s+>qs(IC$O0cH5%@9G<*F2dq}~IwQpU!{)LAq@(W6S9!*mq$&oDyP;~-+x zra|Ry?#{}Y{G){7!_k%PjC?|ZJ;Ant=T!mc7`0~-w$Dyt5#JZ!pN5d+u^&;9On2wT z*+^q!?jmNUk&~johRVc-xX@);FSp!*ir=zV*XG&qWF5uY5VH-BOSfgD>Ap|QIv`*< z2hW4q!A~n!B+FH%KQe7i-JC$=ta1%0V+ILq4oATZFlL4G^KewbSmHkTQKq}vcPreC8qEIVUE(GX{e z&GK{XLq>qPcC0od#Pvtn!58g@`T*m+d7jT!LPFhu?CO<6>fN zZeym>lpw=0!3Qpw=Wu^{C;#$r>le7){W4G0fO*RQ@^G{)QBy>cID}JY(3AKy(rtf# zq@i4pz7lBA!_uJ@;^)2-_1F=X5QvlQ?U^!9$vBv}LbvGzh*X;QNPaN)(9d{8tCq0i z$twcs>-wQ*Ncf1UF7fVH`qz7J>&i09XMjgOZrC*NUpU$S{^s`ok36X3)t?Y_;eQiU;eU~c|A*dphVV?U zaiNi*LSOw3DjHHVVd5ep!G=PM1myoMh=j||{4s}2_**zor+<+pn*I+LN#jPA>hC1 z-&Ot>0{^P=zY&1Ng~hej^YW^eq7*wPz`7~7KYa;JCVNDdGH__QSgcL*i?CVHrKHGH z@)Sy!4bO?lx>BMv7-za+!EYCT?S7rN>EAN>V@PwmrgrP+7cXoeF4Z^ z1jEbVUv^?n6ca_5&LH!NyLy_8_d6LW$h?=hSw4IXECJ@tJ7$a%kXN5o2YkGlQF3^O z<2r~_&_<|cPD$`-mzll86ZrR3R1^N7t1-yS{7GE9$f<@Ev@+$Xnv-EuVoqe%P;0JE zIm1eDc@bj%j2a->TJQfulPf zB!c3=^n+XwokZ<;TypDM2-**ZpM~FhCVsYQ3~$4ej# zZ`NOSEot|QMga^gVTMf#q!JnzEsdc_Eo-{YYf+W_P()7y!$%WqGjh*rI))R%&Mlcr zEDB)1SCVd`i6w2U8%~f6DLSUMJW?~ioY!A=`mPByp=Pd#$L23#CrC1}BQ|+kplB^V zMAO0-ZerWu=)~Lz{+Nv>vYgQ_sf#+(ht&qc{(9kGjiV>49M=bp!8V&C=7!#SElxFw zjyHf{bR;LQxwLpJ`dOZEPV365HbHV+8Hn*kx5Wmr{dIXPmQ#ebwrs>V`Yd$4$hH_Z zG4!UjZDn~|8#gY&0W?>j>PeHHHhv`q!WflR*FI8XtlajoA8otqwv&G`p5FYfJbLNm zN}VWe3HyBVHuidvyh&9Twii})swtCs)@!^Rs|u3_8thkeUI==0{!B)%7BC1)k^aY)>5#>F)grtOR6w66!WMsTW!UBn^#&jk3h{>cE7!aXm7qeU#{ut^YQZfc6W3>Uz|Go zyex->^_(#X@cRBbdKzl^il}(EbuqfLFdAo{-`&>n>-l+N;*|c)Pb;)Ua-t(?n7G{t zi=XjxgI!Lyx2G3NdcMBim-`F?ZD;&G9=F5%zc$Xl7MkaEyE7WBfqPyQOxXH^Qr@B6 zSV&kl4dIxOo5hJ56h;gNaTFyS4^zV-YgHvyFN$P_Ui7IXE+=RPTp3&2$0t`ANme=v zDdgHqu;$*P~ zP3Y2V&EAnM%@`+~I(98dk~N>-tRKw~V$Ien25%t&?HBS@@R|!#XGUa$G6o619SwrGH-4XwLLWN3Z zWFWrt>xPANIF=Bts1XJu?y;W`lZ4IPOp7f52c@YYO)J@(9V!@vO_Sa|Y)Yl_hNRGF zQf8tV8#ZA4-=s=qNd3KVvMBl`%t~_R^5%FdTA_?#AH96a3HwtA(vRzl>s&NawQgFC zOQDUrml8pyeAV3$97Z8H7;p~*e&Z1RPaH(g6R!_tS@I4V5oat*SS0{nIS1r38BMLn zPQXc$`wN0g77&s7qMMAuVRV-?fAv2AB{KKtC2va)ofL?QJUoUdN#0Q9l2E{rO|IY&EYppf9)az}l{$qU8?p z`hhihNMXh%8NA-ewYX;h3zekr@h5tp(Os74<`plk_b|==|P- zoEos6f&a3WqstFh7a8&`6HOdBhYE+j0QkbV$=j{dvl?h zZfRH?`pqIe*U|Fr{lzh!BNrFfnEJzEzpylY603- zjM<_h*Lc~ymXHJG69rHRC*7itp~NF1pSis1qVOwJ9h>@oy(#zxKKZjRE`arqU)+Cg zm@u<){M8TYiLPAI66d?FOFEa}k%Ilgxx^AHR4Fs6rZ!vQIikc_Y$IL_hP;xIDndaL0E!JDE}w3Btg}_ zZbTfYM`w^NiLth1#`MnYXV)A%KR{rGvg?`3EPp}nacjz6>)_Ee-lbH^&8TQZUf(p# zlKUXej6j3Vl^5bav_>Sq|#Aut5XlCVURqU%0oO{1Rz{<{x_Sk-npq zW^P?svkc3>SZg_Tro~xT&bkooOt$cBs}C=y3W-S30AIW zYPYm9b>g(u*?RVxP{M}Qda@{0+TeAh3j25&P_Gc627&|c%6~rTAkutGi5E@|=%!pR zLZo~frAz6KGq&Q6@{bK883!in(%ajYM~del?zwWFiW65l1jXX3How)& z>U%xEMZyGgSUn_U3YQ&>Z{jw&^#zG-kOtUm$!yr10~In3CC~aho~s|Jtc7UrBkSii z&ukc=VDS|vJr?%EBd7asp}us!ynN#ywlvK6#ytjWAxYkj`Hvhp4pcBF;3;zP)l71| z!urihXayAPy5$@`pf>GP!kJ(6xHi+6n`cdXn*U`}KU;7Iu8RKDZ*4lS z0*b6@yv4ti!vJhW_H8%s67++(xjJvJ(=ec&hxfF`ZXug|@A*wU^Y^Pi>%*A-<5=ha zIBQ_}!dPs zwM5D})u|cRpP8&BuM7o#*j$l*|6|+ED#OKYLE@S@nBR*T)0KN<{6G+UU7AHznb@pf z)JGM`IlTHRv{=5-jES%)PQ0IaCrg`h$9zG&VFUfqbO4_1y~H^DBfGSzs8bRNJ9?{} zxH0)4|6z>jf<#clW)_p!mY$f#vQzwPWjOx9|$iAa~H3B>J14vI7wlo9OwYu4QiaTvJ+MpM^Whl#{TNS%g-Y+tIPntq_C=(~YXRpA?aFQ*+*Khlnlr6}8XbCAhOl}2fbp$)P zcaD#-DKx3;m7IFaOYBb9>JWovoLMRn!)A9Us?{1NeaX6gBA z=;`K|!tIZw=V%d_8?`goqJ4;RgjDoZTRD_R8tDocGR~dSv#>kqd^;F833bls9$8aQ3Qz zLUE5vou7>4?Z*ykZ|%=O2gUa@TYJRB*V_uW?(CY)zsxV^G&mmCStqv*X~-wxqvXy} zEx1Pvs_aN7BuE2nI?1KJ!kuIcxEj&ja9Pe`A(L6~nrFGb)h;=oIGi4ny-0PD0|GhC zE4zGDfpDO)F}2LDj0|!z)~KU;I@TZ{5SRf}02XA{c5ty23eXTXPaxr&?&5>i#$*#S zGMZe$DH%drZTru{M*uGtjO=QT^6#>$c6jHFFN>E;Ibx7en3zW6|fg`=v~<$+GVlP4=D!6E z9(+R|&-hS0<^-wTe`WTSzd^czf>kx!*1k=`G`j_VH;9zgFh1RyNe6>f2xvI3Zl+=g zhjf#!md@uP^^i2-g@lDAEpft}1f<-h1+9IPO+awan09bxv^LG^=e=&$b76NT`iT* z5zSoX$+%A!uhs~~TU8$p8TvP-hLpo;5V*b};oC4*0(wTrWG-ubE%Ma1y__F5@?KaX zWZi~KdUqk3kpewEPUHkWLH0)rOuo+Bm5&{zaOcw5gWshDcGR9&p9V#JO43UgP;ZIXR}KR+ zXO7Zp#|}0n&%T!+2MDOvMPomQ~G`=lED9Fh<@-^0jK8BAM9+aQgCm2a#X zI8qoW{!a=O|2O60lSfM{dZ?DcBI{-ZXYve#Up`gz~kRTHP7as{Z6iy^4|LdgT--7#y;u=itfm2w~ zHHI#*g><-jU;p2?SOF{$Li`UJnSEE)V3-4Y^wFE2p)m6!>EEk~h`(oS$EP?2!OyE z@zzvufP^(umM%2N!4eA?r@*Ck#>hQv8SKRMy%Y*2Z{E=D9$*=&P|4)wE&ULgM&=#) zpnR}X=8MlXQ!19O$1j(8I>RzXlvl7w;&MY{89uG_1TZ|5o_paiLjwjW+>fDuhwG9u z0D?_aiY0MQFhz>Fzn4J4WX&7iECRGjkPEQGmBje&W!8MGQNwLOgL#EcriHp?tHpw%%J3-u5eZ6ID z>2l%$;_FL^QIMW5dc@R(-(B^Iwd3Xv!kKP4OFG6-NC{%Hf=r#2>U^18Ps`%j#1G11 z@tK&ckb!ARN#a+fGQT+yhf7?hlp>N({}2bnZ<2O4ntgdiI5md!XX7CNEBjwwMdkX} z9yl{Q+y7z}bu?Co14;1q8IgWD=3}BK8t!XJozL`>YDs#Na!XpTVS$mR_515-o=Y;= z@6`pFM0hl2>rgC@^w$FrX`UVAs^9hHgc#1L@A1b-f>=99D^o7?~)?Jlx)~pmB zzOo=sruyBknY|@f0RuFHNNAL-i66y{ULtWVRJCa)_?r*8OecSQrUg_^k zI9V{m+NO&`)b1Qj4Z~L2&;rTe`C$CXqWOXZ(U9RtBrKT(U6S9xkW08SeOK80`f6aH zcLf+kYYo8l*DLCF3jaC)z?|X2}(+IL|(ttAWj9WWfLJ7(FEyCn|~J zs1~{MlO!2qhiYq>R<4;epJ|%NK|{(978IA^B${h5Vmsl`1(p-n5Pw$ZqAu+XQ`^|0 zc@pntd(UTOT}y0jO}%{1i+Z}cn@+aY#JaueAJTaHiS-T~>(UjW0s4iNy?i2a^54?f zbxy7UESMT0U14)-QY#{EDQ{rjP$^B2+~7j?P)zWVWaU#^%;VWMd2u^C z1R=OEL3&s=b0}`urfJk!W=R)+SxG*-p}ly|k88paCRNes2|hMS)Ikz@qYD1hsmbs< zL4w4~k;uji!sM6IqtSI2J&K#SbeF;>Vq!6h4<^wm9%84s%iJ--#LF(mviU=aP#7Xv z91w>-S$dmp-Y3^`%H-3vL8bIKO>p*ggi=0cH%VmrhTo_m{+Rc>;~@pMNf2mmWG|-UP-~L7#lbxZmqS4y>a*1s}bPu@pD@sUg0q4 z_WeZ~B)}(dzdg0patg|d`t^7Qz$}Qf><{-=xJXQ4+8-X$2o|~_*{QQE`(zi_1UP3) z14fZvOt*6=)xocRP)IWKQm)gq)Mk=NLLVGN58S&+X#1EjtH?bkj{&rv{;KJr4PgFs z|7w0_F&y!jYqbd@aZe(R78PhQX2A_I(Zfy@rT@mM#EHcis*zA zIkHS?626$2GGYGVHNU6|vD9Nl4*GO@={F`6R#P99wDAd)@I)u|BvQ6jIOmiwfKia# zBD4YZQSr|2e)E0j59^2>Q5HW}m5}>SHsORVJqZdLvJ#O3$}#NXpgQy>3rYDb)AiDl zI<%1C7HeajWJR-zFwy^uPq16DJwlkK(6gfOUwpe6HJO9rs;>;}aAHZx4SuSMAg5MK z4H*|(_I;Gm#>J3P1#5I#my)olqBP9}f^%J%#BP(G zYNmW2ol+{+zzb1a6GeL%aX-NbE8v=`kh;6 z4K)ppm3#1T=Bp;Ux(m3K?x@Ip5ztFV*)dmN$p^%4%E{@@W*X=`=5>n#+)c;{B4${y zNO2a878wbrnbow73O7ETN)#{yQt4FC9ONEiF+rIxWPPY#%>Pe#1n7P~j z+me%n$Gqu%LnOET>p^rKJ`KL87)lZYvQ>Z)TDyo}d!6C$mW?SHs0UbT*#KaFHm$j0 zkQ*GRa>%7uOT95Ew5*HYr}4zZkV)a2(PMeKRa#B^uIW5 zoh{?MB>C=dmTsj}%vku&hUvjoDk(bX6*uuk&9A=)Bcn>h1$#dN;4x(3S&GpvJogOa zhd{hnkM0V$>F8t_ecvnBqJ+*4QVhQ-m9|j^SsQaQk1HF&;zbWX?w_SsQorY)xOCyq z_KAC3S=?WhQHXV;O&x-DJ}i{N?zw{dVE=ZSfmUGx5)v1w|uxESa}!ex|0;C$$KLeOec` zCTvv7P&?vV*U_CvT?chf6hSLGEarhumf=%^SYcMHFEv9xo@T4LA8-$=2K3pnZCtON ztQ*%e3SuL42w*1IFU^x#J90lK+|gE3;*Ia74Yt&JhKV>?xpk!kYINDAIklpQH7((t zovvz`oXJ4_OgvhCu4&SJV&OeTohYyWHUCSiq0SM!v~rW;%hhzu?;w)m@(F5|W+#Oh z^;hPlPEpP|Mu35{Z$kmAFUwEsaeF5efs>Rx#9zF32JYu7Z+wYBX%-p9+cRmB>8*@()b&mJz*PsH<-Te>u+_#=$7T{tu=?QqX zTlh5Q7NvPSVR(1~GF{iP_&1?3cqpY}x#QDH?q5}3M-tuipUwFU_MF5}l|NfvPNaVG zr9!tnIm{xZv#vldFHbFl&M%)^DMehNsFeO%hFwuzWnrc9SwTHzU&N4i#L&Go$;cP~ z^Q+h9OAaRH(7n5_a1OSS{PmBd&0!z``%V55(b4Oy2ysW^0x=||sSJ(w7j9KoBGqMS z%^XndaZPK6%tThDLpw6oD{I{^_*SooL=)%oQJ6GxsqXh`vhi?VNAt6TO;wtKS%=rl zUkOiJIa@G4&kwnCxFC8$wg4kLWXew{Ymrb~cIMj?Pxd3<=slsjsOjr!Q0|We)m$hv z)I>rXvXfi|GVx%cGL5Q_t?{Jsb_+>Lgjms>I|#v|%ERsytG&vP{HZJ#JCvjL?j3Eo z+q*SaQ!%iDK=s6J(&pj@-;h>$s92C&x<#{d$*X*ePesbKN5$J5!>`ebw#mAv!&YrS zvXI!oZfpp+Olh4OQ2pY^|6W26RZOCjn24zCnXOFA$WZLyxgjEbc~C$pk&wuNM2%Ry zy@V#j+4<=cDK+CqXrgh3&TtZ~9LxYA-*!v#-W;hBbwp&MSOKD3#1T)dPqDE1D_2fV z=dOu!-+Obs4!;~7{X9USep55y+1fv~rzsh$b#@a~NnP8@_=P%je?nncuBrgqZ@S8J zGq}LfKnABPogoo&oUR$Qy){xuY}6(fGYsPyiWMbX{m*(60A$DGubztiqgAQ@jpl*e zZ|@$0XODEBWElwS`K1Jz40ROINuXZKgnbJ{sqcgj#_jlO1z$%{!C6r?$t2Fgc7>$C%k)m zj(&Q4R98f*JO{E1N}b`1>P%fy7WOXG`7JZ%X;Q>MNz^WLv{sSEM_K#?IvqljKx3N-2~FvF(qoOsFh15`+5GM{IJY zM@H0TtlzvhvBg}Z<7@7G<-_ij^;)nzt~wPb-E+;2J$`zq*-9jUzqtuP^}Pu_BfehT ziDctfdi$o%aM$Q2rSF`B>tD@==Y5nk^!6&K>0N*NeINQ{d^6=q8zix-MzWAl zXp^esC=~s-p=_+tWa4)8`QNBAgFB zZnkh!DF=-_u3jP+hWE`Ul%Iq@xO$!a_g+nWc&@ms+^ns@DElMrDNf|)7JiD|3_IEtkVeZ51XA;EXw; z#3yl0IOnYTAAfSVmQbw3!DK(-`AFjy$<8JDXo);xkGbmies*J?$(;Y+m*hgmb%D$A zkb!2Uh3Y7)dfVjeMt3elZx7udaD!LIM>oD^+k5WOTx80oV)WX~4x?Le@8iMCNF>-b|WairtrA#H5aANwCr~{_r#*00SfxM zV@H5eEYG1@GQ^xn%n1yh`)l@q?JBQBm_dr_ug7%&tq0p{mf_sT!-_he$b&>D_U5G1 zDpYLu#&7j|Yn}yTSw~{Ya(O#ZScGG*QT7iyR)qMVh5D7cWBZG+5g zkx|q1J~xO+Ns&}fgQ||bMJG6k7a4n@aj;%y1}doeZEYt?!;o_7Vt1^oTsrAa!xE&v z3f4>=ymI)sPo^$xHkpBpo4zy~>4?XMVS)*01y|CmEPe z&N#6xbC)r9sYx{Om6sKMK+37od@}otcW*S}#-V)oQRPicmUbZ+GI3ChNVm)Z#?cf` zUlf&w$DDptdJ`R`9SGjB>{}$A>z39I0Tir@u|i{M5EMCBl9vqgc`V`Y_w+%RQA_MBqU zAYb*A4f+m1olZ=v6l_vqSmk6(U18;79>Hx`0$D24%cUIK_`T>y8InHTlwY<;Zp=M8 zBLqRg!Yv{ba8l{M;hM=;LO$?K0bkk{f6gk&GP$v*$pujWHCRzUME;} z$7-axAVU7=-|;2okX?n6Nor~XxjImxleWTpfSpwgFs)q5WDxK~4DgbL8qm$X!o*&V z$({cgU{4a?3yIB9RPRx#%>ne*mUl7N}o zMZa5xuq4$oH~oQ8oXcSKPevzP%*=nLrNIhuh5EPOU-0UYv!1lX{%&afp6(a?Oo7F< zj)yf>m+a+ya0V}VMl2WMIK4wejMr69ZLeTJhp}^Nuf*+6>>Z}ow6A7u_w)z=UjpE{ zeD5*o;o5I$8lfgD7F3I-DgIh50dj(`zwj&d!|cAns1|YjXVY~ z8Y7x{h_~Pr|FyKQ9pj8a;4M&;uB)6*Yiw((jL`OWFGtz#6ZJCYqmOOe zs%LNmxVg856GWsuwC~G!Q?Z@xzpbWbCzqHBTUM&w%z>LiKROESwR_A8i~x`x235*R z_n1nPV+>bK)o&h~;*-z7WSlbz%%AZ)kcgKvQ8ro#qf%y5Y+=Zjb!Nt^0P^2p_`czy zrvzizrN0%ft~vo-e)2sAzZz?j1-#|x#og?*e;3ya<#@3%OO-^W=rmz$WR(P%h}>?~ zK^u`PHpNB3b@~wyWW=2}c%O&k)$1G!ygK)f^BQw$IQG3i+DP{^A7=}yIaya3$KLEQ z_FMhQY?P)O67j@!Nb&NfCbGdf#43!ci7X=~_M!*@=h`f8xF?thu91Ov_qxrd$hFrI z3xygA(Fmx8*k(hP=6-N@N<-a5Am~a7TN5cQ4|t2YYFUKdWk!)E*3@z}MnT)ZPoF1c zCTJgF+=5Db*)cq@jTB(qLW}{#!fz^S)>?$=LuY_d^2c|5q^7Q*`N>0pQKsmnRgN3O zus5!hgJRP6#8^*0`%?vnNu)}LR^}CSesJJbN`Y$jdy3i5UBNg5Kb=sqldb#He=3ea zzvJ%=u;BzNhWbw$DGJA2ODoY^DIAnq_c?sMG_AD=717>V?&MhrVNt#4^LCxWIx;=$?Qa(ShEmyQ>Ax z%HCe(IYJnE4_tHqil9p4ogYca- z#MA`+KcElU%uNV`>Id4avC|Z$befsmK?U<+YxU}wKnb;*d_9wCXZVjvmI8i z$zD};=933rJxDK});4(OVzrE>P1Sn4k+(XC7`lzG@!G5im`}C){YhWT$;tZH?IZoc z&m%MIUp_&&nq^>Z+6K`kd7`;W?<~76l`al6GI9@-f<{2%xr{$%LTzZEMAAAo^fJ6W zQAwWXW8rvtgGy(b&)?Rt_Pi39nK`DuH9c~zQF&>_=fZ+z%tW52$|4WI_O|V68b!qtnypTz4*5&H zrj{_{KrtpnM>Hkb)3QVbRHE+eKvT+Y51Ja8rWzflKwKKNp}56k(JF77Fnr_CY=jT8 zq7}ZWN@sG!E#{SZNzK*~DzrZ7J_{_G$;Ya2QPb=O@B5?m;bFw< za6|~{rrZR-!$@3Wg?AX&&AsLI5061)2@j_?D}#~B`Vcxh6iE+^E*@<@L3746S*~fZ zowoL3!~dqAWoJ{SV=K{2VcTxp-W>9HX*;DtXj5@e0{8*A77dbTTm1&3pmRcA-d|Ia zb*PzbRaoD3ub)-ZrFYr{idRV~S$2~tS<8i+u}bAHU9!>g43c)vJ^C?=Pj>Wbu3P1p zkG9&923ZwEKV?{4J>hX@St*Ua|6848blLCea$c{ytE0oOy{+^9*NlqauRR6#m)16K z_m`iSC;c6U%$REi&!6sRb{^g91X|mEIXs>ZcgavZ*fi`4uQhw3Uw>URFXwk|>hE@C z)NdUnaKG<=TK01HIPkr_yDya>cszI>Z&2WWTJyOC#rQnE0G+7yK?6pVdp{~&zZGO` zH|P)Zn79hBhJr_dM}hIa3cyuw)iHh=d+HL^5*V$-D+s*H`JLr{(*X|^JZuZa4N zPTnRf9P%um!Y0pm9v1*Q9e(0_td0_imwT4bNt+61ju$|fN+C>~|70>gcSC_uY!=Pl z`KZ{B#95sI9ynm?pK8dFqR+Z#lx1A)aLdh=+j`@Ef3)t~$g0JIg|#kEcgFv6G5Yx8 zXxd>jyf)r8&KaL#Q#fM(^j+iDT_I<`(hV6{$r{>O&n7+h;KEzqFj?fL<<4uxm~v0j zDB*|_b)v*g)FjjEmNG?@vG$J{W%KCD&Tl6l7dJNxRJYFp9H&R9emz}n-uBJE6&D_h z_3~Jn_l8kuo)0XoDeC|%4H5NG7Dz8g&#L?Yr#LWv<#D+?w-M`9`#`IEw8(tQ5^ zf9pyz;MU;w+rs8b3o_?~H@&h?^-dA%`T;QafuSAja`={`;;GLM3`&*3d<;2T7Kfp! z*=5KTJ9L0iwzhLi$h4y@SL5)K+&LC$KcuN=OPcZgca)@evxUA}LzrqL|93S7Gj@0L z0Pe9@vxymc*(G=t-98WXRzTE}&)q)h@Up|~N*fKF@9lamK_CXj899pe8r!s0n-6NL z-i>)AScPpo2(thfMHwKwV_=4`{_&y7+!&GUT%uBk-3}I^ttD{LDs`RNfXkj=Ios!fi{3Z7;X|}~L1PT^VR+~Q&uG?DkY-Wx25BIhQ5Hj{%wYun5OCi93!E>t z6T}2gss=M!?ykiD(ZTuG%v3$3s8&}e zgB?YtjO%atb3x&JU=*sd$cK7(`OGlds3|a_!kmzQh3wR?#D^4#d%y$=w|N^ z!2(f`I`K$kQu9b?|tmK=3*9Mh)IU0HDMF~Bot41TQTvzFX(mgvz}1G zMwVS*VghZ1w}>?2Feub3yz8Ct}D|6hlOpWHN{;1_kh#?8dc-pP^L@o(a_@8RAfIO?Su{ zyhkOSGg!WskXoH{l@ePe5+9RW`EF`Se;WYLd^&BcPux3`q*Fwe&<+*$Dq^RWs>r86 zqLASR=*KD-5#kCeWi5)xfa?+_4Ug0AN$!&t&^H!OJ{(AB2WIU{Rw~K>-NB{^+>?Y^ zOsqPHeV631-*1hjv?&dFr1lT@@)Fa2q|$CX*J|OD)j?i0QlE|-&P5kquB)I+h2Hs9 z6_l)yTrrZlLmCvZ>ZG4%r-_m0jDQF+=G+5%4ZuE0`dPA5XHng!n+2ix^!#!VWaJR$PfTzQsRK^o9A7(mtmo;KcyP&-qK}Y^L+er08p*m&sb|zw-Q5<8vIIZj zB+_suWV8|^bO3&(@;K$KL#sYnIcaPa@}vz56Dho2^mw#Ij0M zF3U>#Z@}N%R9fr@W{xah*G$GdR~ko@B|8MS z*}nqNDJ6$}(m$LjSmUCptj-=fFDZ4I<9PfPqQn&-UVi)1;lv$DjP%ojJGLi=BlU76Hwz#yefX+w<=+&D5YHa-P8BG9=5@mPi3;!%yT?wz1 z=R&DQS)hcn|0SWgesX25^paZd8TkA^Mgx8!g5cvTh>Isf~BzHaY?X=bqXwQK)!9cgdlwZT^tW7?*@x20kccwLDN zMgsXPGax?0)Ov1k4>mD(cvw|#+CYyNK9vi#LE5!3aPwd!|KbX4!U-V5&*F(uz#=0%uN9*8yocX;1ariJOQ8w(*D?rSkkcI$GV!y0{G&Y`G2L5wp7%5{xQ+57- zk92?5^?vr{?`VPe#g$>gjD^eY|Ff{!E`^l`RwHiTR%^6r9dU-*WETH>F^QyL4vVVV zG3swIV)9`rZ7nH6P0kkuvjE{eh%(xkXfnlZns*J0LD5Z>nTTmLKy=Z8Wdpo~cFHHU zH;Bi3w5ea1!LPS7hh7nw_p{)d>&laXV4oj&F|BQtK7{J&r&$fZD7iKbRx z969Ra&J{KYXeYWj68v|9$k2la$4PsSVG!|d?x@tJK#9$a~tRjR?1f31$7Su#CC;|tM2LC>FR zf4WN2yx8cn<08F9xntpIkBPMV60wk_(@M~Ks+3N5e&Uz)Pvo~Xq#meWCG^;fDyq6v zX$Yl1(`$obbzh+<+hmO&UDj;IQy}A(+sCtEW>WF?b1z+tPpk}MNTjElCv+(-s zBLmZr!GWC)OZ zT*v{Lc_B`J?m&n@qIPa=Qj%qK%b<$R?ZpZ!Y0eNky(5Xape+Zw+g!*`4rLZ6CVYLL z6O^@E1I-=WtTpH;S}oV-q=~D^9oEXy?<}6u&~cMn-}1EA3R;UScf!@v(vxcn{LrJ2 zy@fRSj?})iV~#Dv@&7<&bfXg@g&lwH;$z6*v=EN%R*c@@|SYIA)zWnQ{AW$!=d|Orze- zv@M-UrW9qT;&m8-1ZSNC24K}Hy9u3np_neSIdx^!Qz~=p{$=w&8Y1? zTQ*4A?Q3U7X`Dk)_O@%%>`?MFC+j2wE+8+or|sE`xAJPPBPwVLNPLyX0(kCFbI77d z$QD{1fZ?jD4&g}2k0q$_Bci0%hy>jVA{%_7Z?i7C4lwypA%{-|A_}-@B1E}O_2jFh z{UOLN%mc$ohCa~6#K6hqNC(#ug$|ho>sR_HPC%$HaLB% zm^*;bAwlRvAU)4;`+TODi$WQ4y?Ul7jXXeBD?&pYBB39yjBdaeKrnuls46AwdEiD} z487a9lFvuB7;-&&rWj@XS_nK7_EM)@qRW;xPjLBk#+|?)!Vu* zvJ)G*0ZqevW~t8YSTa{7{YzQAF$+wiQh}d7FdKi$+E4{AACg4C+fr!N=R6-`Ov?Lr zx6GJX2zn6*0SS~9RIoI1Wg*)X30iTkoXn^$@Wqob1Q};NDmJWS3DM z8lNOI$+pN6ANCkzjU0W3uOC0k;c`tIrg*tf3!%8UFf+{f&~jN=&K=OGs0A5Utaxb1 z4BI?wdDQ7;P?#xIcHy`SrN|I(s~%J`5W4ikHzwFhkz1FmIc*?RYnDe>QCeu}6q=?i zGA=cz05uzNe;6q)A`uv;-LiG`_{-E5(oCw_1A7}>nV!{r&eZZp|H)XrX z%OGqTLu^8j8qV5gNxAgQ5ywZ01S5gOsTRFfJw~z;mNJb{M-FaJHZ*ehzi8 zCn0#b_!BXu$HIZxn27k6q{sfN$^bDBMN!0qQCk95on`r)!TqlRqKp9ucKS(Xa^LP^|?7fVS- ziO(J}>6yLYOC8ZriF2Kz6O`AdoH7NH%jQ%od^nHR%#r%KiIVdrR^v}Q#*5zz0oi^f zv8#9Hc~E4J{4%&E69-<=SM0_PYHhLpFQW8XzfY#JOE+ddUuRs}-e1!NbMx$Xx_f-R z{h#mWJWv&q`{NZ_iSh({{6DTY?pA+ejtmp!1_XRgwAOwiIJ};W+t4;B1f|h%_&gnS z`(4|=RV|&{UQbO-R6e~v@-;uV+)Z*6hK-u5qLBjg`G6~lt0I#~h{Z+WV{oJYn}+KQ zIItX@ODH6f5Qz)JN8tYZ59a@))nyju)tHM$U?&ofN5B?DNuscej)F*l|6etDiT|^` zH?fi(5FdO!WTA~WO8viTYKH%&$yZ+G_I$kTb}&zGD75AQlTKN^z5SgA;4Jj`|9O8N z;Cd?cXbsr@aC^OEh$VV?*lShTt!Bb2WYX|mQYkc$36hB%!=kOAX;JsN-qouNzl3%B)rO6rBY(h@Zz!hWd#i3mr1Fp zG`(P1wq#V4B)-H}TSbkYFru;>5nIEUCsXywDntX(ChSDc2KMrDOTMV7m9RkDSs@zG z3Eb?cECRE5sLqls`M07x^Vo4(YzB z<;jr$8)!h+7_%cAHBaJSg&$+Eet`piYa&t6awpAl#&bg!kCov+AqvUt6{CN#9FfMm z;aQ}45)c2CAANFJreYBC;6DtL&a--atV@ZzF8Ji%^1@3C3DZOGY27t zfpe5pZQG^Gf((U)^t#?82z#Wu8@*3 zW#t3m33?y;NO5n^J65bbk&BAbuw=-rWlIjPEavw_RfaQWA5o{scRiN~RF{rQzVFP} zP2i1E3#KOydRdH(=k=nfnO9F_tgra<6XPdEfhFu&a=DZ->B-JoKw)T=&Oar;C>;dPbqZYE6R@@&zjZh%HvuBwX_ez+?b>OS5AUFm6Qwz z1r2`M9DvFq=@d}R;dCUizcX5~s=Hi!fpaKa+--+(e5oP|J#Q^~PtHtrZwmq!OZ2$STN5{@# zg9G{F(jY&cL%q?rG{cBU8^FL}2(}El8s36!nk@wwO|lu2n>Xk!Ec2ji*-v+ei}}(b zt2DB|HE zD>vnf${#bV`aFOH$A%ziG+Zi#NqGae^0F;TDH;1JgyN1R*j@|J3A>qc20&V^)SRGU z{*l{8UB%>^jFMm}HksVT^-h>OuH1o4*9c|;1NAnE_lydP!iTBuI`O@}VS6;6{m2eS zS?KXdf6DUFMHWpBIU9Xt{^Rm3`;M}U#UYAC8T5z&1~sM4>(gY!?|FGe4vePAkErN? z|N4D{Q>?UvIS^oOMl}8&?F)*nbgqMd5w374;{bD7#oiOZsY#@QqCBp{ayp2Sd@?Oc zOyjxM-mskv=|Bc*MJw$^Qux%x%V&kCkU*L0$B2lRO-i9gL#I=-XJujedl^@IDeFV; zPccn=@D(j@iO^9;QwTDw_l=#f<=SpXlY|CVl<1aCCu5DsL}DE-w(++i7LaUMCtcZ7 zHp-`wqECSA?I#7L#tvRGs34K7zQd5|1kT9d0U)wB%d7<^6@K6sFBpk0yh62EGtmeN z^qzJew8BA5sYOibk~`nn{$6CR$x&l$X41|=;i1#TP@r#tN80riee!l692#jUY}Yyb zIa{3v$wnGSM1TvU^3ff9&2HB9K%{UGK*zU;LbQH&c)B{L~sNHxm!vYA@s9bQx zz2`5dBR8A<4fCvPQM7Rp>-;1e!tM%8oa)|2tL2isa%1NJ3a7?Pj-y8NRhPO#ZcH5P z?_ehJ+!8sM#|of7zg?i@@+Cbv(K8e3Z!>K^t7L^q<+v|yZ)r&bCIbUgxZzb(@NQYK zF9`~>g*WbKwX|6^*Mr$W6owZ}&CM@I2FJY}SJtXw(l1%T$3*)|$OJibkY3`G|2?0o3^j~)yh5g zRJnP!x0gPbVc3_?|3oi4sZA-~e9`auUEjz}(fP~B?-BWxFY;?8k&2NKKlGd-U`=zu z<279liV?BnNu*5IkQxcet;op-v&BbnW%Z;TGHMB%&6?yvh%c2UGZ8H1+|f6PB4CXm z0BX_a#!dzt;FP-!rXoQpEw+{mn!TnXPWX&({F&9Hjfr{mjn944iwJ&ha59-N>^WZ& zxum`75awCbv3J@w#+q%uW04)i8r>kkf9Y~#D@gO~cSwt~-C>@NIxiZkMz_(lRRc)N z$-8#DaYRXWFODcPXXNioatc4#)(iv2B3;`6C!~=UH7Kg1os{)7K2y6jk#H#X#@5(; zIK0(TLcj`x_40^URn08@Xa_61##V-iY_EHvvk)E|@#R{p>C_=ebEKn)D(Kj?w0ior zd$gl}5)Rfq1oxOXF!xf#tG0tMNT!KOkj}F`MFM5$QAxlK9oC30DW!#~3sSCUm26gPDP zYE~tptFQ273zvOjfpL7KB&-!3+oozB+{VnU5&G${;Q8E@1RMq-N+NDDq7;m}&T3!k zgR}emxUJXLJo?x|%Kdzw?hRFYf|pkzzQM{a@U7635t5EXdi4%BI(G0Mu{S(xD7mhV zlYuIYpWd5Rf+pMpt`|G0%3Pix9abgH)9*B73Wih+2%I&J`VP{+YLiAfR4UAhU_lY~ zb?%<~i!4(U%NRFgespZcG;zYGX!u>OxabEK9hHuHJym48H#tz{Jwe&CKqtTyy7CX_ zO!+#qS#V(IT=+Wk&P=`89xiABb0l#pvBDHI<|`mtpnbo2BbelaYxre*l$^~iU1G8P zhtM67^60mF-15aFa^j1`>Y9Y;3Dp`m&oT~b^VPTYJ=`ah5w|7ux&3nzL4b7vuRSSK zaCx=XW=k~Vb3BbCtX?K-_2Z-6*tkPFDpzo927ip%5Xc&p^fjejA0j(!RMJ<}?0R19 z@nsvKEg<>jqXJc*>x@Q&x=2)w*{fdavwm0->vVyCaiD z1IwM*<7^nDb$g>uJQ}{|Z>i7UZ6ER9TdE{bNMe)LE$Q3sb3wiEg;T4dA3`c?^glt1 z&+!iboe{wXEV2Hda%foo$8EvF%<`Yd8ucpiIe~5qU}bhzpF*Ybdl<@uK`yP;Z;^iW zTKjM#IGByQlg`sDrl0RU6wRlyn0u+omhIwC1HhB4GS}Ovag9@ z5tEa}*B9mA@RA0w-$6i&6c4tA`_>MkMd6lAFa1ee5w{#fA&M?Jy^~#Fr%aP8Wv1Xu z+GfMWg3lj}#?X%h=(ACsiPUAK$kqBK?Z)c8B&Sp6uNV@`<2p~|C}>h?pOn{B*n-RR zcXXmkC|BMJ)U6ROIFwqOQ!cR-rysIKoRURAS~f;XMZ5rbd5nYhU@JrGb|H@K(PZZ} zu5LxsyJcdj!cj`aQ(|QK zqzobuW_mm@WGZ}Pw!#!#?eF5($y{Mb?1{MzqJg$V;+V{Qkc8+X4F_H>Hvl7;8lFa` z(TO5y<#Zr8+$W%U4CH5L-txiXd(#+s$wH$=>D}4q+pF=k!Pb@@k;1VCQGmDYNWiP( zQ|$tsCsuq^AP8M5l;b9(SQKXq$tuz!U;G9$H12GVYaXjevyqd>11m#2OHjN3S;!;z zlRn9+?rTZb1YiO;)wl^lu9}tt$a=5(&Vie16=$9(4@SvzMm9B2g+g1$u<^DM5~UeI z_~^TCs9H*sA;yZ3rdZweeY&Aa2?nP8vgA9cH8tU~JYMWLK%!By6eQS6LBFKbXc<~; zY1wl@ezJv-Vqv&|b*hdY)#?Yhmh_-j3Oj1Mtxfj{MLa0%E_EUYF2>(cWx*)PyEbq6 zCQ^05&1Y8FLDa%r+skKY5-{{n4T-x~TDix-f@kmui$O z13?2>==sbI(IQiQOv}g(p`|YL)s*-jEyK55AOcHaqtJ58JeL$Y*Bv08mBs!;k3dC5 z!l)SJhCdVK=Vo&@M3aF8Fdz4R{y|C}L+AU#woKze6!3g_K~-~4Ic#l~cY~z=yyyM2 z>S$0GJRbL&fQ4=f#%V86>?fl>ocN}K3nd?C2~Wm-yOEgQAGt-b_uXLIV5hf(IP~c4 z_8HE_-|zWhuIs&;mTBkx&Y33wtZHIwUt~kp7Cq@b{A}d)DcwKmb?k~sFu?Qa;Xz{o zJsKkwO74s4hRW~5PMJ?z}{$`h4C))37F+EUe3>Pj*ugDY?q5!do^oT z|4>(@D^FdT$JRHg8#avni5tugX#>BEy=l_5<*_}Lp?W&iBRxHxHt?thiNHo}dgdQz z{^XTz8&o8XR%kW}wgAY;dkPRfLay8Md%@)z0qrR4X~P9n0M|ZkG31n@b((psvge8i zCodfiQ#w1*vI^dm=7j8gmDU8cY<~foLV*?V(b%=y**dQ>jr+kXU5X&?mKCH$zF>&M zD))B<*1m{xUK}WigkMy_<9`2hWT`Ia8*DD?+X#@+-&3ASvu{ynMfr`0YTZ|+sKOlW zs+^I(Kt73^39Ibi*qTHe^}DV+Rfz4VTPlkkEwA4eZRhXv#Htej?38Yi;LnAO9tR9G zNEQXMie`zdX^?i|ISOeLr#kr1fuK2j!Mi0wJS&bB7Xv#OpxXk6N*EsZ@rz!QnQVdYg8`M6ow|I39TOl#dGPxdpRK5NT zNwK|GvJw`O?mzBJA)s3oi+*T}WYMvIEgqtT#8*B-`}~C6W@jhV)1{$C;JsI&&nxi~ zUaR+vZWW_7{q{?WfM%w|%p$Sn76C_r)KUboI?Bv|dT9R2&YwnVGd|e4UX0~{$hdQ3+0$TpPkEhY?ESkSI0}o?D!puaZI-%gdKqGW1WE_0p2VPt8IQS7DQBq-58; zgh&%qO{*l5_3 z4pxE&(5xeqyupFmGgJF3u_6|^3q)QG@$8)E5TB#@QT6cG zL0=*ln=H9B3Jq^#uRk7A(igF@0dS9+UM!UBd5yf?HHUa?c|{Gd$SyH8$}DVl6^3+6>#NP#`+t#lKxj3 zZRzbm^qi2z$wJV+YwOxM5Vn>lIs}=1+b!8ulQ?bK`2A(RbYi6 zd)kyxU*1ix-xWN-%w>iX=gGB{gFMr`_`A#)%zC~1esCokl9p5pQ6z-~zFen8#8eDG zgoPwXF^^Qep`_x>cc1L!%(K8IKelh-84ATLyuK2N{}k731X(6&hu^It^9aZWp;2xC zJG*J7fm8<*3K|17YfG*QBXFg~Pn2Z-U?}2c^;Y7FDLQQ#wI-2-wFwaY%52b^dMWWM zrp=oR21zPoYJl`B0S4yXSlL?xpKM`FJ+Q3WHM`6CQ$nV4SGZA zY0~B7sDv+q(kM&)9rzVno2_t;*}VJw>CSRk9SGHEE1H8e$7x3HI;ZyzWMyo7o_>Hw}k}*UISvX=JP;d!RM#J zo%!{oLk$l#7EK3z!|(2t5lPH%6JYX-86+r~=?7SSX`YIAa!P9SGwBu)@mpj7ipQ zNGMH9-e7r^&G>eNDDaEfHwaY-US{i*X*!QXX9_{zs*ft&dDX3!7~(FH*{(bPk#$(B zmAT~`YtG?fHHa3r^88ZJi7+Q)5Z;FXch0!M5-zFn1k||~<|Nh5VLkk)-k6Y)TSLsT zNVjE(bGA{+Zv1$O&-IGtLzCSp&DJYU-rDoL!)*oz*j>H(pYx}-^+idgc?PhJPDPTH zo3?!lhmAK(2@M;v>RAYGs|0xln?;+k{Ap^Jx2-FosOE62#lG_Nu^QT)zL?w8{DpQs zC+HzhE$%iM#|jL1pF!-U1lm_sg)9v?mE5#b<5dIcKV`BDyzSq9O!*m2nm|E|zJxby z;NJy#gs|sxXJ#1qdu0p1e4}_jwd3K-=p%t@>4rz5{IR_H6Fls-@XKb(*}C2V)MuKO z{8Q-&&A5@rH$GuA$-F4S+;ZsUU(lLV-m;?Dq{<|r4-}+aHwoOh)4ZV)isMs{pj#N& z6>^z7)e_|CsFaffDoTSSI?49OdydfYJc$>yZ#_?bT6EP7zB*2Q{oaMc2&=X zj*&&OeGzcD8>6p{2T^aMhIjoP(vJ`<)CShC$sD$6dLoekh6|p%6Ndk0EPEsrH;^dx z>VSQ~=bWrH9i&UGd)L8KvdgY@gwjP!v6OD58;BL`8&c_YZHx~ZGt>9mtBbNR2clN7 z&AF2^|9cygE1F?8{R_11*I*YvGF#DLnl-*Up|G-duh{PrcB~^>ig2brJnBLmjts`h zLxe)`mcL?lBCs*3vuO%;;WM7mqw*wdX-Blaz?s?Hj!cR6a;Y7mG<^%{K%vk5$yCMz zrHzlOU*LNqlp|)tGr|2UDr5sw$EV;75l{Hh-$C6F{qim}(xinvJ_8);boha<(iRx>7Wm;g*3voR0>%cRAV8Uv= zy}Qwjy3R=$g5fG}d5Z6Yq8id31nexnNF~b$J9cEj7lS}ggXZ}Gl77GQCXH~Sw_03ZWtGgzO9DPP2S@4<$)ui6y zak%}j^Mnp#iE6mQWIZYKB$<=6Ubjx)!V|{mEduG#Yr<`sdF3BsRf>r~5M@#lr3~t{ z1BuDAqX56AC-IWFRN$d@o(PQOF;6FuWwWBnkWN8i21)%&8>IvoA%;)lM>;V zb?iw^9UF@9NB@Z2#Shf>B}q{HG@?)>q3Ngz#L~cOgjg#(9hCh{A?R!QGHiD-MD$>| zxTIQC38P`7aqVozqa$*spa(L;cXDP@@<)x2FfXr@R#!`Gsc|!)ndPu1xb#(-aCyS- zvSKC{tAN@06XDHf1>5i}NdIRU{ZU67`i=2`*t711t<(Ib>y}oO=lky7N@%~|PM($G z9osK~+AL=^yaCgB>=M2<38CbSf}ME@8A)P%zn0v%`w#$;Gf|%dv;f`u>~?Z)~f;iFb*16ZUy! zL%paaf2Ak~*rl=QuG|_VB(m6$5C}z=2aE6(Q%er6t$oC#NJ@#qGdFL8RukE=tlZ7zBwC9(O= zB)Fy%oD>m?@aqwJBIC{PIOyaBrLp@f-vl%m#aP>hie`%c@U<@v2#eURVx_Z|TOzb% zru^=dITw!Qtpn^8+^O_9XP3_+A#Ip5E9X4Ws9)$`Z(WX?sb|VZo?He`p6cxn+v%w8 zS`1k4v{!CUA$A;{*XbB>x~54*HS|!?m!;uo2~9;Kn30MUIjG$0fa~+2*KymlB6LkB z6Ij3PU`r-Ur%eS}e_ge$zi;sUR{5LY#=3RuszRRj2?_jkna_5tNnG}~r^o9@olJvS z#MDx2tr04pepcUrYp*yH6?F-gP^8cz-Xn;3{&~3_1wvuG@UL~^cx2Kz{sGZ}4C)Mb z6DD58QyrGt$uP|ngv2>pN%I|Mf)`g5B+_3oa$(hHt@W65(;W6^{odb1ze%*OX1Y5U zB#_=`h50#cjdM?Fiwh8EaD3$&9F_XK1ia+wmC$v*0~FfA!0?SiiUfNOUPEEJ`-?%4 z1;Dv1#v1QqugdO61i$w*M^1srmx}~`B0+}JLH#?cnuGPd22Iy+=Jn`*f1FXN3)AHkjEgPNMf;IT(9-{TW9BJ!nb4M9ZS9};Lp#1^Qa4Bzg7YT!zP`b`#{ssBNaq(jOakZ1#A08c(NP-T6TdpC$*h0=lzEztK-b$lhZI7{Ydvc2dQN`tj9e z)02S)RIs?{SRuJPk6K!yR=q6ob&5lEtkX9vD$d;V5p>wHN}>@aojL6mRWD$&{;3g5 zJe0C!kQvNxLLgd=8-cDAMK{iU3Q#@AP9_}n9!*rr`zZ|4*cXh=aMTlsmY_d2S7|-y zC9pAhSMg-5XY2b^?(l~X^A}yK$ch$;I>?z6TVFfA zoX;Vap#~;xZqgfWydKvzT51AC?T1TC{3~k1e+aHF)W#Sh2hv7E!YKlt#u21rVS%(b ztwvqqT;ZKObaCWju7*+s<4TVKlkv70B&5=>dLk{c_NQjmg-v4f+?w_K_QNDsztxu| zTJbLi4;>~Aaj(|P`3BS%vu-$g&1AkOQH&P{6a|%@Z8KPROy#qnlkzFf7v4@iY=gyz zj|(peoQ`JN9g*NUj@XGo{-kgpTSoBa5si$@;u?q1u}bLi)kYEXr>I(O8Qb(O0I7At zBugI_pA=Sd7bvK%$@Ld2tq`_?=4$!^g*s?K%S5$sF>L$YX9`f$)LKMbaCGdiVfhH4 zsQAp`i7nMRBS(tr-%*J7esEv%OoF({t;&FpZaKTK=@G^u3z09RvqoT%TA_((nk08( zw-YMFHl1K?UZH|`$!j}$Y&bG|Vj%k@2_Eb z{%mBrR%~EWjt9q405sz`V0)3h zB(i6j-RBAEFNu3hOJb6P4l@Q7_wsC{%=|+>8GYa>*4RF>hQn_V#w~aF7RY6kyU}35 zHsZet@k!L#1`M0e>XizeD>;DdT!e2CPeB(k^TW(Rb$=pk^VWT9vR@S<%_JjGi*}!I zi=IOwh!OHiKFGkW{&aInsz9a@R@3RV0KV7}fU%{JeK9|#yvEL8=`Z7xstNOssDrGA z#Uc1&GfJpgNQDE%{!=+L2hr6jUpuKB?i--T{m&QT`@kAD1X(E5yE^5OoUo;>9uf9k zCHBPcOM`C;(Nb7a7~wF{IGL(6yHwvpDexs+x#fveDToQ+)Cj|*hU0Wzaq_S4x#Ue< zGrR7+#+oo;$34JJ%e$CkQTn=aMY7Y zcKL_&@K|8$FNG&u;cWC*xBSV@&w3>D7P7?doZ%mRO{J;t?FxyP~ zyc}iO_mAjI0b?qtR$@!7(qOrveYf>rfA71Oz4%-yR&KDJW^dJb!Tu=N|3Sh2P~N#P zlCX!}YozDD0H+KsjG&3*#qB=XKLZ_H>LCoZ*4jS8&78x0{1YabuQB?8ojCWGs7Sno zCva;!#pBQABcdP33HSQV_RDf{xN3) zR`G{mO>+Z3PdsSWExqAQ+X-3!X|b>x=x4y6)YO;h?d-G~H|^j`y0W{nP0ik9Tlu@=<2Md<*M!0j>xsX{L675N2Z8qfBH#StZRg~R?Dc}4V3 zEC9(uEBJJKtq-I`qBFtVA&(z2gsqZQb`e+G3tRuLl`g>OhSW1T;+FAgxnEDX2gntB z?DNw+-9$T7cub3NjVuAAx50I4GDW4Jkic=3>WIfMO@^z-|Ck*uJ@ahE|Qe`hC&><+wv6-JCbM}*WWQm#0bzv=W9Xy{`j8U zIB~&!vZc$`8I8?-kt_a&Af`lKT-i7$Nul7F)!;Q7W<)M`1n;GyYxaJQVWgA2MS8F^ zQ9mo?0(AmJvV;iTwX)xp3pY(`He7kq1>A3k*QmN<60^A(ixRVmZ5ULGnVMN-k4c*0 z@v}C2KLvzK2N!lK1B;dphrEL;Oi$=wCS?rdmvW3kM7xN8i|k~en{ z&dN!?)w3jB-+O>XLcc;Qwpc!)n9H$RDv?uKjnC&(F+{%{NlKpwPi3YATD&kw4b2rd z6`jVz6tYu=>=wFnLjBDCnu1V_ydd-aqq<07e137UG=b9xcZi+RvscKT4|DJHG#pGLoy?}9=?u+KjeybVdm6>{w{Is#U?if~B zA9OvmuT{iX`yt;<-36tkP^gNU=FW#msoF-ahF_nmSx-taB5rLh==;bnHypzxjUqNC z_{s)Q#)V1-u7w=a83PBnB>NN>J_}SUhgyx`M~7?ne(Sfktq-&dhgpeE4vek)v7Uc; zl9X)Ulj2QwnkodWN+>*$+r4l0te=i{K0D+)YaQ(EuWH?Q0zP)P1wWtnrv!l?HvM02 zUKTb$uT-`#KH6RvE;m}21a&WZIzJrqwozBAFl0OwIa~_#S;6NQV?smi4N9??<}Y8H zUI#9+H=2Ah{XL$Z!+H5$ZyqV(J}P?^4E)?e19}O<%1!Tdp|Fn~wgGxqGw z#~=~`-;Bb(wEbBEWLH4?^D%um9+~UsT`%yp8G?H8iHR7@cMT>$%i@Okrn?8cZ|tCv zMksk-u7cYOeBLi~N_eAk*hY+q-?%E+8nzp=d39J+f{WGSBu6-}Fb(^<`M6xsdYauB zF?I3XR%mBH&}j=8U6pE$>?XfUBN5S8**;urHY+rJidqkQVmE9!UxX__^UtykK9}}< zhHRzE7QPoGcoyjPv1G2@`P_f8eqzwSd^!4< zHo?X+3v=>#eO?GZ>-0lDF!(rp8HvB@ZGY!(XCYZ15BZK(n>rGb*yaBTGvFz^o({E1 zeD$pkydkV*us$49%!W`K^}R_`&tHa^fK7;oxbG!+v|S!`q$2TS;D00D?VP*h+rmFlSpsHiE-`ry#R@`W|Jd*`31Y z#wVx3<{+t}9Y#XQPV1t^(`blNCj06iyJRc1VADbo+w{`}&b*9J9_~goZH-B6ff~y+ z3G>Fa4XLnjd3m-8ZPxHp)EjOqg)gCG?5B_*3>noop(2rMr%6W+Ndp8#t8-jjeh`Eh zFJoS_ASILjm>NWFk%iXMpNwA$-IkzR*n;tztP6%=3?Un+Ws#Gs&yE~d(N|_C(PpVZ zO^X)97cz5dYGg0RVI0B9OpZ;#!=ayIYHDu=f0R@GsISAii84b_8#~d~JG7_${$=D1 zUQJ_qP{7R7Os~NU)L`>;RDb@yIwz+lU5!_SKakB{%m{21H{k?k4{yL^SB(p=!{lrx6MncDHao}O8^ zPV&OhoPRRyvL;Iv5j(`k_Bh1Gh(pdTlkS|YB(l>psSfujTI}FZjCVp$1JZ95?RBP) zZ>pz&N+@!FBIx9kR!g9YL!e4jfZkBOR;$H;!9svuMxZPR_*sBnc^$?rT?D6T!(?B> zCi_#5>AklyQ~Du&Nw)f~RfDbC(XDLOstGZbFCV44?7%5fJr+|ex^SrggO$tFar9Th zPZBcgDpYp$NZiV%ggIexI2;Dke;h1YP@FcBl86Y0g}}q$pt1sTmps+?wPGy_Z|S^! zIsO!w(ejyy>m5mh59rcqE(dHD6m z!)nD`fu&QEb`!ZaZZ%AeUdmQOms1H_Cx0W0QZG9F z$Y1_}=!ZC!779b-{|g@w_2-VeW3A;|+<8lXBfcfQdTY!sD;tJ88*=!cSiq!ebGDq; zi~+egGr))v3cEpiUK6R&N?1afO??ifq*XVCNsMjqeKIf%C-EkNHZo8(35F=P+e0)ixyDh-gwup#Gx~`zo;wfq20})Qk>2W z%SWFuP@lK0&AG$^MYs3ToD*foy4~oA5b=t29)?M2EM+-drMOB3Y|ueDScFCE8Lh{5 zB+|{ZVE9&7!dpzJG$>9B51^r!WV-=$&LDR^^=r=K>D47p)UTu^L08act#sl|e9(le zzFBRJ!@c3-Zu5Dd)U!c$uJCs=(q{Cg@-Brjr=slsY5w4k)kAAGxgN2UPn2FWKCJ)| zZh+$Dh32!%|7CcP20?RWRuWDZQ+Q7nyX7Pl{|VW~zu@+XOKf(sG* ziqRS)JUDHZ3nl4+;*l{no-^<37N!fs(bXd$rl`U>0CB1W!f*P+gBJ={T-{8=ZDrn8 zcg|uJhREv0Iph!gmTkL@0+-*b3iWyNY50vM8M&k(Y#MsCma-0^p*(o6Ymt>>@Q}h8 zVLo^0MsWLqajW$sF^3j3%`}qog#*{(rDfltoRn(fG3E^&`TDfK%w!D!5f+!Xtg=ur z+A2ISjx&Hu5%sI69cQ!E>`@g0j`LAd@2PgM`iu$|I)pFSwMe$#$?IY7- z8F3+!FIMgx<7s|Ps93F7hw>pJ22IMmh6V8{4(R1)BmM>=gxn=MHldvAI5oGhwP4_Z zWZ`&^y!+dLQ*e8`%WuZfG$Bz{y!9!uAdwZ9WvXC<`~~pGO>&61`;}y3er@aCimN~x zNq}+T=77!I7ymeU=q)zjmE?PgQ`!quR9)|Lbg${NHEVz-g2e24cfbP<+?&D^WsAc# zF;j)Hv_!@Le+u!yj(tG;^U34UCnvb%Fv<C(wMEBQ~`$Xs^@dQF)GO@w9tw!Y9FA2FC82;!cgLL z_gyqk9CZJuLj1%~#dLi9$*MEA<@<$CnSm671ljoiL)kk8i5f&(nq}LzZQHhO+qP}n zwsp#`Q?^gpwx(J!ce-zM+==y;5&6gemOFQ@{jEaW{fW-6q>TmpU1~*Y5tfBG!aAAr zZo)e3(K~|bF3T1=MkJkDYQIQkeZp`(v6##Ok~?}7tT>Xg;QVN`WS1U^g&GQ$S@dt$ zOZwd~7#G7FZ7Q3!nv^@P^?lcYj;J##R0~zhXRF}pW#e!13^^yL+ zpjXu{ol;G%Szgyp^E17}GXo>W5|(;J@WJKa5rpqrH-&KoWFuYYo(x)aXLkdQZ5)(_mnQEktYUc;e*1JBsBO?Q($#frS+0I~Lt& z1HBX6US^>Ml*(jDEtGH#YI-=8oS|@-W1UVTVuLaT-tfL3nT%OB z*YJR_js3ET2%l!Wvlj#ubaqECea#{h?@#yiw~Ie1zIo1(IFU!!oc2uv<C&kwAm(s8fgICx z0+S`eIVwa%=4KdpVwMXf%buf_KcKHN7;uG+GddV_7yN*Ciu?(QK;K^$f}k)2LSav! zg1te}tEM8MJRTjGR8EFX0mTT$nB>nCa`P+z4YL0Bbn=nrP?yMBdMq|U%XK0B;OtWg z9|z)4c@TtSgC9Duj*}Ha6NH~YjoT8!A3C6aNb}y==f}%^0;5G!3D09}4owF-g8!g^ z9^Zkb2ybsd^?NOi5psrE5?`3OC4usJo8D0&gk$X~7+o;3H$B0vgYu!R+iIbtXWjQi z@EHvYn>BzLaJFL4AL&Kp!GYef6=u$~dg}aZ>TKF&3gGEQu+ZxQNdDc1)_NY@76 zd-_EPsv6vaO602o6z}g`o@l9TIEU0Z!+`cbK{=;y4{em4nN^p)OlpncrQwr?~6O2r0 zYQpq%J_{#QJU;3&(%-gGIPtT8RMH|fHs6_aa-Z?6x7KEm>%tsM%(Jo9V?*=1YQ>6H zkjYv*0?Ah1&(o!X`rSEh;03GS(q2K$0N}&a(~MA(+fLmF?R0eoXmi?B<)7pvbw|%; zG|THk<7XxZ&?ECm##M0Wjo z{4+7?14T-bSoR6kJ0^7V*9MJ2%eJhU4yspH6?XbtOBL95o?-uq^Vk_*2UT6C_uqM? zgDa-_I-S8$L=rzZuaO zA)Pz~@|1cSYXHt1{#tHbQ8+lnL*9SM*5OeP-BH;d1wosjQAs>Z>FG9C_7}?D8U=q- zFy1pyC2hMdEfJ^4KAGM`g2fVp2jss0-M-~lb~;9~>*&$C;t$2{vp>$rJ;%Y5s_mMe>7}8y z_VIl-df^H!=ferR*gX2{I48^O8?h~z+{XC=F3TccNg_r_#x7TR$SYUrVlD@Tgf}h8 zvKL1Kcl`O15HT>AtC!Gcz1}^6k)pfkuZ_11@nDK1|24Fous@)z=YzHBjE1oo+}&i8 zw?Ug_)Sy%9nS}xlYjyz)?u(tgg$I%)hs=TlX$;0M7ln*`*Oh9*6!*YVb9^A$j@ZKS z)yM(5VA-&^voU6beuC|hH0*W;Nh_0!Z&~2^Bq!NuxV-ZUn``_c^0gj$y8??-S9x{s z$eA0X3*T1sAfjVvvEcure;xjOJEFQ4;GDJMBAgp^?OHgzOA~VMH?mjv%kHLBG*Xr(&9QiO7|^Twbze&XTy`MX>>} zdD^6+2P;r~s0|LOn(APlp=Fp9U_kb0)Y)q=DVrqO2qI~nkHY$M#@nXmC0U+-hjg@V zw`3C8giF4ydfEz!4*-!s1XfqAsSylW9c58AZKv2%%5bE4S0e_H|LpQM=sG zomnG=;Q%nNz{#IGw*Ofr%f|E{eWU;P?(TmGnr35U{;!t0BifsBB<--i`So+g_eE(E zQbd8Ffcg!R0U#P{eiBBP!SuoX5x;;SP={~6a3%E3uw>U(W#(Aj>4q*6qkCQbG4+uK{o+AAx#= z>=sI(#)}N1GPNd3Ccii)QArhFl;N}pEZIhKqh!iBk=XQ#$ajl4vAz1%S$V?N$mow{ zvH()1yEkxQrF`d@;m{Qxu*Q#>4GzYq36Nb$?UD*o%v5p(`64Fr5#-3T96%~dk6X&P zrGBfZtgIB)6(#EnO|3vJTdU&bkk$<2J6sj6u^`|S=F~M3Ku4jLw5}A^Hgccl(YU2< zS=ar{ZYKG8rFKTbTbkk(Piz)u3rnymE|1DGXRO$nc>tEKzY_)Bg|2b97}mB<0naUK zOZN#S!`1@QlNW7(4;C!=$nUE8TcWa6rZWbTvd2l5l4>hT0xx38hXKbi*|LhstxDw< zkX$)xL8y&|zEP~1iE@Y!DNO3t0j9Jnt3<%94$h`<>Jo{TqQD~7XFX+r4w%L>!TBQ= zGr(vVEWZR2Ela+kTk%?+UIUIFszrFPo~ji-T*D4c6$VEgP`lQRsviDbKfZmn-z=yX z9|xUfNL^p^gfi(Mt)^9~!+db`dL+u}mn`Dr{qd10pIx}w`8RrlkI!`U{P8$1?*97o z^H3q&B+l8CxUF9qW7EJ~$Le1ABX{`4j-4Ln?}dYXo@J;o00v0i{iHh(7H2$^%4~Bn z7$&Wzv1G@_`VeT7(LYFMqcu^}u2tE9ZR;r$Uly|k;+B^9p0{b2Wg<4WyN0l)aq?yJ zD#2!Ry@k%EB>kN5CmFWW4Q>hca>N+}Dvlf;EE4=m?MPOJWaGXUD9STO8DL$5b|y78`EORfHf{g>2>e#ov_-jFr#{P0hlvt9_^tajFxMX1xO z)Q?PfrFmM;0w2?4-Kk{$@zQiFGe%v-814CEd^|DBuw%9*lNnP`bbd;21_#G0G$F1> zeS6$sz2#+B>X=!BkV_Q&lPCB4z5P!ysPF+xfvpt$jsNTZ6S!E>=D7p;CL@BaBb~Py z3T|fs#OqTcPlC%_+V{JJOVS^lxBI*OZIxx|7C{!MdTqTTKXRAM6Y3ViL*0!oA!|`8 z*Y0~H(Abl=$v@|tpdZU_+PUh+*$eb--9GRGwiiA}*g&TypHM9F^*cO%A0xbKyt#V5 z&rG>}JwJE4USH0_UQbW_*Ee$c|17WZcY1TNf&U?Q4D|T={2Xt7JQ3Ey|2X|@zv%nl zzZz$Wt-uuSa2r-?h-=JN*Y6r&Z4pG@Y%?vj7c@L$=4@=3t(EjiBIQpUH6td4nPe|X zNwAVYMG8Z0p<&Q6Xc@HhTLjJn7lVtz$KYY`GI$xpV6Yo)MK~TX(RIY^F$GOQ&~-W9 z*@nns5n4)Y;`W6$NdEWzNeNmKfrvF?4OjzKIvSP+7XOu$m-{cv^cha-ZI;T&VW%r>QOnts)UZQAtm$mH2w5f)u2*YafpXV*TLK^z5&op^coDF%(|7EI(!K%ttF02=6% zlJ!yJpSNun!g7jGWhoZ2B?~^kC%|^@+XaGcHbGHgSArdeE<459ocIr|MVoyLd@nIE zGAP!9&9dDH*^OrorVd?ZJ)uvK6yERqb(ND{MGzZTOz#%mb9Ih$!D$XsIw4WXNi?w| z8HP92?sn6fR?L2;!eoxpMCE{eVJ0)ips*)$P4alcWig@Ihk4UW?P+zGw)k&vqTOE; z9rn{9Hz!Y~WrlM(e_jxPN4wL==4WlqnSVqL1}q}nl{mE+bQ$o4b*?CBFSCgAcE*r6kJ`?aG z7%?TKVb74h_jKL7a}JgT{Z7W5i~Ae>b~?f*Qhiu1bell|Qs zj@p}w%I&onjmoUmo+)BKB=!~hX6%rTa_*)#i`wS<$ETvI}cC7(F@KXKk81i04z2Y#b90RmU z(buh8@G_M^*e_`EQO!hSPNoeSo1bR3Ek72=nzbV6h`eh+NV7XC7SH>%zDqoJ{nhZz zdK?Eka=m$BBn=`=j9Blh%Gz_y=@9g&<#%=rBQd!Np3g+L}d}3lZN?N=MgpHXkJGel0~CJ8WIDe zvG}H3m0csCeaoCRCTNti$7MwLPCsuiunIN`Z(Hrf)~&Z-CqwlageN z#&i*U^y$Ij7$s`*<@-g`wA$*_*jY@K$GuePlMVci2rnXJ&q4Bc-+n_cBx%MwtslcS}of6?Zd|{6pwX z0S2IVMb5XnCfH~h`J1j2(bl#vK)}4*xCt3U!C}J8(fNQ=Gl!yV%ZA$8@ zTEjvfYXMp6_U9E__vGWv1$_()VaFQC0*=oqV@u0LTc7fIy#5S|)8UKdo7R|;sa)-H zuPqZ{mIItbk+xv#9FFltBSyFm%rPKFvEs}ljqsxI8Mnz>5^CuJPfmyekrehNaHwD! z%$1;hE#Tn^lWf~IO-PIO{AJx|lMLfuY(9>k!c)>zYn~gEe0s2hQXtZb!ahz9C<6jP zRm{a%9V`S|!pH#u2FzU=YOB_C8gz7etC|fYA2dIpY#<4vwS-eMb<820Q8;M?JH|{j zG$ND(-N72TNrs4kdZm`8p6!b05G$+Of@4P_fYMZ5^^;LMP6~fkfXk!93q{W~N33E@ zCNh_$d3{+wZ#?#|C7NLXOUTs&0tEUXjESDW6T7yn_PoKCRysqz`0-I%%>uNm z0pGMuvfVP3wsp{}#Wsw27*r$W9t4u8i$|;8XDLOpfpc<^YmPOGaTH-6r=dz<#nSp{ zVMk*&*@m~??W}3cat}i-;j72JKNtX?95I&6+w{Y)bISMFGQ`-Nvz#N-8RQNT zK^cJl%m6@{F$D0TEgaCHAx$eRd;95KA&N*!%UTP2!FTBB${)fH2v4-gf+Fn1wxDo^ zZ%L?oa3_utPC3TsnyB+hC7iECAvWfZ=R@kYet%E_ zlBKoyv9bf~>U;i15JK5miGUOhJW$Er{>t?Zc}!;Zl0JH1W~S%%PRu5cXq9W_2QKxI z-~>sM$VX{JFd|zpjdHjG5cR|OMR76n!5+xPLeYm`0t<-FYe>uW4Qbl(HpF0H>%fy7 z#nTFz>l)DdC?pO(eLw zD;jVL=wmeYo*&hG7Xywj*3Y}Q2aX;n0}@9ny;zWBhckpvgD$cvpT2}f4Nmic=!T~N zP8yRvHRH>~*jGMw)rgktDz6rBW3s(v=aO+MpxcKsW~W#W6|Gn9c+J z{7(1;&bdl|P{A~-1@paurEz4Dl))|y7j!<&Oz;pmj@t(cBJd(lyx8R%fk0e`7a$e? z>vaPImG2c}X5eUv?ZheIjA9ZpzW$i!kE0Uw9mO&7I3pV24_6gnJO^aqX4H;I(R@m| zeCXt3;n=`Wb|`W2JkWe*{p~vL&{%Vt~@@Wy4`U#UY}7u=$P~6`aLL zo*_{P1fpitNvf4TPr=XR*|Hc#F?b@53FMU>9Vr$Mh|8jrH45mMbbQnV{N%!vOqKdl zHtUyx$h&DW&Q9_fjx{PylWWfU!acPD#hD?Er*Y&Lf?IG{0@N#K#Ivsdag0$!$93jb!+?u2}y z?9Je2!lJdBKrzung<7)+hjsttMuEb6fU+h_Mwov{C)FdBPOG%ftlc5eP`RK%iY_YU+JUcZ*MhF3C|;BcA7TvNzLnvOmk9{)2NzO|8i#v{srWE9yqVt;rzMl<-#M zPXN;Tme%C1zy+Xd3XIC!mDpJul8aMheue9_7$koC-ZqfLiPI&Z-fnK)lTlU*fRML5 znp?-u%I%@JnA7<8QNo?ipQwPWl;5Ww#SqNThYyo+$ zMVr}ANELg&Lm;V}&m)Wo^Z**etATS}y)Vvd_Crt~I8>VRy&ucy$R65$0wxrD-^$&* z(5_MdN|*8{&qz}j$!MpHHz1!k(;T_ZiXvH-s|FJHNzRJIOD_uPN63=RD+hrilDc1GFG!q3$OkGJ%>Gc9K7OwE@|TP)$)0=CEe=WG zAmM_P%w8ksBFL6DFw&fjI3cAdp+vv7Z$SS|cQNQLYip*-BU?=c7M%S5b8b4thIfHF3TL^7%4Th%f zYbw0G@IqSPmQ=ML3qwB9v=yJp114|nb5H2{P{`DKFl?Sa>Fj_ih*IV@|j3guWY`^7+lYb5+;P?h0Sf+l=Z2#m?iGL$&+q3+hd$ z4DF0dYlw`j7OG$F>KrK^L$k|uFmITqvc0x&7B>6RG06%Dl{7e=*Z!DR|GkGvn))MM zr!{oe)#ID$ZP8tn$^C|hLMx~jtQK+O!yWXJPy1L~7K@C?(SL zG8Gb(#x&s;3Kdfb(!6^;giBL&u<{gEzR{F|CI!;5Sm0d*iPMZE|W0+X|s9PzxU2{-QZFMGLVPM|V+- zi)FhghU(giDGE_%>T1l-SzV+S)@I#Nq#0N~>Q@eUJmRCwle~C@@iwR!@f86EUecm_Sy$-wQD@kf9=0Q9XDgQmzo^C zQ04sFy?xN-C;RZfbm)6Xc>j*>SWN$6e;EExhfsfLhbS>Scn2)e>L&c~BAOCQr0pFx+t+_oa4mt%}havr)KY@;(&luhshEooNY7alJ%P-VlPf%#v+2Tmm`m zss9OaX*^HIdhctV9vj9vIw--KK8EIsOzfqAlq@D~9HJD?5;H^s!45qmOyeIxiksRd za}@Bea*J#oI>u>&{LWRF=J|68nF!09kg){j65M&k z+4E8XAN-b{ApBDC)()mwSFf-ETYLL}jol4G#{M%KiZEY(oE7@()~{>)j+2;(8%!*u zXjWA|L#J5Y6ThVI#6X^kXwD1rnTM!!D5y8q4Ep(b!6)C~Mus`Kx0hvi>|$WR#B1*f z#46>AqTRhL)9wZ%Yv#t5C3}}U%#5RtIXXeCO1xDjc!7llL~)jDX^za4{_j6etiT~veYDBBqqJb6O*&Pe!k?P6;;WC&u~k?>Ehze-vzwn+ z^9mHLdzHMQtCL+n?~hb&&LyM9^*C(k)Qsn)3g4vczMhBo>*u~dE3G6PYc76=8|bkY zY6GtE-WP654(0S~dGS0SWo@``rA@f6Ajx*|iu_gDseTQ-qUYkC-1jk9fj=CRc{E3k zAg7Db@$NVJ+XX{|XCn_64qm*_$8oeR%4*Thu=z+9*GVR61dgBpNtEsX#@ zsW#N9EYd8}Jkm_kT+*ItlQgoJrjr!PV%h4OJsZcW*&u9?Hb`qE4Uz`Q{bYf%m~5tN zWJBui?MO37vq{rQf0gn|nWSCQHh%Z9n9ijTK2-g!=Bhs@nUgF?79bCl1Ih*Af^?Z2 zR~E}-x=%?gkKr*rq$HNdRMxjSkCydqtfXgq8Y$~rTSCu%H~R03xlcz|MEtQ!=xADZ z2i|fm?|X5^`NXX22W76g*>w=2dT^d^C4yVU4j^N5uReT>A&E4Nc%utQNmXoyERrtGKU6cIriSCnfB}uBz!P-> zX7cb&nTSB{BMeu`x(;-xDai)ULW8EnkXjv$&VR(g+ z2b8Fio-luzRL&Qv z;ht1qBM&Z=XPysgT>WDlv*=m++y`Hf@RvBw8DU04V8Mw!X$HmjZL*S;Om?rjEa50m z;T$+`D_Ui7#A1%JgWL~lSnop;<>_OCaR{Yux`eU9nT^N}&yc~5QH=h4aY&Cj!p}G# zND^akV&6aIvW$bNV|BjE33s}rnpp^?1zY?TE5#5fwI>mGIde{iU}JFL=~N`tzpY0l zlfz$q@XKjMOkX}_md1{~30GPCVv#1M6I%GkjH~5yAp*yz!B7M>;z9Sm^nlbi#;^&D zW#M>XJS>;hibjV?yc~iUGEVlPxw6r2Z(N-aS0Vpl0onchX3;NM?QNl^m9i3H!%ach za$7HkaNBae>p|&vfh<1S7qRA!K)m{-Gm1{g!-OV}Z?k%TGZ=eH#rIH~493VEG;r^l zb;H3;c=(a{t}dmBfioU7^`jm2hKB=T=|i^0ZjSg=A8Yi?dk5)by8BI`+jBgHjx)+Y zcTbU1+SnN%^Cnc>S3L8)SQGog^Y#Ky!k+c*8;Q59n*Hxp#q&=7LhI2qzwab7Psg5s zbr~8KS+x0!#kzbtkvg>m9phgTjgS&r|Q8U+*& zPtjoKfM&49g^>!HMC(J(9cX?X^Dnqg61v^%vMYgr(M4g0>_ePeap;kRE&)e81{ZMAi5N83P8dwr?z*AP@OYfMV0yn zH{81CHOsGqkRzkBuNK|Lin}=J)ETzny7-kv_BQfnUKVSeg((lHsdHeEZJ#ZE-LJO2 zuRR6;nP4!4Qbh|KYiiN(`4$PnKbrwaiDUz{sZ~Ig82gSOS4O zY8#(TQlqIe%-49aYC1yRPzJSbS`+&^qLw8hMo4618Ea+oT+Jv)25YsUvaTAIY(gqUu2|WkaPni4kE9?_zxT_gpV}r`k?GIt2GrCJnmIE-n~_?HbI3*+8bkau zMJ$>SJR9YpHG)nMxByY!RK*JK6R!cX{;m#HD6kZX`{E3>pbe+fOFIblZ{wsVh0&V@ zSCR3j)?GEKYIZU=&CHvXN}U{b&t#S;XERU{uz(`c;Kf+Q0#2U zVu*rJJKvfUDMtol{DDXAk!~^|F^L-Y6abZ+UadEcxjUChv>4Cne(0uFLBvzU5v`pDmz_Kk=wwVMYN=*zxCV{lI?t;GMU2$! zcU1FtRvCnqQ!**BuhwxHPWg4>S}EGw%^FI`nabIx zRdkGn%}%~q_DpLObOzZP@z65kT%UbHZ^#ZmcWVb$0AF~lAIZcwf;34aYBrjc1Cihj z9ziM$kl<`@b`5r3DP>JWKFzl<+2(NK3nr}Bq_eV{#}yF5cL)JLAW2UA#S!2t*6m4t zR!wXSzt(2562)+H&mG=>I zXZG1ko<2w~s-1G^u?ajta*lEM!@+lvFz?;gh|@L(5yZxIaE138r$XDof@>y;s0xTD zA*WVND6AbSf25L zfAmLPI;a^G-NW(OL~{!Rb;d&U&9_thnHS7qIVzzT$>vZA(0xgDo!2Xr@LBdRVh9 zB0(hf;*7Y5#H;zS;hYyFkPA*O7j;q+RPHf%ZSx(Bz`7UmQ~qkE~-n&rj<5wvLXZOI5_ss{U~B`HgH6}$Ez%YOGuzT-qp+K2M(f)#4=)`!f-ubic+;vQ$_%U5Asp%t zf>(bQ@L^%K0ekg#CMZPwPtRAT|2QrGzb1ozkKO;OU2;Zi({57?!FN^tHc_Z}W+&Yx z3ypT61Y!qdbz2$T(@&5aALQgz5$5Q#e08avcUdF>WJiR zJwP#s@KIE$d;0+>fcrtpm51~a}J+5pdKG-i7Rv!0;0zyvrh`jLiFooIb*JPz;KzY(Ne;g@mre?EWrk-k zmJm>+ktk6x?9c`yK;fi_N&5ADfW|KK4oPqkfLphfyC#XLaC=|DL7QwI7#ysA+r;t# zN+d;w3fS&*F)HyKF={!%xthpLLbXZIr2fI9rbKyI zGVRViuQWDCyn}x*j*`(?GF#kJ5tn}TF|`E7(dKS22(8wmX$g(%piP9iS9Fsm z!4OC0kr|$V=c{Z;6+0w(k)XszV>pD6eij=ic5( z#0jV=sNC((t%Bt>&5w5)Fli`xlLq&HI(vF zf(HQTI^y9(_5}oAfb(O`2SbGw_`^ef8RO>(b(f12Ax#+5RMTkULJJL0Yn4W%7o|3< zz?Aecc9)fUuD~V)phg*Qs6mwdv!G*eF9Zs8Hh6p<7&du)E}((p0RD&At+f8~AwYA~ zJzZY2=la){Fyw=R3Lyuh6OnZS@?k*s`(8X|tM5XFsSNpIRMHo#Pr?SYwK zD=-jWVg+B@HFsJQVZLyJO|`LWCOt<&*lTAbzo(*WuCls?s2dU>ipQJ$ zeQN9%G~{Yq!0izXwe1JK=7Kz1LEV=jBUPmT;Sp7K7XYD1^+mX;DI@MYJK9)^ZN?RFW zI@{}!#2u?m8mU*wN}FhLLxtV>WW+bvd@{dtj6CP@yzyF-=}LTawU~$L>g$h z%sjF}8b0j1%#9WV4*Pu_+(}dJ9;OevybbzgqMNG4#H`&eMZn6#);Z|^SdJWKiPMtD zUMQS#+FfDwG(mqY34vH!Cc9dfOB()ZnYu%bb#P5jZ*M-5QnU3_7NDTFHPz35b!-1NXxeTTd1Wg0m%F z=iXZoj&3eE`vYj%?$`ByRtt=roa{{h!PNGDpT1!Kf7v>$Z2v!|FLdp7+7W$M>-UU5 z21(5&{vt2{kuYwdSpX703u_I*#}T850arGd5PZGx3SZ}@Zb^0hy5$GKc)F$UbGY?$ z2;J{RS^1-!ePMijtz_vPc7yL5a0KZahb!U7( zVWw10;fV|>18FZ`aI}snl`L%eqlJ~FglP(4L4|7sowAIz5vYtb8WJ0x?`pv+bHdkx zSqPB}h30j_GJ-RDWlIVw<1ICGD`PAf@|)mTGUTaYSx#jIXXXl^msunR`K)#XUA3Eae#HKK023;$1=tg&9!Wf~PRkKVAUkMigu&>lVaBBUX)PU?ZyEveF96#6e@8ERI@Wr>X8+I+ zU2j%bUu;HiXVdd<$IbeGxjfZJZ@aJN`}ci*(h>fYyma&5d^df3>*C?lx$*1x^}ya} zu>5lbl8nX7Q&ox_N^Kp>VZ7YD{U^HC3)#)D`==MKJAEIXUEi;3U`u{gJ<%xkee8CI z9sTv=VQuB362S(SRw*A1Vmy$ zhjYY^j~L0BR=#lnS!5>;_L+X|Od#y{+F8DALUDXG?jYMp7))=I@c0j6!_|h3Ed~4~ zFBbeobIrqr-Uh*-GljWvf_KD5TV^Ja<_LMLk(RaL^2_p1rS?1Q^Y+>zE*t6u`IHwM z=`-v)!7}OsaCV}p1#h-3Fix6K=)Mg{c3qxf<$=iSpjqUtt4$p0zBe1*zPaH6Vqb&i z^UXtpCfjZ3OjBTfIIP=k9=x7TG68g6H06HzW3>L7+}g zL!h4#yW5|{8ENSo+*(;E{*di>{~z!!`bQZg(5OG}_fzyY_?VIwf4oGxZyyEh8VENc zyovR7^|#^L>T3)UNS+vvQdVWs*%LKN@0~>6et!<<&&fOhEmci5R7;a-FGMPV43CsBen?c7>aY@5h>8@KJb4g^Vp?(7gL zdMv7`FYP$zI-CEc^O}N{u;c=sfiuJvZFepnw_8rR1f$kk!$mfjOCy@cezAh&XB;L^;q89QVx`iJ#uh4%(pu1mOcZoqa)kybx zXP)gCpI1ltXFrrb6};u2Lm+bcss0ZOBNa2;>7qvIQPRt$$4MO}bWfsI6QpAnaq~FE zoMO%~#~3q=S;j152>*!`#{N&8#?9jvbBnphTw`oAb{V^j{Vt%xbW>}VTq1Q2)1jtU zNzafvO6oerTw<&~jDps$>WjNcoQEDVazjsZy8E&|9nJ8jL zP#oLX0-k%PH8%=!{ytE%wpXl_BBYeMSaGRf!bG+~Er6;}O!D0|0P(SoX<8QX2<>XTtViFQ9^KW1z8<;TE3Ma zuNAJFPX{xVDC-QbFez_l{#8-)^LyxthkJKxb7*1=>~cn<;Y9s} z72BYK3&`=94KkWA>ZMUr?uN=pfvPvTA5|Ejz{>};=)TiMl$5%hAVZ3ef}HfJ0vu21 zlye(F6E+XIDC;a`hZg531a(1~k2vSrl;}r$5KpGkMq6rQOl7=oXVwSkv?Cb9&*P}c z;Lr+Hm1*Pi_iq6XH#Wi7WeHX-{$+&huxNqSsgb!9$Y?z~+a|J2tYeCGUpFT_v)Z+9 zwHh0rp>wqb_Ghp)>3XNTk5@Gf50`l7h)441w*XgYt--9^2^A@sv%#P73rStjXF7Zj z7Z!$!xJQl+&k*Wj$EHmow5Dz~lZc_@w4F6TB>3JSe;yCpz z!#XD=`S~)}*#SMO6%~AQ$0oK-)&bnjhVr}aGYu& z_vZL+Q1&LHU-=klnwL4yeaEJt0 zF-Zs47>e#d$|cx8&hi$v%lx|D*g0!C5t`7*VN4^DCL_4`IiZ^gb;bWO=B{omcx|247fjO_p2?%%eScI{>xq91>+ z5Pj5!#MGS}m1sSOY|=JOq-dsd5FZJ&N{g!zVarj<5y!gzE@onf*63*}kf=UQMA6v( z6#MR!Ldkq-xER0goWu9!^KcYzz7Pk(PG3=l_3^|b*Lm_sR9A=_p4o46o18a6YJ_X41y9EZhEbl`nsQXUwg$=*byIwl9L| z8U=(EVV16&$9Mj^YQXa{C+ta7{_7A?RIYV%*dW(WxUJU;b!V6O*+bj8GEe|>Ed$UP z94GG-@;VEdey9E0H&mAjETzgbeMV3Ru54; zGMi<}_kM`li01kwf=qT#7JWcA_IV6B8cPx}stsh(!Of+t61)38C_#WP6!&{j37oB8 zDdbFG^qHBYzxV)G(K{8)1)_vjeqwUSn?o7E@4!Tk2(V{q3x^8of^y5IeWR)xyW4Qf z2&dLc&K25=%3F}I+Je&gG@<*62snb1o9dNN(Iw3`O;>d!0%~Gt zoK|2C(lkxJt&aw3yZd3Sd4zaf&m&n(i07P9k0nq>aMvZa7Vt*8_#bCcLZgDfiEdA! z1(lM@0-dn-v|+%l8%b`}dVCb4HLOJh7Tb$zSGQh95QpuA6lAWJIeOu;y`IZwb&*r5 zZSJ>l5St+iRvJ7=b21AcUh%u}=EzE7_RE>FBXrMQ0I1G}3HwL|%hDzZz#@HT9mU^5Uql~)A!Qe}) zE9a9?r+t#CpE5{Xr49P4^F`G+gp=Q!xapylEbXjtu+aHVT}qgj-jS&yl`E5aAB1c- zuz){{wCZ@gpwTjeDD%4Qp&ej;$p*9R5It2XpXtk)1e{<3v!rSWV32135yrSL(^)FZ zhO2ifxCU)7*$D2Du8V*FsPF3cYObA5ZwA&bJ~&d|dk@)3>V}eoF&W7?UiPkQ}o9D&HR|#Sh6GPr=gM2V8t`DaCg|5N80*uJjpxw}V^j6K}2ej}m zKmALE%%qvWoHt<;(7WyR0i}v5zAL2dsXx0pH-$|B$XyfV3*p&czK4ZToo$xo7BI<; z4t)bL+w+ACn{d~oUxD1~QZ9T|^lC|p-{6y8@YmW3-S-A={#BuUNWQ_Xy%d!<-THBJ zQbFeo&y)heeDwZZLg4l8=mBQdzA2k#_RHv%ewIa1S1r7pYPqqsJr`Ulvk9@ik2<7h zYE(^Ng0PY;M#*i`Nc&HkU5D&P=8va@e3;%+!x}3hIK*;>V<^5EUN#4a9yZ7aT_|s^ zfy)Rg%91UTrvGN?C{yKPc?Z0e8glD$ExRtBnuWX=7dsa2Nz(!BWtRd2tgWGq{W|EP z0ILvu@QwJ)87H(Bk!xr5Wjib*UMh&j9%OP6FKZC87g@jx3Q-a^^sBatD7TNsbm(i= zN4~oPpsHcT*0F;%|3W=f(?>&D*&;&)MAY+S;hmHcFA>xDuaF5+y@Plvh9%H6gfkyg zKTp)oomGkrZ>c!6B;j0?V&3lohN-s%b(sQaW23+Po~i`V@)>}Ag;FqvsrJl=a_|=* zUs>XG!0YVU@es`xg00DKUNAJe0eve3Bw8*O?nbOEASfsF);*f2E!-$pQ~xxfyxZi} zVm^n8Eq_-79kROFkzev5u>0vYgjo78Qzd>NT>9a|#qwtBE+qP1(q5vk#=kgr4GFV| zn1oprlmZ%q!@8;kF9~yA2xJ+98Kscdmr>-Q+8Y`ET5+8Gvv{k`A!n0Ay`Tt~3!2r` zdDGmN2QQ}D62^oE(Ty~d%aXqn^MdoX&p)RT<$e5Z=W^baUXkORBsP)okq6qUlhs7g z6^8XZ`CEZm#4pd-`QOI+eW@3x?e9y1#1VgSOj-+p-}Vuedk1hN3Q-vwmbEk>&2A>G zJD8m)w3a9h8Kh9GnK8I1YpxzhP9M6N^CbI|XZ^ywu%^e$dvf#B0YxD_OVPJ%DI8}M z@F`J|gMb*sPakH~rZ%DIJ_{-uYGVJSy0q2~UXR723{VwWHe&np&yjYDrcDK;bS7PI zCYOV`$l+$|+hb{NqpHC$sblAM?;!%0RIRN{mWw0pl`Bp40ADOaJoDv`4#&m+mAMaE z8d_r<5O)!uzT-xdNkeb$rChY-IO)g8T6Jfx0cg@R&W&YbF3&}f$&tMxd2w07cEwk_ zTkW!hDC)9~^Sn8(l?l%IuAH}i%QnYce0~-1aS-w(P&B)1cdcHJN1#4ZUI@wPm2->ys-_UsYxiN&ZNHhn zdviKHOD=5hY^$^@5vwKB+186ZIzHL_y~j|Jr4z*XyFi&k#?24Go^}f)T89Q_Z(FX! ziN8F_Cq%*)d$a=*uwp2QX9_H+_bDI!VOm3Pv1_8Oq|$ZokA|-sxJp=W*Ei~DkC(Ua zvy2yTfMHKj8AY?|<6_#twG&Fszx!ixdbzTdNrRLI zQnamuvx=xbGBJHzqsH!~68_TPE=2FNlU+AWz4O7b5mm9v&p+3EcvPT*<~pjRr)1vU z^KYrH96t#3+5YQO>E&iYk1e~l#@0vg(a1<>Woxo)r>={q+h&u--8Z*RUS|svd?}W`-ZJ(vQx+u8qB34?{j_PE~{IV9MJl#v}ZI6SZQ6?$_%!fq(vmr zK<|}xFfELjw>&g9BZtn`QpIT!9-<5$Q(yaDUR&1jnN|1)_YgEP76;9}A9`l3qsC02 zC^$m#7}j~!O3RMxlJMj{KA!Q@+7OxMW-!?cRL2q_lE(!2(SYE_P%Hxe4qY=%m}7=J zGL4^q`EVN^aexth@lFu`UV8vNLbu(e&?`#GQL!*>vdc(IyZAcQAWq zqKXuy@)#;rK|#A#TO0(HjoUNbSkz|!7I_s#YM_`mciC0O(tianzPA9a-Y0g5#41|= zM2v)Q9WIRl>9iSTc1T%$^0Z*2fu=U2;wKWO2 z8al06+njAI*+Cy%oq!mpfu6(&IKmwRkppL-r)irGK}(0}&0=WC35{`p#e97=O(^ax zp!pEj>g0@eMsNy@YrZG3X;hV}wKu?kBd&Fj$xasGlc&7V_|U_Cfu}O+-!Zt9L^@cIYZ|| z^LemSy?~yg$mhXw5!?7L7*FUerk+lA9@(p(q8Oe}u&CYHuH-q9Qvlq7R|Av1m}XmH zQ8Q}ZWIaIvm|-@nyDT=u^20T)z+_xxnkMbIvYz@$QtMSzYVDhr^b3qd;_|sCPd94A z2?cz<;c%CVb)tINEA2J+9;O}Io9Mb-G%pA~wtfm9MC<`z-Z`mTo2oPWg)z{kaOX4e7gLx#2 z94Kl=1*b;K;B0)4n;13DgO-rdi6k)lGNGL_VQ#xr(@%~sUiIE2{7VpGB$FzqPGStx zVsc@P0V%RxRZV`*HZByTsdz|tx)7E=1p37B3eCr(&Tg@S2`2!t?$9^VfTb5^KAW*{ zD_v2`<$}t=AlG<8OBl-w6Sz29vtS8FQUt2}i4$yuW^W%w|3vtdv;_$$$s{!iCKSl^ z-GT5K5_vp8mnrU;@pfh&rUE&pzQ?hhECg^R$luBt+co(}Cmws1*?6h%UCY`%^cH;B zQ4QpGpK*$xz&GdRk|P9wG^_Oc0@Jcr@|E?U5s#~2ZVTtqz6@*{EPmy*7F`9CsU;r1 z#8N?r2O=ArUzXYdu28l|MuiX~&clGa{9M>yhF0D_A!G$&&SC@;@IY$3Zh>T~yD!=U z(b2cct^HW+*TWxAPAm8)1R1*l1;5lSJsejCGONY=+i0R&!w#*)kBs;S3FQkTP>CzgdM_FhWOO!o4XP5&F`@*T_aWZlXCK_g>3BA!+(@7~3 zT3pUN5^J@G>?@cu4nVpO@blyXW1r;6{i7#h#ce#g$kL++;*V7qhfiD^hYz+6PLH?_ zj-123BDg319Z_U-1Rxc~ZqE`f#>n_Dq`Lx|>U=IdW#410VfZ5;n}{>uu>Bcu5hRHM zAJc+)_zMq!jM|5f=F%&`vywPLM0aT4Dn5`m_@LJ4<3%|!8nryGf?+~4dO2t~BV?#a zLBZ9t^fXc?IM>eCenT~9SGtWalIy3oupg56;k##(0TarR6>yv#CC(|KdA?ed+4Ye_ zq2^~x&?^9D9Rn7MZT=d5qlD-#Kmw3VTk3CE5qY|1KR=eXe=D?}12t*7qDu!eKQLT4 z{c;34)H9-Tp}w{i$dGa^^OEq1PBQTey7i$?hTw{&sbv$W3S*^>>r<*!*}(LHMrije zp>dOGMO58HfAOV)A7=IA!B0^Vw|#-qvc|irvEk&T$HYJm1v9LZ^WIAc=wHVZ^!EK~ zh<-%!fmU_#u|@mw%7IW(+4{k2vHo9LzFgO3#J2AHvzjUh=0@Gj9v+@bw}NH6%U$Pp4OrKzEA;(CsxwfefmQJ4gu((%<*_+ zkCWirkxTp#RKrRlBn@P#O!P1qw#T{q2U|7#7Obm}%KD4Ky-jCR2rk= z$3jHVJu7)$oUdWoOMLNa0)b(y3VO(1JBeYHECxlTtQ6K7mYr?(lMW!c4Rl(JjCxA) zE3vPKhFAz;w$KEyQ9!p;1S+t}y75KVAqE4lt4F=r^f}~YT{i|rI1kBJW{0KW&FoGD z#QMFWXlaEUHIFhdPHwaoA94P`hLMI_m6=B-1e=nPht%_RCG(|=Ejssa#nPCS$r3Wo9#N1o6l6*ueH@f_2!wTGp~6LVpvlGX(1y}MPPm6${pc;hWh$b=jI91` zqqYKeoIk^8HL1wB>0!J=f(l3u!c}fVI|iSrJx^;!A0jim1Cvdcu_>0w+QlRNx_0J< z`0Trd+;K*I@@_WV*tQ(n1}kOPuOowl0*g0~D|~pN#ScxgfGKXxx_0}Q5P{uO8Db3! z<@7yFNZMz>GhBor#DEqVriimP{Nbp@m~I9BNVb-FCd zMzXe5#^X^6?7WsEMot~uV6s|KDL@$5$SxB4*Z!b5PCa#Hbj~(172D}o$rT|>Z*HmX z4A((70SfI)S^|mQ3taNA7pv_B9Z)_AV4?5>rO^3_=#bEv1*s}h6zYZ_hp^tQ$R)LO zn~szK_8+|sMxy3LZUolFMYP{}n|zx};*DD6WU)pNViz9R%e8W~N#4vbN@m2FLv`Z> z8D_X$of@wFIZ%~}QC!&9Fqbz2VKVWeVR@^$DAKIz^X@u}d^@o9XsX-_#n1_}7*?TK z;omAoXsn7MwmRSOvbb@{i--a`%|4sfUevOqCVxvf_yrPWh`FLc#(uFae^ zY>)B2LplA-b4gAh;jH;lmAOV?ZVW;Ge*3*2j=!dn`{y9!VS|$(ph%d6QzI5-Cdv06 z8bHqa!!Sf9!_-`t$@Xywsth^gg5%5i@%8)m1n$S$H{ylms&J&z!{FkCX&%>DYEBX1 z_~nQScqg0>^wvtd>skSe=6_d_!qn}Z>2mk3m_4Lz)TXPXQb$vyhT8P+@h3Uf0b{}A z_51=-pmotxj>jK_vP<91#Fs8E=%xAD&fc7J5_bPZ1f6d%JNSdiB?dg4#Rgo{=yffr zr@}li=#^HK^Lr;fRmtSCIQ*PZ0}HKypQ7D+NqGP}#*rz`!mSQdM+H!$kG zH<(YeE%_Vt!#prYfO3MIs-##C7W6K!yFlC26e<{tZJ%W6P{}<&CfbP1E-(}}l8R9O%uL|5w`%A0vED{rOLzCZ-k5RsydoS18{<98oZyDF!L zIRfu7%uxxKDpTrKaYeSPCM=szUa?^AhAgX%pH;t1b4rQ5c<52KGV(xJLHxt9Ghz?^ z%ACV6HC}MqaZbQZ^Ss($r2S7B zJ$ip>w+nq0E#|tY92>eFRxsRFXC#PFz0um=`tyGciCS=vPyF>6- zt##kHYuQ}Yblw9$H@2f$1jYp)5vu+`&U4~E?npyWNU?3=@I)&z^Egdf(`RH`BGHlS z5EPcN9xW%o1_Mlblv3(FEN>(Ness%4n)ZU8J+o8hoaBf^i>$_Hw!l|{8Q_bn2pEJA z&tr{sRB4IcM9j=>dZqB(awGN&vqYN0FIbSnUK~Jxsm8`giN9D`0?|jWIfQ}VqWEMu zM-S?o!2n2F7a|wi*7Ebgz=zCZB(7HI!%%JWxr;(G7?65m(_-am8<)8g5BPq6oDP{I9K&qK6!HO|&BI2N7x{J&d$mQ1*nCj;6=q{`0Hbl2 zqKT5lg+LLPgdes!T0LF1HThd3KlBJBCUD2k!~~{w$|~_Y2G_ffuq`SiHsKIFxO#YW z%5AmE-KFobljA(ndPb$K6i*kWKzOSLMSAa}g@M6w4;>$*VAsz}8ZyIjw`YyvOM+N3 zSP$B$-ngGE>TcMqMb#ZHtx0amHyy_Wyk#^$!^(tV=(1|o6^?mmNtbj!b=z}rLjXKYOyNa2$Mo*NE zMX}Xy2rUKj6qE~P5WK7>rm@2UQv8kaV@RqF-c024ipJwAW?a-YOfEiF;^ztl2I@Wm zUMoKcuHaA_ZJOJ`_2`7}KvyMXz2dnMFyXlnPk@?YUx#&AzofLp9CBQeyp#-dmpj04 zJp9PBGp|s-SHZW2N1S8j`*`^BAd*=!ug)$KvyF41qX5yDD$#n84-j-3vh4+{3EGkx zb41XYxw}UlK~6}=ZpfVXmkHtCiyxyi2N;KNkH~~E!dVwZ7x+z=A@tCG@$-3>%gU8s zW-c5bJ(RrZ6K@FL9nSffxEhb83!0t94JKd9ab!$v^(VN#2gJ0>U`~vIAFKPs zi{Cf#5C{!=H087X9tYDuY_RraGwfkVK0qtiU)8khB1w%|?(e=3WqdRzZrWr1;pF`3S;W#cJ7L2|AtF*S#ty$F+8A7Uc-SBPJA=G?ATE=FD;F)6V&tc zyAq6PZQD4MQN$m=-hy6@2IThA&WaCOqF9D-49WE*mI*xILCb)YWxx*sF!4U*eji4q5zB!!(M~Fa6a>B}#ifSAyY0`}FDY|77 zA_9sq1Nh{!?&@ zK)tA#uIiQ4lnkfF-P2}$ldSh|Hg2qO z)ON$m9p2R)8)BoD)6EzzU_sT`<7ML^`RhQb)-oMzqM7o>gaUu46oLs20^RTl5wJ2zH~^Y-wL%gGDzMy=&Fcmap9qqOgofd7ce=Ci{LX%+VBh5C)U=8Z zHp17oxP7N3E&dzFT{f~;HlhP!%X@HsvGCyGb%nb*vhe73?{uKk3|p5u8sK9O(0RQf zjvgTXcwF>!y3fMSZrzOgjWYTRUa;^`#tBUp*mAfUPQ7y)ME2 zzMb~Q=jg%?quczJ{^PHEbMn4h_;xgxAg?R;Nd&P+PQU(L;0r(neZt^t5> zkU#qwzsD@8M-S?*D>XgIw0b|O#DslZw^Hg_w-T$}1{jcNLfsf^ELFTNWQ!qrQoJI* zAig0!FI*DW4Ryg>FqKG45W}QL-|(d%YDty_uO*>2t-X?idPh2{xO(T_O`STZ1DB-` z=?2wf1|Ck~{9|N6K(6|4<4->v2A=GV4m^EmG;Rw2tXEMi@R^Mb~+IiyPY ze!6}3f;Oa{l|FePU`S1MJ8BjZ>pq6YXeXH)Or#fm_((f^-CSNTc!C}We8THVN+2QN z1FNkkAG5$YbR8%9Y%{qSpaUul_+q`MER>;`FQh__XEJHN?7vg@WL>_%wz60v$kQx4 z9)@;PFP@-K_3u>o|9YGE=iv41_G@G+{c&|Isp-Pp!L?V(e^}6=6jaNki)b1+#hgx@`9R35=MD;3 zuUN*}=oYj@ZpO`jf%x*jl2B57wm{A!4jV~kc0E$}Lh_GUK=2Xe=Da)38Y)irWrd4! z@dHk&*0XK7Y)s+j+s;Z~AOIu4t7#b}zx}#D`7Y(R-SK-nJnZH5`1)GEJ^oy?`XTG~ zs!(~&d@^H9DWSk)x$)6mQ!ShOlcHO$^sZ0VQ&_9+G$frva-D1$;qn~}ndvV|>-U`m zgQsFLlf~EoZ#t9Zz_PUEj22SBGpmL0CMk^f4iqCNRk)}^q@&sa!0+^Y{AbGVT&aSO zG7XK%dw9a{yHWp0hr+~8=2ns}|CK~~?sI9}^#+8`9VnMOa5lT|^hfO6KKZ|1$-OQU z`k&oiezj?U&HwY6wAHn{bka`S?ATf{ZK5l5#jKvR&=s?mM#CuJgl<+MODD0Eh=dQw z!c3-~-ZO0?p+`OnhFZu%910nhCQjyW8!zab5(2g~j zN2&#EAWe=CIpjebFJIzalge4~Lvo{Y4tfYY=3lb^1 zNK~oKkQ|fuvMDO5c#dTqoRcVX1R7)wq&#gmP+@k0Hb5AH^i~&73X+!z6AC5>^=&iL z0m4R6oye~vh;>eY3vHNnS&f`$LUFk~39?!a$14FXXQgo7WLXhgMWdt?9kkS zMk^7Vxd>|>xvn^`^rVwRUQ$tSeWQRhE@Zq659%MpYJPi|uT?1g&x`B#2DXbJHHYrs zJ_et*wKS>5J{n&a{e+fhVHVo-rzxH{EB!*tewAB{sTtSj@W3QLm9PyYZoC&v*JDmi zZrb$}TfJVSjlg`JreS_;>77xdYrMpE+WK$u=TDZZ>S>R7?WYgG&1ZQlnX$A?+0X0Z zZ?<`J*y1SJ!f(DM^X`(U)9u{nq!;*+*9~>_*#Ulj@?MWFzsD72xwNJnCV$^cN&Z~y zO}dYWO_l<_1HME)Dc|JJvZsHWV7aQumZ?Kpzb=?N=KmPX%lDM$`Y7|im-s!%ejjCi zaI!r++gzNkC4V@V8%yF!U)+}b*m3!{N?+P?UD$GMG@qw(p^N_n-lipwcDJI{&S)SU z{W;8f%q4A9o`+A?QQU}6^d&61J|F^Ee2a}^``hF=dTJqH#q>{B&k}VqA<4SY6L*@i ze-yPOY-t8=rZlC)&{}};4aHbF8@`G_S#UP8VggTiA)Rvc89qjO1ml`8x-%ALM711g~3~v1Mq_!+1CdVS%E*nCwBFE%j%a zg_TtP`;xXIYC|DsYaq7`PKwZWdiu=lQLFsME8kq5C9HUcZT}Vw@>!GL|H( zlY(~CWrult4H;ILlT75R5hse}f2(SFO4OOUBA;ag(v;54C}1(Dal75>sk6r`mJGa> zbW?_9LrS|rH5ONHcFcLM2!Kp*nSBLVSLKy-yEz}|UCOJV0Kd!zD99YC4#i z+5gYxDKk66e?Qw)Tl*g&2+c27e?N@YikOjDsYrwr0?o4HyaXQFhAE1#NVkf{+N>#o zRy~pX@7D)!SdoZg2|aTTJ9w^L3A9g>Ck+ zmqX^P5aahkMt)2WT@-($Y0prj+}cw`&6J9%pQ%_&%1@74n5NEdla&KRrE9HHqt?%7 zG}xkT&&<@vGV0CKaHj?g8wQjZNFCQ4w#|L!MdSWNIHpXzLbzR7KGU_utfI#1yV9@D z)PRAPIU6)iz&hC@L+rBW%roPqXN?(7D$OJmrxP>~41R zivGk7esX^N*qfwD83#pYa-d(QH{LpudBg7+pzt-cq{Qdz*)Wgu-iZhMiMO-FmZk{U zc)Q9FFx43z)es}qk#d$`HoNDy_)X5xxpFXLH1fdVQ1htYqRSdnP&rs@$7#9-Oig-h zd)Ae)^94V7rETfGM^P=JWED?0NKm1MK2h7%j5ugSwM{k+*Ek>KPlvg3AusL%fLG3u z2-NV?Mkb&KrnN)3PNZT7C2x zg6!!JYE@rlPcrCURnrnb%MnybrO`I8k^!_nWgTlMJhzH6rS)`CiW)6susKb;I>#RAJiryas@Oz&ALS7h@&^KwKW4wtbTHHuz`pL#+z(7U!(WR+>8n1^7&?z(eG zoj7+~m`lx42dXqrHC?;udM=Wpy1(Hg8!^0l)NjLl$COfL|rgWU{y?O zG$`aYE?K+{P;>ZQ-(&T z;f%m}Fl*FI8C7K=oqXP@NfMtzA=5qApVveKo4pd4=a5O6;xf4T#1m+MB1YcPP*!aGmHEC$60=Z@x!}Mh`aq6lAmG(KabBdJe*G!D~ckFLSRf|=vPQp{sbV@ z1)01^c7=~%I>yRPd{YHSN} zCD_BIbxZEfC1jXuOgQQcyMiT|f6nyzd4;(<+tbSX>jM3?4i=v+NOV6<48x#P1`7Sb zSu%ELwP#N)E_NU1th>I?c@Ccb&wtV!?;YgiS&t7m_ZX)*WeoW66>J$FI3Y-eE$a@V zJmRxyvAU?;u>3`R9%P5aF};sooS1GDPY)jt+38S02B}8RIDoywAC+ml-5{b@fyrn6 zHsw8XpOKG0$xs*Pv>i$)>44X?HENh%(GJn6Y;u7>ccpvfH>apUhgpFHt81`r_a+h= zASV&{+|XVRntA1sUTY-%WR|ky%EE&U77KKmRnz!R_bt30uC>@lMPe@mdSRjqaYDe1GtLptvmZMBb=Ut;-I4eP?;1&!6J)eP?7&=v+nOyR(80Ntv2SZ-X4<}+M& zb6|krBBI59tZ>GdQUMHgE#_>fOo!5EF!orN)66;<;P@HgdgaLof+?U7;E|8QlS2gy z!?Y^y2HEjvT#y{q$+(p7rL11of(a{j6d9jW zK8VCb&W0KYIjUSz;JY(QGbkhtKz~XqqG~asQ$wrIjkK*AJ39-8io(~X-)?0`e=jxT z-=dQHIt4jA3C#)S|3pOER#9q_!&Jl)_Jf}B-zV2ua0 z@sDtjCJbqM%`peau2RtNQjjRfS;Fz_^%l($YAdjo?=-q&c}1(o*3N*hR3ZW#TGx(K zK~=`5l~Fkk&nQEpvkE!UMTWpNTqpLmEB98yfBK8 zw{kbh8)naqKSt3E=FfxCJ$E}?+ze0wZ5FThy>yquuXNSDs7A04CH7c3$ncDBaN~g+ zEfV?RGJL#&fG!A%AZKt(pVq@n< z1sR^QVk*yv%pdJVZl`}c@uFne{%9%zEz>kQrA072&Eo`L>x{o;q$qi5R zF)e9Qv(AK!#f;E+6&cb0EXoHR76;q~M3e>~P%P&9qHL8OhluUH2;|~)Z}c`7ZsB_4 zgqezqI_CO1etP1~@GFRG3#fJSEVu#Ii9H~1(Df+?U}L-MUIEi(f$X=zTm5pL>R!ut zz%nWd;ny1mDXsy7EOZ9dO%@;*_0{XwpqO-a0`l7!2d0@@QAQN*aN-f>0ENov0Q*+e zR^PeeOA*-;+nsPeq=T#kiFd+4bhy{L0>O};GQy$e3DJndntET4C|ACo|J)|9=-fV~ zM;@++_@TOwiQtyT#`4En^RBW^1W1r=DGl~y^Gi4%5@$&N*0xJI^GeVtusy51o-WoA z%71024v4}3`klcg**6Y)v%ulocH>+F0fE_sVv9ob$SK+g#y`}<52MNv1V(s6o$4@H zVw2fUZsb)K{C=hicI~|4zaOyg{V{m}#9btJ(T!Wf56&aKs$c&Vh!A`vxMiPY=M3~+ zAelAiAL>-{So?MGzRFnwTw}PAi&2pjGhccd^`Eu2VSpeu{6OZ+w9D}6ta|EROynd2 z4m#@#J>tc3`$I)2$aHq5g|>FEm_FW#s#*eQufmU2`Xamg3gu{rLP7<2HcknkX25o= zp(fFsKC_5T6Xtyp<7AO_xn)VIqN@@rB-784yunu~ro4f=J98B|!Vd!J>)^1u8S9R; znGCe@r5<(QW&ME5k~6HpqU%ZL!Pe9_WdYO-9S& zPt8SEQ6ELYW$UWf82B=9?DReViLF*Li7lJ{&xViMaNqUi>&4n`Pw&@T^lblG9i^A&kFNp@zNs72crjC3&z z0?#1-hNx%R_)hv0`Se{%#vMvzz~Nuu#1f1DC+cOyfmyg@ z7fsmFoy7|!u6Wuz73G@YGa4C{{5$=4YkTqOl1e6O^{WtaJ?Z|Um^?|-s|zQtuo)x! z5f1tzosyW2!b72}D02?s>=A}z@;12~hi+d>$ES;M#vUtCMB$P^j96*m<9@%7jw4I( zJqkgLc6sKUa!Gd(L{LG}HCvEN|Kk|A-KH)tVz7pxI4&b8SwQOJk^I(^kFp=`C<$9G zgB~IjO({(pp|L#sjUB-k4Kfn!56c;E?3RnB=UclY7!j(>fu$H@Bxrl7t}N^l2;Mq~ z*dJ`_5YRXYzE0^0h_#8UQHfea1E36P zc^&IlY`1fIttrU_+hzU7$JUi&Ax#eop%nVZ@8J zTs<&nS5L*UUM;F@|jbp{R0M$T!qC0uI>fA!X>n%6`ld@#rgukb_cPjjbOc zHlj>|ze*taUP|H>oyBgtw?q{t&Wi$>Fj@cw@z^l~+_FNC3&&N3G)z?msuLYxN=YL; zWSsx7IloIo)A0)u86UX8p-_o9q_DAAWa)VtFQ^5qu?$`uNTw~Am&dxeKZRop9OTn3 zag#<*!YgA=&$m}_F37J1GFo+@&t}MRC}ciYhT}oYd{i1G{X)^_MPO2 z<}u4dZ0L71j1a>)x{zMMKLlDsA7RDn(%UiXM>PqI3DHE~uec;JP(cjp(yCfyl89)I z!bwi3Z7bX@^e6ZB1qSN@%W*eDw$eIRybBm)`@=%_YPR2vb629nL@{+t2$#+iA zN#vq{V8w8z2KG*;nlDD}PQj_d*kYnolLRslX-o?EX|tqj7Q7z7N^mADcL6p)2l1v>2MfLs zfuvL7c$oN7%yIstO-$%z28gUMoNghLb;K}8_&tVIzvz$VFK@gq+R&ht0Z{dh*2S5a zx6}3=F%D4G(;pO3K(Lq2!HXEw3|90lFcM)Lp?!TiP%x|xXF4bYqk2&S-YNx}PVv8Z z2)rNXf%PZXtCE2Rmf*85>!wK}oT8=&`>Sq{R)mcw*FBR9IzQ&{U^i#qGMnHSC2wk3 zIAYqdUz9Wx+ghfgDQ8obc`K>n%G>I^O~g!Z zy0PMXky;CK)GMpCcC@)(HesT(;Sa?Q!;e?k*ap{34<2;0wei8@X7_%c$xQbdb=vFq z{)xuK+?(i13oDhXzc4~RMp{SEI@+ERJRr($P{NQOAv6Y(NaVh80wM8-F5W;}id;9> zyk|uLL8$KQ-A(Xa0LR9$MD37)uN&%ph$SFwOYsuw0CS8(92!G77#4A3UC0Z^BM-gZ zvCd7_@a2A=@L${JZ`pg`C6D1+otqJ?GDVBa{2Lxd0#Su(TH_r+r@SZwwk`uU8rG&> zDw0_zxP9TiWJ=dBldO9JroAdq5J16;O{6Jyj%%vN>`u-`6Ke&&$j-p+J)}U!Ko8k* zWP5(u?+HcHI?%HJjaA+tOoY~T)5^oz<4r*l&fuE3lPY4Kot|xc2no^h2UIFrx!QHZ z@;tzBjwB( ztM^Lw!wF29VYTaeDs(`YwYO;>56?d$P=jq3RXR7<@cSGnf@R0>LG>E1Z~>V7QTRJP zCVY?+DG&!+p_EWKVnkHhV9O|y2d;EHh%tnCJBQb9n&`Sb-chz;17U-oMf#x_`$zWO zJ3Os`|GrfaEO|;5VV-smkCi+;yi7;SV2cPsTaifisn+zoZ7wYqwK{8lR*rCIQJrUE zQap=dYv;6G1ftly>7)a(m@mW)Se=zwoj;#GusJI5V-|A6M6HXxbB+DRqI-v!XFa?} z7rg)mHT?Pra`Cz||6}sST6p3@cz^Uu|BK{f0OnpaeF?!)94(I=YYiL@rWn;3fB&y- zImab)%Vn1(b@*@nh5-g4Wx!@~di?nF(@V_|*e{b?rHAD{IflDs+Edt}kq-yG9US9&7nB1hud0 zQWn^%Z`>f%OIvpfXZcW2>I?MhS8tgayvj7J=_dx;x2QL%*`p1eu6NelXq$w{ng8nT z`KLqn_?S`q?JenaYr9AWf- zkSBibAI~*43Xpt->BC;&TtKv1-2*Tq{r9QBp-U|b*ZNZCx52TTPS#zfARXCcbiUch zsvccDNu1Q%C8-fns@;83I{csOrOh1>ep=a$12J?kjXrQ&C_mvD_GZJ^5`R6$$q5Rm zv-v`szrBVUyE_k9WNir{mQbX~aoOTY3zgECq z0I~1(xF~YVAj9>dB6T=zm3I1io4gWe20$1^*K|m%=r$15Yv>YdYJ)=fpyD}I_7n2D2&NB|NmF{AYCvusU3dvjAZM*tQu zy9Q9iU;b?Y7hLf>$%!R?SmPY9!53CoV$9+L{n7Lulb)^nv`b;b^u%Ln3CIq~mM)A& zmn`wIn1Rqr_G#Ncg7DcA(KrDe>sG{|sRnfhquL|7*qrv4&zt-G#7&OaNF*vje3J3m zFz@9848aNU`H$ze@QM#CHxP@J6T~G1L&vif!Gdf+WmuA_=K*L?@Jy6~kReSwxPXp| zf3uw^a>x=3NV7oAAmejk!4_7h+0<(b9NBFs88HKdYHAT0!Su9hCNnnsOI!fV>sXPE1%hvZ0E83Bv#Ej>10v+#zFL(Q zKC{NaN1YpC;S)z2A30GP#9K(Ju&;CU9}Xfcp$u7y&5&WGUz@j3v9DianC@GLW|1u^ zPRX#$DALZ7m9t2*O#}mDP^vUJ+j{n)BFis*5N~wBl0~9l?SOfaU5IS3VX#!Jr{LwA zH2TMm2&9y<0`e?J_C!(cuNZh62ozt%jB;dT9)xWunl?J=->%4SidxMw`cHaaWMss7=LcxHNAmZ$D zyS0A${PU+~=;C{1#MG_z-PP&M)91}+&@@T6x>t)=m$x4j&(ERNv(vW)dQT}yJ&|r1 ziTTo=7%m)$nt<)X{br*pjXS#IeJLvnU+v{~hZ(Nwqt4Zi4ZX^&s*lg7`ls)6&Gu#K z*{y2j22s@?{bPZce{2s_jYw_=c3B4mvg8uPhh7Ba`fzIe1Z;c zyy5Do9V}Z@IYJk(5C3Kdy2{MpX>8^}Mx7T%&-Z0+#uVK4a{Q!<0Udz~ppd%fq+Auy zYLpz|39F&a7iHpkXX<)W7~@{P_-+0;yD0M?o^&dbNGi}#VFl%8;ti#%5IKLETr`+1 zxvI`!2bG&UW-RD8lT%d35~I1XC`){R4G1`kk#H1ftjJKp4|(PmI^XlK_{AV(W&cf# z5AIr$y=Q@5{oNXUTi479SFWD*-ufaqald=}Zcd*E_FUVq zc;3w&>lwoM7S(GEu|4yRit)ofn=8@OtN_A?n6IDvQ)y+6L5^ z%kV-MYGKfZJ(gkM*OMI^1RohZf>${zex4ze)w$ZXy1ZIL_JbF{Af3UJ_m=^>?soGC z`PrZ9IaPRurKb^FtAOMN#jGvcU7cP{Irb^%hq=o&yV<@SZwS*e5gimDlxgB;Kwxi2 z-w1;{Ai;oh(55F^0%^il!7QRHU{YDsvPz|yikoE)d16ixSrL zOCG=cP}!xDb0z1Wo0Dr~4pNzS_tlXJKK+OL#+cFA;BoSU{@DO>96EDHr?R0SkE&SI zNFh%wCR{tBssZ=p$_XYeJr1qKZi84-#aJoi2$8vCYWZ7w5n?dlIh?usDuje3%?TFP z)nX5AXz8>111pQpVLW$1hLX~S&L}Dt&2YKL2k!h`HsDsc&ciV<)&v&T4(Lp@1D_Cc ziFS?sv8jU7K#1zALEky308JyD0Z1G0Us0N6*`7hr#)BL4{R>3$B%f{2Khh>ylKU)Xf5`Xa#FvVKk6x1vBFDi1AL(1-j+sEI3acO z46DUAa?k|={RODO!0EAHU=dfi{o`ix%4?G3G@?CNioy~gLGj2@WNPiq3#u`lj51S3 zfp3nN3KtbR)}`qQA66O(0D(~1*i7EVLyR%rj=Tn8lW<@ee$Ar&O#1t`QiftfK=zw_ z8Xz&$P`-K1F@fvlEfS*6+K-H7*7Z+~s@gB+OxA0e5mEUL8_CA7u$2&oEwP|u{^i%p zjRJ>dPdUJu)viKrf|UVk zn-EPb;Kkm>oCGJaGk_I;?BM=dMESgFcDL(vtLy&%mQVM^kqUjP+V473$Ps(+y1vML zu$gV++&lH|dbpll!^XdYg?$bM^AZZ`DHzzDN3bIbXGa{)f;f}`xhD&BM;7RgAlMcD zueS}(24;hDz`5aF@veBZ(+)dP9Pkc#hCRX`5Y7l^g|fpq;tqKtA1G#vIO3SBm_fkM zR7h!u+94;r1e+_s(-71ZcpXXuoh4#gRcX~=w%oFG+e%k*w)&4Vlu{NE!s6sHW9hU2 zvg;=+S5+;!9c~8(_(_b%nDgmq`z&Mv|0$X$h8}pnL+Tbrp#tCUOmqpyL#~DuRlMT( z5VC-8pcrrI%*_$zT&{;e5oPAS3pR4*bB>#GvIspUn*vhFXt4AX(vz;D-+i!o&>hTd3ECqxN2WitQAXO}d&0N07$ zikuqgUMQg_skDhT>0D9)rGe`fX|F0HKx_{I&fN_J4_I)2BcTqaQpw4By#1&Vnb~HV+4}TPfxlMbEfKNf> zPj9&zI38Z`y>w;4c!$xi%$+NyX7DsTPbVgC>M9>l(?@{3Y&hZepJ>X0=`Q)kN>INf zp(+nF&q1%xDE-*MlL@t&A98c!7s>;KeSsVSgzYxr^O!DUS}=l$6+PPbMQ3=xmZ5td z!lSKq$dr9Wvmj^3swVrY*#?|R7p&&acVPWOhXg1``tJ&A*8h*b`ld z%_(8_fuuwLk^8~<@K9r5+IzY#Mj=5S?nAy8DNMAUrQDQzt9)T z67la+%_V29&MYsKI5YCEV?tb1p8fQwhLZA$6Z1P=-iby|7CwrB)BW^kMV5)eE?pS0 z`t>NxS1|IYXq>Snh**pdiW1i#OsxSJ=C}9L(Z-9KSzit!0VaGnVM2j$Y0&-W)zF+f zL%=;gIL3$~%*|umKvW?q(;;2RH4M7N$fnVXH9PP#7@+ zaT_{|!%XOK`T14tNX7GFnoK#ssYu2_=~ktnDnyuf@h!^ytxB5FO+o+gD8l(H9T3%1 zloAA*E2GIWV5>0-GOI4IC`BC2(HP;$l}|1`uv9rif^5zyWEPx}WU;eNzG@#CCt?MY z;<*@)5uht6guUKIQuPZa=A=KEL!I-TT?~JCLSvC15X?|301SGnqPEPfFi zvQJ(0u@J&*6Qr$g;8!F16#6=%i{X! zO*B2eSdsePS#uTRi-lVUsA0xN*YqD-#Z-dq#jwJS!K zFRil~!~qO$tUJ;KqFg39B=|FDVa0sb(%w2=z^U3w^FVhb2GPb9jJCg7+46gr7;Z(0 z!*n5#>WWZu24a0Xu)FpWNw%DcAiHtkIF)?mV7BG!O52%M8mWjo{X0qseyaHq5 zkJT1o*)cAq!K1T|zLTisS-RUil1xAm#}*(%awHg=ZGpKJ_7I0w79fL^wznaN4U-qc zQDeqVpg@QjSH!@Lbm3jMCw(C4p(n)%dV|-cZ(n)2FJ)(6e>`%_`1T(7z?iDlBG6A{ z%n`?{bOBQr}{y3 zQV=yE4O%kD>6=yG2T7s#^u{3|Fo0k@4FUzv7@)39fc_RhBYZ}iaoA`Cfg|>`?oat! z)O~+3esqXa>Yj^%vkO-6N?^}#?mllwH;i4?3& zP2Q&P!D8*-^kb713h{`h@>X{<-B{Mg;iU3T#x|Jd<#dBmfYniLOco4NI;RkklM>v% zS{B!;Q>^X^4GRo-Q`2AbdrC=g(4YW`Rbwa(DG%oo`@^Rg>7icjgQ+78699S)I?0E% z_?^QsFb`(!Ov8{iueX!BNWckNSSE*hRt#JAxDkN$QEyLk#V+J6`Sp0?U}rFgcN_zP;wH>hCay&~(SO zd-lYkr7pkr)Q>PdgLnhw@~GY~EvaKlVXTUP-9C-D5&Jn#DNNZ5=S<;J?eWzNt>wR4j zX-WQR4g+%WBmD0#%(x)&b?hO}@~caC#qo?5q6(i#!g0hz80-}_G@n>D%0vReQ2G4b)DLt~NiQ)cFRE-G zj}!zA<*Nr)QPxq^^)k@KZG3X2+o^>>jI_;hALEZv{UmQXed0uGTT~zEY1+p~ z`K9p63XNM7i~-&5b-~eOW&wHTA??f`gVS zPl(`*v6blYZ}GB}xox6Pw#WmE_YuHC5rlkkaw`Iyo1yZLM?I}npk{S{S8ltbN*Cu~ z?^!dtzlT|f-dPE$;EaMt-98iE$mT=*S)@=V)w&6bQo8t!ZZ+Augo^)a^>4rA^dPn` z_XTwzb<|nI$ zDQo&&9f12(1P(XCivSKQmL2&wB|{s?VPGv|;H|QC@1xv=s~SkmDGs2^f}YH@P{8*w z2MwrU>Cz=Dz;GjKAW7Q~c;$oY%>5N2mzUGKc&YMnzQ`Ef6J)d%mlp_2>v0^B8CUS`R>BzEfFau*K%Rz6W<#1rI1l752rWMR_7z{?wuBNC z(4Ce@AGad#WEmkZt^)^(5Zfj|8ykouzCN#HkgV(03oUg5!ru5fpSbFtWl8^q06q!z zpG(<lt64B?Cd>c+?H)o2#g~E!5jTp?O1#L0n_61y!=&TGV zio8&s2oy;gV*;;?HB;9o2@_F*tc(DM5tEW+a#vT7JQLQRX8JYBoGj(3S3er?%hY8rwMMd=g({@h--0#56u2%3$&*xbb94F z1Lrc36g_MawJ97E6CHwj$X6e$((a`nK*05hV;Q)}oPuiI?Vp-&6?C1d+g(d!->>J3 zf0)=6jU+^hcXo-FZYap_GE5rCD~Nv@l^w*1Za8NXn)h~Km2e7DB;xs2PFV~!geq%i z#%YwyFe2yB!xECcZ4=q1OYI^chpl{<{W=joe@OeyAquW3sZ{fvnC(Z`maG|-T?z{q zt;yS|SPIa(6}3+);dv7z|P)#WeQLN`Sf+C@mWUAt~w7sKaRBwCntZox<2ht|SY3~b2Yzi)Yk^n-!p za1+X!>cOBbuJnkBp*xUVb-UC*3=OoIfrr&$xB{VwQ{^;82mwWMq{c$A7-n*s8J)F! zREdRP$LSt>@Lc1z^1u#Gm$Wttk+VOVJzW0wTEX7fBD#m1K-QT{dD5*x4S|RQ?UP~ohZmNal5~9 zxs51(76!sWH$C)LGdcfv2?_1wtTJ zc{DUoe9>ef38GNpAPDH#yP8cE~aptH5zzp4$2tWCok*NDdC7pT&Ya= z1gN?ec@7cD^G*>5JhT-2QUQgIku*l>BzJ?`Mv1TC!4+#0oY1QC*?Y_pe>695DWt81 zk70cQP=}vJ*>h8jehk&FM~$>4iuvN&yAfuqaYNP|Q?QR0ydhhjRyonrxs;x;hRPp( z_PC#W2v>9mtdZx2h)Hew$^(fgdzKhlbO6mE=~*BliW+L)8dS|rENpsNJv{uq%tC|; z;Q+(V=|7r;pv-}U5>y}^+r#qhN&sJ#p2ni5JlSCih;vTZ#ke+3?6Zg4f{CUo3dsUj zrt4D6SEPLqMeTuGL}{odnN1>1_TM)dxXzLR5mN$bDexQCXna)#d87(#EtrbRBw?2j zJdXfxZl~mQ@~~g4?dSP`K?vbOM1cjukqe%x)qrcoc;w*@3QCuM|9XIb_~$Y#TyWuj znuH_v@cP|i5G|_LnR#Y=8(`7x;dnRH zB)i*3V|WRKY4km?(9X#Lxd)lKzSoL~IVPIJ?ZO=^bx2oFu%>K>EIq>oC z9!TfqVb0w()^9gB@ZkeMa`&^1=VOocY+Q+fS#f(dusC?L!7xyUQiof79{jmE|1h^Z z@A8xH-Nt70EE|6i>z}E^!waqBuBfPQZ-UlB{+Hz?Bw&}*y7YB&^^6n;GDW(LpCiQ+ zc;e6TxnU9{PU0%(_7%`QkbFa!nl<`(`&FalRq$#@jpI6Rx3=t@XB6q)AHx>jT&;^l z|EtR3OA{?;>NH8UUDjVy-fDVK^j@*GKJJ4@H^@xuOr~tq+%>dRk<^h$+nj0ASfRj) zIc-RIpii2Aw#HU{*JrA`Ahp0#J3L+Vw4uF1GA0!>l(!X({P4r1L_)o z098dOQZZ}chNebc`ovrjD2^HYq@o=x7caEuVhzwy>C9GTV7YF4DDl9PO=?it*UU*H zZIKPHy9~y_nmw}DhOE>;p{*2E-G~kpg7Unl8FfFaWPn{czpIulGXe2cxqX zfh|?w5A=i%gl__LIJE$HHMDWsZ~d-)mX7W#mfmjZ3x_$nm%D3#2g!|@Y*6l`58j&e z3$_vlnKq^($b`CeW~9!Kl6l7`v1^I>E^A%ILRwAfjo@cmf8`^YmpKwD-&EOxj5oDC z0$kMZyH*AcdA7{Zk7jsn%UN&exl0uPh8T$V24^_d*O$g4W+sClj-D_w9u@ubV%O;Sf;AL$*3qHVH9!bzh1rZG@~ z|GZaYXtf6`k*z+ql{++$knSy#%^G7fdl(ts-3Z=mUFXb;08XJqRk=60iiazXoc&G| zp;%4oQ{efSEQ%#CmK%mKf@DJ+_phXbqu#cK`)XdGfy^i>u6G&vxBT!!Gd6lHfmH)| zmLl!ijjV8(mKkK9lod)anXlX!$^xO z0PET+kvVet-_1;dQxt^TTv1xBYtkpag}=HxJH%MVQY?=``3pU!m>@AFJx@nX!{UkY zglsr@q*%lOEB{`tJs{9L10^bwQ?v?%P7s)7P_6LRs4oF?p^&S#95MTy>2{iKM+@7> zhpSr%xG~3dtrXo3ia}Qj-3`I3~}G?Tv_}ODm-7dB1Y`oxRDM-G9E4 zE4`fDZ=5ULc=Z<3K{k66iIV@;48qaeOS@cTK)spAvgDC@jVa)RoT$rclkNQ zxU(FIh7$lp6Yu6<@RU^2J^$TN&%*X!kNW>BeZau^U+4pd|1tagANl~N?LYK^pdJtj zZ6%_F0)0rFzZOO-bTjPdfwkR|(6-i*E4{;y55A>oGapGuR@GP+t^QDU3kjc) zqIXiL5Q^&n<2R~U0yZjc+B$_xLW{zL1y;qCqj(He?eJpxg{4i^@P2qPE%F57nY$^8 zkxk+=^?G^hiji}&r506X5s^(zI?f6cT`DeeT-3o2N6b>?5eJbx%o1W?;*oNYgVHnw zF&HX2;j!rNv)!ULcNhen0x1$^U?l-du~C$iC1O?86u20d6j0TYAmxzwWkR!cikDaC zMnoWCrE2NetO*ZA>LrI1$46*vb_VHEx9d?Hu*%t(xJra$l)>3#^g$EDNTRhSWLu(* zqLyfm)-RfiM=`j>1F()H=@QsR_4C@Jfrm@hSxVG-56(nI(;O}TL0l-3A{Pk`b2g)* zAWbV95l2lCZH`|wN&t|!p9$l#!-g%Jl;qCTi88(5wC6(9h z{yymQcJkX!=fQd<$eZSrF(=Tno9qO~(uJ2vlOd2}#Wfa!avnpIAqppQVF<_W^|)5j z4_tuQq(PY#fDXSV>H zsm*iv*6^YP;%$A1SxZ^bt9ip~C7Gac>`Xr^4CG2W_4HeS2nNH~j^89?ePq6x_!T`14h@0BV}%_U82#bF z|NeIs@%8nY_wm)WV;6Q{*tF5@_u}f+axeORz2Y{Mb$xm1XG8Y_tV_YTM!$-r+k6b( zq9YbpEieBUZ~jNweect#YbR(2jChTOO0?2|6;m3UmEr;!#I35PF)Z3oAx0;u?_YT( z-|z#(2bsDYLA#ml>*d~e?Bu$nmO6OX)McBU-Yyf;lYOPQXc|l~C<9e}mzbn9Mg_E} zsxUc92|F0yuI^111fG^ac2G1kUeV}i;X{&1t!h}Doa%dqZyEX2JGp3F4G?X@S=p+@ zq6eZ^x|v2=VLnxE?r^T77f}7d`O5Rt11!ql(6TtZu7i=&uic(*3uL*uzO8InJ>Wmq z?rTsEO5e;&U$(y?8JgmdJJyENI|zb9MF6PvVLgDf5&UC~lHmsN5wvk~tSVl4lBBaho2?vqi3WE~f^)jdoLY*FHIwGDs_ur=LlQiccl?JytTv zH{MW%C%9rHYY#S5?%96&k+0E0RK4qIjSKs)h~!DRF$1+^BB^C#e=#vp3N2)60Xna6 zS96;=bM<8bIY6M`s%DQp2r(F|_Fk5y4`+ansg*bpPZ+tOsPS%M-dSZN+z_`Rj9L%} zMl6cFwrp`Fxb*S@jwMfB4LP&63c28Xu^|vaF@b<@eIZB~-px6!HXhDHgOM3Vd>Cn) zo)}S{`%}PLzXx}Q23?a;#3b}qDI9c^$n_og3FKi~T3jVg7kO4PbKaShR;Z~lu~6lD zyay@KfSY-$JW{@U56Uzk_NKNE!zHj%=`Wf3pDxY5<=NwERM8juKHu%`&Fh+1uD)%Z z=0j+2|HB1SKi~V+yxZNLpRb#b%RSz=hc!7}o*$P_*p)=SCAB#Y1iwk~@f{hFT@y&($$~NNLB!9%# zOkpkzg=gVL6j-o2%w-}RLzv}-VGzF%?{5}!)2asFaMo+1yJ#w;6U6@e1XR{mFRNc* zAz?iyA}Rmel(_&gxfS9CdVm1xz1_BKDRy#3vvOx0fdn@mhD7yZL2D6=OjIj&~o*bv1I)JM7=X@+iaY?gcP!W7FW+*4?Xj@9KHT z)2AC`iLs7@SS*!Z91iX`)fA1fy6+m;()_is_ZkyYjHYb!85s*2&vnV15leTaUFdOD z3UP|K=74Nts|0%>c4=5_*D^!1b3AfTGO221D~IxmTTv(R*Yfd-`I1PvYtb-v4w22L znT{+!fBO}G*AykH?b40;hG&=QyxnfcxC(8_sADp?alv*4(KTboT*#u>MS&D)&3SWN z8aonFMq-|P4}2zbfR&hkv!x9(M)}pbE3^e>My}B6a&Ajz&}0mPU5rSIE}nI=>Guui zUx9D4e-XFp)Oc>xC((}HLDgYc6x6Gpip9BtD(m_7fhVxd<=p0pZFc~0c$h9|CV$@; zicpCqo}9xKJ4THqz9KtZW=PxRO5631>lwlGD&l({0=Sm(_|IZ)o|_+vo)zMbTaH6f z97}v}cg9$Q2X;Km`q|Eslo%4zNa8&MsH^mET^NPBQ6p^b9WP7jGO$t^28BR z&OnU10xQ^IoP?D@ee<&=RxkH2eUDl>X1=<)Gi?K_Va{*2ylfvtY;D*Jb!?rQIcWo#pGEvK~Micj^)%vOsmnU2W)iM?{LbkOM z=I>#mFl(*X0C4U==OHqdKm;Nst;o7i7KZaR4GF zYv5=_zq*f6#u~_|t154+@f8JvM>ulKwXAWMN+=2SZ|1d0#IIJsE!o;jPQN&@ZnaSl z%+zFJ{ob_|o-&>SnP#oFHNpocFdkh|n~sl~(%wK2(^P^QDw-nhe9Ugczc9EGI0a zw^`_68HlyfcV7|o_cBmjL6?wbYA(GP+!`OxGGiG`5l#Bc&y({PxiTxlnKwSsoR8PG z7ey?neetttdc&UYdRfwxP8~k;L$>WQeZtSm=??vO6)+nc!~farVq)O@A2++MH81Us zMiGB*`U1aDkZ50?XLhI~iF`Q3=TXFG`T4ZrC`cFBloFIBCf&Yoxu;I7C^b`!C)_Nc zfXPH=Z>DFD+L*bAcXPse?EZHk&}pWD95HRhqpj_)7Cb>Uobq(1y8Go@4iMG1@wKxu z(YnDGMi7hgXNOFq^pDYKnnMoS8~)W2ev%84TEv$CVk>)JTUsUE(q}Dp7z&Sr2qIjv8r%vaBR1U>(e*zv+CU^H#~7^ z%1cARBo7@#VM6dn%gfD081*(?M;{Ro^=P=Hsi@>(%AMiaL0nKGgn%Z*riFz6qPcMk z3F7#YxF;9(tq%pmb6w0}+uI_=>ctV6{JP&ZNy-#}LiP0D@FBn2;vDyP1TtTzn#b|M zY@&*CbVb0a1=Vk@Ap~^}9Q|!`jB+IdK>AETyS?v;`QDDuG+&nd-da)WTh zl^*uzyo_K%lj1fOy#OeXn=-6AAuUok=yYU=pqOz64IzQ?a6!UK7cu!Zkm)3GF=-74 z5O-9e#Bf>bX&N0Cq9I)hMAgZ~_??oVAc{C5yq18c)r)syY9d)L89tIJ-c({B37JyO zKRGQ%`7+w08+fP6L_mzp4CGCs@`8M3!GG0>=l7x!CyO_0FL}2y0fqA#0+DHu;>B?g zyN}=YTT+jWcmaed8o8s2sDr9|NN&w=LJP%3^N20~;MlO5Jpn*@hN zB4OEovKhk=pu30F3r~+2Q2aBok=^<%*x z1hRrre##z&xjJmpFL780q&|9*?mW;0QjXqWK8=R+CvJd`C2G$JA{JAl!&{+;0f0JZ z4SnQlemf3;_%;#iC-`<|GdtpB0nB>O=PH61J$oKNw~LUUvaglBA1GaBw6gow?^)uK zundKGeJPeb1YeerSs@PB!jc4qWJO>X{A4B=qz3{D(fa4Q`yBYP+10_GQlRSFz*r*F z&DO_4ppm#HLz|KO?1N_}f5Fn$1~}%cpg9RtZqNvMKk3=9-fOC2;_6KjCXs0?!7BNIcMAe%5W1O+oJSTsl95D0Q08J~4 zgG&!>gJ_1^rp!a9S^BC(@}VpCmP(^GAP%wjUQbRe-USjN#b5ME!(ci2*@*#)jwH;+ z+Kx0ySYyf80nhPc2r1OYfT(wdoL*>POFI+Ly6( z7j{#Mqyl`p0lC?G_C!`(pcMRu5E%+df4qZWpYc`P?}~2D>FPUY)N=7!-cyon!pxm1*@9!DN{0yE&~zGy&_{f+Ta`Pb|Z&i?bOtB+z*`N_P#( zX3tGp$3J+qvgI@b_d_;y<7HyKR_ZiC#5lenF~PqQ1K+oau?9G>m{SyE_;Z0vFa(%Z z@Rg>+keK#dT=24fdB&}1kNEV9xTN)IVx_I@aK)S9(}`CZHxy~{zBhqwhH`=ISK!Q$ z2w|O}I)}|xt{)Ef6B~Y_IhfDKjLKc1POq>k{NVqB|I?Y;XTRX_bwU;%j6=UXX3{l6 z5?S$(am%+|=Ur2YLooffcFG>>KK%&$5kp&X_6#sW*9e|Gaji`_oCh-<)Wc=WV!7ss zrVN5D+T#{A(Dmfe{gLI;U@ognf3S%GpwKySr89JkxtEG!oH9nzocHs($D6(;PRaI^ zgKoVan?)PdUHNjV+AT0B5$8rja2y9Ek-o?o@oiGt>+~?TW({ky)e*Vzg>$&vJOATq z=jf>KsC(-b4qW-^Xa_}!U|_lF$OQ|{d5qRLg+NR~VjLbA=y&<+()9SY-G-oi;_4wU zBq%W5Ob*E~?c8+H_=eDcZHEnRvPD;p_rMj(KIOjCmMo1<*dny_X`7|`B6~LAYfFej z?LTb%>a34j_O{K)AmSO`!l5@KLpl)TNne#Is%=q;L;Taq(vx7!%FG_t1M$+3Hd}+! zQ$HqCF1mePR6NR{iOJ0kTbnOr>o)><s_vfsg%nzx52l&THR10v*~P1t7lFVG~X=&z}IJAzF)1 zCJDI~pH@M0O@drt>Yq+}dg?=&Oos9bgOHo7LvRF6wE+N@T%v7ITqsDvll-_fKyaxmmqrH7k?I{dS*|yE#us*8apF+wXtRr$_V{ zxy2MI%Cft=vf`46V~&Z%P>dsFc4|qtr9T-8j5FwYx2|uV3VhS2EDB3@>~D>)c+9=i z&muZL#<#vnX&$Xp*T2M~*S*Wlh*Uj}zZZ%~=n3q`4OET{Gm z1k=aCwHmvhpVz|_Y=FxVWCjUJ>Ue^9(uAYW!w$TAW8jCL41-}s=BK4-4f*fX4H`ba&MBCUA}4(lI^>E-RjbU4NL`QVenc+k z26`KnY+dYklav&Pa|zBQ%W z-fWfBsK2_85(?%U#WlI$vrzwLG~#8RtfFq|JTt@*3K#>SbzN%d1i;ILS$Q zwllMOXR6B<<(WnTWP4ODRKBRO&m{>DGy>cR@+j^#2y;f{NuZEPUzAgTtj^Dexr1q& z^R5^hIu7XK4{V5F|2vZ;C7fqaADD1hpQkM83WB@mr z*+8Zr2rGco;q#8<%>dv)JQ8sxB9Ljh87J*S2ARCyJXWmV0ho4^+b$d)kJ3H>}j~f-c$_XC!Xc2r2qAkLW93!0!bRpSw zG7AXQgGtWgPO380sKon4W|1!zCjl4~x(^kK1X7Sk#1a6bSkieej+6m+2PBmUU)FU| ze&H&KD33}ZB9{CIUM&4L4-RapI~#FZA2{Y|_!M7yb!m=MdyYLeN@b>*6 ztv~53%b~USqyfPcpk~h!@IN^7K!L#BQpI4fjxKuJmv;>)j+$laLPtw-x2eW(=w3RT zR)bo2?2mK%aF5Db$DAETE**3@rfgs4)&0)5%a3K+BA}6~G+ZF7zbSi36Gy#f( z!u0=(vTqK~?Ah9lZQIGjeB(@PO>FZ`Cbn(cwrv{|+s*_N+moB~t6TM*KTdu3+}%}O zyH@w!yLbPw_v+QpdY*bfP*%D|#9~j096fh(bYY;X*-uwzD@#Z7Z1y9IlPqn4KD!9J zjG*$^-$Fm>xtei_)C^=ZH_i56ZCpAz8wZQo&2UhE)O&CxQy`=*DJ7{_hAjk1CXI14 zm`$bGk%hNeX~GlH#L6!AZ%#1^R9SZJmx;WLQARaWLfsc?tkchy+Gk&+zOH$mP3%^x z>S3LMwbhGE_X?{>mrav_%rdW!lo;{KrwgX?$>|AZR2RRp6^%n+J=cx@FtZ||oK{rV4a+dQbm8DxP%RKUH#0R`AG|z7!xhnJx&^am4g=x>jlI>0H-9xb-Ah{| z7Uys1EVYtbV}8>k{r#wb$cqi7r~WcRqrvl0%AkP5Su!=|;8t0Q9aG|R!>fzFL?n^e z1aMZ62uBYrUJAzo&@Elbdk(`X^UH0Vz^X$*^c`R3uZ!3*yn7&QPOoHkcLK07Gu%2I z?YF=GjEneN^)B)C8w2`sHxLQ?dlohRID2vpy)}6N?`kKTR5$J>z@OPO%G{aiD`>p< z^-R-kzzNay-bRZbmeI0JrA>eCv4dHX;XNP7Mv)+2D~tJagYnm|O4>+E3f^OaTl!6z zMmz==$|_J|P&dlGc{ah1+5KHh?vSVOkPRb}R%wEWgOgyz}8 zBzxG(02_Mb7xyIlv=p}xo|-0zS*!tNBTE_K;%tGx+zl~#Jwxb0q^-CWOvTLKV^>lK z24F6*U40`a%@!&V1#fmuRjqY|(hA&Hj+hht`D`DB0&O4w<=U=qgQ88F}o#mXbyrHbcNNtps-Hea& zwA`%%F~`{Pmos6Gd8mWLGzBMf#741A(KmvYTW%>XVF7v1D1jNZ$BH}z($r2D=?02{ z%n&{*r<^XNngV6cS-6KP=z)MT28FMZ*D4ATbRxOfX zs$T_&G^1^^20w$qrWTbw@O^wPp^34UX+^O$`)H4&BGnARag`7>B`O{Yv>Pz@)28SV zt~WF1rS2rF4)cgls$UTt5vglq>%q!ybbnR}Th93(>BpplwER;Ivd#J72!qee>pO@s3)aFy4N;7phxYlsPX+kr3x{rR z1LP>M;Ny-#!I9uKR-7>44Frn1TSU_p*Jpwh( z8f9!ZLyBt&-CfN;U_FX!9e$r2XqDae=}^g4>bimk#|9zylVAhPW_jj@Atq(yLgX&5 z(t?3DBk?eF&MK6GwtaJoL+BpXkVQ;|em@|p4}W7`w<2mS;hfAX3*x~SMxn#-`0e>Y z=V0k!j&a~H#u#8G=-OTfgK(IHl4{Q`Hg?9tV9TmB%-#`@L+^&1xR4b%r48MLtIXc0 z#Q8-fa%J07w0n3+{N;k68%g>Z+HD;`oj9`5u*2o#%d<63-jRzw6>6>!@V)uRNH@L_ zj_S$**7sEHPjf9{{lJv6Lg{(PynZ$Nl5?XPXTboe;6B1!cj18NQApi`x~$8HWM03z z#q5q630Yr54-mGM3)^Yp)j|}9cUZ{*rKBPWdBFkrm|Q;u0Ph?NM|)8bp-ZRGI}FIu z>uh#!oX<|-?|FVYf>j)VD|9t%){wUxY1^n`7i z7`HR|G87uJG)Uc{MJH5FZ>P>9K#BHoL;C>$w1#$NADeq<-RXlt$6U{makUAmCE6dG zPzy2s`+{>vOFQp|*;%4@A;?~bO`2*C{a$ztTf^C}#WP1b-^mO|Ksh4e5h_Am130uB#AY>MnR|*OL!Q&lmrV$ zJAT}>Uchgs>37Llv>~6iXhl`GYUNhh;M3kVk7P}0iX7@{QrCgk-b&Dj-2ZL2+B7sy zKEdnK;EF^+K5!tHZ!8_7>h#2tAoI9Zpd?!E#@M0~>q4X#LKu1R3}=N~jptOVSJN}7 zRkfW*lH7z+ahvu~P~h?G~izr#ftqqO9HpWLcLiglTVfj5t4oSWh+Sc&4I$DPZ3qKnXPpT|^P=Y}< zRO0Xle<5)(@3`eY9CJa$QukN$<}$|)af@n~@E+(fb(ky;%*Q&35})2$-l#$@&{ChHDhCe2<5yGUz~B`$b+pG zRns2^BR;M}`}HejA|veLNn`p1I9UZ38&f|{rR$zdW8>+6Xi<3&* z7M2OLDEioLP`laT|JK|x{^b0@_w@YhNhd7eS**7CIKi63{pgc1t#$JeTkK+{Qv+_2 z33Tw__;LUR79K=_dH-8Szzc+g3jgU-A@QdkhwLB?S&&QbI(w!}4*zR*HS7u^^%9}uG;#}x|TGq020sbwn{=Xwj{!M0ygY&;$_YP}M#89>(Zat|3(@pZ};*%sn z!NGkD5??~5QzwfK zd!P+mDJFz}rl^#^^(kGXlwsWxyDdbav*&I)QQ+}+x5kTlFN*&toQRGEENQ)Zh3iUM zAxTtN4PqxJSRU|%Vwxl!$0;?hAH^vXTI0*Bcq82eXdI(3X&^3oRLA@ReT1{?ULY`% z$^7Yw3C-(DBCj)fq=1G#W4egeD9`omWaB(QD!0jrU=r@^R4Pt>v)c}iB~#xH&ekTG z$Si|)naErsmFabY!0|91%BWFd%m_}6%aIj;kK zT@J#`a)1kxRgfIt@hF8VtG*R>5WGGD^4`RXYk(51nhpleTquX?5xQ(00kXc#A*LWZ zD~F1Ke(iz8zJ}wNu7#)CVoHwK(2h`mBkYLF#j2%V3iX{>>j){0L-q)1*7=-WU`(r` z*hZ<(!mr2Hh#6=fj|inwlCoU#?nls-C7ATyEk_~!*GD#6<+^fzCo6EK(%^R%IPI?c z9(PF03deAnLWWj$N34G-p7oV~X^h?xj$6w@SUoWvPc5Xbk)yZbiQ2HCT^5`QNu?u0 zj2mUDf2>fdc;?S~a1-8^r@RR#J@}4E@BL6SwXE=P;tEZBYAT<9?8<)j}Kz0eDP#QX!Of%@6V4FPGax-Gq(PaDwMZ@$pTGirpcs$@9w5l$`goq zHydo_F$g{MlMvdDv+|ywmzT$objT&Fu~M-s)<*Gg-*n`*d_ae3AL)TC2a^!;K&Ma$DQF)BSps_(nVr zpSvVJarjNsvgL-I+UE{$!@&Q%)62`%HP%}{i!fYdgJ7J$0Vn!ytb2^Vf~5e*K8iw| zL7W%SmH3T%d09i-m|>W=qbu@*`jI?3ewdos(cow`)>t40lYovwO>#CakF;LcNGuYQ z!NtbEX_(P^*}5e3!B5 zb@k?hK$Mz+VyY|5kGa^3Nts)uhb}mM<_lw*MaaWdH$qe&AO0d}VO}{$+UKbP9X|g? zJL{)<`MY)yKL}aVr-*}$a!|UuAU`UW8%d6!ykdxI2$SCLIK4FW6vvE_x*9fr55QywAjv~z}JL5cyV(|#+K5HVS2Cnc!+937;nfl)f8HYZRWU^1Rb&4jwfRb+|xnE zND>V1uCo(A_&aaCLx%UH;8C;=BKCor;XiZXK?&&0%bN&j5`Zwx2p&O)kN9E|#{;(Q zdp&(M<#X_6=vpt&@};bw16`Wi;qYkd-1Q>phLbr^_vvloFu+XBwCXt|3j9Y~PO~`x zvRU0t&maJakUS_EE3Vb+!=bQme44ML8PuzR`pnOnxi=R@a?&1RX%qHH-rEU z&(9SDrCer@3&~1pj<;k4DlSJ8T6RmD1F#@Sq|Hn)Vz66dnr7KpKPVdmjqW^uR6LU( zQ6t&$h_(%fTHUh3b?p1zs7xNUe(w6FX0ThH;i+gIa!18JCZGaLExiKh;l81NVuHg7 zf2mlQngyZ~i(#2b)3ui~Oqx`~*s7VKp^?mEW~t~Pe<9hb(s%7RJ}W%!g3Cb< z$sU5exo3j@a7@&$xg+?rcKzz*zIdSYwyI z#`9g8&@YUuRUBKPKGepzWyrwzQY)*|n61k*6dDW&fkfP}00L+L85nqSa96sQW+`$l5|?_?vma^(KWh0cJFv4}xNYT7WysaioHB}y#0Oxg$D&w(&E0)xqn1*Cc03gMMDQy5&x?~ioES(vDT z#N@3NGX0zJ(b`33vx$NWQ2TW)F-NQ7==;pg@Oa|;Tn0L+a|9KfdUn^(OtU2DH~4Uo zK%`}SCI$8&Twc7Z><*E3BwJx6JvWda!b(ukbGffUp0HuNC*aX;jiogO+!{*e%9|PL z>c>;Rq73q!CuHF@kQnw@-u;Cbd2v=d&r{{G=LoEJ1B?tpDtG$M%fX2gE!C{ zOOU2>oG*Ydqg%@FVt`9lWL3j-!b3tty8hsn&^+$j`G`(gFs2IqrA$|~5Rb5h#uK+c z+GN)Y`&FxbFkFGN@0|S*IRXY+0)O4Gnc6veZNFdLHATcyx$pDR6@?fyLgNWsePt7Y z0+Fh$2iOs>iu>B!MD3+3w?Tvw8;Yl~|9T^+6dcJhdg1 z#At%n4r|r^u|JiQe7jX2GV-t#>>xhKTB4{Y?pSub&0g|AL(TN~`u*oz167%EWY1w} z2zc~2xUILMGhhtD)Y4V1V&0lgyEo2MVHOqE@dRWTkG2WqSiPPUt;#a;G;UZQgQ|~T z3qfYpGa`6U-~OiJRTc?F2yBWO9rWogaHP2yMt?TVX7rU7m=<3}!o4;(`6#ud3V@c0 zP>mzfp%^}r%d)2gDADRPLE;%^d|DghPSvYH)x^I;;dv@!aLmAiohO{-nDMh`#3brc z&ptEcSojMB9obtE@#-@Qb~K8q`4L#(q2xFB?P>Ntji(IXaZ$}wMoA`*C8DdF>P2zH zvb!r_75fMo8ze8%<=+sDe{QVBgplUr{;tkCIz)?% zEA@AR1*Iqu!&PJ{o%W$)P2j+=%x7}8f+f$p@9LgBuZ}0S8y!QsQGyesuN?Mi{*)__ zm!!LLKk7YwK9-+I3?5tH$%T&pLN1&CP>%#+=o^km1k&fsE21IJkNp)vZL#&K zW3p(8GQUdk0cn&wFQ%ivu05jzcZ7Uue6LKK2XS;mCJ*~Ox;4FOo!A~F0!^%!s0t?t zS8y-1xO%`pkKTKgK_SJK`izI2ykq zDwNp#1-zc1w_!|)zhKyZDW{#1X}?I{$FBur14EM3c0og^zeJy~p%6%BC4}l8xe7G! zZ>jx|?HL$qE3lamzDZA5hz{DZsk7pUON9$f9Y5$ngMm+vd)V-=M>H@x+@j)*E-7Jz`)F1rcXIi;J&TZ=22ThdZ;tEOyE4qUW2A+AMD-1Oj`55CB3Uue*_BT63;?UrpeZn$a z&ru3Su|v;(p@>pp1Y}TxiL=k^kznk%kN9h&bRM&|W9SR22&G#@%4wen=D!cXG*t)B z&m_H8SQ?=S*jQ44^1@&6V~vyKa3_K?Qhkb`UCw8_uq+#kv!H z6DtsMyQ}ufeF2UC)g$TFp7{j6+ZsR8*D>UCq3=q7LD9s4lrlGDsLO4i)n0^0)1I8W z<{W6?v9D2D1>rgugwRY!Fnx(lP8qo)5jdO;RshC*uZ}m7eSTQIt_X#ZNoRydrwGpH zFD#A`873H55U)4VsN@c|2_=_btI^xLSfulPE+Nz+zK|o|$=VnyR9>Rbhv+{* z?l!Ub!96nZvfqfIo7pHZ?_e-qq4}1qVsIuYjC$0?&NokO-%1ii((;ozw@pR{8-x*M`-8mdBLpREWV9|VxA(47ZCaI=?*OD%;YKA_%=Ho!P zV1Kfo?AX%s+~W8~WF^QHMC-A#r`eeJl-vhX|J=b9XaWTv)QQl(u(VJz^jfM=fC{ckGvUchh6o zcG4eI(a=DJrJd7aF4$&A6rf^?J(Z^|E5wtJh$3P_Dn+;^M`&VvSGo~WV0l^ur47ki zsVHdQDlX=?O4Uq!nQb3*Q0$3~e3dZ)y1+56N3X;yl2&P0M=%0*zDdt{Zb8_Sh~2T} zV$HJwdcKWKTi;yg7nwhJ-(5d%Zp!ZxK{)sT*$w)mv(q(m#(;emB0N4sTAtP4(2 zLJJB$uRtrg@tqrdWoTi6Kl`zcAwud2LqD1Av>Spt?Tm=XEvmD+7Sxrs!#7`d0D$=R zqVi;mv@IeSzgpcH8nO4<8WE#pkJf6ht&>_#ji*?@FuaFJ)pbP0;|PwyEh~x&<_lC0 z=gMGG+rdPYdRas0kKog3e-z@raBEe4{%BbMg*0JX@8K!CfPj^C9numIt9Ov$vx{q} z5m)1jY#beX#f!(JoNF?}mnD<>!-fgrpV0N@-@Lc(?}%{MsaBX55FT#z!8Q0i)IB8( zSj-tDcJ|f(7Q>d|Q2!Soa`(Wt{f&P2=@|wJbuKNU#*>ilRX*trq35-zb2sc)A(4|S zf6Fut8OqriWcZ;^AN5Mp=fqq8z-CUSfR0JbGUYA!xQOF^%thcu>x<*d@e%C#iv!PC z1=c6>{&1+)fBL0!v2y&^p{svOieh8`?=hp=+LZ+Ds6GO{!m(0BfQm?Iw6x$Yc6l&Z zoDJl0JOQ`vP=kgn^mF6Y_ct%qt?D&O16K}jGZKiXQV)5VhjK4e+c>=G>r1@>lPAM_$-qY zim5ne8Nen3TXvQ?R)kMS-H_%XtrWxO0!zQs=j9Hr))-sfQ3S%c&>zZpIIs*jP?Uz& zLJnxBELU+9$;QzliD?Wba`QAA2r{fBXy3HwSt}gz30V_Nx8qeZ5(%H1l;9H*v;?n$ z6JNFEg_}fV;^M4N;Wd>_OGp@0S&$lpo`+YCBrD1%#F&41EkO`2j`aIMm_(Mt`0D$) z4peoIsKl9Fhy)B(i2x)gnY9odDCicmu(9Lv?~x?M^B<6Y<5^7hfi;XWhi#-8ck2kP zH;m=Tf(>3{TaI-_7Kzi9!;W=2qOT@9z#z{D*+arxz@EWkX_%eC8G8MRhtm+RPi-#!l~VdegWzst=ToV_xfLS3^i7WHr*8M1l_+ zHz*jyG8J(sWcoFNZA{PllR?NNIE%1OY0s{9dly^G!!K~TTqWkg*-e}!(t<|^d_U6t znu?i0VK*fRnwU3Yfu8*Y&V!{Jbda>-P?)fefGaNfd0TfuZq~ve4^^o@V6Rj|YqqcN zixC9^f!BZ4_V&+1n@81KC?4F*^PTw}}?)Uo- z5x&pUkF6bB`JGMQ=e@_lpF6I zOU~3O&?eEKx1CiKqok-S5w^bgXob(4{zJhI1Spi# zA=N(M1qk7l=jw3;5hc=8=l1AwrIXdVdi2To_l{6XriUdil=aL@=WiJZvQc-5YYosy z(%1Gc1wX(YE+sq^r(hJPfq3Sz+BHEXu~FS#1@^g@UJPq(`kYzM=+TdSPOVl*E%+7; z+Arx=Q0B-?HG$&Zt<7wB!X#^mdov{r95EG}xUfC3U6m12!l-W~VFjDh!C5 zGr)>_Q_il45)D`uh*=yROcwkCqcOPLDU`kQ)kqp*HwVr%*a3+m-nBtX(ImTiP&>Q# z@6dsSu;MC>dtRHfB-ax;cIV=S5*c!}krK%Xs5YMK8MyWhaYtk=qn6KOTjFeJ4Tw?u zvq}}7{RCe0RR(c2410*=>y=0`pfQZzMqsix@5L{FBfZ459|1lXU$WV;kP9~nn)TF+ z%ApsKj!h;&0|`*qbHI5rPFwu5dEoYXGDV}&P2VP;=T`72bJU|H*HHuQDfGtgazM*J_3##q~1vrq3?sv zV4-}tOZh=scD8Z$i%TD{;ozh0okNq4R$2@fEIHh0T{F@{|14M1Z%N0LRUKCh*rrJn z3EX9%D2-wN6Ez0=0>=79{(N{?U+YninXA@KlMwnKgAEdgjKIWO3xp^~x8I07+9A6w zRTL2mP@Io+dY#bkm5Ejg4fUuzy<&cwZ7e@bcV?-6p# zNBDbq>$iu}j&7Vmp!e-j%-g`P%}>BFwy)(zo!fdG3BhS0Q&)Z7!X5I{mEQJ%|HA3Z zg8AwFpU2YB`=eCPfxA}U&ae1vr1Q@9cdw{v9Rr7*Pq)w0!Oo4}GMYW_cNfT4J3fw| z$`Kz0NJXtvN>9}bYp3Um{GtB(9&1M?@2K$%?I!aqe;O4dr=g=%Z`ggw!C z_?U8M*grjO3y(aVZ>tk+vyH7|nz@&cRyib^!kgrZtjVm=Ei&1jxE*uwhBV$xcs>*WRfmT+h=A@|@Ms}>EvD!Z&Mu)bxxHUG?5{XBStW>X5MD6`^_51p*-bo zCa5#5Xfe!J(5B!q=8O0vEfk>&*ot!2j49bfg zKRK=xJrQ+An@t)E6d7QER!kYA334}YVJ<0%M*XZcW}I|*wv|#k)~mrs25Tsl(8mY| z(R80-eBZguFWOP{pEV3(JwL2&8#?ua3^nnr_FXZUx}S!t&9928fr7_>1dLWgM=(ue zN$>?)y%#o2z#$*Mr%xP=nTZu{55=aOFajhdM!q0B;k#Od>569d#C2yGdo*jw*iq1 zK#`a`6Oo;|Mt|L^%OVKkD5|8D59*T^@Cmk)Q$+h8yfl`te2jnd(*7^cCoB7x@Al8} zU#N2FYC3);?)a?K_GOMoaPvOZkC*%^H&J%suDR7xb=PP&3WI1KyH${!)%v~C2@SrV z7Xs1*K^e9mN#YlHdUlp`NrW=gFXtENtM`6!yFcX_0v;Gu#M+hxHKZ_9kB~GMW`U(6 z9}pYpi(HN)y0TNfGWYJ`B0!*64Bfjae((&(#*dWf*8aS#`++i5U`N=F9#Qvp{Nu7t zUhQVzjGdt0O4;=k4*vb=>vLVZE0nMmK|^SW^!WvweSf$Ojr7&gd%p?*+2JDbFX$ta z7$`H~>wSKvL!z?#2n8WGbFxc~$$H0!FSHd|C=_wN&z>Ijdio6NBn3UUh8CCq@ zNGZM;19_^+T_(FYx4NFz(S9=6UK8b;TNNB~|6!L3x~TeC5^6bo^n6O?&RxM2d{I#8XRd*Uz<=MpPDHMwn28^r`ho`DJhOkl?7F38*9y zYCzOj(s$5J%_$o*SQ6ArG{3gu1Nqc6bPS8^pD1su65@#$AcvAhL6j&(5T=Jd6J{L6 z__#)*sm_@00BK4xveM6GHbgP$iVMF?>YF-Ahy<$R8~j{%T$~zaM#>&d3?&M4(_GO% zniP1jQQh?ZQ>OiiGd^I7YNZ+R0iV%j1IN8SIn z%ePK7y5&pE>pRXfmqsTx-jo|XvSml>UKRHSS>|<~*nvZlTo#DAtc1~J<7cf*ISw!m z%zB34(!hx3>O@R0zqXW`pzZGG{*>M~?ijPVO||ePhxA=RvcfcZOv-*M43!wJ>$vTQ z?%Je1NoJxX@rPgVe`FoIR-X#2Ch@HK3Z#pjBp|3|lx}-#ffq&IgvVom>}&-YVmP-N zRA}6VHA*x|RT{nwrE8Yvv)%&t^<&h)s^G^DqwK1N8nMh6#TGqXpN0!$L#PS5$ux${ zU0LLT;UQfl^P4FnA_g>9yqV)U3MBN6=lbLE`RH8p^R}Ky!jrQS6XhB**M-|{ zc9*WIG>6P$l0WtU22}Ja*rj&g)tXd_KoglJ6o7Rvvq;=*7hblqMYYPQoG4OO)P$;A zq6_<0sReF=PgmAul)l*628`3qTiox#%8EdtJvV~tl@tMKXxH5Rddk~z#F!Nu*{rH; zKj|c0F_fYRs!1|gj!G3*Hdj}%5yIcp0d>n_=$1o%ud(r__cDAfQ~ek}HG5I`;ju$s znrFl6`6TH}7ply5pmj##^4w=ZlLH8^=sK&-Jl_4N)S}74hPvCn} zFzgVhcd?M|PS2ew27+P^{DpT>D_%e3_FmEGw)=dTFeATNfonWMlsWfjWX5Dh-6r`wR1a5ScZcvYz1p zUQ~LBST}f6L<6m4r#sMEvIX&2tewV7hEqiA_Z&}-hq4lb8)6w?VA%4GaRX=ah(-jY zg24s@C5fW(Vjxrj3HG)OK)s{MM`9-_nYlJimAI1qt4cE5X)b7{P^g);Of+zWwK%UG z-AgCTGOVbh#;$Ch+ehOUW}~4K_DFIyLgnlHauG>SwN$4v-B}$!nE{f>`}h1mI&iqU z>x|^T)I$ffETcTeQnn{B`B8$BaD!Z3c{YaSl*-%rBC$h*amrGloWWMII%%7uN|(=k z(6w?M@+}1`L!^FrRx`}vaTKZ&z*nBAzAvFe&g>-v^>2APTCfaoe z>j=`i#%+X5$6RJhXLkBxE^+dROqTsPO^%)!fm*P_mDd8K;k^nw?vUwd5qCJ@*!ooe zS@?O$0)MyyaR;5gWhkWzd2=JOLbZetW$)n^aoscI^>eX1331Wda@38NflW4UL;|Gx z(0sN9yxNComIpi=1ZZlWmz_gyO%8Ogl$?kKU$+n`GL7RdLlUawfn*TVnVTlRxF@jK z2v8G12I7-l{DiPJ=dOOtZ)tdXC7uB!mpZP5UZy+}J`Sm`;Zjh3r#gR2#Kg|g4~7*} zDc4QgB}|(oOj8MpQ?SkOfCiI=XFjIkojo!klx%V!v3JSiKx(?_6C@pX3ItyZQH$-Q z6@BI4r1gHN)eAt9?^e;*346^Q-#>q7i^HZ?A*Gc~M2-&;3tQ|&DY_|GdcxAHgSVb$ zbaKh(V7yPBK%tbxUvQr&Z{$C1NBLt-x|k_{CWR&Z-63yk&3_u{ejhHshTud8rrAC} zg#MDfZT1vX*xMoBk@V{Z-{^uoPDD0JhTL&I&J&etCqugg-Cs>5b4uW?<@pm2j%91$ zvHz^GE{gr|%%)dYH0Ir-AoRm4!W0-khU=>kserC5+ndnNY78;AB$1TdoCH3sjh(|s0 z>XNPixFmN%ol(yI0=Cb2idUKn9lyL7cnIRIj?2#73Bust?M~0m)$;QlrO&?%-_9{r zt%@JrA1e1Qzqlwo>*79@mJa4GlE_(XF~jvGE|yg(F3Ce?;-4Sb0FTd1p%GT;( z{&?AO%#q=TO{^<)U856C=Q9ggqTFmrS(O^$ull)8!) zb%=nW=K4hS-;;E>+fDuiH7AgYCr^>ApV%b!t+~1U4-Vs3O839-)cx;>G?xG2I%4Md zuepvcGUp<{!g?b+U)1r&jL3N9MM_czNSD)GuoMPX0u(Gh*DoOk4(CBz>^gtnyeOkB z9}{LbM&)cpU^v>eHZrbOUMnh=E(qZmBH&}LZJk+^V>1df*b8=9lZnJeiyy92m23dAb!3P98H9`p9%GEhJmQfP!Q#|ND?}a|x;BPEQ}%sEBoIgk5gstci99iJ z1m;+(;7E@6g=_VGQX(!orcqd-OZbKR()8t_OUW1`K*zQwez=5zWKSGjRJ_8&y7?;0 zG6Y2jaqEsS-w=A=p$Ft?YXh(bX)K%Ykbtt&2i5-Dry_GBK%y3MmKn zQI?GO{!RNJU50A-FL`7+Z|{2X=5en4ju6ocL&xa0Tm^8}o`*R+LaTEuHHT`1<_w)m zV>~a*=uQYVawrPJ*!U*@c^rwFfkGd5Rrt^u#es{ zWE&*gm|UVwPm{J8tq#f;Kg$_P&yYyPh*8@8F5AsW?91zALLXNTSBKElOU@_#p5D>J znNsZ^{BO6(Z?9+g?;j5UV1S+hTSut+8@lSu9|c3=u-pQgXY^W$M2AP99(IPbp7dt; zNEXk6iH%;QE9F#kcES-ZC)Fl2-|c*{#!c;`_hI~bGr&BpYCP(w6X{4m?TC^Qxj8%k zW`ywXdulI_^-m!W%Wa>Rn^9zV^L;(t42dVV*CFA3e65`Ya|iTX#cbYe+zf0@$5UKQ zq0@?Q;*SKQUIa#>aM5X`VjWJ})NKOE*Hd3G@urWzpu-ZlyWn z2ks;}IXiTTC0I^vbdMC5$#cyA2&D_ac_bYxE|O<_d(0iai$Cdq_VOdt+sWqd{$9}7 zK6sW|yScY@QwsgGcRY3bFxpFKi?rka>Gozta2w4r{I-zV`D2t{(i!3J>GR-m z>`so4LwCG`h|OsYoy0w@)7T2})inzbX(>xS=Yc0l6hlivG~pxnzJX#>7(Jd0C&vmK zStO&t6jr_1Fj;+>)}k2z_BF*ryu_Z=VBvoXb%~;EVVXEgv=QDgAi@G;;a>)k|4<4u z#Mz@Q@sooN(At;*+UykgSbe1V!N?iwk zQC@6grfu$zcF-7TGvINalCM+-<3==>i6ZG{QK&P{?%|bZMlw#ogWTOGK_#G;B#q+L zB$h{u>g5H!P$#}5KOnOIWTC3(X(M>}wuOo*r5Sf7f^y|}5|b;*u9A?z!`xCXg_~%_ zp~LK|mECaDJtH#RJM0w!zKLQ+OVDE>onZZ%y2v!<0-Lgag>wqqjSiJN=e5mZmC6-P>?5UFYumMcO7e6@hIp&XggM#N<$0Zz;tX&2jCMC5 z{6VjjB$Vpzcgu0fX+qn0le-vmz;R4#h8cdU^rNDqc?ZQoNe#6#L{LQllpit_40U5%U&(r;Z$iv-!!6v-A>i}`;&!|Ff@N~{7q6^C2JwY*r0 zRac8_ZM#^CO;<~%QErsnspIveCuv;Zj8~M+B0x3~OR(h$I3OFVHeh9pO4NitK3q_w z&=o3?XyVZ%+R!bPXqM5GVwUNG-S9)2WrJ{2+Ox}*InH7pZ0wOpF70$qI!%tgAOtza zp`Mz={})lP3B^JoWx|vkYlg+wfUR{Z4Ea`abPG~G7&Cdnxigy}8oDLWkIv_`(yZxe zF_(4V!fAutQiZ>!`RlR^xvyz1Y6h%0OEoaPZhjbux z?!;=yHAc&Dd)oZoMZ<&qHd9s z;sl-SBy}2jYkHWHe9VAcsNfP&$uDUx%_5`&+zIo8C@^gP?CSW=$?N+or@Y|l$p`%f zvH;4+TlcUX&&%>dkBo$cZBB;(2>R0={>miwn%yl;Bs%YU^x3N*#LH=ZY3m=-IkMg) z5Q?CUndN{H;!ay$0aspM*D}O(l0U+S8aTnP2h&Ru0Z=WU3}k7z(fk4$(WuxMfeDXy zFx^-0%cL(!oD3x{BM^Zmm2{M1=^vwo)2g7$BjKTk)tubPbYbu5)Z($Rt;?UMZJ zlv!<%8WnB1aBI9SxZ2x_Af&7?7Aj>R4aCorF&xP^gKgCwmqq6MgF{(Vm_0sTdCkQw z`jK#;dIrYUR?B6+_8#%gXW$=URab%58_@KdroP-FKNVs6)_#M3rb}o{f(}O6AcP=D z7ZifYh_udqCxWO;u(Y0SeWsT-0u3)Oma}=N7>XY;m|Qow<;upQ>_#8C%ijs-%5_0K zGiqVrE!zEgFg5i|u`}EpTyu$IKlCDh%P_~~*2`jjU@2QZ7EWDB zUT~;SiMrMFlWgDkSdP-jnQlK?f^Od%7d5;9lhxjL8#*26>H&Lfv_BP28E+_@1TEVo zFeF+m`yhJ{lzP`scQcaXV?zH?74E~Ps5x6C3JYG9>_LOBidi}oo%;8rhdv=&NH2LZ z0#!E6X2)={_yA=B9d0OvHaYv5Zo~n#j^3yp$ehx6S|vcUL54FdJIKOi-8|7|Nto5h z1xhHVn|NH3zWN9iXqRi_KeaF?OMg6Z=Jy+Gf{#!?toR;&;>H1^Zqq2ev@reYx54v_ z6#XYPZqSATC)8a6DFl>@(-XUf$eYU!UoPZmXE-E+gFx+}sNU1bP?9rHOSaTBZ$a~< z$%-Jm!HGbv6z(+X_>LqSLTw}BBz*$C6z4p=xZ4YEVj=zct52>+qC!3v-Qsv&yXq8x z4t{7_n@DVa`(?ffY1{&V=U0aI@@8`3OY?S`tK6ug4?Yn$1~KtgOh%L`7Scm<0x7Q| zIh>K+>!gse@Wy1RU6}xSZc6FP;hGS0CgU#-{LUggu8uX3(TpbBM$O~G^v>vLet6(z z-b?UtU-GZ4x<9jC{v?yGxboIYiybCh$p-B(8m}aSY>+V%Tl(AEOB<{I|6qmAQb<}xfAV|Chn`(dcj?eFBC9pkdLU6M5|GJE)S@o-L zb_V_6O~?;JcgtXe(gZkXG+Gs66E0PQ(_(~DMvAi}YZcIvf8A)e>nBf6&M!MlPcM~J zgi<{EM!Pa(R)XGV45WvLaXT+Mw1164?eM!?2zj>%8$6IGey?id!_^GVhA#74H*4el zMIHfj@vfIL%|Q_83d)DuM&>Y?)@m-m@v1tBOP+#LkyDLA+L&Zc_ixC|L>ioSZnS5o zzS&0DCwSYpbe#Y6ab)@8m;WEu`Tuo!#`14MxGeu4NJ}l~pw2H<0JTcNF6r)fprhlK% zluRpJ;~KMe993Z^RhqMtGF*n6Qy^N#uM;Q^%=f{}rWy%C@fA1Gzz0&cBzR^u`=P}-qH2sCk`JUYUb`V(B&GV3FQ;QA}}yNb`0+Sj}CMX=E<@iaJ8$CubqPSenh&*wk5pG7GiK}XW6 zA9V=Jrv+o0aK;(SV;96bWWao+v_cWzg~4M^s3_|%RE>xP&)X3NR{=IVM@^*G~ ze6w@*c({2Bwf|^E=KO5u@%Hw78hqHw3~K+@{r%(N{^B%~6Tny_zoXmh3u8-htnrp; z9|4&NU!-3nW{f)QtsiVYGjOWP_3``h!J6wkvTw)d^T&4{-?r{>0?I$wdlO8x*PfsN z@%nr7Twun~CO>$zcqai~3zoJz-4f7yn=D-ShlxD>vJd_g*zXy|W}Udy@_A9Pxez6~^OblXHX{I;CUGDw;5- z7~4fvjrA$a85Knkl0AZ?(Z?(16D1$jEebSM*Q3mGby#CGuD++1rG#ZKqtePzC>NK; zo!8EbvZ<~|m=Pz#Da;j0hM@ckEt-cjvAoBK`(W4Vmkn&5K(S9fNB4pXKWn>VUa$PX47(oHF5uxZ5 z#6r~ym3IGoMEbECpGqMje-C`A@B5v8KTL4D7{=}1(ZLshzk0v=ZQABB79A#`!Vr zY#FB6_kEKIjX!(xtIIld22R9pTP7c3wGZ2bYyVMmscbW~X^-9Kw|YG()m)&pN!MPg zUTe+Wm5baoY8_&5p75@FGkEI14E)N0MYbp2=O6M8dqa65y%gE}$MA=L(Yx$T;VJ)8 zWGl1-*_rrX29u|`F5A1FsW*-V-9mhn0eL94Dd<@Rt|p)Xqb`7B$mG}n zbI45H;uCfk4U2L~a*>gkV@A1{sem+iEPT|64AkSTF)vln?$gmI_hr=)K0J6xFM%GS zPDL7ER39&O-X1^RHRx5*-{vY@7Aosz$TM%3XE=0ae}Y$~z2yQ`DZqTLmi10nz?h($ z6KD5&-&B|(Y$NWZS%CRTFVyW6PG(^NgHR;au_}> zX!r|e_1f;M+69dz70xFX!=x6h34sab>$-;W1U&GS;F%Gnq*|9|`C#HB{HccWt=HF+ zKcvUCS}j4#VHwckW14gE!_uCZ92haUG|MP}kCu)@MuKKSN%`8gaEd$T-~DgN_kiZN zTd-_;<3nwu3^yTHG`3WD<3G!-B^pq|06C|R;)`m{>%+!{L_ggzp6|B=$?SpsY>S`NXtDL)~0^KI)vE-mT@1lDzH zjk+>FF)P#FLOn{w+@>k+m6toPhiAS<{>6lrAy;lti&C1G-cpS@DWk^V){qKcZLFcZ z4~Zrtt`N)@FU9?Hx=%TX;3hibqVTEw(JSzfIw9pxP2ti*XcC(lro0Ajl_S>`X-+-< z^#fldaHQv)2ENr~Qo zLlQ$VMVe6|e^u$R|Aq0IWQe1y#+oeqxW^`d*=+6^b;KR7{O`stoXr0|wfv7*1eQM| zn*TNyA!i)C2?R6r&J*E;POb`LjcL7UmTLAS)4Vi_dv*-H#xN|^TFE*~z=s3`FijMh zXHoH|=d2$L5c=u;1*P|jDI5fAcn!FGF}ghB82I6zpi(%5Ocn|`f=*i$U=fOKb#3@K z9vx}n_@b*w(XzN)wwz7J@8g$NJ@aYe-m>kh+p1k<)$c@lO>C)~Ajogs-nuWew;t{5 zyA5rpr={)AAuz97?xr5Cfn`r&enZKVEG?Thh^$Yo?w=nVSlaSFdeP_!MGX}>>m&mx;zMFHdu6|O_J`66q(!!D2>cY#9% z%(8A7@35C93B27Z#)~E^8t@2-SXw^S`0B>?l<)CLQu`;q=;DIKSFuTM|q^5kQ%?J%6gV4l&L*?OtCmBU^W7ke3&9T6k(5^*_2$ zeROpTD+BVE`ENCAuRKQv)99x-~qnRCT^1&8uI)%;wc@2Lir# zM>1s_-qSHo!yZ@N3m=2j9U3D3Bv&Q*pXeA{LyxNN1COTE9WIy9OKZ1J>xR;5w@pk# z53Ag@)2A*~AwMI-fJuxV`1C2iyWp1BZby}H=?{&zBh9K`G&A}<(8+83AvQi7S9eg_ zM_g3DP&<5D>_))Kw=qA64pciTF*t@OW@4T=>Y%vu^IIkx@?RdxFEyKBMK~cIZ3}+< z5KENmnxMtr4DxP+Q-Q}Hc|-fe9TMxr3h&} zuQVa^5v1gyClip<#l^zZwzlKhWa4iOcR(p3%+EB`iCLaHrpK`S4sT-3;t-};_SgIq zTk6Dp<(;httj6_?gkvj7Q1!+W6}pyBB9 zZXhFX5xK0nvLQ(u+Y6u}8rpUNkF(872YW~7wlPJ8Xf5ceh1kdml{~FeYQ(=^{?3%K zgRl1ZFWoTKe_JJEVd463ZQYPID3Y)Z%_k4MNOoCRl~`H)&*1m;CgMaKaPYebvnHT_ z0*BKtkKCo|>_h;XM*|J#>-uMgoY@0{^|P7lnB>6LpJcuO2?8%w9hI{b-q<$vd8q|8 zMf;FPc(Sq?2?gh-TeM^X#Uqh$!XYJFE!y;~*e(AA?`Wo2X>KY7iLr{bc}4!8#-C4m z<93bs;6>ol#CP%VwJ^`Wjv(RajI)S17pR@0%~;^yoqT-%%9mOkaBR4pr0*UHJ&+iJYN zu54~3(3}6oz9`bLtDIW5B5)`(*>620vzcBC=l&%uHR&DOvP$1ZmZ&B z=GNMR`q?YXB&Jo(=e{3!Ln}2u5p=3ge7oUYv?YAx%fox`oX~!Nb-sFWQM% zc+BWQeQXZVgGv(-7;X+B9AIho@uv_NhWrS542=57mDck1x>(cU?d9h7=IrEg^)OQQ z`Z$$$_UhsEaQ3H3F4*-FpaENBhG~O% zR=W2P9;Xd@c9KmSuJ!j)oILJX>jiU>-D5TjvgoQ+Bd0{%v57>@LfPv1#e-k&)e($^- zgvGUtWF5L+F|~a0c|2c#VfrQ^TF_L1z{-$;?!R(efl!UG9T69Ms{X1~n+<>~|~%J1!^ux_$V)-phn zpt;@TzmVuFy;hd!?E|ec8GSHZ@{v=ynygmA?^_*8tN>&>;HOWOCnN z7!24g!Ue&%Y7UoF+WFmQQZ|U=3?VbylFA!8hFH~qViOl%m2k*4YY@*&JfCHq^(@jQ zW)p|$pQcaZD9qQ4y~#|29C6pygT>XUrv>q4am+OOX4iU*p35FHTEOB`!1~OygPV5o zw)PZHa^EWL1*0h}E==2N{1^q8R`eqKN3qoR8f!!#iBl*bbpp>6{y?Li79;AQm4Q7d z8n8)3odp2P7S!A3V2574Y@W_G;kMs&$pbWq;?d5xbagA^Rg6ZRw9m4!nzir)0Ws_b zDa$KReFu4Sx(p==JRPUt4p)qJ(Wa-Iw1sa6t|%whRdBDC9AN&{?n4Q=>AZ-Xm%y|7 z7n#)VxXY8YhM;X4YtZN?&ia zy9^;rnWzUDfOo)IWP;1=c)r!{Gz9Z)UiT#+f#>NjT?}suwA4p&n=hKDkyy>l0i)H5 zRHk38~=84<0cG~9htVNr-fQJ3$Yv~@(;HV&L@8I#J zf%4~hvSD7R2+O9R(jkA7P zV#kbBa;g#xc$U((*E{NSp=e`fh|fQoiO>m1uj`(kEZj=O`hKApUW2?g?>2OqquGDO zhn9a4P9&?qVjfa>!`6NBgH^c)EpF~#nP1+#zU51lT-E|W_RlbE0t6I0VTVi>hX=m| z@Ft3`Q4zR(?s|PuFx<%2Ex1=tFmgO8hm-UP?WVmb-J>)jQ?5ccj)uW zD~^aoWH`K7WS68-bRfdbCkRwS+arpTuJ+49)he)+M9|bc_ctizZggOo79%%9a$6*_XKLlSM>vn+K7PbtXGh6>&I!Ijn#k4J1j7$hsUK`o!aW5}+Y z;3l8oVMtK^W13aGy@Z1)I+S&WmX#^mQ7ltkPQ@h>$wQ`V!P#j2LaR!lI7RQc4by|M zwh2K@>#!+TCgI=`jNZ*r-c8V}vWa$xF?DGiGFr$zl79K1_{0+kza|4o7M8K?6rJnV>!Lm|!QBV6;p>4np)S@4Gr| z%hH2R=l5yaGyL5LWMU`7g;c$AiegdHO&YS>L(Uq|!ym%A38J&Ud!ypGanv80>P-i0 zb}en}#Xx=B%{B*M6+V<`x%OxH7k8p?_pF64EgUW+b}!H}f(|*!%j>kXRGUT@^@QmO zNVO!w#b`;jEJ;!9)w4s)VM+D4`EIn}CE(3Sc}2s&X@x(K@Z@|byVu>tWHU~tFLAA= zgLTVDtiVnCzTiRrWP_zDD7@ABK((gBZOdzW1`)cm@36+#hwtLr5VBU?U*Z$9jzq|1 zwO87Z6`O^<1jIn;=TeUBrUYF#8!$(|Q@%FPi zq59FJ6FbppOA;iYL_a14(vnd$bKjM`XfCF4$fIk)jK!Q(a*o0THej}Zc1a`Tr;rH= zJ$5i>dvR?Di}Qxs;Xpd$E$@?@+y^naYhGntREA!Yq8v`!Ri=hoV=-^N7-KPkmpUh8 zVlu{S@`;6gEVfUQTl67O4h$qi^u9}2yWO#vVHA$1KlnI>)Q_3@5z8<0Ogk_Z3BpzE zk|a~&oJB}9Ry_t}2x7{lFsHW5&D*fip?8|dXZ?dJZ`bcyQcn@`K^v-R_?|RA*v{xE z6Tz8k`w*&8ljK}*R^kV3m-Z)uX3LCQ*t`s%uWK=Lj6W?-HrVKD2TVE~uF&?ntEjbS z%?Hkom0VdfmJ$A>=Qm&}-(BN_pH5%ib1hAaEuRf4C`#PGf}as^Yxqg_QCW+|m<@JJ z{wbC@0iC;ny;4d{s6TMa9x}4Q(@jNvTuEwsHpALCAk>@9k%&g!%^cZ=X%sVABpZpgltHbfXA*W&Q|_`rO+~ULXAj zUnAc_?q7-(&mRKyel%^OQrs5#8@*{Kb~~Yc*!nVqG`YbyE=$NITM^qJ-$u z@vhX%WQuD$RE(KpjEE8<7jy4})CkK~Rw=kA*H)xyVxxxj3gyV|(82d$G9?)!*T}&T zmsiYI>`LQt&i#^(Eh(7amB!^2JTDXp%hat93De3B-V(#2cKG#9DbfByO^q5@3QLfk zT#7C2SZH`2BTt7hjo@qhq3Cv9RNh#&D;ni;Uyn)@d}l#ID5RTqMvgS0&5(s$k(>@P z>&l#}!l9`PhpB~me3j#=x`AVpPXt9P1%dUKEE47>SCkn@4B;(3au(9iwc}vky6a5E zh6O#dxzjLn4puzT8Qm(h83l`LvJ%Y8Ut+QmytqP+@rQk|pn%^iJS3k*DR1?H!_J%T z0*4ohUBV`*84du-1QN+|6R()r`{M2XC2XarJvxW+z+|h zfGj0~uHF!&qK~Z=3L`KGC8gq30a=Z)8=NnsH+nFPNugk;RrzEw;Qip*fq4Eqhr=Lp zc-p$_Q8XAvD`LXF4?E51$Lmoa-M}vF^GH{R_tW|Ly|bIg)y*FlHZG6o)z|Ie?BeR{ zUEU_lT6q7{_-`h^R`0ji$Ec2R)H~w5wa?RcC32=@c?pdapcZrL$=sClHajrKv&&&! z-@E%;kgi_)ruW0+&PR4XPw#V3L)m7#U3c4n-&AjCl$~3#=)75Zy7YNuc1bed{nBaubYZJ;KX1%D9iYQeTFdA??QSY<5_qFOjvm0N3kKmTzh1>cyh zNz>FRmNT<+nuANDyU$kLHadoac*U}7Y@fg;*ju|q79Xf5yio!)`3I%Od(7iZi=?W> z4{l(t;rGpTIsh;OjrT{YxY)Jy9m%*l@fqPhyR2zW&V6(W8MR{+t!gc%|5OUU8dB9x z31drpB^A#&sHuXVxTc;*44*IWG2Yfu#9rQQZ+~om8ju3ySuwv5vUS7=M0Eh`1gxXh z`y(cBeAvoXa%-)bzpjp_QS%Rq(vxm+?Wf|>>|eOs!Ex(J5EUG;-R+>ty9S%D*4Cw* zRew+waa>+TW0Fowsad1@OBhTI;2P5KM&N2Q{5Me`iMwB)ub$p6M}Kj{45qwoe(m=3c0Y2~ZxS)=o0`?uQ}oi<_3pF`TR5e6 z>^zFAE51sa6Tm(2dikF7_(@Pl&(HVyexInmZTwH{>fY%K)7P_?p3fJL1Dj{R88?GQ zUj}B=d~Mg5HZb2V?{BU~o-Tl_-4A6?c>+H7XBQtAb;sP-;@lDQm-K{R7KsIRSZ!8& zE!dsQdi?vjLv81VX|JmjRjpNW$9DpYUER}QbLe^f?*Vsp(*f0rJ2fE`mhZPjXY zuw!c68`_6aM94*~ilVmM!K0N@ZB$jSIz(3|UBen}gfsM)zf2RVh*X3l&hi&xkoiAh zj`=?Ud_oY_5G!q}RGn<3sSH<+ zgBgi|o@%pk6WM8MOnF}1T>lvu?qAo3@a^$r#3A z**OONR$m4;8CZ{q)4Qp^S`vD$lbvHy{ieNwwPts0CWgdw%g^OsfBygD2p+_2X zQcOHGJ?}WUx0R~&6$y4)iWoE=773f5pg_OE3IhbCyYE?6ek~wwzrg zCnazzax8+6M$AP}K)fQ$shp+Cd0?J2TIOr+W3K!&+jbmi;zY0TSNm4Y+oj^-3D|31 zljZaY(b{*6WmV)G$(m#KPO_=Uu#Tm)%mDWwg9lFkatkk9{|dtIX2qF2`vBNEAKG2BwKcC&XzN?ZPlGo;ZLBtzBku5 zoUH}6fXYcgXUjOwSz1H=W0z8m1akR~Y~Cei%FVZ&9l9*D4MogNUqowbbXS}Jur}J?(u{VM0999KgFYp}onPrQG~$cz>zT zZU(@c0-iuAH4D6gB?v%im}|SNqt&()s#K{d#TcM!C}nqPwDva?X+#uBVm)m}fjf&SJoLt` z&%3-nvlCsfrKhgDE7jj&n>e@LyE1fLRS^>2k=&`dmmEf!9_q%wecq-ZuwKq*zgDSo zKe4~C;wY6o+1U*!UPG`6AS{54Ui+K7-u7|G<@3f^3tqH1Mj2e!Ra^0SiOco ze3n^5Psd)$_VI7V=3Ya2zFM7S$?C@FWd0vj$p!Ln8*8qC8zLi5CZWd_w z)3+I6@wUZ4V8c6IeDO+?d$UoZL6bW+(52PW5Wf`E1C?&cw);rcctjG}R2RH`o@8Ya zlWga0jHyOe!fcFgc)xPg0g5xd8L0E60M+*T?=G;vuMH0kQ3gl#L z%Yg;)v7Svt2z{qcs7>c|Lx{u)eS+T>XyNK+eK8DV*MoqH_NtI)(tkDYKubK5z%A6V zP4Rr+96zQ)QJuuXY;QY4P&w3=fiSvaM>a8n**#3gdu)8Ov9fX^!MGe%4*_KYg# zj4G^_k{TM%!Z<8}hM+{75s61Z?zh8B%5 zO8Rs7b<`yxL!%d=HfqNc-S{U%&WQ1m5W=U}3RR*?xDm$k66DwkS(=pgrI@FN!z=l4 zwCBJc&lnO#QLZN!6FL}1ywleCkeUq=MpLcy9Ak_~wLa-*PEIY1P~P};K;gz1dPqLA zDP~_-GrF!A7FHsPqd(V>I6j4-xTU`NlON(MCVh-pQHuv*F5Py7oBPq{fxWi#xxwq8 zUBcYl^IysRvtrhF*;_L;UvIvB)gRc~HYxMLySg6iC@a%SEu+x7jFhC3&dp_?DIS&T z;#Dgf7fd>vRvF)(Q)91Lh%$ADpyjzkQ;J-PggQU=KYC@Q&m?kH%Wg;vDi*+L*z-8F zU`EyUj@B}now0!N9u#}5@WbnQezzY!jQVuMY+sOE)_c89Bs-({gL%gD?qfQmgI*%{ z*M6Q_I8)ljRX2rOf?WMBoNd`gz9e5I$Z0v5;)D181f%b^pOFM%61RnM@?&-Ux-j$6 zsDT2X<`sJ#MzOeH&SN20lHPa-VH!EeopCYqKO?jz7til02xbq@5W*0+3Dy+(haMcG z>_L$L;Zc%ak54)!=SUL6|^CzR@q1E z?Ac-VPsBx0SS~mA9Hlc?T$UQ>P|i?dED0tOVu?TYb@{pGIL?IqSe^UjTs|DH_IVI^ zH}b)tNBP_|Wo*4SzTp3-{URpXGG6!zLV2?5Da#Z0q%_W`byOhS*Yx1y^P;7az_JC36Z)yX)_9XYL4w=$QResr zPXh|Yql~F;G(c!%F#>pkK_xo;ONsOn$*0C?e}1Wkhj7*cLNffSr#5o$Fu}1;f!EAh z!H5i+-9Ojfr*!Eye1LayqDv+lwirK5`vIqWBbLwia#T7~d-F#6iY57&^3ak`_aSU= zd2_n<*RPhMO^oT{_$?kN0oRYxYU=SUYHc4M^lC}ees->=5CwECXesbGj;%> zgRoy|ZXKJkzIi@(9dggShiQ2+z6}OEf<5bJTw*vm#~IoURMPxE`4)jw$O-IR82Tk;t{e3Z=c>z=)^YkA?n zxOJ;%VwYgOP}5!AWKCA1Ft~eFSKZft`dY#m;5XI$!vE=Qq4g~V=4li2&Gj%W)-Nx? z5Am+YY*$~i5kf6x7M0~qsdfADp37x|M5Y(F^0R0!9gmkISBC7s44aipwz~O*Hc=T* zr@$q83ZfUsl1fL_@EY0N!XlJ;e z*Ch0N)JCQ@dQx_U7rmpuqxB_f>`kMMk(%PcD-KKCN8`vjohZVHvDtD!CaJZ%SS2}@ zEqDulcBw4NkzYS@Q7Xc+*NUB!qE(_r&lE^g_E~yZ z_&u8n<)VZz$M)##^>R~rr$5CDj*1l}*I(u(}ll55$5;-*S=|%l&-m}f8Z>Y1m4_AWK<0r|?6#V=C z7u26lNt}N(kYeHHX8CVtky!riL_k)S|9b22P?lmGK@0N8=5OU+b*DjUn6!$}(eI>? zS|GG~!(ZYT&VzOc5Q_SA9o%3O?evxK9GD=yaq~Y@_ntc*3_iT2eX#^IvSkI}hhf%t zH@}1CPmIUcqM%h^+M0=uHsQrHJwKTiAAYART|m!zODM(dCzpd1KC{S- zZo6go_fKxe+w~9e#53q!@x)W;4JEIE#w4=f_#mhb)r=R@hz)OAER`?JFUL{QoSRCj zFs{pRAgJV}HLQ@IHutLLh-*QKnVg^|Lc282iXWD+Aj~3#NQqg&FIS`XE5r)E0MJjg zui$`*#WFWjz*($dRkrdy*pjmTdng@@EV8C1D(VuX8NuhI-XA_@kMG-@zsq@rS;1M6 zv>|_|t6hiSFV5$CoGgcC5Zuhb*1?LZKnqh-YAFh_Xu4BV_5-d=^g2A68=EXFUKP##UH~WN$8@mxPqc9mn3#6IV&z(aobs%lm1TJsHs)s*tDtIbdQC~ zDoMRj;~E2s*(uKD3(0yUXxjEu$;isgt)uCi#kYmJo6~ZZ3mg%=MLp??A%Hxtu{Aaa zuCX(oVLyww3z~bhqORyK<3>FHxhKU&g8V)6(yE(xCIrSRAMxW@DrG8K63Q`hN(UNz zT*p|4m##~;GESKlL(Qu2FV3x9ia7bW<|z{#Z?=c#4^L~~x=_k$?QCs{zscJPyxmW4 zzP-!>{lLNJYa1`lK6i|VXf$14UQVyq4_Do$H+6EldtUE9Y#h=@WjuC9@_wRSyl6I% zU2|Sq+!_K$D`Uv}b@_PV%QFq+oqc(8uWie-wKIyvIh@+6s{MAo`DO=OB`WOHht>$~ zX%Jpb5>7%lci=ipgU#DfFlV%Yy>=Q(rZX86lxa&(|?oU51dJjWzGtm<{yFV;+>f)rS&}L!t>m=0P>X5Q&S+YP-v?DpQ zII&q#lcT5GWJUh4!RmhBnE3v+-(;cysYFdqTS?~!x+ z!%|?~ktz-WiCW58QV0~-wq{DeVOP4JpQY6{R%jzMlOPlt1<%+D*3ZvX47aywy zKB&+xu@twXMd9?@ojhCGUa%$;9#Mv(9@b^yn5-;r5lJ3P0jJ`pDsHd}vtSkc!77yh zX$J2K8@&at_X^L{2p>4vf@uL>e5Pd?h)(_K4+$Bg7E-2ErO8HPagz%9a)XV3S_99Y z8ZAEr1cGZ+i5wdRyzQ@HJrK0lN)%Vnl%DJNP?OfDGG!}iHJ8V?dc0p)+{wuyQSSH+ zc@ci9=VwmS@|wF1xbjLl#SRh~ddzGp$L36Z8rm*aPF$R1ZKiGKo1AQ<7j~xWyZ=S0 zsXtrPO-iYrdIQ`awrW@e{5oa(%#<=Fc0d^Pnu4<|!p zz63+@<@ASo3m5A8;3u!OlzG#y9x$F_=3lL2-EO%V(;m3IR5bE|2?pd>&)W6i{#P-0 zc(Z;w!nLRsZSVPVsmk5e^}0ve`DWt-4rRH!nLpHa0bhY@znRxj-3(Q=^KyF75w~be z9uxD{`g%AUW@qd7zUx-(`g)wByj<_dN>1Oeb#{Fz1z}6_*YnwYzkB3tb&MIe83kMA zDEavhHabsHBCNPdiIW5?l|_TU0rPJlot@{=EGzcKKgpstai^GlyzT#hdW&BivX}6D zV?+fKyNVa(o`XajaXL_c1LPgzt}!Qg%N+GqCW}A5CFuS^AUpp9Zf(3b_S;YX1wfaq zW6pmU4dlqQ3jYsquMN1v13!{rsgdRJve~&U_#3@;y$Vjyzy)lB{RfCU#IUk&=$oJB zmn9YtYkb@*FQEu9XBaKEie##}93DMlas{-lWhkeq6y{|oFu1(hmmNHZ#X-!M zn+1=1j6NPN%jfmiEq$b%0KKbY42ig6Qwvdw^%Tz#KN**_=_-pMaCI;~a$T_JDz?4m zu3tqK>n16ttE+#>E*Uh6st9Ju;E8~7hbRJ$m|Pbp?BL3A;TM68li?sv)l0vn@myoT zQKU!XgT44yT%KHzGaK$7yC+_4izFSQamu6MMKmX^Y9#k*AGAM!%Wt~tE~RM{i``id?ZGqZ55G}+M38M*iTXQ!64(T0!*c#)(w zPY-k_h(*Q-Us1+my-of`6?pO6-Tzx;ZLG#b-{v@Yr-rig>%d} zw{yZA69JYu$cX3C=}4biV3!S;8Ay2sGAyCU$QgrK@jS?rwV^osbsX&75;WkbC=@F$ z6Y+GckqZ-a?$M|)2*5d@Bin*EGJ3l?1qFi2nTkjygtWP)s0I`Lf{lcwQzqbw_O##6 z(^z!i#nfA=Cn+Y39XBXme8C11ck6*!Q z4Cx#ErBzNvRUwjZQg^Q?oGzjRy7)dSL0cpgLZQ+@$@+duQ^Zcmxe437Ke<={##*M0 zMQ}#8yA<_feO!$;yQWs%c`#4#0&<~ctSNhZ@57@tGsi({w^8M>+owvhh?@60F2Xkt zQPniQR;b!J`wIeO!x(eiq(pZU=@`3F47*3q(=$XnB(`@Hl7Y1dQj!qeNBr+IKXAxC zi)JfZ#d&#N?!BgKhIcJ=D^caNu6(pLP#HDV*Wyx*pAg^wfEKi1@Le$&##lCtgNNQEzee-NucLJ zmETWrmS z-JwYV7g8wTodElTeugssR4kLdNV1CED-yE^c)^z>Of^lYP&CP6=^SC~7Xd5F1frWr z`Ls)~=61q4mr96W3^PndOm+>j7YyMYsh*~cf1$)kul#G7bOk_dH{)YHniYn=p%_zP@>Yt9J)A{YZsYC-vEO&M=cK$j>? zp`ZpugNagq&E3QsN>w9bNAxYs$d5+6#^oA}a2$;!1RLiz9VHwTUeJ7Wu(@6Si7PmM%bDlgs z!d^P^5AepYKbZH?M_rA1C)feVfHamM08WE+!w}ABzT^Q%X(vq`fx!ec?ywHovdx5l z#&C6?H7j5S$@mW&WzMuEF&ASBkpuTZJT{?rmXA`+__KzgEK$rI(YWkBBOS60do4`p zgt6qjeotf-wmig2xTg;|6iZPfnPrF+t0{-f${8H#x?@P01ru~YB2(e|J%+vt*+F9~ z0pScG*5o$Pdff~ZwiL~v<&uef+_CDJ6YvcXh5FU3N7d7$RTCt*V_?O;$%bW&fy<`^ zm_{;Hv-nnpB!2V$Gi8F= zMK!Z3D_T>}X~ule_#nk1N8EM7F;D5sySueyeRO!jeeHhuw^< z%YDG5w~8&VoF)XvB`+{{4Z5zabBD#TXp~A$Vy|>|Vh#L`M`P|UA=aF1A!!bo?RbF` zKsqoX^VXV|d`!Om7PAfB#KZ*MMD9d#mzeoN@|)gn#`u8?F&_trF2`alwk-QL)#7${ zSWM<%!aZ4TMlqv;o{g!B-fw)I%{sL+&7U+kYxe7xHzTr)U~LKO9osKGesArK&xjJe z3xBs?9=x{mH|O87uyX#_fh(uF|8tng6?k#SQH!)U(0y+qjV(zV1GpP+q9smqga?BP(H_pE1eMlf}( znfAb)SC?m&hxkCrOQtWIn+II_rEewt3cMbEX{gkBG*h8L54*>wUrmoYyfabHt}Z{4 zGuuRg}lGq-5tZ{S$4;2^_8}Ltq-2YqPFbf=~rC1TG~YYSYifqup`E& z(eQU_-=6Zq9Q1WHqaq8)#I07xXSQo+gtH=HsIzO3sXY5kECw}(;3*6t)zoUO+93*y zwQzT%9;}(O7bn7G$d=oSzF6^&odhq!&i2{p%_1ro`E%UVbGFtV3V--%6+~>ATKyiU zA$MeE*_AcvcxcCbUTm2^*~r+9Oxphl?yYjdcd9YkY$4-w%}lQc4-O#lhBz#0q-*`O*)}o-gj$HK3_o$;9m2A1%@x3%u;a}1>KI^x($?t z@ka`eeh{N9=kxqdGCHO6nz8F~u;9vBiA_MG*h+i8jbadn7{y}P)xrX->r3vXYwD&P z+`w~)`!W9UwPE#6B=Zk~26^}1_Jc0eX31iEgk#QB19hZq;xSxi1Fr0j1EeIx7)r}D zN5U`o$7&kAI&Qh>s$@1yEuvk5E0sYWt}K+5_#2$b<bp|4RYH|Chv32xIfe+e@5;FIV{_`DA(aLy7_lIxNi2}jgsXDneX}X zN#qjQ%ORzlVG(j|R3mGDJOS#Gxs7JcdK7W3=ZvoQLY?oi@ozyCuFV`wcEB4Y3p^&T zP!+R^Gy;zyL@EU(a}brp*ouqo;_-}=9g!<8^dv3Fl6mgUZGDo_4PJ`8W0Z`el>|g8 ze~}cI@`%$eM%evcHk4xLZ%Rc^mLwMr#T2h-5c>1)FiuG}b$3@hD@76YqEfcMBB=;M z(cChL>PZOZ(yGMRy3iQt%1Y02m_ZgZV&wP|M^sa&bL0? zVgi1y!xF&Sc9x>nO!T_@>{nnbzg@G- zW*rim5>5#uD4LM6o1h3Ym+cnipT7m7mCA9S;Ao?j0?dbFHv)G5@Ya^s{x{wwxE&XO z@0ku>{_ck0a==!w2qU0|@Wv|f2qVnnv?wBwVoldvc}|~xZU2Z1;V}od&h+JHt~xcK zW7MA+cF$iH)Hp&q8~^-x_mdH8bj^3Kp%G4+IOi zX@8aNl^D)8`G4_W{_E&Kwtu^%n1z-5zYQuM%94wsXhRGA{qo7Vk%?|73=Wt{j2*FI9R2IFae zV+YB)T!df#GN_|MWEP~KKhQEnqaX+)Ce0FC8v1Dc8mONfx>OJ$>}x}Yl1nc~hI-L2 zMuu|M@Yj}%6}D#k^*%6B3x^PG51UFN8=ot@D0r#=L=t`8T7e*Cnrh%Dw|$nZBCcZx z0%2b;GTbPO%zzLUsSs+BaRk4t{HPZVBdld-x-N7CN7f|9`;|^i9cy$;c*fG{P_%ZM zwa~+#=}rTruCxZk*t&spVU%Ut*M{5ZBLegtm@?zyLzIVl_V%=HOmlqi*Ad03r@N-J zh1U^B<*#|QHL?fKLL$o_TMRYLeym4DGs2lKv$i4CA&;N1rV7xvPppMerWv0N44U?( zGMJ?~S$10#q6=TuK$l^+;Hpdo>dpmzW9HaIXhSanDlB0g7Fr^wu8GYn`RBiB(c?j> z|9*e$VT}`f!^ef9ltwa0!N7gf!Falr9b2jFT|Q6sP$>&1o>J|*)~)zV zm=E}<725A++$H%Te&k5JK+@z$AVV?y=8WTo)lz7pl)Qmz`VK5Ay2h>9kd%XxEs2?L zhVG)bt=pfE`c|0O%wV3vPDBaaKUowPNM&&qeyLz>Dsd#BFgCBG^c29_>@nw;KXU_u zoR&G^Yr7S2CF(*jpgV1EgcX#jAIVHhV&|-ZG+;=^meJ<&toAUT?)SOc-?|L)s^-9T z8G0DieSMAd;{_?n4OvC-`MlgLqM~kk&*t9W-d=BSbULK99AQL$6R;Uv9iw+3P>+ z2E|$Of7FG1RMa(Y6dp0YA&CjgC)(oP_QV`XzA>0cSS4W2mAsK$Nifp$_3rlZbn|hD zJG7fPdY2W5l@Wo4HRN5t=q8 zgEV%8*m5B&89a7?SSl1foCeBw0t232NB_Nd;{mBq3~*W~jRfXA(~kLjg8zfiM5!k* z;rZbhzeh4Ilo~`2_XlCkv*h@F&tROCQ_b4Cxo&wFfS+Y!&Dm}3y?kGPVLG0`AW=s! ztfw)eQZIY@JTUYz>+=G*G+=JmSwxVF%6zIAypuFtsn zMfh{M)lX_&ft$%aO+;yI+-B)KXKPS(R4+CknU;IFQ zd3Ij~JTA{i+R1uQV)7S(hf>OkwO+eYcq(|lVt7EkRvcuf3&oF*7I?S!k?aGs0R0xu zeU%AmxQ=W*_JInXOjUV8_We0};4v>uyUVngPQ~Zx5;uM^#Y0zI4ueodW#%exUW4i)D#L{(%t*M_4ygic#mEkCF!M4n zb8$j;0GN4V2@}>u{JGBKyJXuWMOe1z%s|cES^v5aJ9I#doTlF~BFIpgPD|85T?7}n zHA?}cD?-TxDa^84Wusr>Ood8oK7Yecu0zTLXsChLe4<@5O*D5DA@%i3vm^=+JhZvM zTF!vA%tOIDF4fHBkf#;%$?DIR))G6_?PiewR~hh*%m4g)s8-u8XDlyvF4{R>AylMg znpx`MQl^5)ZNUw@u2k#+CYhJx?K{M@ARKMZ{Xg|IU-5{2!VbhM6J%1FIZS>9tSu-9 z0k}CN8pbMuhCMA)0Wr!D-h&;vGgsNoH*@*8@<33v<57NHZf1#xZW)S=(U<_sDnB3K zy6$8J3l$G#St1@RY-Mm)nX!x$y>p|()xv2yowI@6s?qRP*v$oFzOA#y76lLG1Tpy! z;fKdZUFzA;q>pQATyQZKY%&ev_(%dfy6f@0)Eyghc6GSF^dAH3f8fs?UaaO5jA#%$0g{{Pd zAW_R{_&-XLMW1`-I!G|bv#iP$w7+yK2No(`Sk^(vvbX)dIRz->B*}&hp42E_gg2Xy zFSoPMo+n^8UgQERoCV+g$`NCcRCr+Xd0WVMWn!ip6nb=!4z9tQ!aov#b*EXOn&ilq z`kSZW5%aBo$k>WALNv)^7HoM1QY>fuAE`Xj*x`UncXG4zAXvl)ii7UB>)Uwy#j22h zaHI-KyF!H2FnZxOPh%$poII8qF8n`?eFacuyR!D+?hNkk?l8#U?(XjHFt`rxvT=8J zhrtJTclW^=^xt#dz3<&u@6=z1RIN%iS;`i%_-(ChJ1to1+*cP1!wNMs%LB z6nqUqh;;a$><;sTSjhiALSwcSN=niKm- z-kDd#3pqmHWRiz6ho#BDdw$)ni&x);-?N63_EK0g$2#alRTM!TlVS2n>#Z;LFc5YK zzng2@Nx!lPR;}NsbzZ%$);VAMBei3eppzE%|wK=!aRel znu3y`)uD#vjxTJ1#Hqih%k2g(RN_hsl!i(yMGL5#dkXZd&D71Ex%a1)ZWg$@O+N6pjXSU?Yw;;U`Omtapf?*uPwvZdrKTJuc)cuxuZ2vI<{rj&?p<^@cypaG&Iz z6eAQnA0FKvgsyAuQFjr@HhAD6eT!GO$ORCRrH~MvKA?0!jK$BFubR$Z6;<5ZPZ9n2 z-OiF$+*Sj%>Nd!TfB-n68q*my9#wXW zyLZgPOOKZ8D4|b>R%zDK!fKY0Y*bWFh0Kji3$LN&Q&}25O-2Cu)h8TJvb1so7C)8| z_pPpy30bSjG0WT0bww<#{&*@I`HdTz;jElq9e+b~#jo2;H^4|k4HMc@t27Eh1%Shr zKqX7LCBsXcD;aw8b>%TvD!xCfs3ZpXu&ZjI`!LjILtN;fvGqa zQQUiF6(DuOlpYqvuhqb{i3;vF&g6;wEeJe^Q{mUjkz?ttPdHnX;~0O*(b8{9a;>5D za^?2q1PLTj+)$#Wjupy7(K3H+)h#B)fbyH%^06`+``q&UjEuN%-@@745>KGNjwQ;o zeep!58#4$qF=dCQ)ekOr%PWfY&gk;1SnfySsToL@RG2!T2x=dj&w_GY(%SHBYd>4! z+Fv5ZenGahV&M;+j*GI+E#C+Ni~2$wn~hRkONK3NAO__cX0mSMdW4|zxIqQe;qh7e z7Gw_0H6PjIk|7%+rg@tjWF(s$t3MLs;;mZkoUaWrPX(-C^vkcv<0#V+Q`VY4ciF!)_ z(xJVeZlMTC>!&9EZ$H`AoMyQn1!!o_zWm(+$;QF@9}DFFS4qY4pTLsL|9Axj9`b<3 zJHSKUEv<(P1D>zSXGuXO18oIVA`o!tu;oC+`cCLztd71*Sci8XJvH~GMrR2NK{gN& zW!5#5FSoS-LO^(Dbq-!WZ2BF1Gt#tVq;(Fk?C?C8Vf2sy1|lMB3KV+5Yp0 zaE^YBr1GEzv}CcuyjGlY3k@CFGAj+;337{N1yaR~gYEKKj{cYGBFhGVj&0k6jRzyW ziY=r$J^7zUB!_VRkfF7j4%)1Z!=lt0fPLO@(X1;|m}(Vq)<{AT_lFjIIy*7lK(A27 z4{i9b+S+0|r;BRHEsaeVgZPcGZF%j+tLM#&k$Pte)7nw<%~+lVRI!5i5f#%#!y~xb zWIp(w%G>l}o9GLX+qOeV&I?$cibAq`zUq>z&-PwnmLDjd%5balBAa*;F99!U#ur!W zBsYhdP4xA9{Pfz|`xEuoy-MRDEzKj5PO724oXWXX7jC@PYrX=?a;wc-)2#=Mwmk(f zjj5Q73`>8&OtLzBef&OteQWFf{kqq{|8Z9G;-^==#mD#V^7zDHfB}0|$;?>Wqk8A)7Spts^5XhxPBkq@qV&%5!BJ`;^*=Fx`&42 z=hgZ+nket*qVMC{*TX2NoG^U1%kW;3D5gt&d4>{ow;HT@z(wQUjHzs`>);V8vSmkr55)dzK+Kp zwYTSfflG!Z`v6z>kJtT#OaB=m_2;`^zpwW;9*matUe`9{bNIjA{)(J4?A_elvqzMy za}VBLA|#lRwfD!FhU7_-7hIl<#kb|rWC{*+Yi$Ig(Di9&g3TWK5A> zyb13xWCAV&lY`MlZ@IJ9)A07ke-XMpEmI0KW6Zc$;|p@$W2m%}=ze0vi`v9%sL+*T zXvSD@=O2WpkZS#R1`*e}jv4b`kCoxqx74gy=}G=vuID5T$6xfpWpyK0{KS}BV~0a?D>D$Xn>Bf-(XO*MLc zS6!AJN;=2t>%L+Nw_d41j#Y7sT#= zQ)b5^R?Se6k#(q%7ixLf+D9^t#Cu4=e4IkB$U9Ldf-ooJ7-SrBB~Ipyc3qr$5r%}L zT_ErGvxJk<`vgJ2#vkc$s5dzKcAXIvw!a@B6NJ*ZMn=3Jbwahe&zy(#6E@|%@%Kus3&TUb;rA6|m z==^@h`f2DhB{6f2Q^TA>PpTDmN%~&sz_7!MO$6CfZ$-DD};WpE2jPQSHPCJZk-MdCvqVSAoJoc-}rrIlU*D=KJWfA z{$+>P`CHJjG#-QK$MurJSE{D3Dl-mzFjJ6z@Bv80m^}=sbAyAgJv-2aIGMf~dXwD- zKN$)Z&L0j__fL*azTwc9j57K=-0U3f4?BIHva8B}etkKVZ1fF;su=bg z{6so_Zmt~&KQ&C*_u}Y)iM(clmr(c}-jTk4Ow_?GrvJN-FRGD96YLdd5eD%dcmVpt zEgv5OKZHliSn!2QxNv?<%wf0!?fW9P5k-L<(r2hBZ45sskJND1i7AWIcJ9*k`E&)2&r0OkhhnOIp)1m7AeX|I(n z-RQY{u?Uv-*tf@Dx8l~6O>hWC0)bD}?o%lnR}?~C)=@1Bn^|V@8<C7W|AZ$2ru=Ol!+WpcTt9%2psYKHzP&z5Z$FKKq{Ky6n3$ z7a5;1)7f#gGfBkSDwf;RsxW45a*`et0>G&SLq(!02uO^FX~>}vb~0f_9KU(z9I6|c z>nnJzrzv_ESb_~l9-^xyatv=nTU3)suBnKnx*eXp&YYsmo>~0w0yGX+vWxLm=o%iCsdoukaX>xQr1+q^ZNaolI}%B63Kp0 zF`Dq5Z`L6ynCuJL#A08%NxWO9|14FG{YlG}Z737@foAH#g;HgZPI_L7Y;b&c!=;y- zt8Oa+Ek*_3s%lQw!Ay+fKw60|OtVSr>aMzjB7kmzD^;MW0K-iQy2j;#I_p~MF(PTw zqsUqKBuc$~Dc_}7<0Lb3mA>Z4_ljbIM0cY@Q*U_T(ax93Ln{2M$y%JA5XmHN12j>L z>!1cDX85UZ!A}nr_Ar_`Ar;ZY@0dAkkuDG0f-qqik@Ah@-4^fhpAu8TE#GMrn(VbI zbH5?8ZwMG@57I>B>hwo@yKth6T_4*aZ4_f|TvmZkgkbIg-*+R|_>rd! z=F<4X0RqBk97S=qU@g+IWyY2#{4(U)a7883MKubu0hchP3K#XetTV;?xqnq*RBfdg zx=W4XL4Q3${!jFRpKZz8BwoLaRX0kdYyjVBz6(Z1pt%X1CxvqJsx1W22&l1#|Mm4B zdV`wgJ^`)Kjj^R(^_Ga0Y=@u8r+-LUIeb=g4_<>1*YS|9kj3OP*l-vm+ zI5_`4)-G{$b?cJpN}uIq7v|KATHK1sQY%lobo`-4fZvKqsUWVbGfVLvqYt2SVT$;K9C+I}^NKa90#p_j*y1<6;&9gDM zp8a|*Ah^Chmd#!uuhIcQ8v@4E@&(3JS8!+t#xx6;4KGvP9uxLW>n8zH3By!LL+8bf zQZvUXd)CLf|A;NY8DJxS{XF$9$<6LSAV{e)(bnvFUbHgNt`701O&YSgh5I-{;^i%( z)h3gr(kY_U{fg$SDmRV-=TTH@J0!I_k*h5&P$rK;XR&KsYQ#>QlzbL3s46mCl9hZO zn8noWi{&@E1@`s|%_J}9?$J#;$+U#jg&iH5vv~X zKa4dlRWwXVt1en0j~QR#&fEe8t24eJ z$p^{zb<{N>Zun$Xg@TZPCt#w&2-6nH^li7C9k0b9sXbWZAc+$#2<8G~%6`E@A}5du z^M^vJ*k>dR4Mwut8`N`CUfTtR>^4d7nEAsjb%`D9heV;5f!vV5DN*7-|)4QbmsTieWw3XihLleu-z~NbQQq#PmK*^>rs#_0jOC1&u%_Prq*JAiU z@-;FH}h$E2M+N%6ap|t|r2Fr2F;!%pAxwAe}m^+x-gRkKl{et84b<2eBJc&SU5?o;}{9*dzl_Obk4H`kAs6*UBR zB|M%N{PWx;u-}dt{NC2KvL@wF>uXNDUvK8*w?0zsPt)W2mPB5kIq!AuDjgoaB?f<+ zA$!m9yPdeWE-Lzv&2l-F*#dNyCCXO)dN0E;|I+hP!lV58%VUgvp!Lz%b6(&o&3#2a3TusgL@kyuA2ged(KZ4L**{{wFeI0>U zF&ha?);?Zb3|FX*Wjs6R=@Ks(fip7%ToFRxp+Z9U(AL$tl^CA?ScLV$3?T!We_wfn zsG>vH0+BU%The?`lht}8c=w**M2^C06ZPt=b8DG9ZC-x5YeR6f9-Y_p!N~Hb(hgaR zP;6mVOEU!QnX#+(Bj>moX$z#z3ae1uh|x3E+0G1h8$u&b@#TBwna%gUAUk zls@vOHWKfysMZFd37t(f&M@3SFGE&)GX$J2D#|WDR=q5WZpM z1^+{O+X_HG0?6-n0f7rM7~GUy?yR2_x#mDkWPfxWusfl$ll*;McC8kN8g6ym>+l?N zc8j%==Vw7u#)*+jHWx;~p7WyJ*X=X{o5y%>acWVCKYerh+gHPL8L zYhD=t*N0PJI+JRQMGT%jNg`?Yz zjzxR-Dn|OkGXyYn=*kKS5M>f987)GAeuL7j9ylT*Dab9gG71n=XoJ4{Tdt?+=K_ei z3o*70yW&q|G{|@$p)>6pA9Q0r_hKay0w$30jZvr1`uXPu2^C$GQr*_m>5e#GbKqI!<73ejRr|* zA8sGKw5-ZGEeZJlc+GXi9lPX218HI(I&(73pi5xj+W5slfl75TqFY$en`Z4V*AInM zI!fXS(a1?~1p1sxj8;zDA&D$5X)yvJ9F4+%ilN}X7RVWYB-TOGTe{9kJI-p|Y|jiz zWmx^J=7%ot73qg?PmJe~w1*9t^UrgS{Rb^K*0iS90G7VckpH4w6^aKSrKlB!lUt7hAV36&LrA3C@>4HIm%GW)xSP{dW)P9!@RG?m|rrws5ZB?vm z2V)`noHJt;HrG*}c=I7ZmeFP>4#XnJ{>gYfn1ekj_$Z&65!B|%I>y7AULx!Am_ZxhpPsZ$(j)JxXfFsBDXL31Tc8`v-}_CoO^ zy=UqjoGUUGNN~O;k8l=F$Cl5Bvm(l7#3-ZAwPVm+KDTpDrOP}lNuGSIqj{&Nj-CLUO4uW@KFz&Q!JYz$fT6?S!d_cO@2P#v6MZvzPU8X z*r*~es~OEmw4I$xm|xoO8pYV*lRR}sloK!F_jXuKc&0Hb$xzA>b;~9p=i+R3RXJ^d zE&;xR^WW7}z$$PS@n`sBBtI`|gVV0{=taBXijTS|^f5>4>AWvLbPbY{+E5SZ*?o9b zqx;lFH{$xUKF*L3G12=<^hdER-sgw3%$SjM3C}q*uFNg&V77XVpjH2T>E_!y9c~%8 zt(uqIpC>v`pp19Mz17E>m~5BBJrghDv#uFfrE}+|mAWKI0!97Yb7OkO_%g5l>2vWr z%cKfmvol7&5 z6q)H{=xqkMM$QxyZQOoy2JPzjlGiKY>iF}+@dDLUGPhScZ;{=$TgI96$&E-mv}zh7 zx4SLZO#mo3(V*%HWw!f$r*;4B<>^w9ez^N*d`Wo91}-|kVOh~1{mdIg_J+}{vzdKa zeBj5>mZdcBw*F4e@2}V$1Y3^5I?=4R7AXh6Fm`3?l9}P&?HHxTQ+1y)3S~-4KEXJ? ztxeBvTwcDzk^9^2?Y#QT1->CsvBEM5oV<*NZAC7wC{&g-dFT>B!Mn6)mOot0iQqPtX1k@b6I^fYo`%M@W5SR0{rsBJ|e5I?QO z1taDccHkr&hH~(g!8;S?;7J_A34kg5us67 z2&VBHBjRb5n2N*uYL4uP#T#T2HjiD%wLheQj<0M?2`^onDyB{XZh>7(?=;f0Yt_;Wn8OQXh=eSOpXbq!c}Nd?KEaDyf^2{t{Cg zp3@W&!|*bzNh;VHa`<+~Ny$BO5uICIS`0luWae z{(&-X9}PEACqlKxJtH`F-r#BCh-Q`Wtgjnk{`dtJ$`Ge`MHZQHS0tgxY$>OqL%EJ+ zZWcOgTq*)=i~OObA4_Rg-e@fvt^rPj7430Gzz5Ona5)2dIKA2i7FGpAsa^2w4Hdn} zK#I5kjMm-yuGf3vB-s39Q3{$0XUZg4d1RiN#D}_W@Vb+g?kDEvOf4)?xuR1m(@$uP zd|EhyI|LQgZW?1{F(42&o~=2p^zt2o21hf`pA?T~KtYNo3qFG;T*jtIT#PzB?hbAo zTwHy$wU4ztJ|a!Ir*h`_`P$X^y}Eo{b&R*#Z2ElfB1h@y3z_ryA5r4Jp6qOj z$7a8ucmF<=`|yFlQLVY)w}9?l63z}GChQ>@ucd(0mltn<96d^K({!FjjzhYJvsm;% ztFL*ayrr<(vCv+_V*@`H?og7SrMrfVc=9jl2C357T;L2Uen42n{Y5u{W6$yuXYT`6 zM76^%aE|nb$Ug$=c^GDXBJ8XxClDV*;NkX(!4E*4&dZiQSoJFLmAf zQ%+&tT1FQKXhnD}c7!}qQmsg%yK{a6Y{~vlOK81I+6nrR=7heh7%kJjZw@|QP{ey?*UIDAmo`ShM2znAp4Vu5&|t$uc8 z`U_d;iW40BpXZ}Vbw}^jnNO}fUaReR(MR?Y6$G${ufF;$gsAS`JYVnZWmFL4b#(gv z{;9jE=jZKq^|98tMELFs#F4EbTY5PvY3@?73bdM>>pvQfU3xFRI<8_2itUG`h=F1wG*EH9oNp4Zkwnje!1TWo3&Nko@qg3* zK5+ln34Cyqw&gLDK_j}?3S5n}7AIfC%59kc@FZ%BCTULUSk$UnRs`7hwY!E;(J z;NSrq#0zsa0JG5z<{rZ5SeMiELf5rsdM1mQ;fgsX>q?>PGYvF-5sJy<&0X5-q!zbG?l<_Hh zugqSMHuX;rS+j}d=IE|Nov$d#0Wi%Bj=nl?K92QmUM?>bYnRBM!z(#l9K6--J=1b!2BW4S4;l>vu2PkS9>1HF8;i3?&h{QT@cG1|HGjGB$rd% znV-qFKF-tg&gDQfhCgFR__NGDK`jQjN=HC)F|r04w(0sSV~rXc)ro+FcOXWj1$VfUU0r7M)$ue``ql!#wa`igLOI zU3h!I8n9+h^xlRB>Bdpb6_)ob`J>uAz*kHraRTQ(uDzbgQMA zY3{)<*`6vdkv%lp^7B~?X&L^JJ1?|thf|!zpiK@!0yg6+CLpJ9yWoBS>nluN`yX1y zYFEi`Cb23!+p~-yv+?IYOhG&4%#-s0(`sXUy<8;(45l3X%}#}t+LX2iH+!8~#D*thA z%S=UPVt2Tl zakl!cYOAjI!_ghp8%qA{7frEC47W}{G|P*_{q6q!!hS3aNV20yX9V7N4bidt{WmDQ zs_pkF6fwHRnJnCk%{+cXnw*n_6>uLA zNqZ!3v(uI`WLalC9;t+%u#CP9{&qXJ+o&N-8dQL&abXEkSyJ zHshf5(85?l0AJoJx1U(m8?^*1g{VFs;F9ySE0x8Q;kdZ9>uEb~ns7FoW2#CRw&VUZ zEM0PsHgg`T3Ik$nuj(I&ZjdOKS{mE)Y$yI2Xv5&ck{+;Nd#rm<-b@}f+sh~J6>s}k zCo3B5oBXNrE|w66GB^|=TR(0#DSW%gvQ`bqYrD2$W9gD5-nF}npB9QhpNLb19X0>a z(r$IgK~AMaY>q$_NQKV2NCXPWY+7K<$hO^UO1n-|{iPmxa1~U^@hQjpq^{lXwrWt1 zG5hN$V>V(flfhZYyMok<%DzdQ`i4UkBHE~=?PxaKuMYAGTK8EHVt1cVDmA^sdgmUR zK0HlMT3Jzunb6cHWGDy&2~i}53bAjI7;R1K(J7b@;4|$MC5%V3Ptm!T;@hQr625k> zuFRedzZMFKWnc!S!E|e*-&ZYpgB)wDI<`=79dp#>J)0!1KcO2Wg<*a0uvrGLWSNoH7;|Oa z>!+_R-yrsVc0H#sze$MeTvmYrr9&N6v}vxqCF)cECc}i2wpv-Nd%prNGja5fZMPT` z?;JDB-JDR&@~}?1PiE2|uIc2euKW*s@1Tnz>rK)(^VPnwrU42PwJG#A41pY1%>)O; zLwlBs0x)o7oiIf1X1s+ST$_N|yZw|yvkdkEg3qf4U|>ZO8aB|d%^cfj%Y(>k^l{B9 zIQ|5}TG#lwIR`!gY<5R$CXxWccHhol3S)SmIYb%Cn=D9qx30fShw`Z}xzkjT$J zVDVaUIe$2tBpnHoZ|cuL#~ILuBpkJ2Y6MoaRv8WbCO7czrI%MH69fG@Q4JRh?mcDf zTuv;}nNyJ3ccJ(m?UUX~OUsXVT_YkA2WJ`}#%5QLL=Lw-VovU_-0r)acJ!S)ONdJ> zDtdzGMpP+WsnEDB=WAGnIVEGL;Pl*qJ+clscnbJ25%j|sKQq_!rIs{exs#=Wh)OCB zQrO-P@3`h8r)5+KQP@OAd34{P zt{R#r<@Y8OmS%<{Eb5VzIj$LK;Wu9j_3b$wW`-zI&ezn)eaWd1FOzA55NZd)4wJS+112Ka6dP_D3G<`X)*Sh6kGSJDq5R?IBFxyC01`b&aTP^@!!V(r z#WG^IlciIt+i1UFmr~bAr_v+hL$%$$^y=`r*3bGFLe>l(7DL?O`{zkD)h z-=*N<^Xwbg$3@N|tf*qt%DW{4p(EgI(#$aL0^b16($4@P`(+Tnq#cdw)(V=QSz{wV zk9)vT8X(Y7TSIXsYo>RerHJ=Y*23bq+|o>;59sfel%C)LD2J97zQA2LS_nx|YUUc& zf2@gnBi~sa25w`;<9say045nE4 zwdF`fiE8w45_|$jg4IlC5^k-V_xqCW9=?)A2@9u56~o}~-0jC8P<8f0LT9!daS6^t zd9Vxoq9TbT7kM(yke(jdb9Xp*BLww9oGU}!wR74ph@S+-K5b`!@3l;Q-KWDbx>i5P zo8xg388P3J;?Nq-V+#S`N!(l22E8HhNA1G~D zWCnf{XW6i*x#H}$WNh?{wh)A)gst(GHBJb1=pWSUNGI#wfX~LGF58xDDJ(yy z?wMCu)hzvels82tooab;1<&E)u#E5QWjBl@fomZFL!-VKJiXgg|CD5;Rn+|8Ols4I zrKPj29p54m))H~xq|MPBhQU^fWIHTzb!VbTK~NzV-P~iQtb+LV*=rLc)FIRXPfZeo z#@txArzNp(BP(jld;*3jD-5FnMDEB=e-r!ebV0zD7VA=x;LQCsUe0(fZyd{UwWPxw zZ`?iI(cv)^$=#mP1~T#U382$>dQ;D#g`1bF`s`yG6x8#hvsyXdRae|bxqSUm*Iwz2 zZyH(pJ~IXMn}@=DJT~f?zb~SjZ|&y<^QLP=H#%q7Zz_7tK19uJX>)Px6C-uET$~i(zH{&-<2t{=_zdw0**Hx~|^>nAy@$o?I~ize<|2(OiV!UXhWTh9Wu6dmdA^M@sOiPPx% zMMi5%_Y546`g)Q0{+(Yt{pl!<4usp=v7B358{gi*`h|i?BuyP!;3Y&*hFKKi#bg?` z?NB)zQ_re-|bKEq?cSV?cKIYMZP9?yeKD-JEpf1q8qwjYd@A$ za#;HIq=zc3&2D&wLA-Z$p=I!TC@s_&NePed;7G-tymS!SzdN|!=HP-l?fHX81cu{% zmw>okm{@z{(&&971dGxr42o@@r`Zl9Dksx1@5{*O+1zg5y3iNNUBglw9nVMr$MvXn zzAcec4kjHUXD^V-bss(9M?%ZqvGzYTh-^ze3D0(*G@mL3mqQS zs^i`uVs~fX=n2&uNP;jcGp8{4rcXT6`yWQV?q4o(EdGJaMK$$;8+=b zn#ZVqH-1!$vD*e`ld##_=1fxEZy_?!WI}5U`Yum?It45T z0+cO-)U|KEAt90dUmKoB!D@4BY8`OsL@+}jjNjDRj;DKX%D^0YVP-o+!QRR6`~#>? zw*B>Y1PMn`s~vtt{s>_I=QXh zjG%{#<9|)q3tG9483BPa9{Y^<{Ndj9Ra1z=Yj2EQ0a$+CCK>w>FWvz6QKb_b~3{*P4_cO zjmEE!?+`=JkA?v-;l3PnTn4bG`3j#J;-vfv;y&N@zXb1Ph3`t}5!Glo3pwjsgIQ1PYTif(e&yIr0?(MwF=D_2g@_K1kORQ4d`8d4 z8N>vIy&gXx08*v$3xsxHGGh3NsWP+luvm)Y!UN;rc;8mZguT+q`a8;o5{K{KReFVP zwl|UtUJ|5Fwa6$2Y2{_xt+Fx?>mhcGQVw0Uv~)_cbjb>09S}OQ-T2DYFc=SP?87ily=YJ1jNasJXM#ImQ{U|6Pc9w zwi5}eonNwsS}GW=og)i69?GKhce7McTBvzH zTKT}Lt4xw_L;;J9NTl$qD=Ef@Q{Z%7^iZKtx<9HX-oFLnvv^p=#c&2U8%pZIE( z@p1#tVONGXx-?2`nA!&0;7%y2R3e+>Ul{}G%i zSqQaKfm;w0 zd2uMpgpXV!#Sz`D&zMy?DW!|b4<;t~n+Ty!KrN{9<>59=-S+ZZs(sGl$z?LR+JjS* z>*&XQP3vjNV+-{&L3k#wPvJE?vwaAQ#Eew4dLlR*HRE7xDJY_~?g|d|qI7MI<3p!K zT69dTc)whU@^ezw%)!b0Btyk;JbzHmq&930e)%0w8FEUa0GBy3VO{D|FGh3)*qX7F zknu&P$I}KInG(Ab+9G9^KU8lzd`{)erz=+&jsxKu-R8!+wdU^Ik6ddQ}l52}MoiIDD=Mqb-;iD^;?b|2)K_%{KrOaK%H8?C* zd&K}YY4k;5rq77K$WhE!Z@+sjAH0avSRX+w$vKX%QZsbB zotCIH4fp>3ls%8gbMGxO6qPVGGN#&^i!^le>T`?rV7L)e%Spa$0D9A1QwFAakzVQ_ z57Xs@sf7E+XJtL%%Gw;T@E*2Jk$kb@b=$Y@wGA23fu)Ql&&p1dyQH-!b0Ia)ATz&A zrHCeu{J9H?UM&1)O-Q+}9+c3I0SM8{<;gSv%Lhll2DYC@&5y^nQ1 z$0eQkU08m0Agw;VWtv@SE{9vWr5bN=4ntIv*+CiA^-Dy0MX4lfyxMj*S{684Zol9D znYka&&5@mE9*)4D%?Imph?r>QV<>L@USQ#-UfYf){{y6q#ppCaRM~ zn+;w;xp!%DrhQPm&%*cQ@^Dfh7+NyDeF^u2EyrB@2!T?OO%u~JeHBesV*d8FJ!~_b z+5(4#Bnux*EbG=*0K*KU@t@)`cxs4ggyG%pqrX$l?-uCR`u-{72^up3_& zbK<+so9$f{Y5GHK=6Xz-22s%y%*(d1aqG(&G|bR)RqNCep+?TOIrT5dHLzY8?+3z0 zX1*`*ZkLM)yj)+R2pzrBzQD&2a%w2*dpH7rnvuP}88su=1pKS#(ZRbR6B`IIIX*LNevSCRZ_dd8qbs zaI#apTV4kVVIRx#dPMbx@@pL!Y3^#+02yOT21Ph`{)OG|^2EN=fYHcu-WyuGNfK=v z*%U#YXjAJxdl#}1D$AZQAIKp#zphgQB_+?mk(aT4 zam{>XQvA^XdVKitNd+Z(>hCuF%q;)djhC78f0V3jT>sc>W>8z#9={F22Y9z>yauHk zKTnBFSKAS=21<`?b2H5`BFtfpE`;fZ!rS|>^{9Yz&9l)<;BL<6Z+JV2|J{5<`1}3{ z9WfLp-X0@(zFb)EDs$q|ESs?&v%Q^-*Gxm7;H=cQFFZT$GVzACQW1V)vC1qq-0 zMZBUyl8|kxmQ_)z8fKSx{HC9}=)(hbkxvtz@X|5HSp5#fMa-34lhMEz+*OBa4_lM@ z;nS`wkVu_=v>}nYp$adF?UD`hN98B#4A<@#-e9F6)~v<^H;iE8K=XnanT{vK!*bf7e(OM{Urh5M+M z3UC=LYr~VuftOE9FOA%^ZQp(4h+qQdkE zp|aF9t=*`8vE7x)8#l?APr=x=CB`bhz(pZ({&}gdY1tJfbA!cQmz{gs`gjm5P#?@5 z!cX|*&YX|lVxcSV5+wa=4$4-b>=)=XM*+t~25YPVkcd7HE@?23*D$_pNF1W202x6q zE8CI4);t3EDD2*H0tCA0vG_3fuFRV_?@U)U>OJVXHDcQJ>$T<;DJo=o_? z`y9w^>FIB+>t^ctyq!k0r(dHK=YW}g+Biv9&w1r>FAX3t_^7-5F4Io+Zb`ZscpzZv0L(jlA&hi#C@ zueQPhn}*!J&Ap838|#^K;|!f|)aIKGM{^d#j~;tjF3BHzwZW^B#(OY{Rfqb2`m-F@I&4L+MM2bCV#QpbQUBmy@6KF?0}ED3F*faZ(N2}!u1n-zmG85eJerwgk@d7_uohE zNb92vMWLY8?>+8%n>t&r|BteFj*%_w+CJO1b=s)5tex99#ACl#@ND?LGB{hGw`w{l%DD^b^? zvPd*%8~juF6ICfo$GhY8<_*Tgu~e0we(Q8cXM@hevqv-H~k;OyMe+b0(KhYm2VC!soVDmEYUzduxim#*?!7p#6Ca>XfYN`|OiKIxwk%F!>a;qtq5y z{{a_$-Hct9QqJ6caLzI-VJmg|89lK=!depaWZozXCDVwj;dHcwBs0e9e-(vkF$P=_ zr+||Gy|8Fh$}Emi|7VRV!0W(3whFOg{Q*h8}ns=7j+SX1uR@t1LW*x&&Uq5+p}k3gPi;W)-Z zEu^;r+SVZPKM7ZtxWGE(7q!a#IVVZocAme1EEWk|M#KU{ahC2rkP1P8ddOCSg-(MI zeqCgSQ`D^dovu>Q-XKusLV_wr;))N!X7CBopnx-zB)BlW;Dy%E z5f1UXe)DLyIpHe1eh0rmVik^yC{t3kUE+izQ&%MD_mT}q!UG!cc338A?`ApZ-W+e( zel8UG2^ki+do$}N!VGWXu!a>>;*g?~$hp!rFO|oG zO-0Ea5dcl5;$?e)iGN|J;e*?Jpq!HhWYBoiP|^V?%EM4)ze#@-Bi~G zP_e#PboODWtnw;Lbe}amuwU&-wXHu8?|O;a`n{svdPb3gHDDq6LU7HM)i!Td8-tcoS~dT?0L3$ zNhtDo39E!OG?@&ppa$(q^0i4LW>o7nh@8u56)%zQfX~8jTHs8|TDR@L*66`|4UE`0 zV@syI6P*Y$PYtI%$RH^4q#EeZW^*vidfUGRD{OoA_Vwg{cri&TN`Eqx4;Et)&iZnS zJ_`!26IGHr-4|%;PApqpL>C6nCEl0Jj5Jy7kU;1tPE8?M?`K5-=jwtb$0afWE?}R+ zh1tB;OI6^Fh}KT*MV?Ip$*p@AJ33A2X5{}_^g`L9f~vk9#{@G0zg^KRF&GkAsp~I< zaEvZwzWswAmH$qF)D{nLF!xDMSBW$tnhM_0ZtcUdZpRc%28d+76kNM4>#qefm3xY9 zSh}t1L=9Np0;aJt#?qV3Ty~`^JZ#=4v8$EV6^hdJl2|fSYJbkdGEO~s{X20a6wXQk zF&AGX1KNaW%7W!R4&rOx5L+~(-{a*0@beb{X4cT~pS9Wy^|8#UrHK46FH|meZ%UZi zy%A%IuM2sQb$dU$hi)SD)nmdjju*e%H@0v|TP}AIba%(HHvi z{BKf`h3UWSd&$iB{|AYsX}d9s{?p}_|5@+mE;dcm^c1YGtSjS$ zm5U7Dx1T42Q}c(DjK*y+03d^C^vtHyS=XBqJnh*#W7{=fPTr3LVj&cil4Qw==b7OJ zsL2+CESXyL6uJq%vgP7;uX4uewnyisr%_bd9}N?jmAZ`kkyRS#8?ILu$6nc{##cV_ zL0f$Uo4F0^wJojhr*NX3_N6{UAm2kdW0TlfN?!`nr*MuOA>5-6=Z`b0zTG`x}_R`%V}FbSaTd$i*B3ZmEmzA+NzjH3UzztRz|XIr2` z_;#fICGwe=J7vao8I?lp=(nY|v_SV4@(OWsS~1A|zLz|cDJ$*QA?#2B1sppPpBkv6snPKq*p|5hG3N{R_S z%L@FJDcJ4ef-u7IKGgC;`{5@?mO@d{8I(!OX?-I%dvaKqXp|*9M5R$570cvE9BDxh zVk6Xc9FQ^#>{Tby%E^X;(vg%Cyz9E#odGXlz^e0~qP5*QFKUL;5ar8Ok?re(C*I-q1^6bT1;Dwalqz~N0# zf+uh9FaQY&FHo*-1fM@%2Hz0y&Ji(g2(XkTEbPaqvlu27ix_xO0;XNu`mjsAz8}5n zyJJBWYoRCmWevCYGX-%VTQd${_OHuHbWUfyRGKuF+7-sD%HD*ucqgYU2i;#?ww|~P zJw3Fu;6aYgai7vgbr@;+sGzlMsJjv0(~fzwSf;*9cjZs&6`kWd2WmN^V$<&B)TfIA zst67bUtunoSQ2~LE6RrYtZPSUpy&DoK%YdufnHu)8=kK~80+BK{hXX-ayZ#_?r+Xi z@^5vR*<|>wzqoq9{^$-*Pc(V<7;&KZ56b2%K>6#HbK>U69;~@GS$@{AvGwo4zzf>6 z)l!g*&&+lw&SHP zw1$0eB!rz`I6@s<2Ls99w@qyNra5!DJ?4Y3>KOKEL`4e)$ITVehI!^Ts>-W%sOftM zWItWSsSPHH&^41(&xHvD$eQUh_p8s;>W{L3ntpEQw(Bs3?5ob!bTpM@eP-?zsMpna zYpOf;in4)NyL1RE2fh_GEpDnjbV5z&pQ|CyZ==s7oRLMZ*__;ALD9OfDB@f4OiaCb zc&ifV{)$1-=?#3{>(TILj-2cq$H36)0CZ4?lu|fYVT??Pbi3=<-8TCKZi({XysCp=H8Gy%Wv`Skakl53cZ#;B!ajdksG`3&oHO@rN8@f`5nS^af6aR-Ph_(T9xj;Z zRH?$&UUql>$*i*Knf|;b-*!vLEm0)>s>+0mDrfhHqi8j$z} z!Ck1XH=tXyX%YoPiar>eL^$I-F%9|{g1D3!o!!0uhNhqiVjp)fEpxs7jn#;$r@Dc* zsj0E-Qv5j=FuEa@)%#$2F<+8~Q_5%H$vR)a7>p^7&tkQjL8CWAZ>;~1c4!KwB@@be zhXKV!V0{tDI$z4l%+e&LPUd$Loo*mg>#k@fTzIRW8{$c1nCrHS)H?cgkhQPpSO|gy<|F5i76(^zIB!h}5GLn@Glt1D=;4o}qfv6X> z*UDfJ9IK7go)McQKXG!Mbc3nk92m+*tiqj&vQ3$MI8j{Q8=K{!8G3)avBCG=%((fY zz8QBK6$@muNS5j{7Wp+uEqRPk;`s%bfnK>ATwqZ^x;of-WH9ste6@ra>n_2BQpX-P z8}f!0x;xE{|QndlF1_?f`9-BEaKMA{T z3?Q62w`J)+Me2oq=e#FEzgMYFUEzRn>G`rTq`K<;<0<@mx0}QLfZC=v^!5?}KsCPx zfI!(==lU!4e-jO_TKWT}xRa_e&qojZIuQcua!L&O@*$cf7xCFZYK#62RFKA|>?jdC z#(0SZ1vbb;$zMqRO{^*&h_|Qe7~H|xXlj>-WPWbb$_MGJBijgyjj+ok(JbLWM0*(g zwqQl2O2#%&W}NVNx4@Q2^Uf*JR)0y$EZ6yuiNo4+Vn2>}UVx`=n;DRbJYs z!uMlg&5o{YhxkE4WRF=K9|8e4LlHVb;7C z;zdM`R#FsX;;mS^n6PofLJd&jYe?30e3ZCNO=M2Yvf4N9jKLsq%mg<6yrKlEVe@&2 z%kw6wnlZI`SlaO&Fp^uj$guA}>8I^^7n*YNUZ47JiX~BQuNktX19b^jcS%K=9>I#8 z!J_p!QtODQf~!sDS*{6BUa5SJ@RsV21ZroP6NBi%J2etU_@}BvQMJ<(2gBy*=s`;N zWQV1es;5AU!CR7s%R#5yA{;D3YE(6B)`XIOOon*W9gKNK5JAOngE5BglD1OE!^rj% z@gUg3X(il;v}cA(NoNPxU&5JQY0p_ct2;vJmljlfV@Lz>9TC@p@ZdoIk#IdV3JM&a zyzRr?eA)WI^7q$FdymX6a1qk|C?Nk=sd!0~>Bs=PO_}>AW`Lc1090e1f5OBUEQMA( zpH`dVQmYf;&7LqMhPWZhrCF0BO+g(E1UN-+01jzgt)OW9^PNS07S8m=`P__Pz}?lu{j z#)c|ufYsJi&#IFnYW%Y(bYa-|qKiS}dcBRcEPp%>RzmAf8%mx+y8^>#P)1jtqAx{n z%`&Dw9r#_0{MwKPL%e*YYz{G0f;oWE<=@)GE2MtnPGQm;ddoHj!~L2sgV^@~STBDO z%e8NsU+#@Q$a_1mK>rMUTI*i$U3kl1TxZ2J8r$R%m(YNETbZ55la<5XZ1YdQ818{A zZqPwL?#8K!U9WQY-TE~f`3R}nG>P#916*Y39Yove!8*~TKpf;m28CqXiT7@W2osy< z;XuxY+Vz8E1=XiknT!n3(zMOn20P!@VBhhRXRAZZhOX^u)yS&xt(o7D1%He~Gv7iz z!Y>wm18*m(Bk!tgjfDTY^$Ap?_q}nxwNps=fumrCFy93HrMcyeKI&^1JfBocg^m?*0eV}yOBY{gA6p_=%3 zKZLz=q)kV82_d_cytR-W8v$qke^RpzzaatDd@nAD>qbPHvpN_iylQ6<<{2nXMMfnO z0p+a%M|vV}g!zLS#&H-`yBS8%%h4Um<@rTN`>nJ|S(pgCXw`v%Me-5yi7=$aDSZNx zfN9Jm2nd;5slLioQE+ITDknP#@SJYAC$)h2(6hEG)?d{$Zv{eiBtH;?c zdiJK-4un3n_Z%;%8p?;R6O6J>y4m{iZkmp291m?L*okw#AE*U%w`D<-Mqp8spP#bS zc*7?AzI4Y)#BzF7teAODIfBrib<;bxoM3;+vjL$O$$-q1cm3-GGWd>JlJPiL67>4R zpQJ0XvpZ+$%FEqPH+eqvm1^_1gT}vF0h?*_lR5#qWxE?-lrgps<=ejp8KH~@-8(+b z0ySj+wjuEYBX;tHmLNRQs$K>6zv{V){Qpd0;&9|U5U|+o9j@p3qvkM2L1%$SK@#ZW zA+Kbb&e+J-et*_(*u6ddq~&&x9?tG#5%=F_2(G@|9pA3L_T^d$wi!N(T1)wJzMS5^ zqN5@+7Z6*o3HotgT&?UXh$-jq94+H-ON|C*V%~e;XL5oUD(&6|KF{CnJn(&Q_vGNVLA=b%fZSO)jD%zj?7h>_N*oWikY4Fd=g|GRa4g!5f*!H=o$&R_wNAC=ttL>BU~H``sl!& zsy9hQR%*zeQ;Jl4^I>thkd(M6qft;nR63z2wtzW-l8W;k_&XyX18RVNH85`tt_YNu z5Aj7DNAV{TmL^C-f`nRH&w^%XN9#m~E-JW28g#8U4>>Gb`9p_gB!gb*&&fPBj*$A2 zdcn1bqnU?du+kIf@1dQ_DZ^Uf&wWIjWcuz@wLz+J716ik7amN5Yt~PbJ6+!(w9}Z6E|04 zG>iErfqP6aiG2_yg)`DCOt}6|`xotntXL#8Nm|0GG#w|ws3i_eOrq!b)tnCf6W|XHw|tnd^9nchJ!j)+;J~!v zBDni5ry8q@EJkJUQ5YtnKC~=Q-mI`A8-^VteWr&1?naChSV)6K#_pxrxPf>;F`-0W z?D)kkzBSW~dU{?~s2@T9X|38o>gDz&%of3JIASNeb*@aKA->e#LwzVvsOq4|*s7uKV*lojgf`?Z!@-+kGPwI_C+ z#Y;IWgK8^Z9QJYY7))Hmt0b1p`QhYRRV(ju3!PnbS$h6|e|?=JMG#6;XLN%W&Np=N z`!~K@GE=X=>^&Xd@NGRjpKr{qjNzr5V&$H5`Fs9q`s2{ZDSa_Xp)`uic#(3T6fT#^Yy9T_Q>-V=l|-=_H&GVK zU|T2lbyr8vORN=5KQBqV7OfYt(QHnv1Ae}Q=ue0=Hk0w_Pchs?l=)=fem4R8w-s_| zILL#yjrgFy60BKtIp8EPrB=7&PCs^J*imTUG+{+7kF#Y)P$=1fv#=Z*Te&7^m}ex) z#a8GKm@)p{fGi87YVe+HV|iF~%wz_tPk$!w)=8-1bl-IH0+*!(2$LM z5@?PO?GRy^$mbGMdV#cnM;ii;Iwbm%c|CwWPCi}SLMVVX)y7gjEQJmg&UHLZ=sAG1 ziI3F=rmvKpAsE-VS{qVY*4t`Ol?7qCk+RMVGazu-r*gz2f{{%QjBq2k!kWb$kVD)t zCodHtL7xNf5L=$ajC0jgAl-?Qfq*D_tHrbj3nK$s5d~7vJ5Z_RK@g&if7wbJ9ev5^ zfCB0eKZkKyP8`#Od%XGf3@-S)`DY04?7T!ZQ$8K{rFDx2dc_>+B zoFm`>SWFk97$6E8D^;I$(nC##$9W)!J-tAI_h49`RGH6M#mm(nUgB{eFiYLH=C!F- z=-BXww!yG843( zUp>#;ET#q5=6#)GrplhvK6>;IUY*{u0j4gc=swR}S;;79XXo7SRJl4O>J0yarEaqr zU8*$V0Y=xec35qNJ3>w@*R%7X>3Uqnm8}cKeO+(P}cKT02{e z=oQnx#|5Rrdbl(Lp!LOkgrpa*o%^3#1iP(X6vf!x55l!5kXnm46*{Dl?{>t`Tx_~g z@}MR>Le!_M5HKGddf8wP`MqZT1(tRp=4e(;R+zr8 zFKtBOqa28n9oox!3)l(n=GKhmVeK>+Q#Lp>wdAhH%R=>dNTI-LQ5@f_(`59pq7czc z*ON!C)G>{xv2T2e8rsqR5Wj&{Bad^iQl7R&9H}zmZOjOxDy&{-jpTLMfOHQdD6dv? z8()9*-&F3kn~~sn`nl8@yDodlvxJ89x$;$JUBr{kpJoV`sw|v>k_7ofxN^QESoeMa zjGOZuu)$+`$}dnA>r<2erbk&h{tNJgiS>WJCGVy7PXw$D-RDPcwyvLK>}Jmc3B>Ct zI{DMiUI2NI+Gwt&n1YQqtSpnJ`)&&Lm}9j zLN_)|?AQ5+J)jpdfY7gC>+c1}grRfcM(G`ew3>Owfx^_oGj~f{vP$)|gO!Qd53|40 z_iT+z4mhQAn?8{XR>{xC{4Krr+Rr~UgCJa?{qB-Ek~9!~6mf$vrtO3W{?CQXXP)>FFWzoX?jclXohyz6fn@U`- zn(WrD1B?WMy{7PD2)COT$HsCh3MM*EfAGuOTpSd*Wg_5?1^A`OjRP8FPyhr~5-GKd z89$||pP}0(8BEVD;uwQ)u!A+AZ!ZfRe&0R#PeoBuuMXXWKt+jwz|Ip5Il@SNSsY!pe)Gmls8L3U}r!cD_#IZ!=@$V!~XG3 zAbCr!qpi0xi+09{1=`zHat@ zPQgRH+eOC=dV{-ygfIzLeL^YYKBIHqGQPruOH|@Kh00`nqCK_MR2-LkAS#bI$)b5c z3ps%=qLUmDoJL5a_5mh=oJDY4&dlgxZw=Odf*NNtE5AGRRS(f5Sp$hfQ%JkxNG-wC z{TX%a$>_q2d-mTQqr&uRuD8L0_e4}N-UHZMXNrb@bLUkdEyo+4Qo3_!cj4YxN5|>m zDX6FyScJrfMFgCFpH73!A=7(7(ghhI!2WX~`JszR$SMW9Ye69Re_u}b**v_WqgU*1 zms=EgD50)N$Y?}=Mu2Nr6jIriC~_~k!#^S%rNXt6CE~0n^~0%;8W~8G{2qh zUe{tBb6k3>f8+|6DZ%NnDsV|0kn zaw|&dQqBmjm#DH_Ke|^-#3z69WHB)?VxIY}o5C(32xZ@D#-ooG`_&-XI%i8RMo_Ho zj?b2G0BkVn>b=?J)jHbv1_|CJnZjRcuPREj1if&4xL8L}qYC@3p6~u1*xjvT-FnMX zI)lJ}G)pC+($QzSbzbAcKnq__LQD^GLZ|S@I~k3!HwpFO@xh_yka??|15CdYuT1#n zxN735(2XFP`2y9H{lR=Pu(iJp4GX ztK^8lIz~nUXz>T%ya?Z-|6^(wUjACj$)Ne8>~E(v{k~RUzzO~pi}Rd8(&xqr>Erv| zg0O;Bpru2+Lq*P|=KjI*J`-d5(ZIznAl@@_B#W9SF0rk@R_VOm>*nq@TfpnYM1*Cj zWX-#EhmQsn1%&CNz*h2gVhj&+7+c}!asX1VJ$C+YtZ45mHRvww&l=h@6}K_D-9``> zDv=(S&&Vg!>$q>KOE7zo@h+;cL=%`i=s$43+_}P6hafEM-lzy;(|nH6EsPhhD1LKp z?DP%NTAGbqzLB-WZkWpv1T|31!#)(|s?4LQ9H5!L)A5bzizBMGh{oz}H37|*=mxLR z%Y3Ro#c@gCMT`200p{qHL@X{pljCU4hHMKh-Fm7h^!xk4?lAq(FkDfM^N`r6vgmCK zgU)r5Db-_i$XZpAc8$zor~P3Y9Xy%YrcJ9=DeiyeUK1sf_;6lRz3TQx8kWNZ;V(nL zdfkK5*J25Q?jY!EeNmrEXZ9A!HCWb}2kCa<&Dyxc-jcm#u;x-9kJ2*1^{K#4$exOw zU(s~NARqKDVU54hrecEUK*m083bO&S1nXm4*!%XQgxkvKxeKbBQ0AN8I@`}Xy}mc9ppGAi1q2KYYOqsp|;BH$3*<@ zRAq>_8*yn@kqg#RrKl~ZlI4=>A7ql&vYyzoo^I6*x{AL>4o)v+cbRjm`YuxlIm)Lf zOYhMI9uARbGdb3_W|F7MV2?1wv=ufR{`6>z6E>OCwHE9Q<|vErm~dwjfn_;Qm`l2H zcgJ_{{)k!kzpt}aGOUqP2yJc#SK49PhzT{hWotZmGEAI`3Hfm)!rCx&Ef*54E_IhX zapUd<3BHbk|5KRM{+Hk4q{W<8qyzRKW#UUr~I?U{;wwvZ zmiPXHwnQBZoRh13b@W*b9KjZIh?N$mG^HG1`9_2h9;5$nvXJFxPt*S?b(iCRvnl`Q z)ZL-X?MS?KE{$3-cpv(o+AAilf&?=Xn->VSP_en`XI__Z@y?j#&c8) z&LmOoO#4}u*=mSlwkvCabZ#RV0b^-`uUalFJxSJ`_Aumi1|9UYdd*r=7*XdiPAta` z`}jc4u*f#m@(to-JrzkzRyFH=Mp#yfGvcg(j%T#hatD_oaPk^HY&ylVbs4oCk0r^K zkU2|hZQPF{vMZ8a0-QA@Ru+7?7tM1%uy`TrK;RTxHY~kwm3JPrkkn$952&YNVGS*U zfl?HT^IY~(rXvtgd8(~cSQSt*Tv7(6VvElSD7+2GGp5a?vIl!Tg@VmDRn!wQYz~la zJIhugEBLkHqOu9+Nth2mhqDq&1|H)CK61F4K_N~}X!_8YCcLy>kKsItC2zMcfK^aBJv zUZ1zHIiF6xn5>Ei{2{hI?R~!7y=F0d@u(%mX6bALW;E}8;t6Fo$INgBS_djI>DX!9 z4HSrJBVH0}F?+HFaBY@yGIS{3k6HQ+7FPJcE&Vq&40WMmRlyW>dnz){3sL_qXqruuL8; z@i31!iGz~#=(^l?czKL^%Vu~GO1H!7R(9>xHU1l1*PWLcK;@03RMxNJ@z1T$9e~cgeU3h*l&4lDZO`klxjyNT>NS~$o-elsQgci*5qI$K z55LZjV_Wxya0$LXpGxHjdOE*po#?5ng{$b$^udJsy?;IxrT^hCy6=BguItAzZY74R z{6u`4WE4M6l}ve>WF_e=X&uiZV{WlfE>p^u&E<49TP{?J@Smcte4qp&lgsL??zL*l z^xUgu`u}?BKX!f~KBT-&T7Dl-a*|{#<|+;znm888;4(YQD-SF|_)n46LbH%!ygna! zB%+ab3rZ`rVAVKygRQeZ_^XMYc|5=<+$yopAeGSr@DdtkOA(-YCjpb7%E#~)3 z);c9q6HV^vZ1f99#?9{8TxYYlKBbFk@Wxsqu_0KO$;l~d`fQ7t3hyvICTqPKh4~U{ zX0wE1*B3GQ`4LKy|5Pl)*OB6&Ul9;$;Uk)C%Gq3t?0@KI!hueQ&I8~q)?yh-2Di)n z9`qr^1w^8SpU+(9XUX&;79G6|I2gjUuxd|EdIcv6#`^jk2dkKzAP}F>c*gqXY0hB7 zQ#2ix(9>bmP}&iqeqM#+-I!)(bgj*jo;9Q_7PEgFlvpUCZbxSG5Wt5d_f_tHHN%=c zUC7QJsiOUcjV?O)>@!L8&NczVege0)Op3=TA5~B|l5Px2zhty8F{;241u(?Fn`X&EzT+SeA<IRxMojgQBgQNcL5uZL62<`y7b zs)HS$WdC)WJI@J3`8DMPzz-I$?RF0_37<>PKNoX(pyh>|5s=T!yphy$_%jlXWt#C29hPhi|!t zZT$N#(|!#8lq#!*0HB!dsAd^OZMO-H*M_}6s&%#MXV}$!KDB0PGoR^(@^#mIK!)e4 z&@y}9obCCtq-&lK>n-zZilvi_u}@~PnHsURZ*y_a(KxTuLu9h75v7*J=WcOk z17E1HCum*La6S743#;nfNB$FTU~EB{Gi-RlFLy#m53D=TG~7^6K6qn1K)&$Q9MPx6 z0_3ecm$%u>{UQmAiXJhX?9h@RiBJIkEo_+fkgq%2tGanC(DS(keh_)njX z<=8b1vzKQ;AspI~kJ=t-ii5ho_vPyNC3#RZP1_ZpSy1NtQodq92i#`I7Ks&SZAnfF ziR-$fUujtSFwiVz0R?u-L1Paj!<2)zeikZU`DQ!D`sb2cdz1l-kfp0@2i+a2#; zLEC0~)(KlhPc^g+omMkM*IsMT&4HGcM8hFuy@{G)C-&!aTflq*fI8wAWehtbh8i^! zXVx_~Lg;WGPj6o==C-zu*L}_|p>Tc?Q(G4T8oW{&@&Zj;7C3>}H~t^Sh|=o@8XZ|o z*B{T(<6(lUN782~N>{|aLGo{lE&pI7$GE{eq{u4Y$B>WFE4jq+kLQ@Dy`lQo!2esN zD|`}{XM9WPKc1so2(r<~#^DSmzn0F2y#SCg9#SN+7_m~{(%s&^Ek|14d+raep)62t zsLZ$*TtG>}O$Y3+*2g&rcfy36u-|{^Qzj*(eGomX?yvaxAt{X`y+w(Bi^XmprAnLLk79krASI}$Y?Jx{3!#HEEdN8v5U$| zKr`Y3Y4%#_sE?8B#HmHR)*3kS(E3gh$Hz=_(+Qid4+DTwK`2~2h5_AA!+(ChU{EqC zK|SjzczQ6CZXOM|;{*ea3ybpCvY!mp9{?C{y8Mq9NoE5N2ZcZigT4Sx1~L}ct2HQO zWBOq<40^%Uo#z(?*(_lDud8{0$3stl{4gcw`wFBXto=G#q6tV}yfUF#S3Sf=VCfXT zT4zbvZUq8ft;!s{1~ZbiK))?Gc@if|*|`S<3c5&~`0~W|7x-kM9}~8;MPZ6N>^j7I?4i3o|NWwAXWt_~)ke668%lY6m`JL>U z{e!A-*7cUW!+mFKpijxE41IQ1wcTSV1nQOP0WOst92ID5sK@RRznkpQ=+jCWYS-l0 zSTe4l1W23jSWip%2U4@L{tfpWMvmd2(6oy*GLO65p&d<~K>54WOjgW}qeQ5+Cc&El zysFm^T~-S5*u?2y_z65BAQaQ|r1+$0y0wx^F=dM`+@ z)1KG#RXjIZd%17ooH^ZMXR~6nQ$ZmXMnyB0|2O8y&_;Uh2x;uQ!@C3wb|+^5Vqp-A z^2J9G8f7P;^P~J9iQru-Dp4>d5$~pSkP@3<#6O9lJ{sx|9jTN+BFvI0H&GldKrn|h z=$SbteZwP;`YD|{i2XRvI%L>qg>2?li4&J&j1m9>>f8BW=HOp&G&f9lKvl{p4e}8y zXo0nSFOG74*>dsNig|Pp>s0(Av&v?{Dh%b)s9H5os&r)p%tA=sm1+*N9Kh}2Fgwo;JUJ6t!*1`gAngBwdk~i-_nG^ zro?3%&_1H0?$gN}+mKU?0)mj18#dM++AK-GJa+r)5pZmOE`9R<2(LX^EwU4m=|z5qrubyNEJ6oAMih75pxb^1_do z`?F->nxxUh%Z+^EYF#-}Y_Yp6z`L74St@*x4U^k)TA~zIB;n;kwqdQf58C_p(xV~F z?cly3pugfk*~&Hov7OfM^*9)WlJ!Pnz)%iS9I9dW?)7YfNEjyYrLtal|kF3c)$N`vSNr|t$eL?nsXL7 z+_+FK`+BZa$0-|jul2}rIKJN|^ImRYvlS=Pz;g4*hO+3@_@j;HZBXxmc>KO#1um!X z)Cn~c!god5e0#lv)!x~X*{WNIRAdR~YjyCPV|;(Df3g!-ijhg%R2cVJ9nKG}p&2UH zxxRIq|1&sFDm^t#<3Yt7pG-uzv(K81+Jm4l_>-Hh+o=Tx{^ihSoVa6Z4=$P_YH#kj zk|pw+!K*WRp-VP&OYshgvE)-}<#C+emHQI-$z-C-V{SYDRPyt*%_3ONHucZOrE2pn z>+G}^#kNPX@z`R%*#^i6o(U}mHS=zwe+RE@+H%S&@$NJjoOo01xL}e=6pyHJXop50 zni@Rn(h>~sgXG+gr!oBsn>w35G(Y`xsS^9n(0SR z{W0Xy3NB9ByXhDZ;2b$Nr}6#bQYCNOYCGvZoZ!x86a+_0;~(VX!XH2V!?T_dsZ+|{ zI4Q}~446Sqi_H}**KJCFo-die1skfJ0XFoT5#rf3rCzy;@||6$of~o$@1joRI04ui zEs6NtcbI8!aC-Ar1|!`*zv0i#YH$rAaxGHv(I^0319dmNSwxlK}+Gs(2c-s7-r2}l~QeEwlt`Veo>;??R>+kRbl@( z)yBcj@W1(j|CefGW?=uHt2Ql7+x?$*@l5TFrm@rHq4pw8gh9j=nsy#I7pfkC2}YU0 zLb!`HH8o|Tgs(Ru<(Z&*z41i*6d169w)ol2&3^lBoSOq@U!rf;=jF#m=rf!gF`5Jw z#qk7mIABjrwqKm6Wc9#{@fGcZshD^c^ZHJ!mR`km0UKWV=2l}SaVG87U5oVeNapn+ zQ0J6mX>)XDAVz=i5C1Idbt}IYmS6Cr}lFQlpv}Yx>POP_z9= zPdsb=Bi>3%NE6|7tav|W?IMuSpatM7;h;e{#0C<6SX*f7lCj^D2Mf}AcpndsTvL)R z2Rf1bU7=i4X1ili4rSDmFw?bg```$7oifP2w6&>!Vn8==Hcu!~{Vlc9hA$VK75|x< zALXE_;^eH+lSCvFF&y0FQmfDZ^M2`@#fV@_;1DB%^%s@W^oo~*X34^)8M^N$aT3EM z6G{_Prj8_CxHm9fZ_5lJ{tdZMR-m%aOblL-)h`kT}%t1!3vpV@#RVMX@el-frTp51Klt-o+NMmAM#o&fLsE7i<62WS(`6>p% z91{c3|CoxoQ3NfV#6e^{etax=e6M|ijK-K(3(5NrD+o$zU37+bRG!u-&NHr$TS&sq zvk1u7hlDwxJ{}L!v7}n^HM6m5?j6SgeVQx@66oeA?b2~=Ruc8dMNpZg?#Kz`JIB_`)d?#oELg#7+Lw`D9kY_tx9&?P@q{XGQio zKcyU99h|zfW`wrc0i)%v^}Jd3nket0v_4YuU*PNxFbRDOz__ zWR{)6YXVsq>rb?$1yF+ojg2o@g*ev1dIO3bzCIYrCNpOQ6;zseU@h^hL7qA|M04=( zm=BIaedZc;(BQHDG-u*7BtTzjxW5mLl@f=gSnzgcI6Khr7AKDl5(%j?`~g#h`6w}& zI{6@%A1RT%k`R-*wf=JOZr8&thPjb5|hXUBs3cARPUV{#i=6T zZVwF$7e$Aaq+Hx(<<{b}Mg9BOE$#G!d@yQPdPR^J%?M@NqN+9=z+`2c703DC@MJl_ZF zN-4`R@{Xgvr|>{NZf*i^N3Ggs6WCk4v(M+YxtwhgNX4df{B`VpXKcyB!yQi|nPv*W zc@7r@2E}7wdRaBDxK`)$h+D&mi|vtgNjyibN)Qo;a@nC;8x!TzrgPMeiY-3pVzf4(&jMZp|MZu3&!8=~VMjgIhjWT;Os9VRe{lAW!Ll`5o9JG) zZQHhO+qUh!Y}>Z2y=>d|UbfZieEs$9(>LDeIQK?WWQ`m#bIz#xQI$Ey1OA4arRon| zmW1pPQ|$)#TuVlO!*SVUF=>$?LBY?*J)!E3!ju>9G7p8m0=t}Wah@Q&_)`-Hw=O4K zel?K;{;QAzY|@XzQ?5G^x0Ti;zHH;hHtq2D1HQ|5N>cuw5j?Aj&G%bCY{;&v644^h z#NU#{#<80!-2@~=oHY|K-L!ZV!XxAI!S;y&PLc?o=(e#FfcIz{;AOH)4*j4&;oTpb z0Y&JR`Q3wY6A*WhqM0hf0oQX2k}F%5CWcWuf+gzxmD9FCeFpt@zm|6TbVE<#lC1Kp zL-;duD4kLyTgh$*(;K5iUCV#k7RJ+#CP;$2HaXU`Hk{zvWSNX=#ghS@<&4U^GKu+s z7475l^(^B%=PKN8(P>2-_f}{-Hn%frYcFBX9VIo%6c$%5$*KAk9e;q;7JQg&-^^6~ zZ(7oIPFUJ5cBM}^oQL+YO1OlA5IVJE3vZGdJr*Aj#0{3z2|VI2B~)!hqVSl*t4wwk z=X=^v5$}*4Z{tW(lthYh%=MwQArcB2IUY^+Q*i29kF*9a?WrDz3R4Vbr5E#535$~! z*m%W^v+5!K!_5h_8133L95(s)_vi*c?{Hzl_{SX z6cFM_B7()n60(6(PLJwPLddWib*A@>Z1bu;mSBdO%zZZ&MpY5N3#SuO>#cTYSxu!K zf|51V{2401J;7KxkW>n)+nKxDyVA6jawVubrUIR9ik|vk2n0c)(6yYH=cX!tsTEOc z6!8Q~2tqT}s}}g|B9=ky6W!!1BmZeN+#%V~Q^E3{m+qWdS(^%Jh;+Bjs@bul`7xGs z;}Kt3+2zzBt}JS!qG;*_zLdf-E19O8tBIe_9CJKxNygDtCC%ED4f!^~+&_-1y$d3t z04&8zJo+r3Oc`jAZ`La}tx_wt^F$!2D&VlTT|M??+geg3*~zFWN#772Ah;^Z2Ki2em@{%NmE zXxT>@$FS1@vIWayij7^SyU$4f3W9rI0Kob#2;jouQ+X$R>inIQH6skqC3K%Dal5wR zBwyCpGv;l&@KiTJ*ZtzoL+Wg+E-n;L{+aSQH+(a9k{HM-CrlQZo{p_{ICGK1)Zp3> zMWp}*Cy23nt3tjj95&zk_Vyni&E~aLYgB5B###@~ zL~h706F1k5wv!;HZQjL@AcfSLZy>9?DAIpAQ?PI_{@a=2|L*Y1{J*gVtUt^CLxJBR zEt%LKzof3~+Fgb*{{h0tDnfkp8?Yo`@m~Y;1mSss)O3JE!?yU$Pvo06%(`|rn!+&4 zlratA2Db)N5OFD;O$b2{B@Py_%N7U)B`Q3^u=8?4K^N55UyunW;33wrPT_CW*3kjN zoaBsxvIHfxrL{`r#lb)WwHV>*gZiss;|Cbo2QedVdZeKqpx==( z*U<^pSZ!E9YJfZgA=Jmw(H0Do8PsX=OF%r2}e^2Y&j zO)qrG_(34?S9qcn)3atmpXXuTW*E@yEZHIqxdVWKA+*K=LF#W8 z4V!(QFhwS36hwF^qGenpER8)&fEFzyH&-)*jen!Ue3LcMi|ZLTX&?)sw*CinCz3+_ zRG}1s*zAlb#r`l-lErXxC~b@kFls0- zjDL*lF|yLpXMd!@wC^4H9vl;$ANPlrPBU+Y_d^MLz0qX--rxClO#wusSTCkZbA3I% z9*59+T+LwTJ%P_g?1G{T`gQPnkm3pn(Yf31k1nTl+;0i9bWvBgKAgDk5Ut{E<|j~6 zBn_4x`wii$je3G&_qfv4tkqn)`a}9r(*nbMj$-3=jvmKZ6V^;VY1iDimta6*jJ?GU zAeGpC-uIq9E6+P`NVB>>k4@OSy1!m&UoLdNPj*&b_P6+IYi0F}N>uk8UG##eemAC4_+tU`^1RgL~^2Ls}pAz?SnJ$E*D!oOiPx|h(M1eB&!B&gPEd~Ag=JFgO0x!Adl70QBuJrF$kYnsegmpT(E|*oib=Q!0#v{5{~-uR`<&`7FwYSY_>epiD-ka_k2VlnzIH z!>5LMg~eGM3z5N)a1&0H-(Bl7 zwkA@Nyg2SJvp>8`SENX2pNc3U7G3p%MBi@Y`tShE>=m+S z>fg$VDO+Z1%$4TTWh#uR8g6W7V_GD!dS8r(Y(biVVbKz}XSOPq#qD>l_Ue!aEK1)e@5mwO1#)Nu3$&zvNrJz1#{2n)w!6GBHrnR7y+dSmbc5Ok`xC{2l$K#fH_kx%p$3( z3J`L)%|tbmF(;*JN@8F7zMD3EU~?vUBuJcl}xq#`Xzr!A+@ z0h@D-sK;*UjlPQ<1}7CTr3-!ZS1%^a?MAEm`=RO2DA3yxU21F5K<|b^Bqj}0{LlfA zR|!_SWSqTg4{05Rp}c%&<|ojy!@ya1N4I*mLufpDMi56&wgf;#RnrdV`{?8XUpN_= zxlx&)M{IkYXb)4RY9O2h6rALFx*KYo?@h_)F+VY;M*VIQP)a)^7IcPAYxbSh9R8oQISN@*1d`?uMD>1< zstaR1CxA-!?+RId6|%evBzcx>F@;o8R2RUC|1-Y?QFaEb{NL%iDp_?^GU`gClqHCX zvmld47PbF1)6^Doz!`EuUQzg1+n;IRJNGTVQak%9xT5=?!+E8wnQAFhaM)_;&Xz%z)G6Y5YtX!2I#U%Ga>bXeDA@Fq~u;+(1nE6j~5KoJSB>- zKg8us^EkUQ0Fb+wUc=R?R9F4VWhjn}sE(l+$DH4$EBE`zR=gV_Qi3|ihN%fayvz7?Ke*@1tC?pvJ--oq_Y9nKDqKVVmP}9LJc0{ znV&lP(qX9#quh?s@QFkE@p-eo>{>*<>VS9YJZl-DT_>Wh{W z$+Fr_k+Tp(G1KH8b`Ji6-j&~v%<|`!og1+DFhD)ABXI$JTJ6>LXFwo`_BTOqme;dCFI0(FZw!5=9z5}MPkNIMpRd~*b0cJa91?Yy%T8=2-BrgLMR*HCu*QSDAm9-F+M3AF z=iZY)aE%DT5@=KO#e`q$^hp~8JLe|`XUmgW_`@Qzo`07rSDxx=!N^llz`nZp5QL)2 z&bnL7c@pW1`ZY1W^bsmbEa})9RQvSIQt>Q$+!Y0@TBv0(CdRz?jifBIGAEs@^^^9dWH$Xrf&pcl;i7X~hGQir}FZ+Us>0OB0 z<>i?6i3GFL0vAM%(8rw-Oj|P*e*b;+65Oi82@?-(MO6@OsOA?|>!hG8wI}}N!F0)R zlR2^6*B7;{U)#i>lqj;#wUu}RYGxIs4=s9QG!GK=F32wdlN*n=iyRBTj2*}x+IjT3 zKH!a5AYT5x5$kk0vcPKyI3`M__t?8j!3hl3N$7BG`3?b!%Rk4a>X7~F zlV4n4RFY!%k_tBl7GM))f6Fj7#Y$xhs;5t)&Y;0;d zmo;8b%*_D|dWP9XzUNw{xVM^HMjIbyRvQA{NKvIq&lT zv*@4Z#qv^x35(j0fUFgR18%(;BfV|yD*NA3d14CgH9A;_^X_G`Sv5p6%Av9<>q0p= z(H`6*;uK#b*XuI0XRjAw)mH4G2isJa!T!h2x6H_m+2~Zcn2kDrj7Sk(b$I-v>`u5r zs+LQ?E#fBmewAcuq|irAbWJky5j0xg4F@W}~n7G2uJ$U!CwTF<1_o`2+~ z!%QDQvpOD^=BfolaoSYsy&U?YK80;*Yk5Uo=DX|i9BOd(PpRJCR5F+H?{RVERF#4CKD*tHm6~)kBgHR zY?nE6xyF`>v>iDkJHt;hh~T>zkh(lttrnbq;-#T`A*fk^<|)-QmzjU?ZgbO;EDSaWkpq#UcYSIi8dR~ZV} zUh!L?wey^)>>3E4lV{nsIv|zVUDDJ%6_X?Gl50F@HeW;a{dONqrB(tu(${vP?|H;Rpimzm>m=~k9Q4d7 zzqMP$^5A#>HVduRnm7V%wk8vFIWE0nJk4g^UEoy|y%Hu-iJ4=3U;?Y-Z!i0a@XR08 zgx`w+1%E+*#q=qfK81`ZicNVMnEi?=v7LvNn`#dAZq?N$O>Gn`+r+iEwNQd4PTnQ@IAo>v2s#5(DOw`!C*4u4*R)Od9roODi) ztQQ47dwvk{su?QU^0R9!x<#ulShRQt0^P1+c$c03oy8*jEdqw!$rwjI zoMuJgAgAh3;?k9Z7JQP1_Uc_~V|3whVxvo-VmB(tz~PeF=jE)O)c@;5i7Pa;=;0S*q0n=E5x{&FJ6#9jcrT}Q$3Z!{VTty2s~c@ z!@Lj;QGZ->CQ8oF%_%Ei??(?WyP0o{1M(op*&O^hZk@spyQ&gUN}p-g(|ai}BgOy5 zeNJC=>Phr@0(^JmG$W1H3+brhl;+ZaW00^(HEjjW9~6^BUyb!w2Ie5O&Sa&D?kord z0T1d(^8gj9`H?=E@`&fTccJ-~5}X_tuZ3HR@miGy+wy5R!Fs!y#x&KSi)5v8?HXLi zh&qO8brd_fV-S|sqG#EYN(9b>%8^s9$1rn8unJ8sTVOQMrV`c4bpFI>YKxOSGD~`< zq8mK7oix+n_V9dYL?HR4z)}2#feOp9zy}@I)N;?0eZSqLl-EaQPCkm4c09_dWuo1L z5|nNCqD!M8PJJiJ&Tr!ZrVRi^SVvhiBJ^v)bEGSSjkEH_^*xoS*n8Xds|CXCCU)&a zmx(P;-=@y$R>iaG+yIq5FNHCfmy%PQd{dMZ92P5ojY;`F_ z^dT8!_4@ra5<)*wpRyE}g=$01r|4ESf{k92ADmzQesUeNS&nxr4gzG(i+2ML{61VD zg0)1%!!h^i=dre0mdH-T#IQ#;$*rj02)Y!(fMc3wuSX(;rDsX&4$=XRpqT)TCW4KOJc@LJ^;v2JSUDsqr+Fc5Qn0Sc=jQhE`=PA7F=O@vsq)=W&iBn%1@jyYZ; zykdz$=z(aQ{?1r5Lroh>4d;{=dx`(8+d!M9qqHh`Urz>B+QTg-$@bR&CUlJG>QX*Y z;#g5TcHXhedfN?>qt>jV^I1_5>v^t499gltL;*VGA;)$@ynZF7UuA<1_;ea3?nffHV@WT#9G1L2?|3>UdJ%nkh5H{S%kEqrJatUZ z6Q|CToOJa`hDlbXbim7F9xtqx*oKOp{(YP8S^h%i%x8AAkG`3`6oiBAo&`6~!{lnt zcd2l;%*OnmHwJz@K3WlcR%&;R-uoxg_n;+u!Q%$)wemosR^e=*`PgG-F=2}M6Z{`` zo}t?(tWZRn1XlN(`Ayr3>FoW-h_&AzVK*#Jr?MCyO-IofQw3^3v=f172-&X3J3wV<`bjIwBCXS5U7zXm!ZUJ)n-#1qvbfR$vaChXKHSM5q}`yyg5mvy-+l|{! z0iGY)p%)U&_c-2wnx4+yw;fobNWm;f-U17zO)G3^NfEZQO59G;&KEj z(nyeZJ;Kzqk_tH~m;!Nzd)dTXHn&>1OD06(MQF&7OTZ=s`o&sTQW!QU4h40Au6v1Q z(H9CVW!316Kaql)aA5k_Q5Cj>m8dAYG)GwR zjWydr)So1nGHo?mJ}qs_k*eMZ^Uy`UK4iCx!rnzpkmh+vQE=6ya|Zo5Dx#8O=pUH5 zEpw>3=_6U;$XC!QXK!v?S!NPbMu=oFH_%k~7qP10D>W==g zI!iiw*!gKp8%Hl}8)?`mR;o0Xb!XjZ5+44ar=OodaBpeB05iiha*b@8N*phhq% zc{so&i($?Czz0VuZ>pmNtc}A46tM?&^8gO&=ya*$!Uy+7uNdaOx#B>|v4qi0KtxlJ zrqRryzcq-a08K?Rhh1DLbu17_pg*X#e{!YJ zQ}c|_oIMW3MLTv-GQJ4aL0WvngZ-kZ0XKxV~1V0zA;D%WS@wIle0xG@}r#F zb=S4K!o!N*#)!_srhxd`svz=i1UC|~Bt5anF;jE2thW@dxvk_tp2=jJ3&T6N;}&IR zDPEKYKxJG6limt+5cEx`K&8>Qwfy87tGaSF1Bh{zQQNcKf;)3-qGO58&ajE?~M5rv+S)q@s)P{q-2u+*wsO;y)@;+(@2 z{#Q5ed*r$AT?U>#!m;i3V?plP&xANM06Uud;emf8kFAZHN0Ew=ZvSP0sPS4zV~gG~ zEBk8(s;i^R<8Oy22?S9>l$frEJ7tHiN2?UYdGhm$yVhviooFSbozB-WT8plGq>3)y zJu9^xgJw;G-YI7TQ~uGoR-E=@r2Y3o(y~U1Z?M`=8?W>8*;=LeC5h(XJKloi0*TuqV?_@| zPKqCGH|6ZbBmpH*84TvvxkIr;JQ?4A1tW=iInU193lu^pUVpvevK?K;A@C7j7Xj3 z(<26I#Q649sQboYzkr{G3`LeD{f84jb^JvwGZPFGV!kTHp9Beg5$E(nD=i(S_0SF z_xj90g9jr>)yR8VF718sQW}Q8N%x;RO!ktXpM<4?9YG zqGO7S5Htqd5@BlQq|2s0Qo&mYYss^Xvf&mZ}t9|J(WQb#!cd4exgH#)Lr&}zR~5l8`v%!^UD(z`w7 zlEe*Sx<|m;BmK#n zDHsbI3V%_X^Zr-~&Bd#^eo}^jfCP!PQ`fR0Fea`wtnkxAD9NJxnu^RYy4B%-?1s9h z6BoTJT>JSsqZuwA`br)Jff?`W{&8e?YTW8jM4I{YwJcG}4;!PDF}$=} z6KxWauj$k;OGTvA;T`#)&mp$2(yA5--}>w+f%SE?PyZj49;$E~2-wQE9~e6J4-6gC z`03 z?<)6rM0XouZRKk}y0+kXD53WCU9k=1)G_wCC=hU+H#e7>$JL58o$ASx$sZNiRHd#0!cx0JE z^KD;Ww*s-qM!VZcGaWpM&AG}S@u~b02yMkzco{R&#u%4lzD>6pjnZGjm|)*Hr$FIh zwq7m_2ZYj*B3ZbKL6FR<1NruIk$KdzcaUGdVSE4<>lg_d{MFD;23BcXs2W`^{_4T6 zf?<59!baKy?1Bl_B*-y=TH719GKl>Vl1QkXG~1DE52wk4bJqLCoNTTu(yb;8E*vI8 z4NqW%(~1)gUj$*3(b4e4V!^4m0W|``?`WEwd6(CZh=@ZJorD|BFfAC{`iv)$I|rg3 z+IsoL-nRz{A;Nj@p)swps})8hrL@65K^?v-#__Ip}m3(E63fDhhHyuK(v5LfUIdZmT!l!6VY5T zC3ft@;<$OJk>~JIjk~7jdBatzfV_8!gUD#ha zVQkU-=Yh`Tw&Vd$dXsLaUwk$Oi*L=(L3c?y4?-RaV|cg>M#?JqJKAa;0OdRh%57PC z*z&9W4n$4DMPtEGcOf4~%{HPz8nxW!dp$M7T1lr9pt$qWD-SoKoR^=l$Qbxm`qy-a z!}@$gP94V~WVqJ;yOkiep^oYXQ4j%2Gvn7@v$gPJeGNjsP1l*H5vj2PG)1~=e+(fS zfc6|o&=NU!A%Fj`REk_~_*7s|LW#?5za<=fpJfpQw79Dd&GWO8F~UWL`_KbUeg)zs zeR>rw8$2FISP%cLeYvH3vb6&_Ui&^9#$(0=?hmtUS9iR{pJlu1J3H8)9=Kv16Y@(@ z6*rzhd!YEZWE0&TNkrINVS99L5ni* zPYk`k89L@nkiLO(p8@P08h=DYnDR#(D5RU)-8+y?0G^@AE#ZmBX@VXKPl2E}jSu~d z*;zcu07Z0+xBB`IU7>aaK%>Ywq&rI0fwF#ur|<&XsF!vtx9q;JXA2UjEJh3Dazk%e ze4vNY&!E)8hQh`DX+|}MgZ3|@@QAyx$@YW~g}2*pqDOXnzNSzhhb@FBZQ4H#oTV|> zk&_?_D_1Iz$2%%MffAH`J`|h{I|lv$v+nIJ(AOz_LC!00u2zw76UjehwRDs{;9Xdlgv^=(J~q)p2cb z;}zF5qO!CjYT_*0rzYACo=MGup7)7eVO8yzdhE0R9*M6l-=M}m!EuPYXBNmbqIQo@ zrMtrp`ZQVR**n^ zSeZrLF9y7;2s+mdlg^#&+r>XvIFJ<)GK~;BIgpZem}5B-@QwlV&$UU;WKzSOmLP~* zF{fkX=*%{9`?p$I)H>JaoJZ4mQk$rq-b=W_mR?#^$2Dj}72Ef@LsNZJTH1WH4Mi1` zkT_xpP6F_)btSVX6Cl|h%i$6uSpw>@%)-FK`+dLR=`$mwVY4K~76nSJMF^2yPV#YG zq?G80acRA%gqv|$J(AKxO9SCsu*$tq%`T;Sfy&eAJR)GB-UuG%>J&bYD-7rGn0z%Hc^d5@bO{tSH0LTR z*CHgbkst)v!9{8XLWEl2;mel0eujVgeKU9^>B=;L@aF*pMgFQ6QT^KZ%8|Ua?yxoh z8ZL9g0DPY=|eRSkrjd)yM42LaAJ=N(+y}_--&=@$G(9+^haEH+ZOF!$I6MwoF7~X;^*gCmH zOISxRh?l9mX!oSvb5x4*$N6UNltqH10;MbmqK51`LXTgiY`^fI(QUF}!HBBaoYa0o zIKqCvoKrJF4Bv}R%dAm42P2>zHYFpjfBa_u38TQk!T29n*s9f~5;s^8yJu>5ZOSR3 z`U2(Dj&`>i*v1SR&!tshWnqzn>*M5$Qi`~lzInI)f{I9vyI(lSEP(_2gLb^1*LG4A z#>Pi|`4GK6=eDx_lvGTL5DgNf#ai7I3?1`}!W*~|I4KG?Y#s={RwTz>LfO8%eBON@ z-!J8SV`YVP4I+n$fy{5zK|UP?~(W_SA1wTk+8j z`aHw3CKXKXg2|@NX`&TKvuK$&FKb|acZ{1@v)P68U9n9`mfjL|*}n@JJ-6Ug&biP` zZFQF9&%L@zcNZz66d}DoeQ-4~{uq1IiHrzeT0a!|DCu$(tO;TqTWfx|T3IG!D76ABglS{e zBts-3)T9ClF{_Q`ip(f)yINmf?(2YrX5T&lseVLa#Ep5BEWVA=ReLyS1_7I0NSAD? zwQPNG z>d8^_gkqcWtSQJ{31e}84J#Co9>-U+pWMtzO2-C+6F}~%bRV0GUMi_?eD9YZcKa$? zr+rMn^4U^3fh?EEw>a3MjCT+-yRd-N7BsaM%P><2ohA_W@Y})RYk0hJiy>fhBLQkP zRG-!kCWl>6(b@2KIP|tRfl!|W1=pG5GmNJWuPDZguw3}WVzBCzd>O;=4K+R;nb zoNcD_{su{PHjg)0^}i4X8n|mNel5M2X3-59xj4aJP0z(_?=C?7Tie zk?W1;0mt(+abvylz%(g*pN<@fG@YOS2KXTT?|3N>I%a`z$XfqB|H=ZFVs;bT1T{l4x2Gf4QtdQRxfV}sj*34VsS-?thUVQlqqM!Uj7u0cPb z7+x2yGQNgH$(fi2VB(@Nwd4dnJw?y9;DmW{8dH>`)(Q$cH4y&4`k^yRN%A|U(rJ92 zAL;xqn1uRe5W83KyB4dDjVAYpb~VC7RGtjnfa3&TmY!9akmSyJp`G0uiFK(!6~B@f zl|NLlDCxX9CfPeD29#R-TZG5T8H+Nal6?(s1TvZSaO!Ceh>$_OB8zTgQ5Gky6C*Rd z<{3RGc6FiV*VR}=$ETa0#=vFw%$dp;3*Ye@VggIqljT3bnQWR{xw(@`ZoU$GAcz1X ziF5}guta@8hyf$1ZSW;aFR)VX%0q3@v6s}+qFDX-GqBCk0u2aO3qej*Dqp~)55Xxf z_ZV*s$h_n8#W#ZUP16#!-|*4cfKnkd8y(?l);7xBs|BZm9h$4?Va9U9@CrC>W4&O3 zgSe-EEd-bdJlsIC^kt#DvSm%*ycYPVgp_;<_ zDoElO<3#&Hs>~K8m;U+Pj^IKdk0COIKmBs|_bMKjGRJGvu7flU%s|WwTdOFb<;6G` zf6NFx^$|5VCI(*AR*mG4Vs|Nc2cm5%ev2z#nR@JLjo54Y;1>{(cYGyM?77{8P2M$v zoH*nR*`1qt>^RHFHf`i;`PoaRYY7*>nk%KSZ1D85fCAROJ`n_uH#sM!iT3r$xEQ%^$0dRxz$peS59-~>4l9dK{u!m~Js)7CO-~`~b_YvE z=4V~q1~=NUW8Kwz3lG)Uh6g19$n$g>1I)5paagnbQmwn;_iUTm$AVJT)8Mfm504YH zTsu>E+s$ndog6|2jR@P!@dcwSP@AnGa4$X$Bpw zoCCXm?H9JcZi+cEndK^*{$2*`(WM;1YgINt{RPJI1sHAfpz#lX>r5OR|6V)!zf*2l z{x{`@`A01NKP;{cY3=+_ZeVtKNkB(WykXzF5*ZG zShce!iN5r3w1&_IXJu}c2@Y51i)3c*Y0w=S!;mze+Cq^mII9U!Tx@E>1$Pbrlqr@f zkO$A7IkSZp_;hFi4i^r?Bp6n}ih=B(ZDZ&f(Y9qWFq;m<17rnPD7aHDpnJh;BfXs% zyCru%D+lILk!itOjA;l!L~BQ_2bR5<|I+Yun{$Rtj)<&pm3PWiH!qV$S`$JshuVw? zT9+onw<;UIAkOfAPmagzmHwo4&XK{&VhEVWC88Xg$@EkB0_3C_#MaojH|3NlSsw7*Bd#sHQZT(V*L1D=jaYUXRDi)y4g@N3UjJ?>sYeBeZg$GIodW<&lqf^W*vKX6kYa zZpF(#BmuNmsm@+@b3d9nDTGooF)B=vVKCjYJU=}wH47vvByJ+Agf4~Mzx8ty6Dn}e`ftlQ!1)L~C<&^f zrS%Gaf@}e5qzuJ8BKP*6D>wsx^*%@1QyUuY;d<$sPz#&EPe7Oc!YxQ%u%BiMcO2|? z2})k2=pAB#I-Rms9Xo=K-vlg07Fnb!-OCc94XzLaNkXU6hq8aC|5cBpouo?#Ui4&6 zkq#hSUtQ<3LxC>_0`Qm;&l>-#4ZB`oLszd5CE2nU^O&G2b$qsfAj(Fy2{23zQ#R`M znKl^(Qsx5XMh6bmT~!Z@UQw@yEj%3LuZaqOtkzH(NDB@0QO|)#&-qfRi!IuBLvzVA zKwh^Zsb`2W<8#_Sp5E`acT?;4O~wpqsf9L}&xYss^?Di3#v=v>rE^=rOfPG-Z9J|% zwsF9wx4F&z5~r&!SYF&d1~oyVWzVj&##-8Z1li_DmR(D(0h^I(=Bkit>dLT9)Hyz( zQeWAk{UeD!ANnkQpL}#GZF-;Sz6i>6ZTwpqh=XU~FD%`)?M_cei0r`L(LLJU&D+~b z=*?4o`XBG-gU6*kE%3d!O{1NYY}*e(5B+Uycg+mPqq^d=E7>q+Fggt5c&Gi-gqVpf$TI(js3X*PtSEykJCPZn=VERY;o6ew!@ZQ#U6b4{FKFgTc| z;LU7!|64FMWy+A1DZ_x(YA$QU8kM@?prTmf$HHA(p=Arx zTv~~>*foA?R@rI})`%t}0hX(vCAGwqnU>1jk|iUWWr?T}caEPGCu3cVb%K&a1>O}` zjiNqCb;8TSQdH??qb^t@+SEvfz;@JGIM60LZR>(CGoM2ExMCzvy$U+bEmMgpLlL81 zO)u6|OJ)hzsgwv)++_lH7MZ2UbhRmo3tGJ+;D)CG|(jqJUw?*-n216s)wT_*jK1h#E9#^NVK>Gk;>{%? z2Gmgf0gQCY%|H-hntdy^L*(n7$B3e3)3rP*d-2NX*XSF;5aLW}~FAAACQXSYRu~0ATd#AuhvXGg= z3m&e#C?x$ZY=?{9ph$N^Q1DwCPiG%{7a~bsW%oV47drKDYpz+V=Lq_#4;P?h+xqvK z%JG*je}!fR)$cJ-g>=d+NV}pZ5TLw2T>?i9t=*>ZAMZ1|j~wra^<8K1Eg)KTVMm=l zkiM4_KEi!7zL?eWHJ3iGu6?y|8wH`SOp8ZkcQWQy%rW+(oJ;#LhA+49#GjzJ4$?!V z_20kt>dda50)4+gzxj96Y0vD$iC81au1j(Czwk8?IDG%ZW|5hJnd#s7+5bzalab{= zZ?tLtn?;cM;0-OM2;RJnqOm_s%h)d;anxXHC)1|cA*wNnbpG~ z@qF(*=;L(y409NtumT6MP1%l;Wz}8qEX~=CMMQrBm;TsoQnDlH9;~4%Uuao z6*lL~Hh9jeog|6tRUSPw&TFi?m7b=r=qa%xJ>DP{f>GESx%q$p2W9UZoN3f=3&ysS zj&0kv)v=wtv2EMx*tYF-?7Xo$wmY2uZr!tn%*sG5lDjTO^}-Yn`-xXDFX9?rh&LbY@0lUsF%wt)gpHe7r8o7`bBimi?% znEdl{4cBW5d8OJpIYsxUWA7k(d|8G~&x8F*CC6F)7vO6+A#DAiWJY?iynfYjh>VHr zb3MAwJr(yotW~~2&dWER^5>HHUoI5-no7{SIX(EJ zEm2DHT_9nRp@};~v|%rjt#A6}SA)yxiEF_gr1Ge4UcwWz*uwzr} zS>@P{Ey}OanS7PSuOJh(c`AjxU=pf=gnW=U`cQPUSQiRNB6paxd@Mul&_ctRRGDMI ziA6u>bB0OM&w267w5P};`z1$*{o##luO#__tPF&&cnymA}L(vNpfP~B__?pUkXCHy_gR| zu8o@fofOM8!kk3@VtCM=R5gh06tU6aJD8_2T9kT)BXs00%95UiZDwxM6>o2fsRFtx@I%g0~^0z7TDRetVpV;b{;VC(CGuNv>KH-~`)p|r~ z!qE526$&k(YegLes%9(!k@GbV; zB3kS;3OmU!d4L53jduxWGoe$R+j;3(JcEI9W|rTcL_Og@Cd2HOAD%p#tjvy|CUhTE zEIE=V%4@~*D)kc~QVqv8Cf}pkESKsTpqD@6{zhPOClVyEj9f0XliL`D70k*hJ zGY$#qq`Q!(*kmNH3KwNO@^+jrYq%!PC$}S^bv!Za5bZi~tY_(0g=-TdIV045r4 zhB*FJZqfK-+}AMsRxP8NpK*NPdQd$Q4=cum8kB)wLA3{p7rSDG@%|(TEe;W-O zAK<$s!Bl&`=(&$sp)d_+D6(<>_%m0H3wrwnl2m^U&_$pzGDb_XX8AA((aCF5;2~N* z$w+bf5YkX&l#Bd5K&kuQXBL+y!(ufat7Ll3^GIIOC>jiweu#g%%e9A*Q(|8?Kq-02 z?k9adH32a?uk}4g(Fe{bf~Y0%OLjyct-v!}b|hYQL`fMo+M`n3mw=W8=!o|dz%Vag z4&87fDUceQc@^>LE5?VitmX|e3oM7e8+{}WCw!InX2w^EI~BP+1s(la2%U7=op9)F zsM|gv$kjkH6pq3Z1cgG6GIr=tT3Dc}Hg)Jk)XT_MFaVuDg%m&N;Reg2e3AkViW4*{ zguw%{g=6^ZMtRp79^vAG{CoKrlqeq9{s&PEw{DKvm|i~e)&}a`MbPiFe>l3IT5t*kbpH+b??=L z_`Ok%kM-37TY3VW7Tk-{aIw3_% z_0be;4~s_cFkHjwlok8;+U~clnwbxyEo2Pimp=~Ihl!UzH@V)=5Hx+R7<-4nzS(+N z+kf7YPZEx%&N4^bI6`NA`9B=4H0M+c)xpfik)hGR{WJ8oL}TStXY?Oh!L9|wGMn(m z@05E0NdF0vWQShd9uLmf=yLDkP(j`Ql_&zK$fKTbV>U)lvO-Oigr7&j{7ZgMS~P

    0HJ~%?O;{$zfKxm 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


    a{LY)8OQ*yOVf&U49H&w@QKnHWLLDI2wc- z%pk2AA563Fr9JFl8f>_Ne*LKV4Zy21SHU0&2>uY)!P*%!C z9+x7&D!uDdXnXYT?tm#M)MKLUb&1^)zoVZ-f`NFs57qC9**RVE;hOu) z9~hg>%v~pYL!R3gGm2h7tD=>%2AX-IhLD<#b|!@Uyibk&8;Dr~%&(1z-g!_+Z@@XH}R7;Go2+{yTns@y?IjiQ2byY$@U>v0*8HgrmDu@rMx3z#rotbXnnn%0Uv$vHilcoes3BGwD+!bC*(~l`({08@vt|idlIy9qv{P%f;8CMBkszC*Gxh7g z@5GxY(>Tjqx*v!z7RYLC1hk(ZKun#4gK8jBm_ft9D$Vo^Gb8`n zF<%qSr?2i_meM&<`Mn*O@qB7seRkY2(!6};H31Qjt`D#~dKnXxa*_iQEhr71GF^8# z7n=j_5H{piOFQ}Q?ttBPw-Lz-oAau3>OGt`%_+gm3biJ-VbDlX6=ic#8Pu&({aA6! z)E?3B>)V>}_9?m0Zrgady>ZXu z2gwXkvi{`4UUT=X!Z`_lxsDhvKhFv!Aev9YIaaGQEDQc1W5elUrFlu1H2=v2k6dA3 zX%>hNykRkOOM7!mM)PmZM;Nf$@NEJAxvL|h+TVdJt3G75GVglLUtxoR9s$7qn>_Wp z4$ys4&Hfu%XaY*{f)7bohH=$*hDr@kA0|%>Y;ML@N-=|qCXFgESgTz1+?{nu$g%3J z*xn$IfBI0_>btd;b5}P$%_Lnqp5y=kOp~k|P$_=jm(G+-dD?Ct!dP$$?)f}jSQrkU zDq&{0W=Rt=-#PHLN`Y9wgOvO}8cxMI27{m52}QKFYO=lOxbf^kQR6HpKz=&_Q459N ztYGx+to{7Wm+pm=WR=-d@by(e9gdc=>fSkFN@J#tpUS61bb+@Jv>PHDSxBCDdLu;k z6$zhpaV+H@xJ}1EjacIS*qyqV=sc{|jkQlDf7@iUtJhDdZm5l&%c8g0g3Xl&A=t!Mn|4FQID3c@b zC1^yt8E3jIuFJT7Vj3#J(6~NaIbYmAqy*rX8s)aZpdxC*xa#Q*Hp14XCEdN_4jDb$ zBusz(dB%C`$o#8Rdl;r0Gv5WzsQ1_TGscZWfv=V$Tq0#;O?^yu9*|m4cp2IKjuY&Z zfQ2wNpmr7eJ>9BprNTt+>DSD#!Rz22sYbA^Bcl zPLEbM$OdfZO3d@XL-lsN9)NjRzMjhnN*j5(XSXRk%Bl^Oe#<7+XW6fMue46S3`BCL zJ1u*-WAQPfd{Hlf;}hrmah7K`o&L8}|9HaQRW+pv5umfb{ZvCK4Y%ADb;sE1g)}tU9%}voW>`_Yr>keA7%(d_ zbw$d0=pX9fD1rf{m@e{Yz*Y^BD%)J+H;CUKxrm)=vj%F3TE!VaYDvNgryse{u{_Xm zpS(HTy__9Cq7CST4fuhtFE)q>L~y{fVNeaj-ArqrXTKc;gQ`ud%Op+fA50jF6kqYs z+_OFVBBy_XX7A9gACyZt%NpAMfr&o8DlZ!+?j|QwQor1Q_38uaZX}As?DgL42&c&U zp+wUMNb}}&^1Z!Yoa7JzIsT4ujRy+*fy%hwU!3flUJTNIZS{u+jkVX+GsZys|ApD% zeB{OX^bW-Cx~2S9th}j4*^_ot>_JG1{*+79mlAkiyX8vlxP#jhfPlX^c$=fAtI46O zPov#*vb)+6L!lDNKe!oH*-5I|sq9s%4?v;ff+&EQvyL;0074_hulR$l6G?#MY_k|t zK!PO-6&DIIOPh{*%eZJE{4h`f=`6V;g9BzupfIxXlLz0mrO*HpRF}}_reRb7kwQt_ zTZc!WO<76DzB`8)WYLYTfN9*eWPEs);EAJ^4)MC z?w!)6S^PK>`8%2(Z;UNZeCI~q(+4|i`iFgBu=0K9qx4pQsW;E*l}-=UA#$n;Py}em zeL|?ot7{2m-MVOP7*sS!{-jLuedc6=HIhtU7*}a&6-?#_p_WyOdOJCE;dCSfwtU95 z)0v(+asl*UuS+MjFTm-{H5q|}D^RRiSh;OIvAu}VlZxuK7B*%pVd*3%h-pN4fbd0u zdzgbFg)e>q?{U_o$P6L$!jed6jlUG}W{*Qc@t3WJJu&_YIT}gC{q8V+^$D|zolT3UOK9cRIuagsGfD-8YfN=kDe3r`p7IB(JztkO4oR% zt~s>!@%C6xB6=adjm;0_IPdQL!~mNtYsPM8T20@IW!pQDPS6o z*$6?rfGL}uve-Kl2DvaM9&i`jls=sK_ZK&;q9!IFS_bYs`$)e~=yn$LI`cbYojUfU z#lAOy-Aya1AG;V#2)K;A4WxSj2)R9wa35?ldu>*I4I-{~p+xeEB4|~m0QvdS6YnV6 z6iGpGPhjm|OWg%z(hrM!hGotsJ4n%KG8|@kR)@`Hk-J6d`Btq>7E*?@TOl0UE!fPyX=ydpU{vG8U&4bno20&us?^N6k<35}s}6oEzP zy&a5qPY_>ao2vEwj0u1@&{WtyjB^>X!Xln$K$$KfQ1})0i)cBBeHJdIVaLoh(1UpyTNYtu-XX35 zijXaX--`HZR4K!#TJdYv&KN772k&+4_P4Y+$+rNy0L#6lCyH2mR@f^=g-00Ii#KYo z@RC}&l4Yr}RrqWB;h|w|CH_(0!~jw4jB&o?n+SGeq}z+?sR^0zJqHMir#RL@G9a(T zfD+%2*S1bbmar{i(@C>gU#&F5QVUUz2szK*GHn8AS`-hXF*53Rzg576ham=3WW-o% zw1x)(SgdP$Rj2v6)xYbS-x&i*lz9iv_N-U)c5rZD4r@b@qkSz;h*?cYDgB<|?8TQ-8;pU<0H`_{@gda?M@Y=EjF2}PK-1?Tr2UY#wts&N6 zPRzOFT);^eQ4f(-6WZqdzCX$?R#OK25Gfrt7o2G6sqo`D*a)>Ilpo+P2tc4-L5qQF z8}*q`G^3U#z&p`;`L&X=IQ3XF##+{8NBd{7I4c)k!#nh5Mbu1Y0|FMQvdrG zX6sFxoz`A*z}u=~Bd3JPa1=}HRC`$0XEH#Bl}am>4Hd)fYNM5an7)%sS>u3omc&co zOAIK0Sr_nOGp#4D=%j!WVmx?A^A~pF4eEA?WHgoLkK`EgNRVWmRpSV9d}01H@~jU* zdmYf;PL)ee3G%Vl=TlUA6M0^K4>`&&dr|kx~T^JIAaVC5xo{{K)MyPDw=+m5B44 zGCEcU^)FXLE;Ae1DPHd5`BCOvUPzT2=?Pg1(ucHA7sZ5~Si8%|h;c3{9k@eob7o>h z5q^01&xDB&7{^&$0>8!P&EJRLf7-b(Q%9vyU_o#AmrlUkzk$OBPg?(7Mex&g`j?8} zf9v7Vv(x`i508oMKaQ3d)cWz_HzWRd@q34lg2bj`nS^>EVh3!sazP_k;H_YJ*rO3J zU<>=={{h@!+h~uw7?{)TU3t|LfO+R6&e1rMAO3BKyFdV(y*Z9pRsWxb^3Zn38_wL9y3h! z4iR|u{;8i&H=b3#Hk%JhK7j&1Y$mzI(>Q6-FJu=|V?bEwye9_Jq0lN}`Q~2hChY}qb_{H+Q(sLQ9$GR6svlrI-0PeAx zCIGa`m_h4F`ukd$$%i!4Mrvf2&_x>4Co0Dz{2^tTl-T{FK;h6#6V223na-GHF6rmW zkcnW-8Tsz^1l55xy|J zW<`MuZg7C>F-5K4p_VjVfs|X2Is(uk=^qFgeXg(gRa3S%1BUXM{GfLSKZxz73DWt4 zHu93Mk-<7!I@}}w&YfPY*4J;Ie}5elUUs#2bhL4-cfP&MPkMf>zmNOmTy}N8-P{j` zuz}_kWnO>Py`Nu&usQK&UV3-9x+HAL)1>We*(P47mr9vb&~?yTpx$_;Wb;V1tC>F^ zmoNXU+@Gg!`*O<|A75vTN=Mq`Y^Uos(>L48{RU;2q;X{n+&e`Z1c2wj%i{%iLbmC^ zYY0)ctS^qa3{!j1ZMc&y5l0*kn;U47Zw!}Tx6?kos|fxq?RmQ1ACJrT9_+gTi~y#v zzp*i=>VgwE(0$c=H9V|eof>&w(!`|DDA1tg@SWfomozVl|NWQFYs6+3}PY8qq$ zx2aD`Q|M|bZ1d;3uD*|!+#wzO1I&R(pTO_)yGh5aLYk|5EIw!NWJY3l2Q}Po&MHw9 z5e`fJEgZ-G2A`t*RHf76_s$q6(WTvlqd>cS*EgPX5cb<*DNFhj}H}s2ni{bfAm`cQ!V7mo| z*(`MJEom;&-{;+vLL9!|`o1W)5A!nY&e&Ju?$Dh&CYBC(oL7$*Hr1<(+n3{D{87JY zB847tyEBGFqMm%So*{k)}6C5@U(>@m>h8>D8aiS+k zkX$eDQWyrW5qU+Pc-e!%p_EXycp2_}TgmdD)vQYs`~9 z>(iYosDp^@{3|V-@aR# z*qYX|X`Z}FgNo#`=-;IujOiL!I|vZKzi%=AJP3hqRqK)jUx>^HJkXpKoO3pnc^m_g zcsqx{sWMgjn(_w{`GmWlVKlo@Cko38byvQWHa$tqir3i^E9NGX4c=#4s2u);feG#; z4)Ez>Do_p2UAKYc+6bqVnH;)G2`@DB?o#JrsNl>;T+v^?^l_CbMCLF605L#sKA_W| z_TZ2Y^}PvBb_<7r!Id6gY1&3N7XuE_7B+&Fzl z--fwx^PHdrJMbs}?hQ?7=n(6uKh&u#RP+g~l1o5+-0VZm#7fq#vSd#)O;FM#xYJZw zvCns+-eB*lu^)sEkg;Lk?5OpzKRDR@96hCCpQ&w|)E#&IGguhJ zoz21?VSYc~&9|%H%eGt~7^H+C9@tA5!GS>Xknj*u+icKk)^3Zo&EvPo>ba#JuZ)CrtIsV2qoGO?8B6j83u8owX=2@wm z62&POrJ!-Nnr+*F`KhFJut1(twbGX(+XM!C}xy8gdc_afITQlLX+Rd$4vS1lgA2`}rnF zty|>6bZ;vXh9X+K$+hA1t#6=4Qn`8EA(AOo@xBP`m6EfPa+#u9$BhHvrfP|n0Gr%v zLJ$B*c){>6WLbRyQR1E62q99Nt+z!>+>*7|2qq-z8eQ1#J-JmIN1eKJ8P-~s(nqC|+Y4nFLaNc*IN!3Ut;_kw0l@ap>A z>AB8WuspAr*+N!sj1ntnoj;*0z6FPt1pHMQSApSd7CDCyHfSEFb!M!71J5uZ#f=4Y zb+as`Chf)MTNP4N-P}n^Jal(dW_-7?065^E4|JXF;~QP$R8v_js*yA_o){EJ{T|e?Kg?q`EiiXAy=;%wvS`O)U@p48-PvO&2jfW?%^+68MuFBh5>s8Yg%R7P@h%!;LKQQGQ zorOD3BFCjBGA@)8>vw~yifmzWnzAii0!H~7bX@WhTm5ME#w@WvOh1f`|!X` z0OK#TZO^9e%&urfrn*UdZ>V@sPX1K)1%gE9WPnFbZ@uxu z!Hf)VeD@xoyK%R_rU;vV-Tdfm@&l2CFBRDrO6`n0!Y9?)_Z zfr09FoOPeu8;eaNvaF%uF%^=C7jA3y1B?H_95yq_+~04q7Ajq_3f)!M?6v6wZZy67 zHhZJYrh?}v`~l0S!I{LKIU^}FBpSTOARfFd*eJS@i`2IkH(fp>ogpFoUA!Szk>X3z zQN$P3J6q(O-%#_fl9?(a3Jls^3^A>KmvK1d-SDNwzqJBd>0pMjX%z8=W#dcpDzknx zeL~4@qy8*cG3}=R!YQw<%*5NxDx4mxiVE z`E5IbOt6*=F(aI?2@n>>z?Qpg%gSIsxpsjX1kFB1?t3KR&@T1T(LJFp)@A&JYKOiQ z+WS;-T0LeTWO|JeXSR4oKfR00#6@N>pyX5nRajt>v7y&wGr`jm@&DUUt}RNMGab~p z`ub(SBJ(a8kG06%Jl-_JKo}nt+{c*xVe5XQ@Tp)WARkcAKmrBLmLKaeavwM`0chDgQ~Y0p|mklFuP)Y za=zS!_2@eFw}EukxY(JrL@fpt3_5{oO3h2XN#cc71lvkzjtvTChb*;EOtXb^dV6#y zCRZ){3bQ(2|F|SyJ^ZgYrrHvE5kVV$Sp8SrC=nBI>}!TW^X8S-VI+ROiOgR1rWr^J zNb*y7ZkE(@2U5C>{N=``e^b_JOY4doDw$&Ry}%1dSs?WwU|+;uAZKX&@nYOxZ%Dv- zz1MY0y+A3XN-HWoNCodEEJrCkOaVS zo?N#8er+!eCJO-9>-NczoJ+gfIt-n8`13A;LoykW{f^!a08)a|)A=-7e+gvySDSt?PsEXf=eOPG$eXLvZAIW?w!xAL)-Qn z##6-S4TU)`-b^VdYTDBLVBCMR9O`GesEPYlx1=f^Zk1?)<;m5~HhjH09SOIP1xo&B zl=^9Q35L8PwyhmdlBFFbv!|L`1~?67B(*0bQ?fq>rtqGRKDfo&H#boV^1SVl z?_13xNd19-nN9h2Yy~9xbM<>IX{4%vF zt7y4>W_I&THZ3fNIA5BO$Hv2>lyhEB}?DRg3D|F5%J*P2pJ zhphik?^1FiB{7VycZnsO1j&r8E!Vv%Jd+ZwW+C;8{2w93!+YNE4_9CUNWtWh)T8yQ zmDEX+20&)4uYpy73b$K@+tVt1+rPSc&=ToX?2oCNRc`p@ ztw8T|cqBxzUEs@BmlAo1cwl$gUcI_s$B~&XFTKJ24HWwUeF=aMmgZ~3J-E!n7!f{s zMV0a(_{^h1H6`&7g(N&aShw2)WzNq=3zR7sGObUx>o-k1ne#BUwE?60JQp-=Ai6!N zXQng$>qekKXj^5C#j;OAIjSxj#Ufc-$Dzs2K2Tp-Xq`5iREtPVB;N&l7x2L*c;A2` zeA0@dqR@tdn4j{JfdqnsggWnp`#pCUFA=jwwX)qTYnFMdxtd;2ihDxE!Z}bin}{Wi z_(eS>)J^zFe~{`|RG}lWvf|`pVdf+mS-ov0v`qZx4#t58`nbwZUMa@yUfK#H2(x#l zmS^)oSK)t{Zv$|;^|-EAWk2kq#SY;*4K<9MHJb8xTP<`5R3QI>xU_d@riak95il%P zX$?xJEvv0;1+H>zC{h$6e@1=I$0}WX%UTt-hS%iwqTxsVE0B*Ex$#y@ecQsgG#+Ni z1Ie!sk;U=Mae80LEijv8X?q*a|@Ahg3lU4_A#^!awQya|A-SGYU}>OAFycx z2gYiJ<@T=YfjRP!=8p$Z#s{K91Rn)77VcwxM1V#S!b2Z45U@Gp0kZQK`wT}Wly=^= z?mG^SHkI(zTYocwtWt;dnii_AuCJFtQOu+Uc^6ICZ$Zs zxq_C?15?Dif-=M#ILQDECq=8$5%@{Y5iw|wb7}%wj*S{l(8U%6cv=E@YDPy8*)R4b zo6nPiuMJMZdztoSi6F{zB(YgIao@gP5vHMY6N!rAa~gqNG&yAC5Wx3&HUM!X8#5vL z9UNS3|1Korw4@GGjT&lwG;Nxrv5hJv(>_HoqiU8JfQa?z>yVbV0W#_{PL>UOL%oal`GTu|fr$*wDg(ybVei z;msNllA>-4=TuK$w>>CcXBcBVIM3~G+!?ECa!ilHV4&>$g~w{KeW&NE#w1e_rccga&|za-!%C?b&_; zxS)?$ZAvN$Buj`;!l!{u5Y+6+B(YNiPT=~9C&a@aQ9Sy%;L^P414aQ>P;R+Gv8f|r z1vgnQw0~zYIYEw?t*7V~*LN9}o^?}S=g%##Q^L=McOM6q&WpvCB|6Bj-?Nh3?crHv z&Pi%b4mVxbvZQRYxRi@ODBQek(Kx9^oLs;|E}nBL8aW~j3eA{}wFSfP6&NXtvUBX- z?X7df9--+5n_hzJ?$C@ZUxRCY0e)oxo>846+d}IfQ38FXa-pY&9x1?*$Wm}gOOjw4QSkLN9mKEl~3N#9IBL@*#Q{wz*HsMZ?Fn6aNdBd z+)_UA=@4}fg`|>Y?Lj>o3TUnB3Tdm1GMmVfTF^06nh27>w{xz;M%oQYPvOW$0p?6^ zYZ9%MauJK1*#y6k(JsFzxF$4G#y0Wk%?Ni^?T3M6xp(CjW1yLJo@K3dT;3`66>B>; z;I~oF41DwOkCp-EDb&wxhO3!MWbYj)p&pjJN{ zVr~Mn9J3^Uw8S0GQnVNi+y9xYaegm1y8Z)Fk8oI`@{S}eT~1lhaGt$Gg@BlcnF5&e zY#N4qvv{mh=WlGi@+4)@bm{dXr2LKjjM%o$DK&v%?0oUOYNZl>(;l+516EB@M&lIt6X>}e zK(0F`C26FU9bvKDCqMhCfs4*c>-zipB(IgiV;7e$E`iDNr`+ZwQM2*-&2y8bSM_}7HOV5u0vynw%7cduJLYm6kx#>+cz}+aSJUPL zAExNZ1!2f~kUvqMI#!z-dIK@GUVoRLmnEZ7ym{1}pRC=Q62>A@blqe7VvhMT{ApPW|R+Wr0ZK@Au)Ku8D=9H)j{`KWTc z9n=SY%nORYr-r?mF83iY9y$;f=!Eg@ejimaPs7RlKB3JYq2qhUD}tF59BB9xEsseQ zE5JY`t~_R(94{(=<)Y&v;RwMM?Q}9YT;ZL;*!_!FH@heYb4m;50MQihN4$JN4Owc zJzSnTx`wx9)Y1n1eFr&_oI|{l@M6D{%LZ5yV z`W`R#Gm4~?;BEItWUicYh;?xGCO@9lLF1IZKPmLUI|6Y=_odo9#32ZfrX!h=}9{ysLY*PK?e#%I7(qlEI z?DsqHx-6z3T9)dR?ac%{zT@d(OBf9_F<=%vf~M)3A1%%P&KLA_plKG?kRNn-i$}8U zrVZ)aY?D2DQ3n{ffS|vu>|>h6FZq*QPv;!1nQP;uLPK3&hwG zK3zo0Nx@NsT!U~m)p#;`a}F~mM$zig5w5ls7OWET@$fS9G(x}>p;n-IG!%0|i&?5woXcJ%?d`-BKC zJ||;R)U>?#gpF&Uhrv?o@YLmE@etVRrf;o5HFaBX2g*tYlQW}>T1&8^JzpWV35-33~B(KqRvlJZg;MQ^kmz?m1~Cq0M`6cQ9gQL4&NWE)?x1eTqU! ze4VjImDi!expQfzxQo?y1}fH~CpPq!sol8Di$VkRvOD2fJhm25$jnhXCNUEdU^Wvq#e_(-xalm&P=A_wAW(Y49WC=+pGCJ95O@AJx%~_Q% zuZlKP<&sDXIAd6>g#;V1Y)vO{q1QOQ--z?d_wO^Fw%9qywwtq5W^JTv7wp_i(6mSa z&X*PZ4RW&g&aX)fn)|avZVRym#hBsx87W%NXT-hWs+jzhx#9<3$-HUp<(jJ2a}#R} zUBpqM)mk?Ll&qj#&&p*~<=z{J5TzSv8pH*ZHipeqkjR?GH0{%KR1i^%0K@7Ya6DpI zP*r}m+Ckkk_ETTq9PR392d?G&BkcP19b<+zNJCFJdTV%zsW^Bk?7>2wCN00IO>eex zL;ST^@CA;e;E%r{1lFeeaadSy?YIljyMsUJ?Y-27sxf#~Gm)$I-S;4DXL$$k*>NC$ zkxzZmTJRd)aY!nXOofuh=WI(#NV zUtr$tzhg=jtKf9*0&)i_QJG3g|0_{+tA%#7&hqB#3_&~K=X%oz+b8-d!^UF7^yH{b zv!%0!2Bcj<`(bdL@4>HdnOBbi%o`9ucM<<7Wg)kjkaAb=@)gsv%bapF2ub@zL(S&7Vc* z0FsbCd9&&g%-Fl^451Cv&1cDNXFBlDqp#b?XGo{p8eXB&kc*i&OCa8Ug?h4sS3b(W z(wA8qD|6;zHQr_YV&5P6)(Kgnx*(mAptLT09hh<4Gn8MBK@|;-X-82P~L#H~^Qmyqw=3HVKUe z`8;7Qw`kZHvahhJ>CIe(kF^`CD4%SROo&_e(SGDHxU9l_bzx}JqS73A(OBPCIFG-A zp6FIICBV3#YC1iv7ISVg#Lq=hDE|onH!)*{X&bpl6v26*R!uNdI$$^j;r^gTExoC}AW_oTXE4_;UmoT+6n9CqJ_?6M+a>H{ zyZN7cD*$vvhdNlBK>Bo3JK`H3)NQ+iX(g5{$KV)vF5J^Mqu!Dul2#wsmDK0Y6F-Ox zDcqq0uW!WE&T-brp`xc&6N@*RTvXA$JN57-Cv`qM|NM57=-rV(G|rxnHKvO%?DIUW zCzcM*hH*$Czb(nwQ3t{lROqUK+-`%$ktvA@m4zFQfZoxA}ANO z2$ewe#LWgiVcuPwH{w0RfOOWB3dOnB*iD%AWu&`HN=!G7Wi0yi4>Bk#(7VZVdozeQ zPwI~DW610Kmpq1M2mjixfA2wg?gtpb7Uc0C)3mJrn=tbKR=62h=>KcH+_c8-uU-Mc z_eHOuOyGhtwOCvds}2yi1@&?;vP9!09xZ@qzFuC#k%Ys-|NEZnJCSDH0k>>35D3+W z6YsX?6$K$Et z^5|b>2ecp-+4pA3)Z`1hp~p&^%-5FqtT9QWY$iU60n_UacSjG+Z`T_zIMi3YzZ+36)mnZKBGw~kVb2z$^eF9#JGJomgz3ouQg5hgS(BWJh#_n->i{e<}QalGrcqs>@QgLl>Pf z)emThJJRqrKWvB_KDOH071i467{UxxQTv*LYLl#|1|@?4{Cn1KNC8M;{}^n)W&F#N zmX^p(I57$$c1O>zZK$bpRK}0$5^CcBW@q)od0j74`)5mZX<5WkZzxhOpsD=`h_+Bf z)C9>O0?&Tj{q<1S;QVB#i#swHK}i{YhDe0wp1h7|H$=ziFE>D7R~3^256iP<_4jU# zV;O_>cU50SZtY1qGCM)!9 z;KN9LXX>QTfX3`GR=*5)2F%s+5 zs05F`)q7#*boBPr3S;po@{0rmQJW2wQ{+^UiZavu08Q;o3uxjnJ2g^l{YS`Pp~UT9 zCGA46Cv|6}?mv&tSr-knT<9SpddN;^y4k!rp-@Te-qih^5z zlq75J9i(y28VXE}#vnkOiWn$l)+^Aq+hZZ>c_|4-683}?Cp*Y{7YNLO>S2)O5kwV0 zY>1q)0;^yqz1HY&tA|dOx?4dDFQhfatr=J*8*X&~r#DT{nRD)Cq|7ghq`+}b+Wm1GS(tg5t#!paZ6$Hn>6@gGP;Wu}#-nNM#oi{fs143N8peD1Gt{G2I ziLaV15WSUnZzMaCPvz5m_T@>oz##-YDK*w6*tS_ejiT^r)rkSQ^Rah1SQzgi2T(IIg$iCV3}&-vVt9UX@7$yl+eMf~Y7i_mWMGfk)f z9@?Z=tHCDgxgncM<_oaMbkm~kigrIqCC0PC!eZCQELY3UWq}P#ugChze8k?Dbk+G*}56;+#rbF*CJy&stEdZ|SS`)K|n95~<^_wRHs1?rV zaAqs7xDovH8xo-TuU5u!)Kz6-m;n|QZwRTc3d@_=XuH|I9FLEyve@m?5p?>${T<=T zKgT{=u#?9*9LarDYEjhs-R-xw%Mls|wFWJP^7HB#m5%Sza&> z!}}b#(a0m#LOm`PN~%`}Va2a+f|qL+%)H?1C#Gy3LyNc~((%g6*ub*;Dc%Is?mGP( z0hpqRfGF^6eS_rdoNs^a{w_K!CVlH+2Ey$T;*;arpz*$eZ#h>1{^Ku$?LQ@rn3*{K zTZ!ASriRm&D4g$V?Vc99M%DIJkeKDy-ji*^xKO34DkXgEw4E*GVUN3)< zM@;$nnYc~+#GkBff_LCMz%#@bTke}L`}?@dsMTGm8xm?rku#m!E^&7SBqmI$ThB|M zJ3k%B>#V2EQid=W-_{Nkg{$7$DbkM^sb-1IYHHp2vy^d}4Gd3&=*8*XvxO!X)vcu} zsrZ(ng59>0pC)38So>ZVsdj`k?S7sq2vz)AzmC_{r(t|_!1AeXe`RH9vV>L+ZSU8y zZkp(yBL~u?wa(^7xZDLmWCe(q_LuJiKJ+b{jLny)7%{frCL}v*41d9)#BgwkP$VFK z1zi-!(x7kzfo3+7c~cRymi+pY@4vM0&T7kGfFFq|I)|bQ*wFiRX&+D^c;7*Y9U3?p zgb1Y3-~nYQ<){+EfTJm~>2nK70%HgK?#=hEb@v|)VB{EKF47dQbn&VsZ(}LIBzv9* zM3DYOeK3^9+U)YI=I$G~<6yt0k64He{Lt=9{O12m1IIBlajG0J&Cy5!wSiO3WfGkh zXO;jMfJlPLsT=~!h}B+Hj_bMwmUVLQPPiU;wJqt-vQoO0O`a?kS2%1dc4OVnji;2E zeiNv94Y)H+iW(X=6E%b!cDlVDj7R}X)DoUCjoTDLAlV`cj10kx>;P7x28?R$7nxsm zT+C}!im6L>8%?%+&2A|criZ0#3ujEz(6vJJwei$|W`2cPHCBo>>DDg&cBLczux!=i z-&SBnnuvaUsY7vdKx(gvCv7&lWmZY>SY)EO%riU(e&VUQ=m|X#&zLP z(aH}-_-n;SQ_SzEQ{|z~$LWVj;Iy0jpiJZB4joH1uQ{-=*FG9*O~_Dohh6CKF8L_m z#xgS7M+H(oYY6fuAZ*bEVkwPYIPc>!-N}8&LnsT0#v$I@pYvKl)oH3BK!^n{W6A{7 zIJ(f^2BENrhUZ}abU`)g{RKKxoN_al+N6|rrwEva?Rq3`VWhlgS_LT%@uF2t{LoWf zsj!(%DhbKjMAcGSd~~%lw_aRF>}CC`)>A{o|6o9I7PD$76hPHN+O(--C?bh*u-f$5 zn0cb0QYsr>;knxCDGeqp(I>)z8qtfK74gub1|TRP3y7VX9yHGol9xAXN}PjUMsbe> z_7J`2c5cy0F`H9Uv_pM$Mb~7P*7tA8uvM*_p0#$NFuBsZJ!cB=i^3=G+^X5xJMz(# zhZjw(EA4laE%c{W*m6E+AC?46wtCsgpQ@!j$hgv)J@qV5Ku9_S36e90JdY!{ zJ4-GxXru%xlvqB}gK9RCF4_>&x}LLU5(}rFUxf#G~|RP+YUkDsiJlSN#G=H3B%I3ekEy1|dXI`RlWrYCUrKt9M@!2iF00s0Gn#r{~0tniQ)j@h%@fe~+#9G!ntQaf}A@4(jQ$bXP z5TScPGz&CZH4aHj^z9(=U6mp}^luzfLqP9fAh|Y~Z9z%o+!^RQb@I@7I{T@t>>+e7 z>r_SavW*Hi9WDrSxT|yOu1ftw2Yg27PXwneBy@y*UCSMv07~o38q10TH`(cq z2#T|d@Y8?MwP3PFD9yH~P_Rd{P4whq@SD9o%Nw{|Sp5ThRGVP2|Ay;T6WjYV6M@0v%P!zew~`D}xA3 zImb^0Bx}nAaF56d!7}jMA;V6|=`-Y!urT@#UoQ9A^aNEp6b&)OK$sm>yvp0gODWID752q#5eR@Q;M;u4=$Fe z5RVZMKfQ4nXqs~}qz305(_Sla=1AV8WvhKpHSa`OIscpEYBI}IxF8)SWX|!An~qXt zDp}lA0kTv2&yxFsLn_YK8j%Lazsl^K5)+NCmXDoc0^NeDq8hJAc4IhG%X@KsS!FyrruZZW^u0}e7iZgu$%^zrYKPxe9$|8*DiTf+n zo!A#=7ap{2+gXJ_Cb4%GxR9GT%+9+(emE+JKDfQEvn(wkF0;>H=bMWjTrGC*rGNnp zdOAt;RBf^xQ6PNShj&}CfDm98-DzBWkU-|bCXe9{N&UUMf?SVX@{7{Z-V(B&K=g=l zWD`L;RU6FlFSl8#vSlWLoI~|W=jQQ9$bXBTxf}VOrk&2;ynty6vZ9Qo`S$naTyjDB zvRkW;mQJp4kG36nmBo);8|W4u-ajVS@F>LVQtR5C**nk4Ha)#BzI7750#vW3)@?^f zlma|ujX0CQT||bSDh`JTP7vVd3I6^R=m8fadRPq{j71ST0pB2t$9>}g7$W--p*{yM z$!@mVEPKDav-F|8wYIjdvDL*^PZKEjpWB_4RJGj~mlPn93&0+4u11l}G1zMg>_3$E zdZ>Rsz>%oWRpI|BFp;ZxV|MD@EL(tytU#vtE=tt$0jG(sW!x$3A-XNW46z;Sg!FoZY~t z=wgXCEjwtkparqL@ESWqr)EoZ9&z~jm^zmIG6HsaC6_M*W4Xn2CRR}fBegG9GJBOW z)-v-{5C*i~08lh{AN4~*MzddT8EhAz3`<56aWHSA?7}b{)<%L>(Kb%LAu8cyI5MiR zG5n%%CA1n0-O1XCs$Jbt3s8>Sz&8>rXOBTz6ZNc|M`R>T#MI)Izlm^~g=-vV(dR8z)A zk-SY9*1cbetgDHz6XlYdu%kF(Q(jxLky$bADhxJBN@cSndHVYSYS<*zBjm!-T2=`I zu5jywk>gbbc>K!ILX~O`RC)QXfgNC)6xLVO6dK*TeTcg@etOgq8x4GWny8Y>luk*) zxrFt))L%i#7D-L0?shQ1DjlB<491FHAzqP#nHo{aC?o8m(lH1Wc4cV`mtC9204-$L z(&-h5SP7yz0I|(`Z>=ldCVkU!4mw0!CTR}mGaVbQ-XZbe!^dHIw zErq=uQRX$seoN;GgK@%j&tzt%01|;cl+F0_TbEp92>jnfIaxWmQnDYPM#sgRhli(UW6#g$x0ddo z$*KoExl;U9^j}(;9B`qmJL?xSPx=jS$@7V^XOm~Wi=0H_squ~kUTO)FH;WnSGeUrc z+tztS7GCH1>?N5M+qToL?GEqmUT5vfY3{ESGUsDI4EYlqB6KOL-BB^Gj;lV3`(Vj| z`CyWtnKBoV5TUG#pwDqe*PsFg#-z)D83qL=Zo4Q#+owNOE84WWBp><;sLUNzcmg9Z zZWze$9^$3dqyoizvS3a^1aBUv3r)8W8_S%+-Ab_h%KQ#%(UIOr1$ZB_KqACDiqanY z%1LERqC=R;qd2E74{HsD zUXQP)U0oO$cTD~PMu;HJmxJAgE9R|EgP>b z8*_TFOPJ&}?2>zkYv-9RQiV7_&UY`L&<<3^8-Z)WbpEIU60RlGON$ItH?p`$yo(ML zCs+%53x{-u4Tg`6%=d!KthOn`jD@OV-y8)!&0=>={wStt^6Xl#qEq>~_INC3Lj?jH z?pS&~Uo`V=c6t1iP1oA}yzbe#;d6U@a=q~!*u0D8@g4Ag#`NHvI4002r^Mw_e?(4s zi8tc6XGfC|p+2dj2-9^1PI_J)l!xmUf*X~`*3ugq<3m+4A3lOwV`(9vJ}}5BJv1?= z1}e)Bi62oB0ivc$0K~1QHGsgvPkkT`)Z{4@5L-PHkg5}dV`4O)5G@bgXXiQz#Dnk& znGmXu2c>`{Vy{f^cxCVlNm9`(JB!7@G5IsAlJ&oH(nBh^DEA}NydiDoa+V^eyBOyP zsbn@HK|pBLLInRw(3i_Nqy`*3gjP%hlGhi*^7&(JU&A{F#0;)9hI)qB#>5KWFOYuH z0Id@1VhX4fHy9yQq|4e6$^*h@v28kVQny2QLC>k12=|OF+5(SX5V59I`8HvGV<0i! zEI3BY_H~%|0a-9?+z-| zcD~>JVe8r8+3PaP+k8FPn5Razs6(KUW5-qly@^JTZM$Mer(4b1$!qso$F}QfP>>;_ojA`t0rQ8epOs#Xh5F-qQ#e+}>$BcXIOXtNdPmBZl%G{vQ58{+#fb z@T`y~pabTDxnyFW)~^HRhPn0sJ7|nHD>9_}2vcB}AOmb~!_^|-0*EqFi9~IzP&=^? zV?HU-$NQ`@{8*S5e zJ?}5yd^i9y5y(>$ekb|+IdFzGH@tW48nPV4y;81b*8n2b1IAb~Bblv~u#9QFNTL>0 z`U@yS{|!66B#Mdhq{u5<1S5^B$E`V9fr}A(b{)O_&i=;kfN4|CgY{}%_Zf$jXXKJt zZjJv)4GJ`j_y8C`zlbK~Xm_6f6{*OQY^jci5mfD8q$K|M^C}k}6j|E#NSt zH7b=PNxQ=}vtu?V4wcb*W_v4enN^tnAB<_w$?Ml3%#Ucae$0yO4NVg-W*8C@D_LK_ z%!C$0srVK0AVr{Z?!Y(-GSa*7YANxU*sDqU0#BiXmPppkZg`P33pGprp1>WH2aqgC z)x-pk2Aw2;tojdO?azB78FOdrX82f>p~fP>2djurfJ``(e8oDutCnOId?<{v-%SJQ z@`2Mq5WD-Ib!6dPjLjG(yVh34=fa2M!~qwN+E$e*S41lflb>_xB|ukGb#!Uz8Y*41 zsiy5TBTdyhe9Cz~+6g|I>ssByNfVNeX!3a@I=BBl4(A-zB1uT&=dA13;m#G{Kx{;0 z)E!B2zxIlv)i+6GW{rJeGcD8robH9a4>5sAQr2{`akJH#3g->kgXpruw~OZ1=FP>g zt*>3@?5Qe>Ngga?yn@AL_X1!Tj!SXDWrM0k#DNMQYZf6xV2gfg*$I_1eu&{sfJy-X7Srk&jyEXzy=bYPH|i4&UFwhL9D?8gTQf zUOgmd(vaE+xO$s(4qiPzy=J{ln-2JLOkL56CGtk4FN43rQP1duDeQdGWt zK#i2O8fapnJ*0ORV`+gJ$Q2_^a=JW0D<5lOu%MJb90TzwT~9jChwed1^=VRuEBzl{ zeJS03DZYn^*@;#;??okP|`@ z@!Pf$pznXfHBCY7m#LpeO(3GGrEI?+b0>ZPB+DxE{!^IE!SWv%VT_Dy|Fx=gTT>!# zQxvV|*B9O9PqfNk9|nDx>3>;n zCK+^gXuG9Mm5)bL zOlYrswtt$5-5a254JFOe2U(^F7U@>`bbb7Mo<>mtx7Z0I3IP&`4U`%6bba0flVC>t zr0ESs$>MBR82A6j%SoFqF;1;ld%urO6l85UT+(zm{?GbA(9T{MA>?`r=$7Jf$b*BQ z(uosQ;6i`(iu)Jd30v*Hu_%W;>UYiM$JVSUidAR!!QEu@qj*OUJ~a=Cp$LUBKi^u? zJpHg;!mq&T6-^4^lKJ}y>jxeTT$miobwLV179h~uNjqP?kX~X zFg%5j!wBhanG^IOFSQo3JC>Q&AAmv)$R&YzaZ}ZJYK(U? z$-8t6mV<^=!}tNulv&$S7`dM7e|UX8%uS+!OE75b{xB$tfyzv}G5`4K#h{L!ylGu$ z>4ob$#k+rz)EE4=v*zgblV~t=l^#@4d=G%%0q8TrtLij!lDnPW%~X1Cn?&gXB|(nb zhOU?Yn2wKQta>)fq5xr?V5r6{dqk{k7K!loQW%0mtdp~gHO1|v7= zbwQM7|H<@B_`91#;~KcINhK64F5765j>eDZ1_FKK+FlCiXT%~HwIjpG`mcOnOlP&8 z_UFUQi;m5^Mxo}38(-bjIi`vuft4e&0Wv>dgey3fotwwP%AEp&TCA7FWP@qDKm!S6 zt~yo*?LIt-2pC9eq6@?$9+(phVtIY##s^udKaoJ)bh*0P%_z4U5hor&xC1LLaV8Ss zZFtpNMs5N=GcO26+m|IARC<29j-?pfJvV#%LZfUv_lw6>`988XJ!k%$9hxJy`%fc4 zj>ot3BPz1vS(~=cJV$NWxST4Bx@MV*1DU*%>>vB(M3Bp8BLdEkBz0}qo`@9$dJi?MO?a#I>N3mkmu;;|k5u)UZP`k4Dzyc-JW}3%y zsb2K}F?pp0Q88dEIJtBs+J?44soiQZ+= zv2EM7ZQIym+qP}nwrBR(<{sO&`R2TLU+%fdFE=NvvyxuvPWNBkwd$*{$_664z@|ax zgHQb5Q2I#$a$;?xYnoa2^u0~jqglnUwo69U3{F`ke8hk+88|UmA(w6`a%CE-bJJh_?{4)6iUu)H9<|-25pBSvPVIi#OMQeQm3`>=^6gk-{d|`9X zupJ57wv{|ZKeq>RRyPV@zpJa;I4pU|SNsKcqAc)71yc06rRDL?xF8i@rmahqCS+>1 zb+=}3UO}-No6Cs^hjQ({b7R7yZ@U&AfRqyt-z{$0 ztlCVoVXFVAR{dM!_-(gYL@48rK%Y1$2(65FHu2iw9iJO4&>5V@N)^r13Fi*aCl!=u zYU^7(5TzK_N~$M&NL$--QteBY_bJ5uGRU;IAIotLdzd-7q*;?SPre~0q0wIr)UIzWn$zSt%c52%0j2IiGxB>dpTZDh)!bNCAh{(=S7z#I`xELk&y3q%XsXXoN_x+!(?_66`(1e*$Tcet2q5G` zhYl;2c-Ba>Rw3Nj0nNGD)>Q^c=WdM^KWDXMZDscwC_cSmH`Bbc$7U1WysLi*;S~MU4vt}JWJ}K#raf(S8*m8UGa*+ZJ)NGw#NVyuLIr0;%9)A)9rM`??r8Z>V3N3ouBW&Sq-BzM#Zp1Rb`2ipetHuG+H{e{PBkQ?nveu ztJPCeZSCIPq*rHZ>_4KDe$eZHS}dNK+{bM39b?n{6?GF~mWB1s$*bNx?7Q~r^jotp zJyNfHg0Cd%L&IDCP^LK!3%iFR8or&KUk&fn(S17+`WyEkh!~DJgIqw8&!UlA<@j*s;{m^yge#X(=UO=bA!IFiK-&_`=r795n{4GK@q-%=49&R7}G z6i6gMihR&dructZH%-iM(Y$}M%FIm*iq-crI<4!Wc$#$_4S$L=O-5-iU;q^Uf5_?-04tSk|%I+heeZ7)6Mri!MhORq}l z&X3)PdLpf(Cv6gy6(W3xE+Zh1#^BqZ49ec6Q<`8!X8Nq^XI;uU(5OUjxDrdM9<_m< zBKvHd$X*^>KWokut4W}p*=vD$G|Vh6IE%*K`^C=!@Q-&H604ZyyY8!IbsC%O){*-v@{Jdmk=7< zphtz*hd#*32}l@Y;Ef=L{5j}+QbTuS_bs{RljBfARPD7U35jD3V0Sikau?rEyWUC zBK-Io&NCQ0m~lu7udZrFz^w_2OG`lD{8}+(>kj%ioezxDb6)l#w#`=Jc7UgYGGzPS z@SF|pqt1Yz|GG`bQ@{wgPWcK5y30p$$x}aiNg3SE0+XO~HS|01NLd z1RD_Q2Mco^EmrH5?3Sqvb7kLdcy|Ee6B!-^EAAPgR5v*%UCtBhgEMXLRyTD^*WAxa z5V#EP2HA?=GMoK8^i1+V z4R%HoswjZ+9ao%6tjed+;yolB(R4{fUkbshmy(1I;AovPyvgFRN(I@>Ca}o86rkYCJn!nyN1w#>43LqGp&R zi(ZbE!Z5hZvfgYVvv|h4$%yTf>=9VPes$^bk|S0aXS5-y`TcnY{x%mVm!Wk0>vr>{ zcG5Jau=?aqUFZ)^#PWy$qyskj1HkPLTeMfZ0LxL#QvcRw=K%VM;3Z0W9g4fY%|959 zpJ7g+NMCyzfOVt7OhnkH9gc- z)jP0csmCr>zED2ksjpCG{0swTnBP`ESGIcZ-Xv>$4-v4FIG@zm3fJbxXfZ0*=~q$) zCyMywF&}quWCaiA8X*LFc%lb7mx_D>%>T;3U?qlvww#(62eI&^Sxq{ zh5!Eeo8QxsVpP55T;Pk{kV~15K{ik@9ZNW=dEmK_!MQyj-hH!*cMj}WJPGaTLSJuu zObj#TzPwDmsL>T zt1AX*kkbXg5PWK;y|Bpw=54z`!Y&3rOUA?u3fTm;u|z|?U<|&^?~!j=Ze$vKebU%2 zr!MZ8tOOO#hrC)SPPx*mgU^;bsS4#){wF>Ig<0BO5d_zBmsd_Jn5F)XEn5P+yyv-@ z)B=jh+S2Z*p!UAy0;!y@16*e(2xY&SI%mSVVZ@a)rUw!=Cs?_eOHblX7`t#%Bwsou4!l4 z#IsnZBA~&FB?Mg0s-o^-g%G2gLpDwius~AWMLM~TUt4Fnw2}Q@>33M_%6 z^+DiE<+T7}!!OFYFnu9zC-{7)9sN4>o7NOUj-(uH4~_x;yIIl_PX3bat1{kK508{) z5tXwp0{ON3UmcWAJON4to~Z;VN$VMb7O|KenJV)|R9T^`%mXOf2J?%|FMAfUiG|Bs z(=^hUXfE^4+KxY#)R^{o@|VRN``%s3{c*47vA?lUN6M5~P4S7(;HVGHz_Y?a9)Tkk zYZnEVqiTZytLohj2Td%r?~#aB>L0kN&h1NOD1*FDQe4F-#DKoE%0l+CTk|6apy+&J z_S5;6$0aCaxf+rQi7sY+-|46ikB;2zBZ>?SoNR^H5C%hhj8mxlwR76Y7ho`I2sZ0Y zFlsUpfI+iMh#>}Ivy^YWlURly8;JRn2^e;Du&_YKP!|%!;7Uha4zL zutn=?H*n7MeXIhx@E8{(&gBnUAqZ1pjb?4$TvRsFn*!=XK6f}hJ^z*=s6j@>Zb+fS!v=0|l;n;uKT`pJtnTM?;PS7B5qXNO& zbVwT!>LW%6@@EH&bK5WMYLzjc-*$3qTMn~am;yaF&%AI>lRv&l2p^IVa}vf&PVtpu z0kj6P9Vt`cb}ZRcwcCX5wC6UFPo<>$g?hZb6l=+c0W7F;QZN$5{rTi)>j>vDoQ7H8C9gRPehTXH7)n{cS786uK&+r_wnyM?`bK7xm zgd1kP^9Q6M@8DywDK|d<+JmY}xG8>!t>8{K+njaR1T&QSsOO%@G`|}DZjfF7=o+H_ z<^BxaIT)cy1*5e-Xgxg+B&27L4NwFBk@A&x+-kxup2@=B>GgVp?)KJ0V^?vViCn63G{U~|YT2==n!iche~zD{ zO%$WN>v7%0e!r>DlzP(K)rULup$aSUmcbd1mb!?al?# z=e6KxC;Ls07W^ah>aQ@gEU94ux26=ezq3QyMXJ{J6#+=V&tPpbz~SDpVKU71;}bpo z1FEHYN%$YOiYy$z-i-e{f8+n=w#~@M_TMBdY^?ud^|H2ZoOT+@OIXS!2?lwZm?5*uwRBYmswH#)2ieyA&|Q*M zs`$fTBO{#Eh~y;+hs1U^Ca!s~#?bv@J2hdKg#^_=9U)pXvBW5xj_yf1sWa%I;i2`h z)51z#ZJiy^|nwA z7bRtX z0Jw+hLYD1$bG?gruq$l;d|V{$`SA6+Zi>r24j?qiL#U!q-w7<7HSK40uYE#D4d!Qp zhn|`zpTv#~V}VwAn!a|tLpoqIr;uAx_Lqp}eN0BMCc(l<=RiSC+P0+QQWQ@1jzGiI zr#t>qB!GQb*p)o0S6SVmN!~GpKXG!FrCd`k?8n1gAa~mA_k9t$3P>G|!()Y;JQ(ry zX!v~n1pm0H(yOiI`}6Ig$>;Zd$)D5f*X7f8w-J?>_G3*)*KqInc6)5;^SvS29N(|rxA%& zaLSZXyxKVS4`LvE9nC*=DLp#xPTpS2*+&%wZsyHSpMwg~wCrW|r9hW}pesHb7leCf zKZ}SRysBOy&;9I`IxVaUm38V{om^e(ot{;JWm}Ku!wT&`w!Yntb-gM(P3-)3GpRQK zHcq}SYYX+1R~;2+jvr_HSI3TNTN_z^8-KlijyJCAYAeuO!rS&6MDB<8=bPBkS4&e; zD*OsEMo9@CEobwe4DH1Kag?)A;Hu!MV5)2>svXs!z(#_T21N!@1z~l~t%i)yvA7mA zK*#91S06OQj&g0+Ne3+m9tpzIFfEU3kQ?P(uE0(?=*I#}<8%!*NMCmS%{^!=ainx`ozvXzSkp3CztjIe+#!7a4FbPtA1kcQjuD6NWE5G*+h8sg22b`OC1Dkx@d z4jIc^gQ5zy646nWki0l+2}x`t(5iMqgM@8)2aV2rFq5Q;oQ#4}D;*;Y# z!n@7?R1I)e68sy`TrI?}rv3E0A}Be0NW8u7cjVm6>XdFb4XI{*FIX2I3h55felM)y z^q4xX#uJEz`gKXju@dcJ2u_OlWV~r4*%t`o1I~baKwwGA0=ZZpn)ssdPRIe;t(&@($M zai)?+a1u|nx=YLj@C*cy&y&HX#yzwZZnuNaG^>I(%YBI#iz69~6K{HHVo4~!JZEKz zEz-D^Z@?Mddr2AGI7=Y399XuB*7ElX6 ziLtA22}eE`gyyxz9JWwC7KRN)Y&qh9V;b@sqAAx%&}>{hO7mUoa36FYt|l~VZ~ zZt*Gbz0Klkw(T}<=uuoc?~X)WF-Lz&{6825Dre=ioXS~hU$KKB^s~^H=3FOF`TYY4 zE_y$Hss8HE3AK7n=ojR!+Jz!`Vd&46Tl29KbvZg1wIY6}&O{-689)2ZKz5=0zFdln z=|^RZlk!GTc_S!%F_eE}|Gz`mS!U1Wvd{<}x9hM$8t?y|H10Xn$BY*8z~gw_5BrJX z@l0+p%otp<`&UVWQ?Pg@b``y=n2@RDJu;45J)<1BehQZmd4k$@bPt-}ZnJ1C*3A{=iS4tpF?i2h(N*SaG~868d- z!JCz$7o}nn!d?ts?I&#+)lUjpzhIs|CY4b25I9%6R~y6Y+=QB$#tO}}YO7M`O6*S` zT?d<)B1bD&s1*tEX+Q^|BsIo-CRkeXb+ZQb{`&5WCMh5`Zi({vpX63&KouJSKb=Ej zE*$%Z+-d<~3GlIEsSKt%&~{7KZ|KC!wnX`VhiWUma1ytiFWLgsnv)a^8g@WuSHyy$UUFeFO&r#(~=R{oc5X*;r80~=FZ%k zMRrhmm2FiHJ)H+2jbt!JCnoWGrEq8rMA)&Wi1rk`;^QrvXlkfVe;Pslh?gaa2M5C% z;*x)oGvD9T)Z6d27OCJ~zB6B#dPVxnddnzMmx`}AE^!_v*sxHuqCyTu3i?b4i(t_+!0tVX*OqWipMN;h3o?r;C;RD>b`3B`2gpl?a4UQiXBM?&GoP- zHa`5aP3W`%@yo6ynd2$dfL1|L%YdQCvCy46_Chn`B-imJyD5-Tp*v?77r?1zi7dwx zD{Q~d_SKnV-gkuXiLS9AqXbBaz%woYEc3iqqziMpW#bCj$*J`a-G&V8r2(I3jaT90 z4y@nj6{BIQS&th_K)AWkptk1=>V|`bVW$G!GC#{2-C{1*q%jYV#I8xKi@(e>dwi<; zN3k}1^@ea`)@tlJxa5$7L{AQmtRn6VE1fNF9vny+;l3_l55TMvo-D&R0pTmWt_!L3 ziwJGYs>IuI{?K)#rO==;LWK`+y2Wby2iU!Jd+$GhbXG=o&i@9||9@L`cBcQajQmLF zH`jO!vFAd4S3+&-?l1l?*jTGpTC3z8Qc4WEtP~(2X-EZW0qOYj_3@}L000a`Ab~(; zqX&Y3HC5Er>njUye~Yubi_h-Y)$8FmX|ErjpaS+H56Fn(Km%;TVwef~(zI*vxWkBA zbb1#?5|J7g)pi$5#oOr>Q~D5>erM61QMd1QeHLbp7$SM-s}Q_3owrH4_REVtc=7~n z=WZ6oY3%lv$qRje#Idbar7u7p+r!h2y)J&uvh#24e7XwjZ*vd?6f%g$1}pYEdpz7i zf-}2+JNY9rbG>G_YJuq>h@=F6h}ye7)M01WU=ssP{x1=X#vuPQo^N?kJg#P+d?k(p zpUAjtgX99`z@)}T8fsXtj`WJ%6XD~>w^|yv2^J-xzO6-Cmdk7A(~3*(+eG8Vhjxkd zmpp}NG)23kyKuV!pHko!!<+P6r@JIE-L$RT3w>$@P~7sF=hhdG!^%#Le{j^>)Ym7^ z&R-l^cv2~0U@J%&c5E+RQ+E|C*N0~;RkA;SXw1gSv(w>Qk3O`8q-ZIWm~MQMSoH&f zU()5?02530>PWb?45oCr?MO(R87Nsl4%gj{AHlp%)NWah-J7+#@C~e2UXFc9=Ix9E z#WyH&#aNlu1u)|K7E7;Xr3tJ5cGTs*-$m;eJ35S$7-FO1NUs~m1nJy=+BCzvQ^5|b z0(|Pz4K)}1p%4j~5X=)=HT$WhPj6&fyT6J3!@Fk^A)0UP`tXz2wv^NoDAp-Qxdg?_ zC}GfJ^=VcndSQ(J$aPI1fMPL60B+K|bg67IudAwFsRt=22666;YHni-13@lqTvm;O z6#h<(!>e@5fQS)y&4y+`Z5D=8@XdTI7ck9kXJZ)23`;dBrFaK38#Qb>1ybJoy2fX! zcG={`r&V@r(-n^N!rk!va5l~Q`H3`q?Qq%>%l=@p1fPl`J>>c+cRArU*(TM}sDV$0 zf|$_jsa_;3aO#wiM_wCHH)>$nT!`E!b@>9aPpvGRv*$O!i2t=~uGmT^K&=skVWV~t z{Ww|Uwd*UZ?!ZKkSO2XA`x+w|J5XlB({e4B70(b!qEEc?+C74v0erBF#Yb1zS`gtP zGn5gUYY%4|f!04%u;|hmor=a)F>FZ=#C|Emyf=2LGnY%NhF&#lKhMU8ntviOd>MLI zO`Z->ewf`d`OkV|1|ICn=`C+mjzO5=D&wHp1Clw9Oy@@CNV-|3Fhum^MlDN375`#u z2436$;40JDuGVsicYYT(gAGBNg!P4n-uzFsKtQ0M016WgH1PE(*kha$B@8!J~WZDEk&S0ywxur)CRrsBlj2F-i{MOH|eJxXj4oP2{D<@Hh zX5L_$`ktF_!&5|YfaI<{e$BQ^&*%3Y&4DxfClJh;b0ZXB)j$^*TsstX%rp!lv(crTFk4`Ol1g}&`Q2cwV{a<~ zR$aM=eWrlDg$h{jB`MvvBb{(_by``}QK)8nWH>Y`%|xOT#JCAhh`Nn@=rAZ(j&LSE zkv36v(n^5Ffn#`{Pun($UA&D`b1Bb(7v~9czFUFE5()}ByTvC@us|#InS{D3h&csZ zhcLs0)k-)-@Fe^#dWIvB-ATy7%fN(4GR|YE9?16NOxegeOK5rK7|T+H*3^7}7!Wi% zZ;79#?W@Tz_vPjUa%jT!4YaCCh$Kq!&G`8JzLH(Se1vM^NkQ3%W``u0i78K*@O8dW zL0J}|`o>P)ItE3QkNudt6kP*%>lqYWq8%xb$`!MaQrnzF3%=)zU?OHhWB~{WS$1HV z`vT4fqtRfeNwbDe7koaKxEC^(^Z(K#>_*aA-H-V)c=L)Qrka5>M0qoK&t);f8%>Fj zE$WD**cFcJH2F8<0IP|+9(>8H0%E;XZ~V@rf#fz? zC*;ZmJ(O!4loM3hQKw5R>f3tf!hi;(v)u^%w?aD@0MC&c$QKD@*UoJ-tkkA;s-P2u z*iUNZ&_f+lt0+fDD>?aGEubz>MBXWe2h7<^V!19vw#5QYGMTMl5QzgSu?%XoXKN$_ zlSzgY}+m;lb>8WNEa*r!iBB%dfoR z{~#S#i&>>8m6wO(=SoBq>a<%j0OrTx_6j^z81F+VPKOdKvJfw(C6Poj5SvJH<+5zj zi;)jYcAv-{RXq3MhNZpZ@?UA&{BdXorzTdxMJoDdo`hmB2cY>I{HvDdB7KfrZ=saw zEBWQb#8xMTZoX9d$(045EbbCb z1iZ-D!2v({T1?p8%+?$q&lCMlDnX{C&PHm5ZTv?3C&b){zXj1C5K2L9 z1Ro0QU86sQ!@bu36lov(&gA|VQf#VtmV$EQziTVl){l8ZAW!-L%4 zkO_v;E0x~)QDFFP{uAnDU}XDmsQ3R)O>_KjYMPzxe{7lm+g%y=8wBay`|HNa4X@+M z-X#eZ3A`4F1Pn=_0T(Ya7eu3rL-?FSm;-RK)0J6tl>#)_g{{!$AAGTvlR=gEPcK_@ zS&1WM=#@HxO1_HpnyDt2>Y`apscFasMs9l6pS0rTdIzbNR_7$5{!@gO6*0vXv}&*t zI1h0U>oAqnFoPf%xkDCZK}5(VvppgGp&<04Wwz_Xt=pC?UVLW;S2Dayn33GTsd^x> z7)iE?Ofe_TfWy!T$yj>9gjqXr{#XOU2yEN}4rb>Vx42kq@{l^YQq6^BPo-v-Tc4)o z;cw8AiueZIVzJ1ENoq1X+(P2Sh@huZ$`w=IKHo}VYH`kqNlGGImbnIQ5tFzMDdsFC zZ8~gHgKp`#$}yIjw5g4DSZcLhl9pFv!G;MjD^*f)>QcKLOUY8Py0~(6lP$24%$U?=10}HHs(Z?1Q0k>1DOM88L zhk>kwb7bT$seMPM?nUk@n|erIeDqm$pI|b@qV}Ex9;0~|TDxj#vp*#EACITq{(sjS zKi|$duJCrYwl}q|@;g3m>~TN$@5lV=UG#Q4e>;62stEv6PP+JSdbWL@qK|*?$ht^# zJHx~wV-}O2zDK#Px5oYSnhe64@k+mYtK z^r6zJ6v9PSbcl|gdglpc7H{%;-R=MTbG-+$!@Ko$l~wokWA@Y2^>KD}v(xSE^J1vv{Z@zn^LqaLRK>49k2ps$+e?;Lmnqn8R~zphU0?>c`)oe+3B@@zmp2EO9~qNaz5HM-W2=#1!+C(|b2cAuXM1z{%Mh3XfQ( zD0&^=Biz=;Z;98LNd7PXJ<-H7`FsC2wtP4&;`Nuu{?65n;6wRU+=N<$jd*T{kKm4< z__r>O2ZuoF12K%j%i;9ZWZ4RW<~py(Bga)w_xBqe?~g{C{2y;WpOz0O;_jXfFYc(m zJ$8Gao^GF)Im;`kudEoU*bP3M8;HcsNDy-K@`OP8vvRu+oE#_4~d!F9+>;$@LV~eewUtC=XBsE&>ySjmE-YWw6v= z>ie$+;r}oOf&R~7gi|em?ZrY5|MJ_GY#^z@N&`DNU}^AF4;1u&3}O`N0u88P&$YHT zAYv7n0z)WN|2bWu3#^ zD5Hu%&Upf2+!SuE*2VFqmX-!PP8RvElG%NY2K^W@v3b{keT|f$7!+e^kyqrk>QvYX zSd}_fOe(p1-h_E4;dmzDd0#DT;)_+4d^kuZR8Rt*OBlM=c<9P2TW}_dYNrclxUAM# zS>ojHo_|XPNINj|I*O`VqV)wyDvRhNnSnhZEtd6yvl|F;v--?vje-Dd#x44bZPSs= ztJN?*I`a@M#yYziw{|XQ9B30da_dZ*6o!ILtlkHXv!&|c?>J1*=u&etmMa9xn(?@& zIBd|OI)v!-$bm8aC70D9g^l)(<s-Og&j+=CeW3|7gtdX7!uq z%Kj47b%SFI_E>)Nyh3EfWmneFP*Pbw4qmDx7Z&AmaYji;YV8U;re|wS=Yi^m%f6~q zKuoY8r`*JqSFMfssGkY6QT2yn3SnLSzPVy874B;Ood~u!SVoFRBm^xmIA(xOC!St; zoOflNj0$dwJv<*OYx#0gnx%)y)LL6{kgPEB-rWt6^|PGn{IbWSH16H(;)%J$Z!&Mz zv|MibvvE8b(-XAAUZmyZj_X=dfHdYr7V|32bA=d|^=4V# ztF!z#i~}4tX)mg3l|2GtrN(+3lZOJm@iGNCq)vV%LK!(1LP8T4E{h7aYuMKX4S2R_ zisJ9cU6a##0+VOY{G#&yv6+IVW)}gyp|Ej8p|e`?aqnUrt&i}D9j%&jYLFIu^a)&8 z`;bESXs;bSf}Op(uRidY4)%i4SMSOkoPNXk0NE9p2b@2=>RaUL&iZmr8nRP%r}$~;ntp83fAq!SMit%b^PlhT;wK|9 z{?S7Om9gK%_(EVTMDgO&-?M_0Gr`7RMa!$Z;(4zCr;#Vxf}p&3dBm{y#j+opLj3yI z30-#8rW>%Jj1xEaYCf4wcg~>ckrQ~3QNax?TTtUq^pTJg^XJtqFm^7sog-XU2|OOn z%RIa_gZjvokkjBXXgL_RV8g+o9C;Iy8&c<=H-DLYzRDlNklO?IwU6^J+A$oIX`Q&Mt*#2&Kf?{hsbsW;{ z(r(nBs$ldI4IGB@e}_Of@Ws=@BSqJi#KLwVf-KS##=htNgJ)GzQ5WHK2=L%3^)I0V;)=VHd#Am zFSGYuk{Gr9YsW%uH5KcZl^1|r(EMNb(TXjX5$4oX5W(yqr?(lNfwmjT2?qBENu(uKK)nf2^9qpPgSD@C2;cZk62B_xUxdmmWjmnYQiIF@u~W0&jO@d)O^3op|?`G*l??hM6w!g{aJr#3X8Q5IQ?s~9fMjJNBJtk4HQdAdibcZV`2`d(b-4@S zllQzUFXL-C$^&|>_oNrCNDhGS?;c6P&d#WK{fH*#^|vg_P&(xQlqa`bWrA6W>RYpN zotZ;PF7^0c=*7CrqMWx|apnLfBFPnOjN2PT`XB41kq7^ba9LmOBuznP@Y5qoqpXU6*E>~63K{~Nn_bB`%;g6A1gC$ zn0&0GjM0>ZGirrp0fvkq-Y5Q8*nZ;*Y4MZ5UYdan?|U05dD(3Vt#-HGPS5s?8H2 zj5#7ul50Ksn_p!}$?M0yak%*;V6?Jdb_R|KrMd3wCXomN3`xnTB4llqZ6w0eYk#!^ znGCVAe|NFHPhne>AQA`)$O0!PNjwx$m)YD2!kUKW|F}FPC#P7NFkw(i&8geYcxcsc zLv+e!`+G4-M!V(%ACrP9ETstkSQ^5e`soY>AuN?ks%hrdDKuUIR` zQyaoOQt2L)*_K13RAS=Gkt70Ol)T_-*@sMl1eAF#6RnsM;7=gg+JiwXXiTmN`ywk8 zzX$tXAgIA*tLY|od37B($Whc+@3umMOY@Hi$Zk_wo#1P3Od|Abaf$pgv&WWZiAeLG zOJt&Rj01Av9(<6u44PlticZB*`zFzP{YC@-E~9Hk+m++B^c(WKlE*sT zWVdeZgRn}-HzaxGDn70!ikjs9$~5+A#`lVx)b~ZPh?9uGIuLKn2O%yVgcR;sc>udO zZcLmo4%F;Wqu0j}UidtD5XM@F54Zq~pC^JaosK#8?(W;IeHmH3OZ(vG3tk}i{lHtZ z>u+(&ZAj5)!N7Iw84xzYm=5U&^pknZfJ7m_71w9wbe1RX#pPe`O0vgs_^>XBB7e)? z68M#=6S1L8d?5=G5MMyA&2;##Eeo*;bD<3_Ob6O11Q-OIwq|}BU{Q&JLG*MG?B$vh z#I+vtzXj*jDGlJ5C4w{gKd4h&;DBUbl+dAm9=cLy4ZHPE5S(+Z>Co)@Y%5)w(dN~$ zZR+Rw-Hmu*o=>-gFfRxT?De<2j_3D818yNT(<~|*egYQVAKK|~Z5*}OI=(_LZLEI< zA-AW@bk*=+J{ObGms@+%|62DI!vxKft9B2h;tQnebo-c1{zx6=pe@pj+nK#AP9;aQ zV3f4kjyX4ZXxME!QARrhv%`-YxBi({R<<6)&)u$e%iym&+qHMI)}8f+?4;iO9L~RD zk!~y1<j3VN<=ll+4?-BJY5 zjlob*&1&+u0XbtUQnc?uBi6O5!-g_|8~{8(Ckj90Y86KmMJ;Zz+GrM`C zd%_i7vc{n5l9nw#;W;5ud2PZs6;8|(yU6f+J zMUFg(A#V|p04vY^uOP&b|4w(N2~J6rv5R{1nyWb*{D&e5(LZXSElv$k3YLRSxDET> z`_%8k<2lU{04voiU-GeZ0gMMKrc0B%Kn)Mb)v_8l8GwV+3h)t`NvCf4_7BZ;i`dT$GJQMnEA}V)59eFJy;E}arPj7)zv6RY^xHq$r+l3CIzOmJ^2bDT4zpaX(_TMPxaM}x|+q2o`+2y-0mjTI%I z;-OD1D60xSAOHcX-`Y!}#?N|H+&iKphuLb1S$e^lPkh)bu2&f_EmZMYpZ>C?4%&ui zQ7roVJLsUVV$I@nZi)jGQzaR3Of#6X5nMeY`w4$yNz|TLp1gE*X6sV=x0IiWd3>?O zE@YTW*&9pNvkrDc4gWBFFiWywhwPyq9W|u=76Fq!68hs=Qld2ZcQw!ICWjr+0j1cx<+zw z)bFCDdKC?|Z0o0)idK@n*FTLRY0A9HaW9VL0eJj*DCfkY$OcfXbB#x~2_;#gnTLvR z)2qxVKClS`9@9%bmdxGEko|>HS>JWA&P+C>w01pIe*{}5+}f!FykBO1?RUU8fT*wb?xJvaxdIqWsGr3b zG4>^}g!xUd4iYTc4Y~^MleqP(v9UjS+7T>$Fea1@eNSPAc5sg8Z4!7A{2^?D9T*bJ zkOGu4_KEha>m_n|!W4Ssmv*0U@-AlSkdblRnZ-J}EF2f(v6&bf{AP>iy zd`H_lo**{K#u;&jmjT6O()F&WVm9z^%CZ^&rQYm_16HY6awYKMwyoKY(=>$?V5z_O zy}x(D|IYg~t_{pBIARg#|9(=+&5#)NU z7>5ZxNs6K+Lq%A6uo%rVxQWl~n6V)!Q*CKA&>y+b=E@oCNNTmZ?yBEhht4UhhIjLabv%$c863fOjNgy{ z7{hQ(APS>RyRc;&Y9`2;4B0V3(Yj$xu#BXNc2)iSkUw{$vu+xp$+EanI)l1uAMc@1 zCxuLobOtnQxGC2>wKn@#j_{dLB$DMsaprDPWu7Wc!Nj9XUBUlD**gXc5^dSKRok|0 zRc+h0ZQHhO+qP}nwr$&Y_vzcOPrrBGjdTC3m@y+VBY$LM%pB`mV;r5PZShr(;uJm0 ztUJIYRd}W}#qO}vR`~PDUr^YY@Hwr=%-BhmLFZsFtTz)kBpo;2cwOJCwQx()_xos0 z=I?=NmZU+;owTmxlL9CXA+bIf3G5U7Ha}!Xwnqy+wj_p1LlI|$qOGHirqSU-&b3dV z6@09Cn+MIJc9KmZ&S_H+|GO1NmptJvW(r`e#`!=@HB) z3+JT7$!uSWp83;HHlR2UgdU6*8?qQF5FsOggc*)j8$tsTsnyZK{$oYzy%jv43=12L zdo5MX{dqIX^?h0#?7flM<>v9d|M`B6NGIcF|JHvRU0mHw`flU=_Vl$meA6isK8BKu z0L&FXr!Ncz79CRD>!=-sO5Jzr$nyDh+dgdbM)GmgUyRGObCivPOCY@Qw0<*)>iqKk zE$sgR&#o5$Ivi2L;}weB6-xxq>xCUT&;}=Y8B3)DM_FrX#tsAp02GxAnMMKM+k_fP zmSt?CP+m(QO~5!Tg=a%uE7BQ6^2Zh>?-YsAZ(1j&C(kgQzXwk)|FR7;O>2LqrPFWd z_a{s;r9&c^ASEypha79&QKRS5?{NZ32V{G!rh5SBIrULm)4oL>X*+Y8OnnMW6g1+d zP7xGRt|FAtr)zLQwz^vu2nqhM+D&IabUcQ!hE1-qKb{7d@s_?ILT4c*zn|2NOc9hW z6F2BsA4>xJXmw<~28v8!4Q2!U`KZi1<9%y4*Jx%q8%9=Z3_c`5eR)9VzhV6hS?JuQD{PpLo4kLuY zT->(IGY8$7-{x5w>{e!UsILj$Q|p-?dzsC`prIf_gO&`LZIi4Z=;RD6A*M}c= zc^QgGWM`OY>1^g#K|*po|C0Jpw5v>rL&`{cJNg5X)ta6<15X(fX`$}{N!PNV73@{5 zzi`ovucH`nU#?8+u*uaE_w)Y+Oe4xPm81bUQ%h{bofy*~6hS$#iks7$3thrblD!Pf z?3t_aTyDyyHqppAF>t_;mg3TwHz2@(hd1y%Mp6qD<19>gu#Y)bpv_(PFjLI>2h$Qj= zq4j_*=p3y|za?t-KMM;shn{xP1B7-WD#PS3@pPEXi!9>X$AM);ZD|kA|6QbsZxS!Z zY6?4HuR0q1zluReq-9wRVO#9~S!fD7VlO%>EX)3nV$zX?eRXwoO3KNpu0B39^Wwt5 zn3Vlrx5%fYY@NdD`U7Z)>ay8&G$<$C-VqkUe!$(W|YHmSm4Wm z3-~vG>2#zk+p;pXEY0RH&LUQ4nj|$xs_A$eVP=9Wa*Z&pKeU2VL=$;Q%+OgZtkDhw zVWwQB?4Z%C)B5JK;v!xM)Vn?P=7i%o_)R#`K|2J5SZnBGFgqiSRfT2h@cU;%ogCmX zly$C?-=a&F*OG-s*G4Xsv}s|iW&2aC&_;YS$Tk=2y3?*d zV~|-z$DS5};~ia%HK~S!sF(4m2ydwinI~r4TW}pN;L#k+O5l3$@^X-pBIcqt=7GvHSC?2$Vl|HiEOl~8>L%~CT> zPA8z?5_6{9!bNlpY%;~7r=NxXPF1ETp`ERW!XWGvb<24RYKS`6c+ z6C;jDV)IT^G_Vi*t60een;1}Tld?dkz@0@Wn9}I%WB@phI%gi{3^ofrFs;PgL)!so zM#gvQ9p3dg9mD}GQ7spW4FKs9>Wk-y@q@2Ia3gHy+cP43mi&(tX~yLrBJBQb&S`mlF*;?kH`JU8XCHkItCJ46LVFU8oah6b-rOO7a={Wj?}< ziTQdIh6*q`l_s%;`40$>J2gm1C?4<6^fUWY1|7S-OFFzy=QdfUb~ zONI6?tiIWkr_}6#pe5X7a0q?YZinh_ukjVa0MqE=Au*KmRGIdiQww7OX`cEy`3WZQ z%^8~@OSp6P*%K8V+koPG7s|oKnBc zT{4CMx|Xn$YgJ#rOKAJid(T~svC4h*~oOw>3J(7J=0ydI!oUCIYMs!4i5mh*Y_GG=0=so`m%D@i|?xtxd}- zYbu2)emwega*y(G&!|gtqq=+Yx=Skg)Fb|=n}+W`-1;th@=3S0%RObvrs4UuvRPpc zx1QbJIasP`P?=nxp5g{0+vl{sT-lhqdg_Y~J#w3UUf}m2$O3B!IYxV%;x?7BF zcZtZ`P`VNU-eTeWu2Tpei~O6f?hP-_MHlT7&^!>L8QuQzwHv8iUf9Of1suNsJ{}Y**_4lL=<$X znoYj8RN`2oPaJlTibt}*4z&xj9nvrH-ZPCFH`wfZG|bTN7j!XB)#?m`FQO8~Ar-Fq zG3DU#YaomwCm```y9FJ;Y)f3=6#C3q^ECC%Z4YpW%pr)DrwC{{ZZlPkTCkQ4GqPQs zy>Mvl!ToSUTU;@PI$6V?R^y>Vgma-Wfk~l1Y%&2D`=IL*yhgULf?YVJa8sdvc6ZWL zHq*)B>rL3Udv$i=BA2skN#YEMGcLYi#~!7leds z!$aLD>#+L*Hcq^UU3ux6xO3Qj64kxOA`$wNR@!_0W!pQwBFJ67W@$r z&1Q+e)o*(~aU~7>;15|h4FONd$(z|+SvUf<_8lM(qdHCCGzsS86Bm_P znfO2PT$R?0N_ilsooaFlk5|#ntIFJ%Q3R!#eCx8T1f{AO8&SeUwhSyhh+c2{oD1Co?~ndUVY4?#aIBf<8SHkbGpEC09BW5ILIiR$!n)$*)hXd#tYd)N#+!cy+=eG) zjIWUB&NFUJCE)HO<>-kZ37@ij36%(h1DMUA|IfM zzZUXsMH9t}d(`<&b<{n4%<;G#bub08Nc;@GU~&c}@S3;iTQl+8PX|!K#2KP^v!Tg9 zV5_mNgm^}qfjTb=$F|>r0I~mOn^nKzRiK>jnwI}yV0FCyI${M1hl^B&iG@LKTF=jH zC3&O4J!L+tWYf5R_O1#w?LbR5wakZrz#?TxP=J@C?(SuRKvBMm6(Q1IJ7W@YFiU{I zp)GP(L7vb!`EjN?wO@m zT5iKcn?-sU|6rL%6C*VCI!zcCg`XGaKgkAE^21=k8@`-a6P3floY_AJ2+kNTvSMFH2lZuMT%{1;WV;2G2`mWw}c3xopu) z9IBe|D$GIR(*!4We(UWV7=N z+OMkEk$T9LqYisfV|uNjj)=EpN&AqOv4}|40?PFEl8sou@th&Iqn9%wZNl36{_M*L zaacS7e@v-kKvj!LGCg^x`R097Yfnwiwle_q_)m96a*B+;lzJtM-;E&W-*&>AF(WKz z4WZ!Vq~=37lUR7VHk->iqs`12jXfKH55OA2G<+-*;JmP*pc3>nqTHoMqTlzLtXF@J zmg9Bi-27az+QHn2E%BzFc{xs+uQ5DxA7zLHQo%r>gAt=9BH&G3x9^KJYSDE1$Rj~X z)&NarMIHNvgAq;}tjg#gZS;mOX)&+u^aNS_^fdn3B4i-!+fkf@AS&a_|4y;d+3zJ{ zcV1P(aUem&m8h5=v-b~8)U_+ho`y)i3)F^3&{H)S%7RwBR?~Myd?UFKp3oX zmDlW3n^}MCDwn0+zBW3TbwtX)T7p85Lda@nNHxE(uXR`xn{J62GYGkqWcWUF4W5m( zgwB&Pss7mTEagk#HH3kqy8ss_=p0gGgK;B)U-e-RR?uNU2}G{9aYJ*9{CCE|oDgVTirpfun>0YCIY2 zRJ;go86cxmVg=zZ0ykW1=)51lse8y{-nYoNRnIaSD56a1FsFG)?Wqu*#rX12jMR2+ z!BolUst#RwehjE(fsD={u3oSwqUOjbsh>9jw^=QoH_~VJ0G2Nv$aP*jGkc*x5#lM@ z7vL#-y6As`@s@-C@sw72C?_i-eES`Z{waY4$m9;)9d#1Cp>Y#5Pt}5Gt2TNjT6vJP zqx_xh5_MI^`wd@x`@IgnAxoy!F(VLnDgn;k+TpFST@|hpD4+#*$lemcr&;Iy%M7{) z;$KaN^mPB6jQD>fyy@uvTlZvU__xQ$LG^Jf;%4~G^FJ*TbvuTfDn!1%zqx5deSpwh zIz;p)^f*ue2!oI&euPi1;+5v}C}yQUxemX1%dBE6`t>+PnUtBtiD|!@1jgdeLfa+H zhz^ew{*=DGk7dgL(U*&J%k*q7qBW6YgdfEM;fG^xwVfL#$+ULQQ)`YDBEYmSkwtLK z)Yrwr@Qk9lNq2F=j9bZN3q@5s0?Xff2GQN|W?E^5#=9c8r%a1%ilm8ya|I0+|V zl9y(}1IV%y3Pd{zfvGZ@$CsO!WoD#`NLnsbrWa}rEmamywK<-bj*}3h%LKN{0kmvd zIQ5S`aPf*2E(m8@-nu9JB8&U-k@fT#gM2d*C2G322z=`3SGXDOp(pacPj+oCDx6v!|Sae&8axIe}|)z1=%{*!2GLOqbH$+T8T+VD0>R z=pTOlNY1|caB;X9l>l`iJa?)u6)>YqGaUw6ixe_k-7N{RpqK#zwOMx`aI;J_-WIpr+*Fjz6V@3qa_T57`@$hWym!uUmyq z`;3<|7`H2hF3Z*PLKnGI1qg!9XZ1)=!$IfRj)3M5J#MVic62oE1U6yT4f<#9C{=O% z;1#X{OcZIZJXYLX_yebIB+x~`-gh68Ly^w!h~I__aY~G)kw5qlplJERJIYtpQl{o= zSN01Eq?ODet%?YvpgWaQ>dK_XDoElO-UP+0maLD^JE({^JXp)LFovOTQMV9|>5mwM z-x|ZM2E^AYj3JY!VTfP*ZNyUq2t;JJ1Ja}!C5gmz`3!cX%8@FyrXW*HASu%ouM|!k_{)??6J^1M z^($?g#XT+HsV6@Xd^Tjxpmi0x(?3T&+X<0j|8`l_Yq3Nal_E0zjhFIXHkvC=^=Qve zO;(t;l!?&jVU}=WNUXC4#1^Pm3xqV&+(ux_hwlv&?MA`i4HQ9L4dIKfBEfWG5HSGz zW6(8QCIh@Zbx*vpmJpCu&{Vv^Zd0G)jRKV^jtDBNz0LM zu$h#aLXDl?Yjmbo={c#3d~5CNz%g%)YXqzA68bYY8@I#9AvF_IifH{MrSEj{{oT3R zy4LIT;VeD*^kMUo8h1WjyL_O$`MaZ&)iW}6Ys>S4Mw%)Jc1Qes_iO&$xp{rOsq^Ff zGMc;d^Xw~`VX-i;!>`o|}kN>>6 z731z%%u8P1fMxUO^gZTSi@YxG(}_Rll$c%{dTL{>Z6s(>TK9wuqdM>sTq%q}xw@jj zQ0T+-;<)E+!wv9?$BtKCm*}QdnQvZpw&(uJ#Dj2Z@rVq~Ani}%kYot84u+UM5gF)g z3&QyrUyC8^7t@EEk9HKoN1#O*u5hz4bE&Ty*y=cp@CNhx^)qt zuuA#U1j&?HNV*%Zf6R{Q6fZ-0pg$Xm7xfI-hW25;PLg(C?Zs-|EBGsir3rm6EfHHH zERIlh#9qkn!NB@`+9z>V*k0GXgg!Nr1g+mi{LwNzSOWE1L+VWJBSJ3W>C5m@G)BQ` z1T!JHzwY&C{&GeQ&Ec7WVldyHQzHKk%5KG=!@kE1+}xxII5d9J3l6A9h-xX1RmkOC z*J8pK4q8mkVxPA+M&7w%H}oyC4h~=D-Cx!eLiZi=2h_N0G$2I&ijuR`Kci zL2%?@+9*cG;Za)dV{VvMPz$`65C;m9Mb1H}I{1bo*1*gJUSsA38|{bff~M{=;7#~!ujaAua&{(Obum=#*x1-*Xs&-EW2y66mxL1t z*KRfe3t8lbzZXBBjvAr{c(Z(@$LOYK9cr9;A%>)I;@v-G)7X_|a5OaxJdybWj8dc*TJ8L2%k}`# zuBD5(1NREEzb`tcpjiCthO6{Vl!T=M$hcv)dS9H4z0f>~S6SX~Q_n&YU6b!=ZIp(} z&fG=8AZq@6OCaB_9|fcGEW%{kFD2@B7_W87W`*WlUqXF1t@M=O+>O-Eeruc9hA;oC zahZvc<)1Kt|H8Rxng4AHVDm>z-5>gg4G2nI9oF)hBR>o~5ZA)|VY+Ja&bR%?)XL0YW1&xuC*`-Q>l6 zKMD;24z@4pxFlEOcVW6KitJMcrk_JOrdSYBaU-S_aH@qf@J6Z0jg$>RtgH`$#&D{- zlMo#9hIU88F*6>52q5@lJkvA?SzdCFXhype4vTZPgWu!_^EHDNHX$7f?31{MI`Fd`eeQ2Fu!OwD+m+lc&gDA{`=F^5}-748=Lu zM)Io@Ai719t*V7g%X&^)`Jzm7c}#&m?dAW7&8X zE2#SnORH}Jr6&f{8IOGS4hI~w{^U>G{ zL~!Op2F7ZHV`mGO*OOW$)aR@FQU*F;-~jlC zza_I{%#S%c6r=PWIrJR`SSF;Fu@}5gX#mJ&Bt81{9SpW&{XU|^C1_e!qF<~?M4N&} z!E4zJ3xq%ca(U8 z&6tvi;!{g5V}}@BSw#LV_&zS?I)a2y9Y=Bei5y3G;6|Km>rjPF^7H~_icIX-BkLvq zg#+EVk}y;RzfV1GiR(~4#Lhl+hl9=j=pdpa))TFN=+09Gzwz0#KpAl`ByFWCBr;v- z?9qxXpI;CHGVQE&vrN^TX#$Dw}lc1t?NWT$?Q&s+; z6h_<&9Ohi`(I6JZG&&2;h$@%tX^JxpfRVWLVaGy{weuulQ;-xfr{&Hd`K}O{+39cg z*#&s0Gb@pc^BbSf@;E80PCwDsPvl2YJ37f4!hNLNi=dhY28c)^7w$|}v3R)QSNG*y z^UwfxB~U{K|1ad22Q|WT6LZ5j!l{$4%EiW7p&R(g%u}8@--JBWsD@GZ<$CrTU(nwQ zsci>{uvV%&+LMUUsl6g*b0!%8WtEuSXhgzKfNAXOPjAaU0R-fL1a(Sh+E8&-oN+Gh zn1lo>?eZ*sp;+LE>oz5NjNpxrf_SFY>*?;F9AqQn{=c;phE!hc&h=~@P!eb5CjHl5)%6bd06F=7$}F9h^v2tg89v(MbUA0fnf>9U9XhBUA!~y=!A$Mx-U)% zEz~9y&|@0}cg|jZ1vndNI0uJT@s-uq&Z`i6CD3(5`)kpa+fEw@pU`@e!&a88FL3@O zdC{<>ePSI5zOx#Qok`}KdQEgip%uxpnNyz^AVI!|+a}q=vt-Th+*16OSe4*wC}c(L z-M=^zpFOXD#pE;_KwQTNE!o`RkwB34xX&TX;sw8~$?;-Ny`!rS>X_Gz42KCm2KV;$s`q2?YQGoaiL=K$j>fqV6pgPZ2q4S$&vQ=uWP;|~Dj zIGr|&`xi2yu9+(zllKD}I|P2?2GY3eu}uVBh!SS0^^RDja0>c-$P%r6zKE2G)z-~y zoAL8^CAOKJde#30_4QoO=;)7zAq@V4VQ3FcrO7nTXT|8=r% z)xzhwBt^Ab6evExl(O=VUuGeTt^Z8>@o`A{MMY|O;fVO0Cf0)ooF@RGq(q_}fa!Bq zgTpMd3<-t4kXC6)fJI7L%V+zYH!tuG1Dhyw6RkR(kIV7ZVe}Q9w?miM{YEDpp889+ z)z~bzvt-i-bmobINVw<19mjEWdEfTrYYUaOP|QFh?Fl+y_WN`sDQsD@q0PNhspU%t zY=_p8n1Oc5aefU0Po+Er;fK zk4l@GW##(Ifk2zhniG0PPM@V!F~`LBvJodnL?5;5Q~9Gt^s14Tn-z;|>&TOS|CfEOmQ|82yp2%z zYPum{HtOm#y~1e!WtBCB8i9snb3?7dn;f7ixoHQ-ZY8ICYi+#%RV83-C;AH;5P+h& zBEY*$=Tw^~_X6EwQOGm%OOJ7XtldcwIud$c1oj4fh1}%gfu(dJK0RsK)i+r9U&N%6 zI_&T78?q^$N=e3d?4xM45>60wAR+nM3!}cBvjwl490r|q?>b~&9Ix^FOAqkU5k0ia zAiOC>f2U&I4I{LU-KXfT@4QucnBVzsgnTw}`UVnEbVZ!4<(D0*ML27S`-=(}o@xw5 zgB&e~4qCAQ{<=YzuEhGDunK;La_7X9rIAF&+6RY}U+_qxVq8{X>vXm#u!o|NX!5xs zNX8PzTCh}s3ZDA))R0jxk@Y)G0V50TcHL#q`*1WIMZp~=yT;+#BbOKMG)?cS^KL!V zkeJCMycy)66!;h2=%Z$r=d@&8av~06%I%}+QE8KSs=y_XBgvf7T`_30{LRVM%Ydf4 zPSbKtON6{inwIWRbO!K^evGzN-7>`{m-4mizdI+>LD%CgE461Q+bn%-p++mvbpR<5 z`|eu~E^wi6M!^DXEm@Nja?j#(ab$za@cZr8eU0XLYAv+|el^g&eoT!qRrkQALGH^9 zL_LIN$&5?GG#XOcbAd6LvUFA|FlgxIM@uh~^llj0rFZdc3_s|-Av71rvU~q7h6e#> zJJO^y1p)+aM5WAvD!JC&mnDWO1Ud%KeNv5Qm9GW4rqz;RL6Vc$q|R6~#U*@7x9&s2 zvRgOq1gn3{%+4T?i>j2D(B$pCFwz^Ge||pgUkEZQiE_dL4J@J`ojhm{1|^$H%1%%C zf{CBF8TwbhEex#xoJRG3RQYM?|6Ao}Wc>G4{&ewZqGssf>w9ts2|Jna0uj-kJ|El_ zA|8Oh9b81TPc>Sw0E9ylHLyLePp|T4dh5UUE~U(hf9Y4A$s&6T$`L)1EvX4ngf_~F zD!4Y0*=kctC7xS|%FVBql_oN&r@3L*8=69;RVIZPY;GXh&a+#?a9}Q*&<&JGhDwC0 zr8d)&o+%p1BSdluwwkEjp>x-)TI_ABE%j&cFZbX0Lpzy56;a)T`*lY$y+aV=XL*Y5!Qd@QI1jt+iE>mWXPkL7j+@8c>2KBi6~4QQYgwm^Csz z1~6A-9-A+vovC0{rX?&vDvFPt2bzgfh?n}vCB9nCG_UFLFkd#LB{=*AIW#b&Eg{lR zE$Z8rc=Jdxqtk>k8?_);RIk$_DR?sA4;P>RtsYGdKw|#)o+*E!K+=J%_LQzd)U4

    gDGfULNNsDK!#A=rG9m@qd1{F;~ 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 jddTsVJ-dr5(%JQrGs=d2$IhL6J?_>WTzAQ~9 literal 0 HcmV?d00001 diff --git a/core/_static/alabaster.css b/core/_static/alabaster.css new file mode 100644 index 00000000..23619dc8 --- /dev/null +++ b/core/_static/alabaster.css @@ -0,0 +1,707 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 260px; +} + +div.sphinxsidebar { + width: 260px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: -20px -30px 20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} +@media screen and (min-width: 876px) { + div.sphinxsidebar { + position: fixed; + margin-left: 0; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/core/_static/basic.css b/core/_static/basic.css new file mode 100644 index 00000000..aa9df316 --- /dev/null +++ b/core/_static/basic.css @@ -0,0 +1,904 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/core/_static/custom.css b/core/_static/custom.css new file mode 100644 index 00000000..45838c1e --- /dev/null +++ b/core/_static/custom.css @@ -0,0 +1,76 @@ +a { + color: #004BAB; + text-decoration: none; +} + +a.reference { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px dotted #004BAB; +} + +body { + font-size: 15px; +} + +div.document { width: 1000px; } +div.bodywrapper { margin: 0 0 0 200px; } +div.body { padding: 0 10px 0 10px; } +div.footer { width: 1000px; } + +div.body h1 { font-size: 200%; } +div.body h2 { font-size: 150%; } +div.body h3 { font-size: 120%; } +div.body h4 { font-size: 110%; } + +div.note { + border: 0px; + font-size: 90%; + background-color: #F6F8FF; +} + +div.admonition { + padding: 10px; +} + +div.admonition p.admonition-title { + margin: 0px 0px 0px 0px; + font-size: 100%; + font-weight: bold; +} + +div.math { + background-color: #F0F0F0; + padding: 3px 0 3px 0; +} + +div.relations { + display: block; +} + +div.sphinxsidebar { + z-index: 1; + background: #FFF; + margin-top: -30px; + font-size: 13px; + width: 200px; + height: 100%; +} + +div.sphinxsidebarwrapper p.logo { + padding: 30px 40px 10px 0px; +} + +div.sphinxsidebar h3 { + font-size: 0px; +} + +div.sphinxsidebar a { + border-bottom: 0px; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px dotted; +} diff --git a/core/_static/doctools.js b/core/_static/doctools.js new file mode 100644 index 00000000..61ac9d26 --- /dev/null +++ b/core/_static/doctools.js @@ -0,0 +1,321 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('

    ') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey + && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/core/_static/documentation_options.js b/core/_static/documentation_options.js new file mode 100644 index 00000000..5dae6739 --- /dev/null +++ b/core/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '2.0 + stringref (Draft 2022-04-27)', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: false, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/core/_static/file.png b/core/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/core/_static/jquery-3.5.1.js b/core/_static/jquery-3.5.1.js new file mode 100644 index 00000000..50937333 --- /dev/null +++ b/core/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Validation Algorithm

    +

    The specification of WebAssembly validation is purely declarative. +It describes the constraints that must be met by a module or instruction sequence to be valid.

    +

    This section sketches the skeleton of a sound and complete algorithm for effectively validating code, i.e., sequences of instructions. +(Other aspects of validation are straightforward to implement.)

    +

    In fact, the algorithm is expressed over the flat sequence of opcodes as occurring in the binary format, and performs only a single pass over it. +Consequently, it can be integrated directly into a decoder.

    +

    The algorithm is expressed in typed pseudo code whose semantics is intended to be self-explanatory.

    +
    +

    Data Structures

    +

    Types are representable as an enumeration.

    +
    type val_type = I32 | I64 | F32 | F64 | V128 | Funcref | Externref
    +
    +func is_num(t : val_type | Unknown) : bool =
    +  return t = I32 || t = I64 || t = F32 || t = F64 || t = Unknown
    +
    +func is_vec(t : val_type | Unknown) : bool =
    +  return t = V128 || t = Unknown
    +
    +func is_ref(t : val_type | Unknown) : bool =
    +  return t = Funcref || t = Externref || t = Unknown
    +
    +
    +

    The algorithm uses two separate stacks: the value stack and the control stack. +The former tracks the types of operand values on the stack, +the latter surrounding structured control instructions and their associated blocks.

    +
    type val_stack = stack(val_type | Unknown)
    +
    +type ctrl_stack = stack(ctrl_frame)
    +type ctrl_frame = {
    +  opcode : opcode
    +  start_types : list(val_type)
    +  end_types : list(val_type)
    +  height : nat
    +  unreachable : bool
    +}
    +
    +
    +

    For each value, the value stack records its value type, or Unknown when the type is not known.

    +

    For each entered block, the control stack records a control frame with the originating opcode, the types on the top of the operand stack at the start and end of the block (used to check its result as well as branches), the height of the operand stack at the start of the block (used to check that operands do not underflow the current block), and a flag recording whether the remainder of the block is unreachable (used to handle stack-polymorphic typing after branches).

    +

    For the purpose of presenting the algorithm, the operand and control stacks are simply maintained as global variables:

    +
    var vals : val_stack
    +var ctrls : ctrl_stack
    +
    +
    +

    However, these variables are not manipulated directly by the main checking function, but through a set of auxiliary functions:

    +
    func push_val(type : val_type | Unknown) =
    +  vals.push(type)
    +
    +func pop_val() : val_type | Unknown =
    +  if (vals.size() = ctrls[0].height && ctrls[0].unreachable) return Unknown
    +  error_if(vals.size() = ctrls[0].height)
    +  return vals.pop()
    +
    +func pop_val(expect : val_type | Unknown) : val_type | Unknown =
    +  let actual = pop_val()
    +  error_if(actual =/= expect && actual =/= Unknown && expect =/= Unknown)
    +  return actual
    +
    +func push_vals(types : list(val_type)) = foreach (t in types) push_val(t)
    +func pop_vals(types : list(val_type)) : list(val_type) =
    +  var popped := []
    +  foreach (t in reverse(types)) popped.prepend(pop_val(t))
    +  return popped
    +
    +
    +

    Pushing an operand value simply pushes the respective type to the value stack.

    +

    Popping an operand value checks that the value stack does not underflow the current block and then removes one type. +But first, a special case is handled where the block contains no known values, but has been marked as unreachable. +That can occur after an unconditional branch, when the stack is typed polymorphically. +In that case, an unknown type is returned.

    +

    A second function for popping an operand value takes an expected type, which the actual operand type is checked against. +The types may differ in case one of them is Unknown. +The function returns the actual type popped from the stack.

    +

    Finally, there are accumulative functions for pushing or popping multiple operand types.

    +
    +

    Note

    +

    The notation stack[i] is meant to index the stack from the top, +so that, e.g., ctrls[0] accesses the element pushed last.

    +
    +

    The control stack is likewise manipulated through auxiliary functions:

    +
    func push_ctrl(opcode : opcode, in : list(val_type), out : list(val_type)) =
    +  let frame = ctrl_frame(opcode, in, out, vals.size(), false)
    +  ctrls.push(frame)
    +  push_vals(in)
    +
    +func pop_ctrl() : ctrl_frame =
    +  error_if(ctrls.is_empty())
    +  let frame = ctrls[0]
    +  pop_vals(frame.end_types)
    +  error_if(vals.size() =/= frame.height)
    +  ctrls.pop()
    +  return frame
    +
    +func label_types(frame : ctrl_frame) : list(val_types) =
    +  return (if frame.opcode == loop then frame.start_types else frame.end_types)
    +
    +func unreachable() =
    +  vals.resize(ctrls[0].height)
    +  ctrls[0].unreachable := true
    +
    +
    +

    Pushing a control frame takes the types of the label and result values. +It allocates a new frame record recording them along with the current height of the operand stack and marks the block as reachable.

    +

    Popping a frame first checks that the control stack is not empty. +It then verifies that the operand stack contains the right types of values expected at the end of the exited block and pops them off the operand stack. +Afterwards, it checks that the stack has shrunk back to its initial height.

    +

    The type of the label associated with a control frame is either that of the stack at the start or the end of the frame, determined by the opcode that it originates from.

    +

    Finally, the current frame can be marked as unreachable. +In that case, all existing operand types are purged from the value stack, in order to allow for the stack-polymorphism logic in pop_val to take effect.

    +
    +

    Note

    +

    Even with the unreachable flag set, consecutive operands are still pushed to and popped from the operand stack. +That is necessary to detect invalid examples like \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}})~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}})\). +However, a polymorphic stack cannot underflow, but instead generates Unknown types as needed.

    +
    +
    +
    +

    Validation of Opcode Sequences

    +

    The following function shows the validation of a number of representative instructions that manipulate the stack. +Other instructions are checked in a similar manner.

    +
    +

    Note

    +

    Various instructions not shown here will additionally require the presence of a validation context for checking uses of indices. +That is an easy addition and therefore omitted from this presentation.

    +
    +
    func validate(opcode) =
    +  switch (opcode)
    +    case (i32.add)
    +      pop_val(I32)
    +      pop_val(I32)
    +      push_val(I32)
    +
    +    case (drop)
    +      pop_val()
    +
    +    case (select)
    +      pop_val(I32)
    +      let t1 = pop_val()
    +      let t2 = pop_val()
    +      error_if(not ((is_num(t1) && is_num(t2)) || (is_vec(t1) && is_vec(t2))))
    +      error_if(t1 =/= t2 && t1 =/= Unknown && t2 =/= Unknown)
    +      push_val(if (t1 = Unknown) t2 else t1)
    +
    +    case (select t)
    +      pop_val(I32)
    +      pop_val(t)
    +      pop_val(t)
    +      push_val(t)
    +
    +    case (unreachable)
    +      unreachable()
    +
    +    case (block t1*->t2*)
    +      pop_vals([t1*])
    +      push_ctrl(block, [t1*], [t2*])
    +
    +    case (loop t1*->t2*)
    +      pop_vals([t1*])
    +      push_ctrl(loop, [t1*], [t2*])
    +
    +    case (if t1*->t2*)
    +      pop_val(I32)
    +      pop_vals([t1*])
    +      push_ctrl(if, [t1*], [t2*])
    +
    +    case (end)
    +      let frame = pop_ctrl()
    +      push_vals(frame.end_types)
    +
    +    case (else)
    +      let frame = pop_ctrl()
    +      error_if(frame.opcode =/= if)
    +      push_ctrl(else, frame.start_types, frame.end_types)
    +
    +    case (br n)
    +      error_if(ctrls.size() < n)
    +      pop_vals(label_types(ctrls[n]))
    +      unreachable()
    +
    +    case (br_if n)
    +      error_if(ctrls.size() < n)
    +      pop_val(I32)
    +      pop_vals(label_types(ctrls[n]))
    +      push_vals(label_types(ctrls[n]))
    +
    +    case (br_table n* m)
    +      pop_val(I32)
    +      error_if(ctrls.size() < m)
    +      let arity = label_types(ctrls[m]).size()
    +      foreach (n in n*)
    +        error_if(ctrls.size() < n)
    +        error_if(label_types(ctrls[n]).size() =/= arity)
    +        push_vals(pop_vals(label_types(ctrls[n])))
    +      pop_vals(label_types(ctrls[m]))
    +      unreachable()
    +
    +
    +
    +

    Note

    +

    It is an invariant under the current WebAssembly instruction set that an operand of Unknown type is never duplicated on the stack. +This would change if the language were extended with stack instructions like dup. +Under such an extension, the above algorithm would need to be refined by replacing the Unknown type with proper type variables to ensure that all uses are consistent.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/changes.html b/core/appendix/changes.html new file mode 100644 index 00000000..325dbe16 --- /dev/null +++ b/core/appendix/changes.html @@ -0,0 +1,212 @@ + + + + + + + + + Change History — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Change History

    +

    Since the original release 1.0 of the WebAssembly specification, a number of proposals for extensions have been integrated. +The following sections provide an overview of what has changed.

    +
    +

    Release 2.0

    +
    +

    Sign extension instructions

    +

    Added new numeric instructions for performing sign extension within integer representations 1.

    +
      +
    • New numeric instructions: \(\mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathit{N}\mathsf{\_s}\)

    • +
    +
    +
    +

    Non-trapping float-to-int conversions

    +

    Added new conversion instructions that avoid trapping when converting a floating-point number to an integer 2.

    +
      +
    • New numeric instructions: \(\mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f}\mathit{mm}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    • +
    +
    +
    +

    Multiple values

    +

    Generalized the result type of blocks and functions to allow for multiple values; in addition, introduced the ability to have block parameters 3.

    + +
    +
    +

    Reference types

    +

    Added \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\) and \(\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}\) as new value types and respective instructions 4.

    +
      +
    • New value types: reference types \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\) and \(\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}\)

    • +
    • New reference instructions: \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}\), \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}\), \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}}\)

    • +
    • Enrich parametric instruction: \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) with optional type immediate

    • +
    • New declarative form of element segment

    • +
    +
    +
    +

    Table instructions

    +

    Added instructions to directly access and modify tables 4.

    +
      +
    • Table types allow any reference type as element type

    • +
    • New table instructions: \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}\)

    • +
    +
    +
    +

    Multiple tables

    +

    Added the ability to use multiple tables per module 4.

    +
      +
    • Modules may define, import, and export multiple tables

    • +
    • Table instructions take a table index immediate: \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}\)

    • +
    • Element segments take a table index

    • +
    +
    +
    +

    Bulk memory and table instructions

    +

    Added instructions that modify ranges of memory or table entries 4 5

    +
      +
    • New memory instructions: \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}\)

    • +
    • New table instructions: \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}\), \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}\)

    • +
    • New passive form of data segment

    • +
    • New passive form of element segment

    • +
    • New data count section in binary format

    • +
    • Active data and element segments boundaries are no longer checked at compile time but may trap instead

    • +
    +
    +
    +

    Vector instructions

    +

    Added vector type and instructions that manipulate multiple numeric values in parallel (also known as SIMD, single instruction multiple data) 6

    +
      +
    • New value type: \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\)

    • +
    • New memory instructions: \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}\!N\!\mathsf{x}\!M\!\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_zero}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_splat}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{}N\mathsf{\_lane}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\), \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{}N\mathsf{\_lane}\)

    • +
    • New constant vector instruction: \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}\)

    • +
    • New unary vector instructions: \(\mathsf{v128.not}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.abs}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.neg}\), \(\mathsf{i8x16.popcnt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.abs}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.neg}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.sqrt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.ceil}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.floor}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.trunc}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.nearest}\)

    • +
    • New binary vector instructions: \(\mathsf{v128.and}\), \(\mathsf{v128.andnot}\), \(\mathsf{v128.or}\), \(\mathsf{v128.xor}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.add}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.sub}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.mul}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.add\_sat\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.sub\_sat\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.min\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.max\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.shl}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.shr\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.add}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.extmul\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i}\!N'\!\mathsf{x}\!M'\!\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i16x8.q15mulr\_sat\_s}\), \(\mathsf{i32x4.dot\_i16x8\_s}\), \(\mathsf{i16x8.extadd\_pairwise\_i8x16\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i32x4.extadd\_pairwise\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i8x16.avgr\_u}\), \(\mathsf{i16x8.avgr\_u}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.sub}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.mul}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.div}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.min}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.max}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.pmin}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.pmax}\)

    • +
    • New ternary vector instruction: \(\mathsf{v128.bitselect}\)

    • +
    • New test vector instructions: \(\mathsf{v128.any\_true}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.all\_true}\)

    • +
    • New relational vector instructions: \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.eq}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.ne}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.lt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.gt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.le\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.ge\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.eq}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.ne}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.lt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.gt}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.le}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.ge}\)

    • +
    • New conversion vector instructions:\(\mathsf{i32x4.trunc\_sat\_f32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i32x4.trunc\_sat\_f64x2\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\mathsf{\_zero}\), \(\mathsf{f32x4.convert\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{f32x4.demote\_f64x2\_zero}\), \(\mathsf{f64x2.convert\_low\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{f64x2.promote\_low\_f32x4}\)

    • +
    • New lane access vector instructions: \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.extract\_lane\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.replace\_lane}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.extract\_lane}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.replace\_lane}\)

    • +
    • New lane splitting/combining vector instructions: \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.extend\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i}\!N'\!\mathsf{x}\!M'\!\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i8x16.narrow\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\), \(\mathsf{i16x8.narrow\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    • +
    • New byte reordering vector instructions: \(\mathsf{i8x16.shuffle}\), \(\mathsf{i8x16.swizzle}\)

    • +
    • New injection/projection vector instructions: \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.splat}\), \(\mathsf{f}\!N\!\mathsf{x}\!M\!\mathsf{.splat}\), \(\mathsf{i}\!N\!\mathsf{x}\!M\!\mathsf{.bitmask}\)

    • +
    +
    +
    1
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/sign-extension-ops/

    +
    +
    2
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/nontrapping-float-to-int-conversion/

    +
    +
    3
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/multi-value/

    +
    +
    4(1,2,3,4)
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/reference-types/

    +
    +
    5
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/bulk-memory-operations/

    +
    +
    6
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/simd/

    +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/custom.html b/core/appendix/custom.html new file mode 100644 index 00000000..4b9855d6 --- /dev/null +++ b/core/appendix/custom.html @@ -0,0 +1,222 @@ + + + + + + + + + Custom Sections — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Custom Sections

    +

    This appendix defines dedicated custom sections for WebAssembly’s binary format. +Such sections do not contribute to, or otherwise affect, the WebAssembly semantics, and like any custom section they may be ignored by an implementation. +However, they provide useful meta data that implementations can make use of to improve user experience or take compilation hints.

    +

    Currently, only one dedicated custom section is defined, the name section.

    +
    +

    Name Section

    +

    The name section is a custom section whose name string is itself \(\def\mathdef118#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef118{name}\). +The name section should appear only once in a module, and only after the data section.

    +

    The purpose of this section is to attach printable names to definitions in a module, which e.g. can be used by a debugger or when parts of the module are to be rendered in text form.

    +
    +

    Note

    +

    All names are represented in Unicode encoded in UTF-8. +Names need not be unique.

    +
    +
    +

    Subsections

    +

    The data of a name section consists of a sequence of subsections. +Each subsection consists of a

    +
      +
    • a one-byte subsection id,

    • +
    • the \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) size of the contents, in bytes,

    • +
    • the actual contents, whose structure is dependent on the subsection id.

    • +
    +
    +\[\begin{split}\begin{array}{llcll} +\def\mathdef79#1{{}}\mathdef79{name section} & \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namesec}} &::=& + \href{../binary/modules.html#binary-section}{\mathtt{section}}_0(\href{../appendix/custom.html#binary-namesubsection}{\mathtt{namedata}}) \\ +\def\mathdef79#1{{}}\mathdef79{name data} & \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namedata}} &::=& + n{:}\href{../binary/values.html#binary-name}{\mathtt{name}} & (\mathrel{\mbox{if}} n = \def\mathdef119#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef119{name}) \\ &&& + \href{../appendix/custom.html#binary-modulenamesec}{\mathtt{modulenamesubsec}}^? \\ &&& + \href{../appendix/custom.html#binary-funcnamesec}{\mathtt{funcnamesubsec}}^? \\ &&& + \href{../appendix/custom.html#binary-localnamesec}{\mathtt{localnamesubsec}}^? \\ +\def\mathdef79#1{{}}\mathdef79{name subsection} & \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namesubsection}}_N(\mathtt{B}) &::=& + N{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}}~~\mathit{size}{:}\href{../binary/values.html#binary-int}{\def\mathdef84#1{{\mathtt{u}#1}}\mathdef84{\mathtt{32}}}~~\mathtt{B} + & (\mathrel{\mbox{if}} \mathit{size} = ||\mathtt{B}||) \\ +\end{array}\end{split}\]
    +

    The following subsection ids are used:

    + ++++ + + + + + + + + + + + + + + + + +

    Id

    Subsection

    0

    module name

    1

    function names

    2

    local names

    +

    Each subsection may occur at most once, and in order of increasing id.

    +
    +
    +

    Name Maps

    +

    A name map assigns names to indices in a given index space. +It consists of a vector of index/name pairs in order of increasing index value. +Each index must be unique, but the assigned names need not be.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef79#1{{}}\mathdef79{name map} & \href{../appendix/custom.html#binary-namemap}{\mathtt{namemap}} &::=& + \href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../appendix/custom.html#binary-namemap}{\mathtt{nameassoc}}) \\ +\def\mathdef79#1{{}}\mathdef79{name association} & \href{../appendix/custom.html#binary-namemap}{\mathtt{nameassoc}} &::=& + \href{../binary/modules.html#binary-index}{\mathtt{idx}}~\href{../binary/values.html#binary-name}{\mathtt{name}} \\ +\end{array}\end{split}\]
    +

    An indirect name map assigns names to a two-dimensional index space, where secondary indices are grouped by primary indices. +It consists of a vector of primary index/name map pairs in order of increasing index value, where each name map in turn maps secondary indices to names. +Each primary index must be unique, and likewise each secondary index per individual name map.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef79#1{{}}\mathdef79{indirect name map} & \href{../appendix/custom.html#binary-indirectnamemap}{\mathtt{indirectnamemap}} &::=& + \href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../appendix/custom.html#binary-indirectnamemap}{\mathtt{indirectnameassoc}}) \\ +\def\mathdef79#1{{}}\mathdef79{indirect name association} & \href{../appendix/custom.html#binary-indirectnamemap}{\mathtt{indirectnameassoc}} &::=& + \href{../binary/modules.html#binary-index}{\mathtt{idx}}~\href{../appendix/custom.html#binary-namemap}{\mathtt{namemap}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Module Names

    +

    The module name subsection has the id 0. +It simply consists of a single name that is assigned to the module itself.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef79#1{{}}\mathdef79{module name subsection} & \href{../appendix/custom.html#binary-modulenamesec}{\mathtt{modulenamesubsec}} &::=& + \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namesubsection}}_0(\href{../binary/values.html#binary-name}{\mathtt{name}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    Function Names

    +

    The function name subsection has the id 1. +It consists of a name map assigning function names to function indices.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef79#1{{}}\mathdef79{function name subsection} & \href{../appendix/custom.html#binary-funcnamesec}{\mathtt{funcnamesubsec}} &::=& + \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namesubsection}}_1(\href{../appendix/custom.html#binary-namemap}{\mathtt{namemap}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    Local Names

    +

    The local name subsection has the id 2. +It consists of an indirect name map assigning local names to local indices grouped by function indices.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef79#1{{}}\mathdef79{local name subsection} & \href{../appendix/custom.html#binary-localnamesec}{\mathtt{localnamesubsec}} &::=& + \href{../appendix/custom.html#binary-namesubsection}{\mathtt{namesubsection}}_2(\href{../appendix/custom.html#binary-indirectnamemap}{\mathtt{indirectnamemap}}) \\ +\end{array}\end{split}\]
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/embedding.html b/core/appendix/embedding.html new file mode 100644 index 00000000..145be23a --- /dev/null +++ b/core/appendix/embedding.html @@ -0,0 +1,572 @@ + + + + + + + + + Embedding — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Embedding

    +

    A WebAssembly implementation will typically be embedded into a host environment. +An embedder implements the connection between such a host environment and the WebAssembly semantics as defined in the main body of this specification. +An embedder is expected to interact with the semantics in well-defined ways.

    +

    This section defines a suitable interface to the WebAssembly semantics in the form of entry points through which an embedder can access it. +The interface is intended to be complete, in the sense that an embedder does not need to reference other functional parts of the WebAssembly specification directly.

    +
    +

    Note

    +

    On the other hand, an embedder does not need to provide the host environment with access to all functionality defined in this interface. +For example, an implementation may not support parsing of the text format.

    +
    +
    +

    Types

    +

    In the description of the embedder interface, syntactic classes from the abstract syntax and the runtime’s abstract machine are used as names for variables that range over the possible objects from that class. +Hence, these syntactic classes can also be interpreted as types.

    +

    For numeric parameters, notation like \(n:\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) is used to specify a symbolic name in addition to the respective value range.

    +
    +
    +

    Errors

    +

    Failure of an interface operation is indicated by an auxiliary syntactic class:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef120#1{{}}\mathdef120{(error)} & \href{../appendix/embedding.html#embed-error}{\mathit{error}} &::=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} \\ +\end{array}\end{split}\]
    +

    In addition to the error conditions specified explicitly in this section, implementations may also return errors when specific implementation limitations are reached.

    +
    +

    Note

    +

    Errors are abstract and unspecific with this definition. +Implementations can refine it to carry suitable classifications and diagnostic messages.

    +
    +
    +
    +

    Pre- and Post-Conditions

    +

    Some operations state pre-conditions about their arguments or post-conditions about their results. +It is the embedder’s responsibility to meet the pre-conditions. +If it does, the post conditions are guaranteed by the semantics.

    +

    In addition to pre- and post-conditions explicitly stated with each operation, the specification adopts the following conventions for runtime objects (\(store\), \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\), \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}\), addresses):

    +
      +
    • Every runtime object passed as a parameter must be valid per an implicit pre-condition.

    • +
    • Every runtime object returned as a result is valid per an implicit post-condition.

    • +
    +
    +

    Note

    +

    As long as an embedder treats runtime objects as abstract and only creates and manipulates them through the interface defined here, all implicit pre-conditions are automatically met.

    +
    +
    +
    +

    Store

    +
    +

    \(\mathrm{store\_init}() : \href{../exec/runtime.html#syntax-store}{\mathit{store}}\)

    +
      +
    1. Return the empty store.

    2. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{store\_init}() &=& \{ \href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}~\epsilon,~ \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}~\epsilon,~ \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}~\epsilon,~ \href{../exec/runtime.html#syntax-store}{\mathsf{globals}}~\epsilon \} \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Modules

    +
    +

    \(\mathrm{module\_decode}(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}^\ast) : \href{../syntax/modules.html#syntax-module}{\mathit{module}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. If there exists a derivation for the byte sequence \(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}^\ast\) as a \(\href{../binary/modules.html#binary-module}{\mathtt{module}}\) according to the binary grammar for modules, yielding a module \(m\), then return \(m\).

    2. +
    3. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{module\_decode}(b^\ast) &=& m && (\mathrel{\mbox{if}} \href{../binary/modules.html#binary-module}{\mathtt{module}} \stackrel\ast\Longrightarrow m{:}b^\ast) \\ +\mathrm{module\_decode}(b^\ast) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{module\_parse}(\href{../syntax/values.html#syntax-name}{\mathit{char}}^\ast) : \href{../syntax/modules.html#syntax-module}{\mathit{module}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. If there exists a derivation for the source \(\href{../syntax/values.html#syntax-name}{\mathit{char}}^\ast\) as a \(\href{../text/modules.html#text-module}{\mathtt{module}}\) according to the text grammar for modules, yielding a module \(m\), then return \(m\).

    2. +
    3. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{module\_parse}(c^\ast) &=& m && (\mathrel{\mbox{if}} \href{../text/modules.html#text-module}{\mathtt{module}} \stackrel\ast\Longrightarrow m{:}c^\ast) \\ +\mathrm{module\_parse}(c^\ast) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{module\_validate}(\href{../syntax/modules.html#syntax-module}{\mathit{module}}) : \href{../appendix/embedding.html#embed-error}{\mathit{error}}^?\)

    +
      +
    1. If \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is valid, then return nothing.

    2. +
    3. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{module\_validate}(m) &=& \epsilon && (\mathrel{\mbox{if}} {} \href{../valid/modules.html#valid-module}{\vdash} m : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} {\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast) \\ +\mathrm{module\_validate}(m) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{module\_instantiate}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../syntax/modules.html#syntax-module}{\mathit{module}}, \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}})\)

    +
      +
    1. Try instantiating \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with external values \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast\) as imports:

    2. +
    +
    +
      +
    1. If it succeeds with a module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\), then let \(\mathit{result}\) be \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\).

    2. +
    3. Else, let \(\mathit{result}\) be \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    +
    +
      +
    1. Return the new store paired with \(\mathit{result}\).

    2. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{module\_instantiate}(S, m, \mathit{ev}^\ast) &=& (S', F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#exec-instantiation}{\mathrm{instantiate}}(S, m, \mathit{ev}^\ast) \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; \epsilon) \\ +\mathrm{module\_instantiate}(S, m, \mathit{ev}^\ast) &=& (S', \href{../appendix/embedding.html#embed-error}{\mathsf{error}}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#exec-instantiation}{\mathrm{instantiate}}(S, m, \mathit{ev}^\ast) \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The store may be modified even in case of an error.

    +
    +
    +
    +

    \(\mathrm{module\_imports}(\href{../syntax/modules.html#syntax-module}{\mathit{module}}) : (\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}})^\ast\)

    +
      +
    1. Pre-condition: \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is valid with external import types \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast\) and external export types \({\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast\).

    2. +
    3. Let \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast\) be the imports \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{imports}}\).

    4. +
    5. Assert: the length of \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast\) equals the length of \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast\).

    6. +
    7. For each \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}_i\) in \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast\) and corresponding \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_i\) in \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast\), do:

    8. +
    +
    +
      +
    1. Let \(\mathit{result}_i\) be the triple \((\href{../syntax/modules.html#syntax-import}{\mathit{import}}_i.\href{../syntax/modules.html#syntax-import}{\mathsf{module}}, \href{../syntax/modules.html#syntax-import}{\mathit{import}}_i.\href{../syntax/modules.html#syntax-import}{\mathsf{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_i)\).

    2. +
    +
    +
      +
    1. Return the concatenation of all \(\mathit{result}_i\), in index order.

    2. +
    3. Post-condition: each \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_i\) is valid.

    4. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{module\_imports}(m) &=& (\mathit{im}.\href{../syntax/modules.html#syntax-import}{\mathsf{module}}, \mathit{im}.\href{../syntax/modules.html#syntax-import}{\mathsf{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}})^\ast \\ + && \qquad (\mathrel{\mbox{if}} \mathit{im}^\ast = m.\href{../syntax/modules.html#syntax-module}{\mathsf{imports}} \wedge {} \href{../valid/modules.html#valid-module}{\vdash} m : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} {\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{module\_exports}(\href{../syntax/modules.html#syntax-module}{\mathit{module}}) : (\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}})^\ast\)

    +
      +
    1. Pre-condition: \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is valid with external import types \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast\) and external export types \({\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast\).

    2. +
    3. Let \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast\) be the exports \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}\).

    4. +
    5. Assert: the length of \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast\) equals the length of \({\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast\).

    6. +
    7. For each \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) in \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast\) and corresponding \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'_i\) in \({\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast\), do:

    8. +
    +
    +
      +
    1. Let \(\mathit{result}_i\) be the pair \((\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i.\href{../syntax/modules.html#syntax-export}{\mathsf{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'_i)\).

    2. +
    +
    +
      +
    1. Return the concatenation of all \(\mathit{result}_i\), in index order.

    2. +
    3. Post-condition: each \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'_i\) is valid.

    4. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{module\_exports}(m) &=& (\mathit{ex}.\href{../syntax/modules.html#syntax-export}{\mathsf{name}}, \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}')^\ast \\ + && \qquad (\mathrel{\mbox{if}} \mathit{ex}^\ast = m.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}} \wedge {} \href{../valid/modules.html#valid-module}{\vdash} m : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} {\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'}^\ast) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Module Instances

    +
    +

    \(\mathrm{instance\_export}(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../syntax/values.html#syntax-name}{\mathit{name}}) : \href{../exec/runtime.html#syntax-externval}{\mathit{externval}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Assert: due to validity of the module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\), all its export names are different.

    2. +
    3. If there exists an \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}\) such that name \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i.\href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}\) equals \(\href{../syntax/values.html#syntax-name}{\mathit{name}}\), then:

      +
        +
      1. Return the external value \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i.\href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}\).

      2. +
      +
    4. +
    5. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    6. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{instance\_export}(m, \href{../syntax/values.html#syntax-name}{\mathit{name}}) &=& m.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}[i].\href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}} && (\mathrel{\mbox{if}} m.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}[i].\href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}} = \href{../syntax/values.html#syntax-name}{\mathit{name}}) \\ +\mathrm{instance\_export}(m, \href{../syntax/values.html#syntax-name}{\mathit{name}}) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Functions

    +
    +

    \(\mathrm{func\_alloc}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}}) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}})\)

    +
      +
    1. Pre-condition: \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) is \(valid <valid-functype>\).

    2. +
    3. Let \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\) be the result of allocating a host function in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) and host function code \(\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}}\).

    4. +
    5. Return the new store paired with \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{func\_alloc}(S, \mathit{ft}, \mathit{code}) &=& (S', \mathit{a}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#alloc-hostfunc}{\mathrm{allochostfunc}}(S, \mathit{ft}, \mathit{code}) = S', \mathit{a}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operation assumes that \(\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}}\) satisfies the pre- and post-conditions required for a function instance with type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    +

    Regular (non-host) function instances can only be created indirectly through module instantiation.

    +
    +
    +
    +

    \(\mathrm{func\_type}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}) : \href{../syntax/types.html#syntax-functype}{\mathit{functype}}\)

    +
      +
    1. Return \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a].\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}\).

    2. +
    3. Post-condition: the returned function type is valid.

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{func\_type}(S, a) &=& S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a].\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}} \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{func\_invoke}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}})\)

    +
      +
    1. Try invoking the function \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\) in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) as arguments:

    2. +
    +
    +
      +
    1. If it succeeds with values \({\href{../exec/runtime.html#syntax-val}{\mathit{val}}'}^\ast\) as results, then let \(\mathit{result}\) be \({\href{../exec/runtime.html#syntax-val}{\mathit{val}}'}^\ast\).

    2. +
    3. Else it has trapped, hence let \(\mathit{result}\) be \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    +
    +
      +
    1. Return the new store paired with \(\mathit{result}\).

    2. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{func\_invoke}(S, a, v^\ast) &=& (S', {v'}^\ast) && (\mathrel{\mbox{if}} \href{../exec/modules.html#exec-invocation}{\mathrm{invoke}}(S, a, v^\ast) \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; {v'}^\ast) \\ +\mathrm{func\_invoke}(S, a, v^\ast) &=& (S', \href{../appendix/embedding.html#embed-error}{\mathsf{error}}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#exec-invocation}{\mathrm{invoke}}(S, a, v^\ast) \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The store may be modified even in case of an error.

    +
    +
    +
    +
    +

    Tables

    +
    +

    \(\mathrm{table\_alloc}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}})\)

    +
      +
    1. Pre-condition: \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) is \(valid <valid-tabletype>\).

    2. +
    3. Let \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}\) be the result of allocating a table in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) and initialization value \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\).

    4. +
    5. Return the new store paired with \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{table\_alloc}(S, \mathit{tt}, r) &=& (S', \mathit{a}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#alloc-table}{\mathrm{alloctable}}(S, \mathit{tt}, r) = S', \mathit{a}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{table\_type}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}) : \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\)

    +
      +
    1. Return \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}\).

    2. +
    3. Post-condition: the returned table type is \(valid <valid-tabletype>\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{table\_type}(S, a) &=& S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}} \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{table\_read}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}, i:\href{../syntax/values.html#syntax-int}{\mathit{u32}}) : \href{../exec/runtime.html#syntax-ref}{\mathit{ref}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Let \(\mathit{ti}\) be the table instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}]\).

    2. +
    3. If \(i\) is larger than or equal to the length of \(\mathit{ti}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    5. Else, return the reference value \(\mathit{ti}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i]\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{table\_read}(S, a, i) &=& r && (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i] = r) \\ +\mathrm{table\_read}(S, a, i) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{table\_write}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}, i:\href{../syntax/values.html#syntax-int}{\mathit{u32}}, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) : \href{../exec/runtime.html#syntax-store}{\mathit{store}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Let \(\mathit{ti}\) be the table instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}]\).

    2. +
    3. If \(i\) is larger than or equal to the length of \(\mathit{ti}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    5. Replace \(\mathit{ti}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i]\) with the reference value \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\).

    6. +
    7. Return the updated store.

    8. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{table\_write}(S, a, i, r) &=& S' && (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i] = r) \\ +\mathrm{table\_write}(S, a, i, r) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{table\_size}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}) : \href{../syntax/values.html#syntax-int}{\mathit{u32}}\)

    +
      +
    1. Return the length of \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\).

    2. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{table\_size}(S, a) &=& n && + (\mathrel{\mbox{if}} |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}| = n) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{table\_grow}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}, n:\href{../syntax/values.html#syntax-int}{\mathit{u32}}, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) : \href{../exec/runtime.html#syntax-store}{\mathit{store}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Try growing the table instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}]\) by \(n\) elements with initialization value \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\):

      +
        +
      1. If it succeeds, return the updated store.

      2. +
      3. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

      4. +
      +
    2. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{table\_grow}(S, a, n, r) &=& S' && + (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a] = \href{../exec/modules.html#grow-table}{\mathrm{growtable}}(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a], n, r)) \\ +\mathrm{table\_grow}(S, a, n, r) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Memories

    +
    +

    \(\mathrm{mem\_alloc}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}})\)

    +
      +
    1. Pre-condition: \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\) is \(valid <valid-memtype>\).

    2. +
    3. Let \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}\) be the result of allocating a memory in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\).

    4. +
    5. Return the new store paired with \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{mem\_alloc}(S, \mathit{mt}) &=& (S', \mathit{a}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#alloc-mem}{\mathrm{allocmem}}(S, \mathit{mt}) = S', \mathit{a}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{mem\_type}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}) : \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\)

    +
      +
    1. Return \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}\).

    2. +
    3. Post-condition: the returned memory type is \(valid <valid-memtype>\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{mem\_type}(S, a) &=& S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}} \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{mem\_read}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}, i:\href{../syntax/values.html#syntax-int}{\mathit{u32}}) : \href{../syntax/values.html#syntax-byte}{\mathit{byte}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Let \(\mathit{mi}\) be the memory instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}]\).

    2. +
    3. If \(i\) is larger than or equal to the length of \(\mathit{mi}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    5. Else, return the byte \(\mathit{mi}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[i]\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{mem\_read}(S, a, i) &=& b && (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[i] = b) \\ +\mathrm{mem\_read}(S, a, i) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{mem\_write}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}, i:\href{../syntax/values.html#syntax-int}{\mathit{u32}}, \href{../syntax/values.html#syntax-byte}{\mathit{byte}}) : \href{../exec/runtime.html#syntax-store}{\mathit{store}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Let \(\mathit{mi}\) be the memory instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}]\).

    2. +
    3. If \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) is larger than or equal to the length of \(\mathit{mi}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    4. +
    5. Replace \(\mathit{mi}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[i]\) with \(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}\).

    6. +
    7. Return the updated store.

    8. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{mem\_write}(S, a, i, b) &=& S' && (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[i] = b) \\ +\mathrm{mem\_write}(S, a, i, b) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{mem\_size}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}) : \href{../syntax/values.html#syntax-int}{\mathit{u32}}\)

    +
      +
    1. Return the length of \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) divided by the page size.

    2. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{mem\_size}(S, a) &=& n && + (\mathrel{\mbox{if}} |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| = n \cdot 64\,\mathrm{Ki}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{mem\_grow}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}, n:\href{../syntax/values.html#syntax-int}{\mathit{u32}}) : \href{../exec/runtime.html#syntax-store}{\mathit{store}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Try growing the memory instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}]\) by \(n\) pages:

      +
        +
      1. If it succeeds, return the updated store.

      2. +
      3. Else, return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

      4. +
      +
    2. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{mem\_grow}(S, a, n) &=& S' && + (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a] = \href{../exec/modules.html#grow-mem}{\mathrm{growmem}}(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a], n)) \\ +\mathrm{mem\_grow}(S, a, n) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Globals

    +
    +

    \(\mathrm{global\_alloc}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}) : (\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}})\)

    +
      +
    1. Pre-condition: \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\) is \(valid <valid-globaltype>\).

    2. +
    3. Let \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}\) be the result of allocating a global in \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}\) with global type \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\) and initialization value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\).

    4. +
    5. Return the new store paired with \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}\).

    6. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{global\_alloc}(S, \mathit{gt}, v) &=& (S', \mathit{a}) && (\mathrel{\mbox{if}} \href{../exec/modules.html#alloc-global}{\mathrm{allocglobal}}(S, \mathit{gt}, v) = S', \mathit{a}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{global\_type}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}) : \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\)

    +
      +
    1. Return \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}\).

    2. +
    3. Post-condition: the returned global type is \(valid <valid-globaltype>\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{global\_type}(S, a) &=& S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}} \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{global\_read}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}) : \href{../exec/runtime.html#syntax-val}{\mathit{val}}\)

    +
      +
    1. Let \(\mathit{gi}\) be the global instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}]\).

    2. +
    3. Return the value \(\mathit{gi}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}\).

    4. +
    +
    +\[\begin{split}\begin{array}{lclll} +\mathrm{global\_read}(S, a) &=& v && (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}} = v) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathrm{global\_write}(\href{../exec/runtime.html#syntax-store}{\mathit{store}}, \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}) : \href{../exec/runtime.html#syntax-store}{\mathit{store}} ~|~ \href{../appendix/embedding.html#embed-error}{\mathit{error}}\)

    +
      +
    1. Let \(\mathit{gi}\) be the global instance \(\href{../exec/runtime.html#syntax-store}{\mathit{store}}.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}]\).

    2. +
    3. Let \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) be the structure of the global type \(\mathit{gi}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}\).

    4. +
    5. If \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}\) is not \(\href{../syntax/types.html#syntax-mut}{\mathsf{var}}\), then return \(\href{../appendix/embedding.html#embed-error}{\mathsf{error}}\).

    6. +
    7. Replace \(\mathit{gi}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}\) with the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\).

    8. +
    9. Return the updated store.

    10. +
    +
    +\[\begin{split}~ \\ +\begin{array}{lclll} +\mathrm{global\_write}(S, a, v) &=& S' && (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}} = \href{../syntax/types.html#syntax-mut}{\mathsf{var}}~t \wedge S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}} = v) \\ +\mathrm{global\_write}(S, a, v) &=& \href{../appendix/embedding.html#embed-error}{\mathsf{error}} && (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/implementation.html b/core/appendix/implementation.html new file mode 100644 index 00000000..7abf7cbe --- /dev/null +++ b/core/appendix/implementation.html @@ -0,0 +1,219 @@ + + + + + + + + + Implementation Limitations — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Implementation Limitations

    +

    Implementations typically impose additional restrictions on a number of aspects of a WebAssembly module or execution. +These may stem from:

    +
      +
    • physical resource limits,

    • +
    • constraints imposed by the embedder or its environment,

    • +
    • limitations of selected implementation strategies.

    • +
    +

    This section lists allowed limitations. +Where restrictions take the form of numeric limits, no minimum requirements are given, +nor are the limits assumed to be concrete, fixed numbers. +However, it is expected that all implementations have “reasonably” large limits to enable common applications.

    +
    +

    Note

    +

    A conforming implementation is not allowed to leave out individual features. +However, designated subsets of WebAssembly may be specified in the future.

    +
    +
    +

    Syntactic Limits

    +
    +

    Structure

    +

    An implementation may impose restrictions on the following dimensions of a module:

    + +

    If the limits of an implementation are exceeded for a given module, +then the implementation may reject the validation, compilation, or instantiation of that module with an embedder-specific error.

    +
    +

    Note

    +

    The last item allows embedders that operate in limited environments without support for +Unicode to limit the +names of imports and exports +to common subsets like ASCII.

    +
    +
    +
    +

    Binary Format

    +

    For a module given in binary format, additional limitations may be imposed on the following dimensions:

    + +
    +
    +

    Text Format

    +

    For a module given in text format, additional limitations may be imposed on the following dimensions:

    + +
    +
    +
    +

    Validation

    +

    An implementation may defer validation of individual functions until they are first invoked.

    +

    If a function turns out to be invalid, then the invocation, and every consecutive call to the same function, results in a trap.

    +
    +

    Note

    +

    This is to allow implementations to use interpretation or just-in-time compilation for functions. +The function must still be fully validated before execution of its body begins.

    +
    +
    +
    +

    Execution

    +

    Restrictions on the following dimensions may be imposed during execution of a WebAssembly program:

    + +

    If the runtime limits of an implementation are exceeded during execution of a computation, +then it may terminate that computation and report an embedder-specific error to the invoking code.

    +

    Some of the above limits may already be verified during instantiation, in which case an implementation may report exceedance in the same manner as for syntactic limits.

    +
    +

    Note

    +

    Concrete limits are usually not fixed but may be dependent on specifics, interdependent, vary over time, or depend on other implementation- or embedder-specific situations or events.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/index-instructions.html b/core/appendix/index-instructions.html new file mode 100644 index 00000000..8eaa5ffb --- /dev/null +++ b/core/appendix/index-instructions.html @@ -0,0 +1,3154 @@ + + + + + + + + + Index of Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Index of Instructions

    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Instruction

    Binary Opcode

    Type

    Validation

    Execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\)

    \(\def\mathdef276#1{\mathtt{0x#1}}\mathdef276{00}\)

    \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}}\)

    \(\def\mathdef277#1{\mathtt{0x#1}}\mathdef277{01}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\mathit{bt}\)

    \(\def\mathdef278#1{\mathtt{0x#1}}\mathdef278{02}\)

    \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}\)

    \(\def\mathdef279#1{\mathtt{0x#1}}\mathdef279{03}\)

    \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}\)

    \(\def\mathdef280#1{\mathtt{0x#1}}\mathdef280{04}\)

    \([t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\)

    \(\def\mathdef281#1{\mathtt{0x#1}}\mathdef281{05}\)

    (reserved)

    \(\def\mathdef282#1{\mathtt{0x#1}}\mathdef282{06}\)

    (reserved)

    \(\def\mathdef283#1{\mathtt{0x#1}}\mathdef283{07}\)

    (reserved)

    \(\def\mathdef284#1{\mathtt{0x#1}}\mathdef284{08}\)

    (reserved)

    \(\def\mathdef285#1{\mathtt{0x#1}}\mathdef285{09}\)

    (reserved)

    \(\def\mathdef286#1{\mathtt{0x#1}}\mathdef286{0A}\)

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    \(\def\mathdef287#1{\mathtt{0x#1}}\mathdef287{0B}\)

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l\)

    \(\def\mathdef288#1{\mathtt{0x#1}}\mathdef288{0C}\)

    \([t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l\)

    \(\def\mathdef289#1{\mathtt{0x#1}}\mathdef289{0D}\)

    \([t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l\)

    \(\def\mathdef290#1{\mathtt{0x#1}}\mathdef290{0E}\)

    \([t_1^\ast~t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\)

    \(\def\mathdef291#1{\mathtt{0x#1}}\mathdef291{0F}\)

    \([t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x\)

    \(\def\mathdef292#1{\mathtt{0x#1}}\mathdef292{10}\)

    \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y\)

    \(\def\mathdef293#1{\mathtt{0x#1}}\mathdef293{11}\)

    \([t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\)

    validation

    execution

    (reserved)

    \(\def\mathdef294#1{\mathtt{0x#1}}\mathdef294{12}\)

    (reserved)

    \(\def\mathdef295#1{\mathtt{0x#1}}\mathdef295{13}\)

    (reserved)

    \(\def\mathdef296#1{\mathtt{0x#1}}\mathdef296{14}\)

    (reserved)

    \(\def\mathdef297#1{\mathtt{0x#1}}\mathdef297{15}\)

    (reserved)

    \(\def\mathdef298#1{\mathtt{0x#1}}\mathdef298{16}\)

    (reserved)

    \(\def\mathdef299#1{\mathtt{0x#1}}\mathdef299{17}\)

    (reserved)

    \(\def\mathdef300#1{\mathtt{0x#1}}\mathdef300{18}\)

    (reserved)

    \(\def\mathdef301#1{\mathtt{0x#1}}\mathdef301{19}\)

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\)

    \(\def\mathdef302#1{\mathtt{0x#1}}\mathdef302{1A}\)

    \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\)

    \(\def\mathdef303#1{\mathtt{0x#1}}\mathdef303{1B}\)

    \([t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t\)

    \(\def\mathdef304#1{\mathtt{0x#1}}\mathdef304{1C}\)

    \([t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    (reserved)

    \(\def\mathdef305#1{\mathtt{0x#1}}\mathdef305{1D}\)

    (reserved)

    \(\def\mathdef306#1{\mathtt{0x#1}}\mathdef306{1E}\)

    (reserved)

    \(\def\mathdef307#1{\mathtt{0x#1}}\mathdef307{1F}\)

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x\)

    \(\def\mathdef308#1{\mathtt{0x#1}}\mathdef308{20}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x\)

    \(\def\mathdef309#1{\mathtt{0x#1}}\mathdef309{21}\)

    \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x\)

    \(\def\mathdef310#1{\mathtt{0x#1}}\mathdef310{22}\)

    \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x\)

    \(\def\mathdef311#1{\mathtt{0x#1}}\mathdef311{23}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x\)

    \(\def\mathdef312#1{\mathtt{0x#1}}\mathdef312{24}\)

    \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x\)

    \(\def\mathdef313#1{\mathtt{0x#1}}\mathdef313{25}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\)

    \(\def\mathdef314#1{\mathtt{0x#1}}\mathdef314{26}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    (reserved)

    \(\def\mathdef315#1{\mathtt{0x#1}}\mathdef315{27}\)

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef316#1{\mathtt{0x#1}}\mathdef316{28}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef317#1{\mathtt{0x#1}}\mathdef317{29}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef318#1{\mathtt{0x#1}}\mathdef318{2A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef319#1{\mathtt{0x#1}}\mathdef319{2B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef320#1{\mathtt{0x#1}}\mathdef320{2C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef321#1{\mathtt{0x#1}}\mathdef321{2D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef322#1{\mathtt{0x#1}}\mathdef322{2E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef323#1{\mathtt{0x#1}}\mathdef323{2F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef324#1{\mathtt{0x#1}}\mathdef324{30}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef325#1{\mathtt{0x#1}}\mathdef325{31}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef326#1{\mathtt{0x#1}}\mathdef326{32}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef327#1{\mathtt{0x#1}}\mathdef327{33}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef328#1{\mathtt{0x#1}}\mathdef328{34}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef329#1{\mathtt{0x#1}}\mathdef329{35}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef330#1{\mathtt{0x#1}}\mathdef330{36}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef331#1{\mathtt{0x#1}}\mathdef331{37}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef332#1{\mathtt{0x#1}}\mathdef332{38}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef333#1{\mathtt{0x#1}}\mathdef333{39}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef334#1{\mathtt{0x#1}}\mathdef334{3A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef335#1{\mathtt{0x#1}}\mathdef335{3B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef336#1{\mathtt{0x#1}}\mathdef336{3C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef337#1{\mathtt{0x#1}}\mathdef337{3D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef338#1{\mathtt{0x#1}}\mathdef338{3E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\)

    \(\def\mathdef339#1{\mathtt{0x#1}}\mathdef339{3F}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\)

    \(\def\mathdef340#1{\mathtt{0x#1}}\mathdef340{40}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i32}}\)

    \(\def\mathdef341#1{\mathtt{0x#1}}\mathdef341{41}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i64}}\)

    \(\def\mathdef342#1{\mathtt{0x#1}}\mathdef342{42}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-float}{\mathit{f32}}\)

    \(\def\mathdef343#1{\mathtt{0x#1}}\mathdef343{43}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-float}{\mathit{f64}}\)

    \(\def\mathdef344#1{\mathtt{0x#1}}\mathdef344{44}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}}\)

    \(\def\mathdef345#1{\mathtt{0x#1}}\mathdef345{45}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}}\)

    \(\def\mathdef346#1{\mathtt{0x#1}}\mathdef346{46}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}}\)

    \(\def\mathdef347#1{\mathtt{0x#1}}\mathdef347{47}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef348#1{\mathtt{0x#1}}\mathdef348{48}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u}\)

    \(\def\mathdef349#1{\mathtt{0x#1}}\mathdef349{49}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef350#1{\mathtt{0x#1}}\mathdef350{4A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u}\)

    \(\def\mathdef351#1{\mathtt{0x#1}}\mathdef351{4B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef352#1{\mathtt{0x#1}}\mathdef352{4C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u}\)

    \(\def\mathdef353#1{\mathtt{0x#1}}\mathdef353{4D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef354#1{\mathtt{0x#1}}\mathdef354{4E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u}\)

    \(\def\mathdef355#1{\mathtt{0x#1}}\mathdef355{4F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}}\)

    \(\def\mathdef356#1{\mathtt{0x#1}}\mathdef356{50}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}}\)

    \(\def\mathdef357#1{\mathtt{0x#1}}\mathdef357{51}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}}\)

    \(\def\mathdef358#1{\mathtt{0x#1}}\mathdef358{52}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef359#1{\mathtt{0x#1}}\mathdef359{53}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u}\)

    \(\def\mathdef360#1{\mathtt{0x#1}}\mathdef360{54}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef361#1{\mathtt{0x#1}}\mathdef361{55}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u}\)

    \(\def\mathdef362#1{\mathtt{0x#1}}\mathdef362{56}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef363#1{\mathtt{0x#1}}\mathdef363{57}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u}\)

    \(\def\mathdef364#1{\mathtt{0x#1}}\mathdef364{58}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef365#1{\mathtt{0x#1}}\mathdef365{59}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u}\)

    \(\def\mathdef366#1{\mathtt{0x#1}}\mathdef366{5A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}}\)

    \(\def\mathdef367#1{\mathtt{0x#1}}\mathdef367{5B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}}\)

    \(\def\mathdef368#1{\mathtt{0x#1}}\mathdef368{5C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\)

    \(\def\mathdef369#1{\mathtt{0x#1}}\mathdef369{5D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\)

    \(\def\mathdef370#1{\mathtt{0x#1}}\mathdef370{5E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\)

    \(\def\mathdef371#1{\mathtt{0x#1}}\mathdef371{5F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\)

    \(\def\mathdef372#1{\mathtt{0x#1}}\mathdef372{60}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}}\)

    \(\def\mathdef373#1{\mathtt{0x#1}}\mathdef373{61}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}}\)

    \(\def\mathdef374#1{\mathtt{0x#1}}\mathdef374{62}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\)

    \(\def\mathdef375#1{\mathtt{0x#1}}\mathdef375{63}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\)

    \(\def\mathdef376#1{\mathtt{0x#1}}\mathdef376{64}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\)

    \(\def\mathdef377#1{\mathtt{0x#1}}\mathdef377{65}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\)

    \(\def\mathdef378#1{\mathtt{0x#1}}\mathdef378{66}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}}\)

    \(\def\mathdef379#1{\mathtt{0x#1}}\mathdef379{67}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}}\)

    \(\def\mathdef380#1{\mathtt{0x#1}}\mathdef380{68}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}}\)

    \(\def\mathdef381#1{\mathtt{0x#1}}\mathdef381{69}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\)

    \(\def\mathdef382#1{\mathtt{0x#1}}\mathdef382{6A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}}\)

    \(\def\mathdef383#1{\mathtt{0x#1}}\mathdef383{6B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\)

    \(\def\mathdef384#1{\mathtt{0x#1}}\mathdef384{6C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s}\)

    \(\def\mathdef385#1{\mathtt{0x#1}}\mathdef385{6D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u}\)

    \(\def\mathdef386#1{\mathtt{0x#1}}\mathdef386{6E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s}\)

    \(\def\mathdef387#1{\mathtt{0x#1}}\mathdef387{6F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u}\)

    \(\def\mathdef388#1{\mathtt{0x#1}}\mathdef388{70}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}}\)

    \(\def\mathdef389#1{\mathtt{0x#1}}\mathdef389{71}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}}\)

    \(\def\mathdef390#1{\mathtt{0x#1}}\mathdef390{72}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}}\)

    \(\def\mathdef391#1{\mathtt{0x#1}}\mathdef391{73}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}}\)

    \(\def\mathdef392#1{\mathtt{0x#1}}\mathdef392{74}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef393#1{\mathtt{0x#1}}\mathdef393{75}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef394#1{\mathtt{0x#1}}\mathdef394{76}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}}\)

    \(\def\mathdef395#1{\mathtt{0x#1}}\mathdef395{77}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}}\)

    \(\def\mathdef396#1{\mathtt{0x#1}}\mathdef396{78}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}}\)

    \(\def\mathdef397#1{\mathtt{0x#1}}\mathdef397{79}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}}\)

    \(\def\mathdef398#1{\mathtt{0x#1}}\mathdef398{7A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}}\)

    \(\def\mathdef399#1{\mathtt{0x#1}}\mathdef399{7B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\)

    \(\def\mathdef400#1{\mathtt{0x#1}}\mathdef400{7C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}}\)

    \(\def\mathdef401#1{\mathtt{0x#1}}\mathdef401{7D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\)

    \(\def\mathdef402#1{\mathtt{0x#1}}\mathdef402{7E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s}\)

    \(\def\mathdef403#1{\mathtt{0x#1}}\mathdef403{7F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u}\)

    \(\def\mathdef404#1{\mathtt{0x#1}}\mathdef404{80}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s}\)

    \(\def\mathdef405#1{\mathtt{0x#1}}\mathdef405{81}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u}\)

    \(\def\mathdef406#1{\mathtt{0x#1}}\mathdef406{82}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}}\)

    \(\def\mathdef407#1{\mathtt{0x#1}}\mathdef407{83}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}}\)

    \(\def\mathdef408#1{\mathtt{0x#1}}\mathdef408{84}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}}\)

    \(\def\mathdef409#1{\mathtt{0x#1}}\mathdef409{85}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}}\)

    \(\def\mathdef410#1{\mathtt{0x#1}}\mathdef410{86}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef411#1{\mathtt{0x#1}}\mathdef411{87}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef412#1{\mathtt{0x#1}}\mathdef412{88}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}}\)

    \(\def\mathdef413#1{\mathtt{0x#1}}\mathdef413{89}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}}\)

    \(\def\mathdef414#1{\mathtt{0x#1}}\mathdef414{8A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}}\)

    \(\def\mathdef415#1{\mathtt{0x#1}}\mathdef415{8B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}\)

    \(\def\mathdef416#1{\mathtt{0x#1}}\mathdef416{8C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}}\)

    \(\def\mathdef417#1{\mathtt{0x#1}}\mathdef417{8D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}}\)

    \(\def\mathdef418#1{\mathtt{0x#1}}\mathdef418{8E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\)

    \(\def\mathdef419#1{\mathtt{0x#1}}\mathdef419{8F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}}\)

    \(\def\mathdef420#1{\mathtt{0x#1}}\mathdef420{90}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}}\)

    \(\def\mathdef421#1{\mathtt{0x#1}}\mathdef421{91}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\)

    \(\def\mathdef422#1{\mathtt{0x#1}}\mathdef422{92}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}}\)

    \(\def\mathdef423#1{\mathtt{0x#1}}\mathdef423{93}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\)

    \(\def\mathdef424#1{\mathtt{0x#1}}\mathdef424{94}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\)

    \(\def\mathdef425#1{\mathtt{0x#1}}\mathdef425{95}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}}\)

    \(\def\mathdef426#1{\mathtt{0x#1}}\mathdef426{96}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}}\)

    \(\def\mathdef427#1{\mathtt{0x#1}}\mathdef427{97}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}}\)

    \(\def\mathdef428#1{\mathtt{0x#1}}\mathdef428{98}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}}\)

    \(\def\mathdef429#1{\mathtt{0x#1}}\mathdef429{99}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}\)

    \(\def\mathdef430#1{\mathtt{0x#1}}\mathdef430{9A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}}\)

    \(\def\mathdef431#1{\mathtt{0x#1}}\mathdef431{9B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}}\)

    \(\def\mathdef432#1{\mathtt{0x#1}}\mathdef432{9C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\)

    \(\def\mathdef433#1{\mathtt{0x#1}}\mathdef433{9D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}}\)

    \(\def\mathdef434#1{\mathtt{0x#1}}\mathdef434{9E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}}\)

    \(\def\mathdef435#1{\mathtt{0x#1}}\mathdef435{9F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\)

    \(\def\mathdef436#1{\mathtt{0x#1}}\mathdef436{A0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}}\)

    \(\def\mathdef437#1{\mathtt{0x#1}}\mathdef437{A1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\)

    \(\def\mathdef438#1{\mathtt{0x#1}}\mathdef438{A2}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\)

    \(\def\mathdef439#1{\mathtt{0x#1}}\mathdef439{A3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}}\)

    \(\def\mathdef440#1{\mathtt{0x#1}}\mathdef440{A4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}}\)

    \(\def\mathdef441#1{\mathtt{0x#1}}\mathdef441{A5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}}\)

    \(\def\mathdef442#1{\mathtt{0x#1}}\mathdef442{A6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\)

    \(\def\mathdef443#1{\mathtt{0x#1}}\mathdef443{A7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s}\)

    \(\def\mathdef444#1{\mathtt{0x#1}}\mathdef444{A8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u}\)

    \(\def\mathdef445#1{\mathtt{0x#1}}\mathdef445{A9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s}\)

    \(\def\mathdef446#1{\mathtt{0x#1}}\mathdef446{AA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u}\)

    \(\def\mathdef447#1{\mathtt{0x#1}}\mathdef447{AB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s}\)

    \(\def\mathdef448#1{\mathtt{0x#1}}\mathdef448{AC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u}\)

    \(\def\mathdef449#1{\mathtt{0x#1}}\mathdef449{AD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s}\)

    \(\def\mathdef450#1{\mathtt{0x#1}}\mathdef450{AE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u}\)

    \(\def\mathdef451#1{\mathtt{0x#1}}\mathdef451{AF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s}\)

    \(\def\mathdef452#1{\mathtt{0x#1}}\mathdef452{B0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u}\)

    \(\def\mathdef453#1{\mathtt{0x#1}}\mathdef453{B1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s}\)

    \(\def\mathdef454#1{\mathtt{0x#1}}\mathdef454{B2}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u}\)

    \(\def\mathdef455#1{\mathtt{0x#1}}\mathdef455{B3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s}\)

    \(\def\mathdef456#1{\mathtt{0x#1}}\mathdef456{B4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u}\)

    \(\def\mathdef457#1{\mathtt{0x#1}}\mathdef457{B5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\)

    \(\def\mathdef458#1{\mathtt{0x#1}}\mathdef458{B6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s}\)

    \(\def\mathdef459#1{\mathtt{0x#1}}\mathdef459{B7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u}\)

    \(\def\mathdef460#1{\mathtt{0x#1}}\mathdef460{B8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s}\)

    \(\def\mathdef461#1{\mathtt{0x#1}}\mathdef461{B9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u}\)

    \(\def\mathdef462#1{\mathtt{0x#1}}\mathdef462{BA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\)

    \(\def\mathdef463#1{\mathtt{0x#1}}\mathdef463{BB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\)

    \(\def\mathdef464#1{\mathtt{0x#1}}\mathdef464{BC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\)

    \(\def\mathdef465#1{\mathtt{0x#1}}\mathdef465{BD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\)

    \(\def\mathdef466#1{\mathtt{0x#1}}\mathdef466{BE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\)

    \(\def\mathdef467#1{\mathtt{0x#1}}\mathdef467{BF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s}\)

    \(\def\mathdef468#1{\mathtt{0x#1}}\mathdef468{C0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s}\)

    \(\def\mathdef469#1{\mathtt{0x#1}}\mathdef469{C1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s}\)

    \(\def\mathdef470#1{\mathtt{0x#1}}\mathdef470{C2}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s}\)

    \(\def\mathdef471#1{\mathtt{0x#1}}\mathdef471{C3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{32\_s}\)

    \(\def\mathdef472#1{\mathtt{0x#1}}\mathdef472{C4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    (reserved)

    \(\def\mathdef473#1{\mathtt{0x#1}}\mathdef473{C5}\)

    (reserved)

    \(\def\mathdef474#1{\mathtt{0x#1}}\mathdef474{C6}\)

    (reserved)

    \(\def\mathdef475#1{\mathtt{0x#1}}\mathdef475{C7}\)

    (reserved)

    \(\def\mathdef476#1{\mathtt{0x#1}}\mathdef476{C8}\)

    (reserved)

    \(\def\mathdef477#1{\mathtt{0x#1}}\mathdef477{C9}\)

    (reserved)

    \(\def\mathdef478#1{\mathtt{0x#1}}\mathdef478{CA}\)

    (reserved)

    \(\def\mathdef479#1{\mathtt{0x#1}}\mathdef479{CB}\)

    (reserved)

    \(\def\mathdef480#1{\mathtt{0x#1}}\mathdef480{CC}\)

    (reserved)

    \(\def\mathdef481#1{\mathtt{0x#1}}\mathdef481{CD}\)

    (reserved)

    \(\def\mathdef482#1{\mathtt{0x#1}}\mathdef482{CE}\)

    (reserved)

    \(\def\mathdef483#1{\mathtt{0x#1}}\mathdef483{CF}\)

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\)

    \(\def\mathdef484#1{\mathtt{0x#1}}\mathdef484{D0}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}}\)

    \(\def\mathdef485#1{\mathtt{0x#1}}\mathdef485{D1}\)

    \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x\)

    \(\def\mathdef486#1{\mathtt{0x#1}}\mathdef486{D2}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}]\)

    validation

    execution

    (reserved)

    \(\def\mathdef487#1{\mathtt{0x#1}}\mathdef487{D3}\)

    (reserved)

    \(\def\mathdef488#1{\mathtt{0x#1}}\mathdef488{D4}\)

    (reserved)

    \(\def\mathdef489#1{\mathtt{0x#1}}\mathdef489{D5}\)

    (reserved)

    \(\def\mathdef490#1{\mathtt{0x#1}}\mathdef490{D6}\)

    (reserved)

    \(\def\mathdef491#1{\mathtt{0x#1}}\mathdef491{D7}\)

    (reserved)

    \(\def\mathdef492#1{\mathtt{0x#1}}\mathdef492{D8}\)

    (reserved)

    \(\def\mathdef493#1{\mathtt{0x#1}}\mathdef493{D9}\)

    (reserved)

    \(\def\mathdef494#1{\mathtt{0x#1}}\mathdef494{DA}\)

    (reserved)

    \(\def\mathdef495#1{\mathtt{0x#1}}\mathdef495{DB}\)

    (reserved)

    \(\def\mathdef496#1{\mathtt{0x#1}}\mathdef496{DC}\)

    (reserved)

    \(\def\mathdef497#1{\mathtt{0x#1}}\mathdef497{DD}\)

    (reserved)

    \(\def\mathdef498#1{\mathtt{0x#1}}\mathdef498{DE}\)

    (reserved)

    \(\def\mathdef499#1{\mathtt{0x#1}}\mathdef499{DF}\)

    (reserved)

    \(\def\mathdef500#1{\mathtt{0x#1}}\mathdef500{E0}\)

    (reserved)

    \(\def\mathdef501#1{\mathtt{0x#1}}\mathdef501{E1}\)

    (reserved)

    \(\def\mathdef502#1{\mathtt{0x#1}}\mathdef502{E2}\)

    (reserved)

    \(\def\mathdef503#1{\mathtt{0x#1}}\mathdef503{E3}\)

    (reserved)

    \(\def\mathdef504#1{\mathtt{0x#1}}\mathdef504{E4}\)

    (reserved)

    \(\def\mathdef505#1{\mathtt{0x#1}}\mathdef505{E5}\)

    (reserved)

    \(\def\mathdef506#1{\mathtt{0x#1}}\mathdef506{E6}\)

    (reserved)

    \(\def\mathdef507#1{\mathtt{0x#1}}\mathdef507{E7}\)

    (reserved)

    \(\def\mathdef508#1{\mathtt{0x#1}}\mathdef508{E8}\)

    (reserved)

    \(\def\mathdef509#1{\mathtt{0x#1}}\mathdef509{E9}\)

    (reserved)

    \(\def\mathdef510#1{\mathtt{0x#1}}\mathdef510{EA}\)

    (reserved)

    \(\def\mathdef511#1{\mathtt{0x#1}}\mathdef511{EB}\)

    (reserved)

    \(\def\mathdef512#1{\mathtt{0x#1}}\mathdef512{EC}\)

    (reserved)

    \(\def\mathdef513#1{\mathtt{0x#1}}\mathdef513{ED}\)

    (reserved)

    \(\def\mathdef514#1{\mathtt{0x#1}}\mathdef514{EE}\)

    (reserved)

    \(\def\mathdef515#1{\mathtt{0x#1}}\mathdef515{EF}\)

    (reserved)

    \(\def\mathdef516#1{\mathtt{0x#1}}\mathdef516{F0}\)

    (reserved)

    \(\def\mathdef517#1{\mathtt{0x#1}}\mathdef517{F1}\)

    (reserved)

    \(\def\mathdef518#1{\mathtt{0x#1}}\mathdef518{F2}\)

    (reserved)

    \(\def\mathdef519#1{\mathtt{0x#1}}\mathdef519{F3}\)

    (reserved)

    \(\def\mathdef520#1{\mathtt{0x#1}}\mathdef520{F4}\)

    (reserved)

    \(\def\mathdef521#1{\mathtt{0x#1}}\mathdef521{F5}\)

    (reserved)

    \(\def\mathdef522#1{\mathtt{0x#1}}\mathdef522{F6}\)

    (reserved)

    \(\def\mathdef523#1{\mathtt{0x#1}}\mathdef523{F7}\)

    (reserved)

    \(\def\mathdef524#1{\mathtt{0x#1}}\mathdef524{F8}\)

    (reserved)

    \(\def\mathdef525#1{\mathtt{0x#1}}\mathdef525{F9}\)

    (reserved)

    \(\def\mathdef526#1{\mathtt{0x#1}}\mathdef526{FA}\)

    (reserved)

    \(\def\mathdef527#1{\mathtt{0x#1}}\mathdef527{FB}\)

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s}\)

    \(\def\mathdef528#1{\mathtt{0x#1}}\mathdef528{FC}~\def\mathdef529#1{\mathtt{0x#1}}\mathdef529{00}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u}\)

    \(\def\mathdef530#1{\mathtt{0x#1}}\mathdef530{FC}~\def\mathdef531#1{\mathtt{0x#1}}\mathdef531{01}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s}\)

    \(\def\mathdef532#1{\mathtt{0x#1}}\mathdef532{FC}~\def\mathdef533#1{\mathtt{0x#1}}\mathdef533{02}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u}\)

    \(\def\mathdef534#1{\mathtt{0x#1}}\mathdef534{FC}~\def\mathdef535#1{\mathtt{0x#1}}\mathdef535{03}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s}\)

    \(\def\mathdef536#1{\mathtt{0x#1}}\mathdef536{FC}~\def\mathdef537#1{\mathtt{0x#1}}\mathdef537{04}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u}\)

    \(\def\mathdef538#1{\mathtt{0x#1}}\mathdef538{FC}~\def\mathdef539#1{\mathtt{0x#1}}\mathdef539{05}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s}\)

    \(\def\mathdef540#1{\mathtt{0x#1}}\mathdef540{FC}~\def\mathdef541#1{\mathtt{0x#1}}\mathdef541{06}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u}\)

    \(\def\mathdef542#1{\mathtt{0x#1}}\mathdef542{FC}~\def\mathdef543#1{\mathtt{0x#1}}\mathdef543{07}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution, operator

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x\)

    \(\def\mathdef544#1{\mathtt{0x#1}}\mathdef544{FC}~\def\mathdef545#1{\mathtt{0x#1}}\mathdef545{08}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x\)

    \(\def\mathdef546#1{\mathtt{0x#1}}\mathdef546{FC}~\def\mathdef547#1{\mathtt{0x#1}}\mathdef547{09}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\)

    \(\def\mathdef548#1{\mathtt{0x#1}}\mathdef548{FC}~\def\mathdef549#1{\mathtt{0x#1}}\mathdef549{0A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\)

    \(\def\mathdef550#1{\mathtt{0x#1}}\mathdef550{FC}~\def\mathdef551#1{\mathtt{0x#1}}\mathdef551{0B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y\)

    \(\def\mathdef552#1{\mathtt{0x#1}}\mathdef552{FC}~\def\mathdef553#1{\mathtt{0x#1}}\mathdef553{0C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x\)

    \(\def\mathdef554#1{\mathtt{0x#1}}\mathdef554{FC}~\def\mathdef555#1{\mathtt{0x#1}}\mathdef555{0D}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y\)

    \(\def\mathdef556#1{\mathtt{0x#1}}\mathdef556{FC}~\def\mathdef557#1{\mathtt{0x#1}}\mathdef557{0E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x\)

    \(\def\mathdef558#1{\mathtt{0x#1}}\mathdef558{FC}~\def\mathdef559#1{\mathtt{0x#1}}\mathdef559{0F}\)

    \([t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x\)

    \(\def\mathdef560#1{\mathtt{0x#1}}\mathdef560{FC}~\def\mathdef561#1{\mathtt{0x#1}}\mathdef561{10}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x\)

    \(\def\mathdef562#1{\mathtt{0x#1}}\mathdef562{FC}~\def\mathdef563#1{\mathtt{0x#1}}\mathdef563{11}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef564#1{\mathtt{0x#1}}\mathdef564{FD}~~\def\mathdef565#1{\mathtt{0x#1}}\mathdef565{00}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef566#1{\mathtt{0x#1}}\mathdef566{FD}~~\def\mathdef567#1{\mathtt{0x#1}}\mathdef567{01}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef568#1{\mathtt{0x#1}}\mathdef568{FD}~~\def\mathdef569#1{\mathtt{0x#1}}\mathdef569{02}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef570#1{\mathtt{0x#1}}\mathdef570{FD}~~\def\mathdef571#1{\mathtt{0x#1}}\mathdef571{03}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef572#1{\mathtt{0x#1}}\mathdef572{FD}~~\def\mathdef573#1{\mathtt{0x#1}}\mathdef573{04}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_s}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef574#1{\mathtt{0x#1}}\mathdef574{FD}~~\def\mathdef575#1{\mathtt{0x#1}}\mathdef575{05}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_u}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef576#1{\mathtt{0x#1}}\mathdef576{FD}~~\def\mathdef577#1{\mathtt{0x#1}}\mathdef577{06}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef578#1{\mathtt{0x#1}}\mathdef578{FD}~~\def\mathdef579#1{\mathtt{0x#1}}\mathdef579{07}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef580#1{\mathtt{0x#1}}\mathdef580{FD}~~\def\mathdef581#1{\mathtt{0x#1}}\mathdef581{08}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef582#1{\mathtt{0x#1}}\mathdef582{FD}~~\def\mathdef583#1{\mathtt{0x#1}}\mathdef583{09}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef584#1{\mathtt{0x#1}}\mathdef584{FD}~~\def\mathdef585#1{\mathtt{0x#1}}\mathdef585{0A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    \(\def\mathdef586#1{\mathtt{0x#1}}\mathdef586{FD}~~\def\mathdef587#1{\mathtt{0x#1}}\mathdef587{0B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i128}}\)

    \(\def\mathdef588#1{\mathtt{0x#1}}\mathdef588{FD}~~\def\mathdef589#1{\mathtt{0x#1}}\mathdef589{0C}\)

    \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}^{16}\)

    \(\def\mathdef590#1{\mathtt{0x#1}}\mathdef590{FD}~~\def\mathdef591#1{\mathtt{0x#1}}\mathdef591{0D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}}\)

    \(\def\mathdef592#1{\mathtt{0x#1}}\mathdef592{FD}~~\def\mathdef593#1{\mathtt{0x#1}}\mathdef593{0E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef594#1{\mathtt{0x#1}}\mathdef594{FD}~~\def\mathdef595#1{\mathtt{0x#1}}\mathdef595{0F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef596#1{\mathtt{0x#1}}\mathdef596{FD}~~\def\mathdef597#1{\mathtt{0x#1}}\mathdef597{10}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef598#1{\mathtt{0x#1}}\mathdef598{FD}~~\def\mathdef599#1{\mathtt{0x#1}}\mathdef599{11}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef600#1{\mathtt{0x#1}}\mathdef600{FD}~~\def\mathdef601#1{\mathtt{0x#1}}\mathdef601{12}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef602#1{\mathtt{0x#1}}\mathdef602{FD}~~\def\mathdef603#1{\mathtt{0x#1}}\mathdef603{13}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    \(\def\mathdef604#1{\mathtt{0x#1}}\mathdef604{FD}~~\def\mathdef605#1{\mathtt{0x#1}}\mathdef605{14}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef606#1{\mathtt{0x#1}}\mathdef606{FD}~~\def\mathdef607#1{\mathtt{0x#1}}\mathdef607{15}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef608#1{\mathtt{0x#1}}\mathdef608{FD}~~\def\mathdef609#1{\mathtt{0x#1}}\mathdef609{16}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef610#1{\mathtt{0x#1}}\mathdef610{FD}~~\def\mathdef611#1{\mathtt{0x#1}}\mathdef611{17}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef612#1{\mathtt{0x#1}}\mathdef612{FD}~~\def\mathdef613#1{\mathtt{0x#1}}\mathdef613{18}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef614#1{\mathtt{0x#1}}\mathdef614{FD}~~\def\mathdef615#1{\mathtt{0x#1}}\mathdef615{19}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef616#1{\mathtt{0x#1}}\mathdef616{FD}~~\def\mathdef617#1{\mathtt{0x#1}}\mathdef617{1A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef618#1{\mathtt{0x#1}}\mathdef618{FD}~~\def\mathdef619#1{\mathtt{0x#1}}\mathdef619{1B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef620#1{\mathtt{0x#1}}\mathdef620{FD}~~\def\mathdef621#1{\mathtt{0x#1}}\mathdef621{1C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef622#1{\mathtt{0x#1}}\mathdef622{FD}~~\def\mathdef623#1{\mathtt{0x#1}}\mathdef623{1D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef624#1{\mathtt{0x#1}}\mathdef624{FD}~~\def\mathdef625#1{\mathtt{0x#1}}\mathdef625{1E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef626#1{\mathtt{0x#1}}\mathdef626{FD}~~\def\mathdef627#1{\mathtt{0x#1}}\mathdef627{1F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef628#1{\mathtt{0x#1}}\mathdef628{FD}~~\def\mathdef629#1{\mathtt{0x#1}}\mathdef629{20}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef630#1{\mathtt{0x#1}}\mathdef630{FD}~~\def\mathdef631#1{\mathtt{0x#1}}\mathdef631{21}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef632#1{\mathtt{0x#1}}\mathdef632{FD}~~\def\mathdef633#1{\mathtt{0x#1}}\mathdef633{22}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef634#1{\mathtt{0x#1}}\mathdef634{FD}~~\def\mathdef635#1{\mathtt{0x#1}}\mathdef635{23}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef636#1{\mathtt{0x#1}}\mathdef636{FD}~~\def\mathdef637#1{\mathtt{0x#1}}\mathdef637{24}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef638#1{\mathtt{0x#1}}\mathdef638{FD}~~\def\mathdef639#1{\mathtt{0x#1}}\mathdef639{25}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\)

    \(\def\mathdef640#1{\mathtt{0x#1}}\mathdef640{FD}~~\def\mathdef641#1{\mathtt{0x#1}}\mathdef641{26}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef642#1{\mathtt{0x#1}}\mathdef642{FD}~~\def\mathdef643#1{\mathtt{0x#1}}\mathdef643{27}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\)

    \(\def\mathdef644#1{\mathtt{0x#1}}\mathdef644{FD}~~\def\mathdef645#1{\mathtt{0x#1}}\mathdef645{28}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef646#1{\mathtt{0x#1}}\mathdef646{FD}~~\def\mathdef647#1{\mathtt{0x#1}}\mathdef647{29}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\)

    \(\def\mathdef648#1{\mathtt{0x#1}}\mathdef648{FD}~~\def\mathdef649#1{\mathtt{0x#1}}\mathdef649{2A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef650#1{\mathtt{0x#1}}\mathdef650{FD}~~\def\mathdef651#1{\mathtt{0x#1}}\mathdef651{2B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\)

    \(\def\mathdef652#1{\mathtt{0x#1}}\mathdef652{FD}~~\def\mathdef653#1{\mathtt{0x#1}}\mathdef653{2C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef654#1{\mathtt{0x#1}}\mathdef654{FD}~~\def\mathdef655#1{\mathtt{0x#1}}\mathdef655{2D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef656#1{\mathtt{0x#1}}\mathdef656{FD}~~\def\mathdef657#1{\mathtt{0x#1}}\mathdef657{2E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef658#1{\mathtt{0x#1}}\mathdef658{FD}~~\def\mathdef659#1{\mathtt{0x#1}}\mathdef659{2F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\)

    \(\def\mathdef660#1{\mathtt{0x#1}}\mathdef660{FD}~~\def\mathdef661#1{\mathtt{0x#1}}\mathdef661{30}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef662#1{\mathtt{0x#1}}\mathdef662{FD}~~\def\mathdef663#1{\mathtt{0x#1}}\mathdef663{31}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\)

    \(\def\mathdef664#1{\mathtt{0x#1}}\mathdef664{FD}~~\def\mathdef665#1{\mathtt{0x#1}}\mathdef665{32}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef666#1{\mathtt{0x#1}}\mathdef666{FD}~~\def\mathdef667#1{\mathtt{0x#1}}\mathdef667{33}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\)

    \(\def\mathdef668#1{\mathtt{0x#1}}\mathdef668{FD}~~\def\mathdef669#1{\mathtt{0x#1}}\mathdef669{34}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef670#1{\mathtt{0x#1}}\mathdef670{FD}~~\def\mathdef671#1{\mathtt{0x#1}}\mathdef671{35}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\)

    \(\def\mathdef672#1{\mathtt{0x#1}}\mathdef672{FD}~~\def\mathdef673#1{\mathtt{0x#1}}\mathdef673{36}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef674#1{\mathtt{0x#1}}\mathdef674{FD}~~\def\mathdef675#1{\mathtt{0x#1}}\mathdef675{37}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef676#1{\mathtt{0x#1}}\mathdef676{FD}~~\def\mathdef677#1{\mathtt{0x#1}}\mathdef677{38}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef678#1{\mathtt{0x#1}}\mathdef678{FD}~~\def\mathdef679#1{\mathtt{0x#1}}\mathdef679{39}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\)

    \(\def\mathdef680#1{\mathtt{0x#1}}\mathdef680{FD}~~\def\mathdef681#1{\mathtt{0x#1}}\mathdef681{3A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef682#1{\mathtt{0x#1}}\mathdef682{FD}~~\def\mathdef683#1{\mathtt{0x#1}}\mathdef683{3B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\)

    \(\def\mathdef684#1{\mathtt{0x#1}}\mathdef684{FD}~~\def\mathdef685#1{\mathtt{0x#1}}\mathdef685{3C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef686#1{\mathtt{0x#1}}\mathdef686{FD}~~\def\mathdef687#1{\mathtt{0x#1}}\mathdef687{3D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\)

    \(\def\mathdef688#1{\mathtt{0x#1}}\mathdef688{FD}~~\def\mathdef689#1{\mathtt{0x#1}}\mathdef689{3E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef690#1{\mathtt{0x#1}}\mathdef690{FD}~~\def\mathdef691#1{\mathtt{0x#1}}\mathdef691{3F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\)

    \(\def\mathdef692#1{\mathtt{0x#1}}\mathdef692{FD}~~\def\mathdef693#1{\mathtt{0x#1}}\mathdef693{40}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef694#1{\mathtt{0x#1}}\mathdef694{FD}~~\def\mathdef695#1{\mathtt{0x#1}}\mathdef695{41}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef696#1{\mathtt{0x#1}}\mathdef696{FD}~~\def\mathdef697#1{\mathtt{0x#1}}\mathdef697{42}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\)

    \(\def\mathdef698#1{\mathtt{0x#1}}\mathdef698{FD}~~\def\mathdef699#1{\mathtt{0x#1}}\mathdef699{43}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\)

    \(\def\mathdef700#1{\mathtt{0x#1}}\mathdef700{FD}~~\def\mathdef701#1{\mathtt{0x#1}}\mathdef701{44}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\)

    \(\def\mathdef702#1{\mathtt{0x#1}}\mathdef702{FD}~~\def\mathdef703#1{\mathtt{0x#1}}\mathdef703{45}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\)

    \(\def\mathdef704#1{\mathtt{0x#1}}\mathdef704{FD}~~\def\mathdef705#1{\mathtt{0x#1}}\mathdef705{46}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef706#1{\mathtt{0x#1}}\mathdef706{FD}~~\def\mathdef707#1{\mathtt{0x#1}}\mathdef707{47}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef708#1{\mathtt{0x#1}}\mathdef708{FD}~~\def\mathdef709#1{\mathtt{0x#1}}\mathdef709{48}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\)

    \(\def\mathdef710#1{\mathtt{0x#1}}\mathdef710{FD}~~\def\mathdef711#1{\mathtt{0x#1}}\mathdef711{49}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\)

    \(\def\mathdef712#1{\mathtt{0x#1}}\mathdef712{FD}~~\def\mathdef713#1{\mathtt{0x#1}}\mathdef713{4A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\)

    \(\def\mathdef714#1{\mathtt{0x#1}}\mathdef714{FD}~~\def\mathdef715#1{\mathtt{0x#1}}\mathdef715{4B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\)

    \(\def\mathdef716#1{\mathtt{0x#1}}\mathdef716{FD}~~\def\mathdef717#1{\mathtt{0x#1}}\mathdef717{4C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{not}}\)

    \(\def\mathdef718#1{\mathtt{0x#1}}\mathdef718{FD}~~\def\mathdef719#1{\mathtt{0x#1}}\mathdef719{4D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{and}}\)

    \(\def\mathdef720#1{\mathtt{0x#1}}\mathdef720{FD}~~\def\mathdef721#1{\mathtt{0x#1}}\mathdef721{4E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{andnot}}\)

    \(\def\mathdef722#1{\mathtt{0x#1}}\mathdef722{FD}~~\def\mathdef723#1{\mathtt{0x#1}}\mathdef723{4F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{or}}\)

    \(\def\mathdef724#1{\mathtt{0x#1}}\mathdef724{FD}~~\def\mathdef725#1{\mathtt{0x#1}}\mathdef725{50}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{xor}}\)

    \(\def\mathdef726#1{\mathtt{0x#1}}\mathdef726{FD}~~\def\mathdef727#1{\mathtt{0x#1}}\mathdef727{51}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitselect}}\)

    \(\def\mathdef728#1{\mathtt{0x#1}}\mathdef728{FD}~~\def\mathdef729#1{\mathtt{0x#1}}\mathdef729{52}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{any\_true}}\)

    \(\def\mathdef730#1{\mathtt{0x#1}}\mathdef730{FD}~~\def\mathdef731#1{\mathtt{0x#1}}\mathdef731{53}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef732#1{\mathtt{0x#1}}\mathdef732{FD}~~\def\mathdef733#1{\mathtt{0x#1}}\mathdef733{54}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef734#1{\mathtt{0x#1}}\mathdef734{FD}~~\def\mathdef735#1{\mathtt{0x#1}}\mathdef735{55}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef736#1{\mathtt{0x#1}}\mathdef736{FD}~~\def\mathdef737#1{\mathtt{0x#1}}\mathdef737{56}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef738#1{\mathtt{0x#1}}\mathdef738{FD}~~\def\mathdef739#1{\mathtt{0x#1}}\mathdef739{57}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef740#1{\mathtt{0x#1}}\mathdef740{FD}~~\def\mathdef741#1{\mathtt{0x#1}}\mathdef741{58}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef742#1{\mathtt{0x#1}}\mathdef742{FD}~~\def\mathdef743#1{\mathtt{0x#1}}\mathdef743{59}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef744#1{\mathtt{0x#1}}\mathdef744{FD}~~\def\mathdef745#1{\mathtt{0x#1}}\mathdef745{5A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{64\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef746#1{\mathtt{0x#1}}\mathdef746{FD}~~\def\mathdef747#1{\mathtt{0x#1}}\mathdef747{5B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef748#1{\mathtt{0x#1}}\mathdef748{FD}~~\def\mathdef749#1{\mathtt{0x#1}}\mathdef749{5C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    \(\def\mathdef750#1{\mathtt{0x#1}}\mathdef750{FD}~~\def\mathdef751#1{\mathtt{0x#1}}\mathdef751{5D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{demote}}\mathsf{\_f64x2\_zero}\)

    \(\def\mathdef752#1{\mathtt{0x#1}}\mathdef752{FD}~~\def\mathdef753#1{\mathtt{0x#1}}\mathdef753{5E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{promote}}\mathsf{\_low\_f32x4}\)

    \(\def\mathdef754#1{\mathtt{0x#1}}\mathdef754{FD}~~\def\mathdef755#1{\mathtt{0x#1}}\mathdef755{5F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef756#1{\mathtt{0x#1}}\mathdef756{FD}~~\def\mathdef757#1{\mathtt{0x#1}}\mathdef757{60}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef758#1{\mathtt{0x#1}}\mathdef758{FD}~~\def\mathdef759#1{\mathtt{0x#1}}\mathdef759{61}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{popcnt}}\)

    \(\def\mathdef760#1{\mathtt{0x#1}}\mathdef760{FD}~~\def\mathdef761#1{\mathtt{0x#1}}\mathdef761{62}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\)

    \(\def\mathdef762#1{\mathtt{0x#1}}\mathdef762{FD}~~\def\mathdef763#1{\mathtt{0x#1}}\mathdef763{63}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    \(\def\mathdef764#1{\mathtt{0x#1}}\mathdef764{FD}~~\def\mathdef765#1{\mathtt{0x#1}}\mathdef765{64}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_s}\)

    \(\def\mathdef766#1{\mathtt{0x#1}}\mathdef766{FD}~~\def\mathdef767#1{\mathtt{0x#1}}\mathdef767{65}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_u}\)

    \(\def\mathdef768#1{\mathtt{0x#1}}\mathdef768{FD}~~\def\mathdef769#1{\mathtt{0x#1}}\mathdef769{66}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ceil}}\)

    \(\def\mathdef770#1{\mathtt{0x#1}}\mathdef770{FD}~~\def\mathdef771#1{\mathtt{0x#1}}\mathdef771{67}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{floor}}\)

    \(\def\mathdef772#1{\mathtt{0x#1}}\mathdef772{FD}~~\def\mathdef773#1{\mathtt{0x#1}}\mathdef773{68}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\)

    \(\def\mathdef774#1{\mathtt{0x#1}}\mathdef774{FD}~~\def\mathdef775#1{\mathtt{0x#1}}\mathdef775{69}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{nearest}}\)

    \(\def\mathdef776#1{\mathtt{0x#1}}\mathdef776{FD}~~\def\mathdef777#1{\mathtt{0x#1}}\mathdef777{6A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\)

    \(\def\mathdef778#1{\mathtt{0x#1}}\mathdef778{FD}~~\def\mathdef779#1{\mathtt{0x#1}}\mathdef779{6B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef780#1{\mathtt{0x#1}}\mathdef780{FD}~~\def\mathdef781#1{\mathtt{0x#1}}\mathdef781{6C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef782#1{\mathtt{0x#1}}\mathdef782{FD}~~\def\mathdef783#1{\mathtt{0x#1}}\mathdef783{6D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef784#1{\mathtt{0x#1}}\mathdef784{FD}~~\def\mathdef785#1{\mathtt{0x#1}}\mathdef785{6E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s}\)

    \(\def\mathdef786#1{\mathtt{0x#1}}\mathdef786{FD}~~\def\mathdef787#1{\mathtt{0x#1}}\mathdef787{6F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u}\)

    \(\def\mathdef788#1{\mathtt{0x#1}}\mathdef788{FD}~~\def\mathdef789#1{\mathtt{0x#1}}\mathdef789{70}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef790#1{\mathtt{0x#1}}\mathdef790{FD}~~\def\mathdef791#1{\mathtt{0x#1}}\mathdef791{71}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s}\)

    \(\def\mathdef792#1{\mathtt{0x#1}}\mathdef792{FD}~~\def\mathdef793#1{\mathtt{0x#1}}\mathdef793{72}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u}\)

    \(\def\mathdef794#1{\mathtt{0x#1}}\mathdef794{FD}~~\def\mathdef795#1{\mathtt{0x#1}}\mathdef795{73}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ceil}}\)

    \(\def\mathdef796#1{\mathtt{0x#1}}\mathdef796{FD}~~\def\mathdef797#1{\mathtt{0x#1}}\mathdef797{74}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{floor}}\)

    \(\def\mathdef798#1{\mathtt{0x#1}}\mathdef798{FD}~~\def\mathdef799#1{\mathtt{0x#1}}\mathdef799{75}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\)

    \(\def\mathdef800#1{\mathtt{0x#1}}\mathdef800{FD}~~\def\mathdef801#1{\mathtt{0x#1}}\mathdef801{76}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\)

    \(\def\mathdef802#1{\mathtt{0x#1}}\mathdef802{FD}~~\def\mathdef803#1{\mathtt{0x#1}}\mathdef803{77}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\)

    \(\def\mathdef804#1{\mathtt{0x#1}}\mathdef804{FD}~~\def\mathdef805#1{\mathtt{0x#1}}\mathdef805{78}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\)

    \(\def\mathdef806#1{\mathtt{0x#1}}\mathdef806{FD}~~\def\mathdef807#1{\mathtt{0x#1}}\mathdef807{79}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\)

    \(\def\mathdef808#1{\mathtt{0x#1}}\mathdef808{FD}~~\def\mathdef809#1{\mathtt{0x#1}}\mathdef809{7A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u}\)

    \(\def\mathdef810#1{\mathtt{0x#1}}\mathdef810{FD}~~\def\mathdef811#1{\mathtt{0x#1}}\mathdef811{7B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_s}\)

    \(\def\mathdef812#1{\mathtt{0x#1}}\mathdef812{FD}~~\def\mathdef813#1{\mathtt{0x#1}}\mathdef813{7C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_u}\)

    \(\def\mathdef814#1{\mathtt{0x#1}}\mathdef814{FD}~~\def\mathdef815#1{\mathtt{0x#1}}\mathdef815{7D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_s}\)

    \(\def\mathdef816#1{\mathtt{0x#1}}\mathdef816{FD}~~\def\mathdef817#1{\mathtt{0x#1}}\mathdef817{7E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_u}\)

    \(\def\mathdef818#1{\mathtt{0x#1}}\mathdef818{FD}~~\def\mathdef819#1{\mathtt{0x#1}}\mathdef819{7F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef820#1{\mathtt{0x#1}}\mathdef820{FD}~~\def\mathdef821#1{\mathtt{0x#1}}\mathdef821{80}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef822#1{\mathtt{0x#1}}\mathdef822{FD}~~\def\mathdef823#1{\mathtt{0x#1}}\mathdef823{81}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{q15mulr\_sat}}\mathsf{\_s}\)

    \(\def\mathdef824#1{\mathtt{0x#1}}\mathdef824{FD}~~\def\mathdef825#1{\mathtt{0x#1}}\mathdef825{82}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\)

    \(\def\mathdef826#1{\mathtt{0x#1}}\mathdef826{FD}~~\def\mathdef827#1{\mathtt{0x#1}}\mathdef827{83}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    \(\def\mathdef828#1{\mathtt{0x#1}}\mathdef828{FD}~~\def\mathdef829#1{\mathtt{0x#1}}\mathdef829{84}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_s}\)

    \(\def\mathdef830#1{\mathtt{0x#1}}\mathdef830{FD}~~\def\mathdef831#1{\mathtt{0x#1}}\mathdef831{85}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_u}\)

    \(\def\mathdef832#1{\mathtt{0x#1}}\mathdef832{FD}~~\def\mathdef833#1{\mathtt{0x#1}}\mathdef833{86}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_s}\)

    \(\def\mathdef834#1{\mathtt{0x#1}}\mathdef834{FD}~~\def\mathdef835#1{\mathtt{0x#1}}\mathdef835{87}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_s}\)

    \(\def\mathdef836#1{\mathtt{0x#1}}\mathdef836{FD}~~\def\mathdef837#1{\mathtt{0x#1}}\mathdef837{88}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_u}\)

    \(\def\mathdef838#1{\mathtt{0x#1}}\mathdef838{FD}~~\def\mathdef839#1{\mathtt{0x#1}}\mathdef839{89}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_u}\)

    \(\def\mathdef840#1{\mathtt{0x#1}}\mathdef840{FD}~~\def\mathdef841#1{\mathtt{0x#1}}\mathdef841{8A}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\)

    \(\def\mathdef842#1{\mathtt{0x#1}}\mathdef842{FD}~~\def\mathdef843#1{\mathtt{0x#1}}\mathdef843{8B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef844#1{\mathtt{0x#1}}\mathdef844{FD}~~\def\mathdef845#1{\mathtt{0x#1}}\mathdef845{8C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef846#1{\mathtt{0x#1}}\mathdef846{FD}~~\def\mathdef847#1{\mathtt{0x#1}}\mathdef847{8D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef848#1{\mathtt{0x#1}}\mathdef848{FD}~~\def\mathdef849#1{\mathtt{0x#1}}\mathdef849{8E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s}\)

    \(\def\mathdef850#1{\mathtt{0x#1}}\mathdef850{FD}~~\def\mathdef851#1{\mathtt{0x#1}}\mathdef851{8F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u}\)

    \(\def\mathdef852#1{\mathtt{0x#1}}\mathdef852{FD}~~\def\mathdef853#1{\mathtt{0x#1}}\mathdef853{90}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef854#1{\mathtt{0x#1}}\mathdef854{FD}~~\def\mathdef855#1{\mathtt{0x#1}}\mathdef855{91}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s}\)

    \(\def\mathdef856#1{\mathtt{0x#1}}\mathdef856{FD}~~\def\mathdef857#1{\mathtt{0x#1}}\mathdef857{92}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u}\)

    \(\def\mathdef858#1{\mathtt{0x#1}}\mathdef858{FD}~~\def\mathdef859#1{\mathtt{0x#1}}\mathdef859{93}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{nearest}}\)

    \(\def\mathdef860#1{\mathtt{0x#1}}\mathdef860{FD}~~\def\mathdef861#1{\mathtt{0x#1}}\mathdef861{94}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\)

    \(\def\mathdef862#1{\mathtt{0x#1}}\mathdef862{FD}~~\def\mathdef863#1{\mathtt{0x#1}}\mathdef863{95}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\)

    \(\def\mathdef864#1{\mathtt{0x#1}}\mathdef864{FD}~~\def\mathdef865#1{\mathtt{0x#1}}\mathdef865{96}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\)

    \(\def\mathdef866#1{\mathtt{0x#1}}\mathdef866{FD}~~\def\mathdef867#1{\mathtt{0x#1}}\mathdef867{97}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\)

    \(\def\mathdef868#1{\mathtt{0x#1}}\mathdef868{FD}~~\def\mathdef869#1{\mathtt{0x#1}}\mathdef869{98}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\)

    \(\def\mathdef870#1{\mathtt{0x#1}}\mathdef870{FD}~~\def\mathdef871#1{\mathtt{0x#1}}\mathdef871{99}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u}\)

    \(\def\mathdef872#1{\mathtt{0x#1}}\mathdef872{FD}~~\def\mathdef873#1{\mathtt{0x#1}}\mathdef873{9B}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_s}\)

    \(\def\mathdef874#1{\mathtt{0x#1}}\mathdef874{FD}~~\def\mathdef875#1{\mathtt{0x#1}}\mathdef875{9C}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_s}\)

    \(\def\mathdef876#1{\mathtt{0x#1}}\mathdef876{FD}~~\def\mathdef877#1{\mathtt{0x#1}}\mathdef877{9D}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_u}\)

    \(\def\mathdef878#1{\mathtt{0x#1}}\mathdef878{FD}~~\def\mathdef879#1{\mathtt{0x#1}}\mathdef879{9E}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_u}\)

    \(\def\mathdef880#1{\mathtt{0x#1}}\mathdef880{FD}~~\def\mathdef881#1{\mathtt{0x#1}}\mathdef881{9F}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef882#1{\mathtt{0x#1}}\mathdef882{FD}~~\def\mathdef883#1{\mathtt{0x#1}}\mathdef883{A0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef884#1{\mathtt{0x#1}}\mathdef884{FD}~~\def\mathdef885#1{\mathtt{0x#1}}\mathdef885{A1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\)

    \(\def\mathdef886#1{\mathtt{0x#1}}\mathdef886{FD}~~\def\mathdef887#1{\mathtt{0x#1}}\mathdef887{A3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    \(\def\mathdef888#1{\mathtt{0x#1}}\mathdef888{FD}~~\def\mathdef889#1{\mathtt{0x#1}}\mathdef889{A4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_s}\)

    \(\def\mathdef890#1{\mathtt{0x#1}}\mathdef890{FD}~~\def\mathdef891#1{\mathtt{0x#1}}\mathdef891{A7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_s}\)

    \(\def\mathdef892#1{\mathtt{0x#1}}\mathdef892{FD}~~\def\mathdef893#1{\mathtt{0x#1}}\mathdef893{A8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_u}\)

    \(\def\mathdef894#1{\mathtt{0x#1}}\mathdef894{FD}~~\def\mathdef895#1{\mathtt{0x#1}}\mathdef895{A9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_u}\)

    \(\def\mathdef896#1{\mathtt{0x#1}}\mathdef896{FD}~~\def\mathdef897#1{\mathtt{0x#1}}\mathdef897{AA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\)

    \(\def\mathdef898#1{\mathtt{0x#1}}\mathdef898{FD}~~\def\mathdef899#1{\mathtt{0x#1}}\mathdef899{AB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef900#1{\mathtt{0x#1}}\mathdef900{FD}~~\def\mathdef901#1{\mathtt{0x#1}}\mathdef901{AC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef902#1{\mathtt{0x#1}}\mathdef902{FD}~~\def\mathdef903#1{\mathtt{0x#1}}\mathdef903{AD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef904#1{\mathtt{0x#1}}\mathdef904{FD}~~\def\mathdef905#1{\mathtt{0x#1}}\mathdef905{AE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef906#1{\mathtt{0x#1}}\mathdef906{FD}~~\def\mathdef907#1{\mathtt{0x#1}}\mathdef907{B1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\)

    \(\def\mathdef908#1{\mathtt{0x#1}}\mathdef908{FD}~~\def\mathdef909#1{\mathtt{0x#1}}\mathdef909{B5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\)

    \(\def\mathdef910#1{\mathtt{0x#1}}\mathdef910{FD}~~\def\mathdef911#1{\mathtt{0x#1}}\mathdef911{B6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\)

    \(\def\mathdef912#1{\mathtt{0x#1}}\mathdef912{FD}~~\def\mathdef913#1{\mathtt{0x#1}}\mathdef913{B7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\)

    \(\def\mathdef914#1{\mathtt{0x#1}}\mathdef914{FD}~~\def\mathdef915#1{\mathtt{0x#1}}\mathdef915{B8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\)

    \(\def\mathdef916#1{\mathtt{0x#1}}\mathdef916{FD}~~\def\mathdef917#1{\mathtt{0x#1}}\mathdef917{B9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s}\)

    \(\def\mathdef918#1{\mathtt{0x#1}}\mathdef918{FD}~~\def\mathdef919#1{\mathtt{0x#1}}\mathdef919{BA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_s}\)

    \(\def\mathdef920#1{\mathtt{0x#1}}\mathdef920{FD}~~\def\mathdef921#1{\mathtt{0x#1}}\mathdef921{BC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_s}\)

    \(\def\mathdef922#1{\mathtt{0x#1}}\mathdef922{FD}~~\def\mathdef923#1{\mathtt{0x#1}}\mathdef923{BD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_u}\)

    \(\def\mathdef924#1{\mathtt{0x#1}}\mathdef924{FD}~~\def\mathdef925#1{\mathtt{0x#1}}\mathdef925{BE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_u}\)

    \(\def\mathdef926#1{\mathtt{0x#1}}\mathdef926{FD}~~\def\mathdef927#1{\mathtt{0x#1}}\mathdef927{BF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef928#1{\mathtt{0x#1}}\mathdef928{FD}~~\def\mathdef929#1{\mathtt{0x#1}}\mathdef929{C0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef930#1{\mathtt{0x#1}}\mathdef930{FD}~~\def\mathdef931#1{\mathtt{0x#1}}\mathdef931{C1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\)

    \(\def\mathdef932#1{\mathtt{0x#1}}\mathdef932{FD}~~\def\mathdef933#1{\mathtt{0x#1}}\mathdef933{C3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    \(\def\mathdef934#1{\mathtt{0x#1}}\mathdef934{FD}~~\def\mathdef935#1{\mathtt{0x#1}}\mathdef935{C4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_s}\)

    \(\def\mathdef936#1{\mathtt{0x#1}}\mathdef936{FD}~~\def\mathdef937#1{\mathtt{0x#1}}\mathdef937{C7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_s}\)

    \(\def\mathdef938#1{\mathtt{0x#1}}\mathdef938{FD}~~\def\mathdef939#1{\mathtt{0x#1}}\mathdef939{C8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_u}\)

    \(\def\mathdef940#1{\mathtt{0x#1}}\mathdef940{FD}~~\def\mathdef941#1{\mathtt{0x#1}}\mathdef941{C9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_u}\)

    \(\def\mathdef942#1{\mathtt{0x#1}}\mathdef942{FD}~~\def\mathdef943#1{\mathtt{0x#1}}\mathdef943{CA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\)

    \(\def\mathdef944#1{\mathtt{0x#1}}\mathdef944{FD}~~\def\mathdef945#1{\mathtt{0x#1}}\mathdef945{CB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\)

    \(\def\mathdef946#1{\mathtt{0x#1}}\mathdef946{FD}~~\def\mathdef947#1{\mathtt{0x#1}}\mathdef947{CC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\)

    \(\def\mathdef948#1{\mathtt{0x#1}}\mathdef948{FD}~~\def\mathdef949#1{\mathtt{0x#1}}\mathdef949{CD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef950#1{\mathtt{0x#1}}\mathdef950{FD}~~\def\mathdef951#1{\mathtt{0x#1}}\mathdef951{CE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef952#1{\mathtt{0x#1}}\mathdef952{FD}~~\def\mathdef953#1{\mathtt{0x#1}}\mathdef953{D1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\)

    \(\def\mathdef954#1{\mathtt{0x#1}}\mathdef954{FD}~~\def\mathdef955#1{\mathtt{0x#1}}\mathdef955{D5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\)

    \(\def\mathdef956#1{\mathtt{0x#1}}\mathdef956{FD}~~\def\mathdef957#1{\mathtt{0x#1}}\mathdef957{D6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\)

    \(\def\mathdef958#1{\mathtt{0x#1}}\mathdef958{FD}~~\def\mathdef959#1{\mathtt{0x#1}}\mathdef959{D7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\)

    \(\def\mathdef960#1{\mathtt{0x#1}}\mathdef960{FD}~~\def\mathdef961#1{\mathtt{0x#1}}\mathdef961{D8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\)

    \(\def\mathdef962#1{\mathtt{0x#1}}\mathdef962{FD}~~\def\mathdef963#1{\mathtt{0x#1}}\mathdef963{D9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\)

    \(\def\mathdef964#1{\mathtt{0x#1}}\mathdef964{FD}~~\def\mathdef965#1{\mathtt{0x#1}}\mathdef965{DA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\)

    \(\def\mathdef966#1{\mathtt{0x#1}}\mathdef966{FD}~~\def\mathdef967#1{\mathtt{0x#1}}\mathdef967{DB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_s}\)

    \(\def\mathdef968#1{\mathtt{0x#1}}\mathdef968{FD}~~\def\mathdef969#1{\mathtt{0x#1}}\mathdef969{DC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_s}\)

    \(\def\mathdef970#1{\mathtt{0x#1}}\mathdef970{FD}~~\def\mathdef971#1{\mathtt{0x#1}}\mathdef971{DD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_u}\)

    \(\def\mathdef972#1{\mathtt{0x#1}}\mathdef972{FD}~~\def\mathdef973#1{\mathtt{0x#1}}\mathdef973{DE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_u}\)

    \(\def\mathdef974#1{\mathtt{0x#1}}\mathdef974{FD}~~\def\mathdef975#1{\mathtt{0x#1}}\mathdef975{DF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef976#1{\mathtt{0x#1}}\mathdef976{FD}~~\def\mathdef977#1{\mathtt{0x#1}}\mathdef977{E0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef978#1{\mathtt{0x#1}}\mathdef978{FD}~~\def\mathdef979#1{\mathtt{0x#1}}\mathdef979{E1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}}\)

    \(\def\mathdef980#1{\mathtt{0x#1}}\mathdef980{FD}~~\def\mathdef981#1{\mathtt{0x#1}}\mathdef981{E3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef982#1{\mathtt{0x#1}}\mathdef982{FD}~~\def\mathdef983#1{\mathtt{0x#1}}\mathdef983{E4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef984#1{\mathtt{0x#1}}\mathdef984{FD}~~\def\mathdef985#1{\mathtt{0x#1}}\mathdef985{E5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\)

    \(\def\mathdef986#1{\mathtt{0x#1}}\mathdef986{FD}~~\def\mathdef987#1{\mathtt{0x#1}}\mathdef987{E6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}}\)

    \(\def\mathdef988#1{\mathtt{0x#1}}\mathdef988{FD}~~\def\mathdef989#1{\mathtt{0x#1}}\mathdef989{E7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\)

    \(\def\mathdef990#1{\mathtt{0x#1}}\mathdef990{FD}~~\def\mathdef991#1{\mathtt{0x#1}}\mathdef991{E8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\)

    \(\def\mathdef992#1{\mathtt{0x#1}}\mathdef992{FD}~~\def\mathdef993#1{\mathtt{0x#1}}\mathdef993{E9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}}\)

    \(\def\mathdef994#1{\mathtt{0x#1}}\mathdef994{FD}~~\def\mathdef995#1{\mathtt{0x#1}}\mathdef995{EA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}}\)

    \(\def\mathdef996#1{\mathtt{0x#1}}\mathdef996{FD}~~\def\mathdef997#1{\mathtt{0x#1}}\mathdef997{EB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\)

    \(\def\mathdef998#1{\mathtt{0x#1}}\mathdef998{FD}~~\def\mathdef999#1{\mathtt{0x#1}}\mathdef999{EC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\)

    \(\def\mathdef1000#1{\mathtt{0x#1}}\mathdef1000{FD}~~\def\mathdef1001#1{\mathtt{0x#1}}\mathdef1001{ED}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}}\)

    \(\def\mathdef1002#1{\mathtt{0x#1}}\mathdef1002{FD}~~\def\mathdef1003#1{\mathtt{0x#1}}\mathdef1003{EF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\)

    \(\def\mathdef1004#1{\mathtt{0x#1}}\mathdef1004{FD}~~\def\mathdef1005#1{\mathtt{0x#1}}\mathdef1005{F0}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\)

    \(\def\mathdef1006#1{\mathtt{0x#1}}\mathdef1006{FD}~~\def\mathdef1007#1{\mathtt{0x#1}}\mathdef1007{F1}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\)

    \(\def\mathdef1008#1{\mathtt{0x#1}}\mathdef1008{FD}~~\def\mathdef1009#1{\mathtt{0x#1}}\mathdef1009{F2}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}}\)

    \(\def\mathdef1010#1{\mathtt{0x#1}}\mathdef1010{FD}~~\def\mathdef1011#1{\mathtt{0x#1}}\mathdef1011{F3}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\)

    \(\def\mathdef1012#1{\mathtt{0x#1}}\mathdef1012{FD}~~\def\mathdef1013#1{\mathtt{0x#1}}\mathdef1013{F4}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\)

    \(\def\mathdef1014#1{\mathtt{0x#1}}\mathdef1014{FD}~~\def\mathdef1015#1{\mathtt{0x#1}}\mathdef1015{F5}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}}\)

    \(\def\mathdef1016#1{\mathtt{0x#1}}\mathdef1016{FD}~~\def\mathdef1017#1{\mathtt{0x#1}}\mathdef1017{F6}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}}\)

    \(\def\mathdef1018#1{\mathtt{0x#1}}\mathdef1018{FD}~~\def\mathdef1019#1{\mathtt{0x#1}}\mathdef1019{F7}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_s}\)

    \(\def\mathdef1020#1{\mathtt{0x#1}}\mathdef1020{FD}~~\def\mathdef1021#1{\mathtt{0x#1}}\mathdef1021{F8}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_u}\)

    \(\def\mathdef1022#1{\mathtt{0x#1}}\mathdef1022{FD}~~\def\mathdef1023#1{\mathtt{0x#1}}\mathdef1023{F9}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_i32x4\_s}\)

    \(\def\mathdef1024#1{\mathtt{0x#1}}\mathdef1024{FD}~~\def\mathdef1025#1{\mathtt{0x#1}}\mathdef1025{FA}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_i32x4\_u}\)

    \(\def\mathdef1026#1{\mathtt{0x#1}}\mathdef1026{FD}~~\def\mathdef1027#1{\mathtt{0x#1}}\mathdef1027{FB}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_s\_zero}\)

    \(\def\mathdef1028#1{\mathtt{0x#1}}\mathdef1028{FD}~~\def\mathdef1029#1{\mathtt{0x#1}}\mathdef1029{FC}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_u\_zero}\)

    \(\def\mathdef1030#1{\mathtt{0x#1}}\mathdef1030{FD}~~\def\mathdef1031#1{\mathtt{0x#1}}\mathdef1031{FD}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_s}\)

    \(\def\mathdef1032#1{\mathtt{0x#1}}\mathdef1032{FD}~~\def\mathdef1033#1{\mathtt{0x#1}}\mathdef1033{FE}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_u}\)

    \(\def\mathdef1034#1{\mathtt{0x#1}}\mathdef1034{FD}~~\def\mathdef1035#1{\mathtt{0x#1}}\mathdef1035{FF}\)

    \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\)

    validation

    execution, operator

    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/index-rules.html b/core/appendix/index-rules.html new file mode 100644 index 00000000..2a244376 --- /dev/null +++ b/core/appendix/index-rules.html @@ -0,0 +1,358 @@ + + + + + + + + + Index of Semantic Rules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Index of Semantic Rules

    +
    +

    Typing of Static Constructs

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Construct

    Judgement

    Limits

    \(\href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} : k\)

    Function type

    \(\href{../valid/types.html#valid-functype}{\vdash} \href{../syntax/types.html#syntax-functype}{\mathit{functype}} \mathrel{\mbox{ok}}\)

    Block type

    \(\href{../valid/types.html#valid-blocktype}{\vdash} \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} \mathrel{\mbox{ok}}\)

    Table type

    \(\href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \mathrel{\mbox{ok}}\)

    Memory type

    \(\href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \mathrel{\mbox{ok}}\)

    Global type

    \(\href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \mathrel{\mbox{ok}}\)

    External type

    \(\href{../valid/types.html#valid-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} \mathrel{\mbox{ok}}\)

    Instruction

    \(S;C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} : \href{../syntax/types.html#syntax-stacktype}{\mathit{stacktype}}\)

    Instruction sequence

    \(S;C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : \href{../syntax/types.html#syntax-stacktype}{\mathit{stacktype}}\)

    Expression

    \(C \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} : \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}\)

    Function

    \(C \href{../valid/modules.html#valid-func}{\vdash} \href{../syntax/modules.html#syntax-func}{\mathit{func}} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}}\)

    Table

    \(C \href{../valid/modules.html#valid-table}{\vdash} \href{../syntax/modules.html#syntax-table}{\mathit{table}} : \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\)

    Memory

    \(C \href{../valid/modules.html#valid-mem}{\vdash} \href{../syntax/modules.html#syntax-mem}{\mathit{mem}} : \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\)

    Global

    \(C \href{../valid/modules.html#valid-global}{\vdash} \href{../syntax/modules.html#syntax-global}{\mathit{global}} : \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\)

    Element segment

    \(C \href{../valid/modules.html#valid-elem}{\vdash} \href{../syntax/modules.html#syntax-elem}{\mathit{elem}} : \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}\)

    Element mode

    \(C \href{../valid/modules.html#valid-elemmode}{\vdash} \href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} : \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}\)

    Data segment

    \(C \href{../valid/modules.html#valid-data}{\vdash} \href{../syntax/modules.html#syntax-data}{\mathit{data}} \mathrel{\mbox{ok}}\)

    Data mode

    \(C \href{../valid/modules.html#valid-datamode}{\vdash} \href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} \mathrel{\mbox{ok}}\)

    Start function

    \(C \href{../valid/modules.html#valid-start}{\vdash} \href{../syntax/modules.html#syntax-start}{\mathit{start}} \mathrel{\mbox{ok}}\)

    Export

    \(C \href{../valid/modules.html#valid-export}{\vdash} \href{../syntax/modules.html#syntax-export}{\mathit{export}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\)

    Export description

    \(C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\)

    Import

    \(C \href{../valid/modules.html#valid-import}{\vdash} \href{../syntax/modules.html#syntax-import}{\mathit{import}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\)

    Import description

    \(C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\)

    Module

    \(\href{../valid/modules.html#valid-module}{\vdash} \href{../syntax/modules.html#syntax-module}{\mathit{module}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast\)

    +
    +
    +

    Typing of Runtime Constructs

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Construct

    Judgement

    Value

    \(S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}} : \href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}\)

    Result

    \(S \href{../appendix/properties.html#valid-result}{\vdash} \href{../exec/runtime.html#syntax-result}{\mathit{result}} : \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}\)

    External value

    \(S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathit{externval}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\)

    Function instance

    \(S \href{../appendix/properties.html#valid-funcinst}{\vdash} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}}\)

    Table instance

    \(S \href{../appendix/properties.html#valid-tableinst}{\vdash} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}} : \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\)

    Memory instance

    \(S \href{../appendix/properties.html#valid-meminst}{\vdash} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}} : \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\)

    Global instance

    \(S \href{../appendix/properties.html#valid-globalinst}{\vdash} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}} : \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\)

    Element instance

    \(S \href{../appendix/properties.html#valid-eleminst}{\vdash} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}} \mathrel{\mbox{ok}}\)

    Data instance

    \(S \href{../appendix/properties.html#valid-datainst}{\vdash} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}} \mathrel{\mbox{ok}}\)

    Export instance

    \(S \href{../appendix/properties.html#valid-exportinst}{\vdash} \href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}} \mathrel{\mbox{ok}}\)

    Module instance

    \(S \href{../appendix/properties.html#valid-moduleinst}{\vdash} \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} : C\)

    Store

    \(\href{../appendix/properties.html#valid-store}{\vdash} \href{../exec/runtime.html#syntax-store}{\mathit{store}} \mathrel{\mbox{ok}}\)

    Configuration

    \(\href{../appendix/properties.html#valid-config}{\vdash} \href{../exec/runtime.html#syntax-config}{\mathit{config}} \mathrel{\mbox{ok}}\)

    Thread

    \(S;\href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^? \href{../appendix/properties.html#valid-thread}{\vdash} \href{../exec/runtime.html#syntax-thread}{\mathit{thread}} : \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}\)

    Frame

    \(S \href{../appendix/properties.html#valid-frame}{\vdash} \href{../exec/runtime.html#syntax-frame}{\mathit{frame}} : C\)

    +
    +
    +

    Constantness

    + ++++ + + + + + + + + + + + + + +

    Construct

    Judgement

    Constant expression

    \(C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}}\)

    Constant instruction

    \(C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}}\)

    +
    +
    +

    Matching

    + ++++ + + + + + + + + + + + + + +

    Construct

    Judgement

    External type

    \(\href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_1 \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_2\)

    Limits

    \(\href{../exec/modules.html#match-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1 \href{../exec/modules.html#match-limits}{\leq} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2\)

    +
    +
    +

    Store Extension

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Construct

    Judgement

    Function instance

    \(\href{../appendix/properties.html#extend-funcinst}{\vdash} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_2\)

    Table instance

    \(\href{../appendix/properties.html#extend-tableinst}{\vdash} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_2\)

    Memory instance

    \(\href{../appendix/properties.html#extend-meminst}{\vdash} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_2\)

    Global instance

    \(\href{../appendix/properties.html#extend-globalinst}{\vdash} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_2\)

    Element instance

    \(\href{../appendix/properties.html#extend-eleminst}{\vdash} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_2\)

    Data instance

    \(\href{../appendix/properties.html#extend-datainst}{\vdash} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_2\)

    Store

    \(\href{../appendix/properties.html#extend-store}{\vdash} \href{../exec/runtime.html#syntax-store}{\mathit{store}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-store}{\mathit{store}}_2\)

    +
    +
    +

    Execution

    + ++++ + + + + + + + + + + + + + +

    Construct

    Judgement

    Instruction

    \(S;F;\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S';F';{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'}^\ast\)

    Expression

    \(S;F;\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S';F';\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}'\)

    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/index-types.html b/core/appendix/index-types.html new file mode 100644 index 00000000..c67f84ac --- /dev/null +++ b/core/appendix/index-types.html @@ -0,0 +1,178 @@ + + + + + + + + + Index of Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Index of Types

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Category

    Constructor

    Binary Opcode

    Type index

    \(x\)

    (positive number as \(\href{../binary/values.html#binary-int}{\def\mathdef1084#1{{\mathtt{s}#1}}\mathdef1084{\mathtt{32}}}\) or \(\href{../binary/values.html#binary-int}{\def\mathdef1080#1{{\mathtt{u}#1}}\mathdef1080{\mathtt{32}}}\))

    Number type

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\)

    \(\def\mathdef1114#1{\mathtt{0x#1}}\mathdef1114{7F}\) (-1 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Number type

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\)

    \(\def\mathdef1115#1{\mathtt{0x#1}}\mathdef1115{7E}\) (-2 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Number type

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\)

    \(\def\mathdef1116#1{\mathtt{0x#1}}\mathdef1116{7D}\) (-3 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Number type

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\)

    \(\def\mathdef1117#1{\mathtt{0x#1}}\mathdef1117{7C}\) (-4 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Vector type

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\)

    \(\def\mathdef1118#1{\mathtt{0x#1}}\mathdef1118{7B}\) (-5 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    (reserved)

    \(\def\mathdef1119#1{\mathtt{0x#1}}\mathdef1119{7A}\) .. \(\def\mathdef1120#1{\mathtt{0x#1}}\mathdef1120{71}\)

    Reference type

    \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\)

    \(\def\mathdef1121#1{\mathtt{0x#1}}\mathdef1121{70}\) (-16 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Reference type

    \(\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}\)

    \(\def\mathdef1122#1{\mathtt{0x#1}}\mathdef1122{6F}\) (-17 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    (reserved)

    \(\def\mathdef1123#1{\mathtt{0x#1}}\mathdef1123{6E}\) .. \(\def\mathdef1124#1{\mathtt{0x#1}}\mathdef1124{61}\)

    Function type

    \([\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^\ast]\)

    \(\def\mathdef1125#1{\mathtt{0x#1}}\mathdef1125{60}\) (-32 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    (reserved)

    \(\def\mathdef1126#1{\mathtt{0x#1}}\mathdef1126{5F}\) .. \(\def\mathdef1127#1{\mathtt{0x#1}}\mathdef1127{41}\)

    Result type

    \([\epsilon]\)

    \(\def\mathdef1128#1{\mathtt{0x#1}}\mathdef1128{40}\) (-64 as \(\href{../binary/values.html#binary-int}{\def\mathdef1083#1{{\mathtt{s}#1}}\mathdef1083{\mathtt{7}}}\))

    Table type

    \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}\)

    (none)

    Memory type

    \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\)

    (none)

    Global type

    \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}\)

    (none)

    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/appendix/index.html b/core/appendix/index.html new file mode 100644 index 00000000..b4c366f3 --- /dev/null +++ b/core/appendix/index.html @@ -0,0 +1,152 @@ + + + + + + + + + Appendix — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/appendix/properties.html b/core/appendix/properties.html new file mode 100644 index 00000000..2544f7b2 --- /dev/null +++ b/core/appendix/properties.html @@ -0,0 +1,741 @@ + + + + + + + + + Soundness — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Soundness

    +

    The type system of WebAssembly is sound, implying both type safety and memory safety with respect to the WebAssembly semantics. For example:

    +
      +
    • All types declared and derived during validation are respected at run time; +e.g., every local or global variable will only contain type-correct values, every instruction will only be applied to operands of the expected type, and every function invocation always evaluates to a result of the right type (if it does not trap or diverge).

    • +
    • No memory location will be read or written except those explicitly defined by the program, i.e., as a local, a global, an element in a table, or a location within a linear memory.

    • +
    • There is no undefined behavior, +i.e., the execution rules cover all possible cases that can occur in a valid program, and the rules are mutually consistent.

    • +
    +

    Soundness also is instrumental in ensuring additional properties, most notably, encapsulation of function and module scopes: no locals can be accessed outside their own function and no module components can be accessed outside their own module unless they are explicitly exported or imported.

    +

    The typing rules defining WebAssembly validation only cover the static components of a WebAssembly program. +In order to state and prove soundness precisely, the typing rules must be extended to the dynamic components of the abstract runtime, that is, the store, configurations, and administrative instructions. 1

    +
    +

    Results

    +

    Results can be classified by result types as follows.

    +
    +

    Results \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\)

    +
      +
    • For each value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) in \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\):

      +
        +
      • The value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) is valid with some value type \(t_i\).

      • +
      +
    • +
    • Let \(t^\ast\) be the concatenation of all \(t_i\).

    • +
    • Then the result is valid with result type \([t^\ast]\).

    • +
    +
    +\[\frac{ + (S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}} : t)^\ast +}{ + S \href{../appendix/properties.html#valid-result}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast : [t^\ast] +}\]
    +
    +
    +

    Results \(\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\)

    + +
    +\[\frac{ +}{ + S \href{../appendix/properties.html#valid-result}{\vdash} \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} : [t^\ast] +}\]
    +
    +
    +
    +

    Store Validity

    +

    The following typing rules specify when a runtime store \(S\) is valid. +A valid store must consist of +function, table, memory, global, and module instances that are themselves valid, relative to \(S\).

    +

    To that end, each kind of instance is classified by a respective function, table, memory, or global type. +Module instances are classified by module contexts, which are regular contexts repurposed as module types describing the index spaces defined by a module.

    +
    +

    Store \(S\)

    +
      +
    • Each function instance \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}\) must be valid with some function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_i\).

    • +
    • Each table instance \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}\) must be valid with some table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}_i\).

    • +
    • Each memory instance \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}\) must be valid with some memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}_i\).

    • +
    • Each global instance \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}\) must be valid with some global type \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_i\).

    • +
    • Each element instance \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}\) must be valid.

    • +
    • Each data instance \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_i\) in \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}\) must be valid.

    • +
    • Then the store is valid.

    • +
    +
    +\[\begin{split}~\\[-1ex] +\frac{ + \begin{array}{@{}c@{}} + (S \href{../appendix/properties.html#valid-funcinst}{\vdash} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}})^\ast + \qquad + (S \href{../appendix/properties.html#valid-tableinst}{\vdash} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}} : \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}})^\ast + \\ + (S \href{../appendix/properties.html#valid-meminst}{\vdash} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}} : \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}})^\ast + \qquad + (S \href{../appendix/properties.html#valid-globalinst}{\vdash} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}} : \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}})^\ast + \\ + (S \href{../appendix/properties.html#valid-eleminst}{\vdash} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}} \mathrel{\mbox{ok}})^\ast + \qquad + (S \href{../appendix/properties.html#valid-datainst}{\vdash} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}} \mathrel{\mbox{ok}})^\ast + \\ + S = \{ + \href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}~\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}^\ast, + \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}~\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}^\ast, + \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}~\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}^\ast, + \href{../exec/runtime.html#syntax-store}{\mathsf{globals}}~\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}^\ast, + \href{../exec/runtime.html#syntax-store}{\mathsf{elems}}~\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}^\ast, + \href{../exec/runtime.html#syntax-store}{\mathsf{datas}}~\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}^\ast \} + \end{array} +}{ + \href{../appendix/properties.html#valid-store}{\vdash} S \mathrel{\mbox{ok}} +}\end{split}\]
    +
    +
    +

    Function Instances \(\{\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}}\}\)

    +
      +
    • The function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) must be valid.

    • +
    • The module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) must be valid with some context \(C\).

    • +
    • Under context \(C\), the function \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}\) must be valid with function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    • +
    • Then the function instance is valid with function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-functype}{\vdash} \href{../syntax/types.html#syntax-functype}{\mathit{functype}} \mathrel{\mbox{ok}} + \qquad + S \href{../appendix/properties.html#valid-moduleinst}{\vdash} \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} : C + \qquad + C \href{../valid/modules.html#valid-func}{\vdash} \href{../syntax/modules.html#syntax-func}{\mathit{func}} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}{ + S \href{../appendix/properties.html#valid-funcinst}{\vdash} \{\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}}\} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}\]
    +
    +
    +

    Host Function Instances \(\{\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\mathit{hf}\}\)

    +
      +
    • The function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) must be valid.

    • +
    • Let \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) be the function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    • +
    • For every valid store \(S_1\) extending \(S\) and every sequence \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) of values whose types coincide with \(t_1^\ast\):

      +
        +
      • Executing \(\mathit{hf}\) in store \(S_1\) with arguments \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) has a non-empty set of possible outcomes.

      • +
      • For every element \(R\) of this set:

        +
          +
        • Either \(R\) must be \(\bot\) (i.e., divergence).

        • +
        • Or \(R\) consists of a valid store \(S_2\) extending \(S_1\) and a result \(\href{../exec/runtime.html#syntax-result}{\mathit{result}}\) whose type coincides with \([t_2^\ast]\).

        • +
        +
      • +
      +
    • +
    • Then the function instance is valid with function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    • +
    +
    +\[\begin{split}\frac{ + \begin{array}[b]{@{}l@{}} + \href{../valid/types.html#valid-functype}{\vdash} [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] \mathrel{\mbox{ok}} \\ + \end{array} + \quad + \begin{array}[b]{@{}l@{}} + \forall S_1, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast,~ + {\href{../appendix/properties.html#valid-store}{\vdash} S_1 \mathrel{\mbox{ok}}} \wedge + {\href{../appendix/properties.html#extend-store}{\vdash} S \href{../appendix/properties.html#extend}{\preceq} S_1} \wedge + {S_1 \href{../appendix/properties.html#valid-result}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast : [t_1^\ast]} + \Longrightarrow {} \\ \qquad + \mathit{hf}(S_1; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast) \supset \emptyset \wedge {} \\ \qquad + \forall R \in \mathit{hf}(S_1; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast),~ + R = \bot \vee {} \\ \qquad\qquad + \exists S_2, \href{../exec/runtime.html#syntax-result}{\mathit{result}},~ + {\href{../appendix/properties.html#valid-store}{\vdash} S_2 \mathrel{\mbox{ok}}} \wedge + {\href{../appendix/properties.html#extend-store}{\vdash} S_1 \href{../appendix/properties.html#extend}{\preceq} S_2} \wedge + {S_2 \href{../appendix/properties.html#valid-result}{\vdash} \href{../exec/runtime.html#syntax-result}{\mathit{result}} : [t_2^\ast]} \wedge + R = (S_2; \href{../exec/runtime.html#syntax-result}{\mathit{result}}) + \end{array} +}{ + S \href{../appendix/properties.html#valid-funcinst}{\vdash} \{\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~[t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast], \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\mathit{hf}\} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\end{split}\]
    +
    +

    Note

    +

    This rule states that, if appropriate pre-conditions about store and arguments are satisfied, then executing the host function must satisfy appropriate post-conditions about store and results. +The post-conditions match the ones in the execution rule for invoking host functions.

    +

    Any store under which the function is invoked is assumed to be an extension of the current store. +That way, the function itself is able to make sufficient assumptions about future stores.

    +
    +
    +
    +

    Table Instances \(\{ \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t), \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast \}\)

    +
      +
    • The table type \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) must be valid.

    • +
    • The length of \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast\) must equal \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}.\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\).

    • +
    • For each reference \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}_i\) in the table’s elements \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n\):

      + +
    • +
    • Then the table instance is valid with table type \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t \mathrel{\mbox{ok}} + \qquad + n = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}.\href{../syntax/types.html#syntax-limits}{\mathsf{min}} + \qquad + (S \vdash \href{../exec/runtime.html#syntax-ref}{\mathit{ref}} : t)^n +}{ + S \href{../appendix/properties.html#valid-tableinst}{\vdash} \{ \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t), \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n \} : \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t +}\]
    +
    +
    +

    Memory Instances \(\{ \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~b^\ast \}\)

    +
      +
    • The memory type \(\{\href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^?\}\) must be valid.

    • +
    • The length of \(b^\ast\) must equal \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}.\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\) multiplied by the page size \(64\,\mathrm{Ki}\).

    • +
    • Then the memory instance is valid with memory type \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \mathrel{\mbox{ok}} + \qquad + n = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}.\href{../syntax/types.html#syntax-limits}{\mathsf{min}} \cdot 64\,\mathrm{Ki} +}{ + S \href{../appendix/properties.html#valid-meminst}{\vdash} \{ \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~b^n \} : \href{../syntax/types.html#syntax-limits}{\mathit{limits}} +}\]
    +
    +
    +

    Global Instances \(\{ \href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t), \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}} \}\)

    +
      +
    • The global type \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) must be valid.

    • +
    • The value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) must be valid with value type \(t\).

    • +
    • Then the global instance is valid with global type \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t \mathrel{\mbox{ok}} + \qquad + S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}} : t +}{ + S \href{../appendix/properties.html#valid-globalinst}{\vdash} \{ \href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t), \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}} \} : \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t +}\]
    +
    +
    +

    Element Instances \(\{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\mathit{fa}^\ast \}\)

    +
      +
    • For each reference \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}_i\) in the elements \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n\):

      + +
    • +
    • Then the table instance is valid.

    • +
    +
    +\[\frac{ + (S \vdash \href{../exec/runtime.html#syntax-ref}{\mathit{ref}} : t)^\ast +}{ + S \href{../appendix/properties.html#valid-eleminst}{\vdash} \{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{type}}~t, \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    Data Instances \(\{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~b^\ast \}\)

    +
      +
    • The data instance is valid.

    • +
    +
    +\[\frac{ +}{ + S \href{../appendix/properties.html#valid-datainst}{\vdash} \{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~b^\ast \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    Export Instances \(\{ \href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-externval}{\mathit{externval}} \}\)

    +
      +
    • The external value \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}\) must be valid with some external type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\).

    • +
    • Then the export instance is valid.

    • +
    +
    +\[\frac{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathit{externval}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} +}{ + S \href{../appendix/properties.html#valid-exportinst}{\vdash} \{ \href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-externval}{\mathit{externval}} \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    Module Instances \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\)

    +
      +
    • Each function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}\) must be valid.

    • +
    • For each function address \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}\), the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_i\) must be valid with some external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}'_i\).

    • +
    • For each table address \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}\), the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_i\) must be valid with some external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}_i\).

    • +
    • For each memory address \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}\), the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_i\) must be valid with some external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}_i\).

    • +
    • For each global address \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}\), the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_i\) must be valid with some external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_i\).

    • +
    • For each element address \(\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}\), the element instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}_i]\) must be valid.

    • +
    • For each data address \(\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}\), the data instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}_i]\) must be valid.

    • +
    • Each export instance \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}\) must be valid.

    • +
    • For each export instance \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i\) in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}\), the name \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i.\href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}\) must be different from any other name occurring in \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}\).

    • +
    • Let \({\href{../syntax/types.html#syntax-functype}{\mathit{functype}}'}^\ast\) be the concatenation of all \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}'_i\) in order.

    • +
    • Let \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}^\ast\) be the concatenation of all \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}_i\) in order.

    • +
    • Let \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}^\ast\) be the concatenation of all \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}_i\) in order.

    • +
    • Let \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}^\ast\) be the concatenation of all \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_i\) in order.

    • +
    • +
      Then the module instance is valid with context
      +
      \(\{\href{../valid/conventions.html#context}{\mathsf{types}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \href{../valid/conventions.html#context}{\mathsf{funcs}}~{\href{../syntax/types.html#syntax-functype}{\mathit{functype}}'}^\ast, \href{../valid/conventions.html#context}{\mathsf{tables}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}^\ast, \href{../valid/conventions.html#context}{\mathsf{mems}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}^\ast, \href{../valid/conventions.html#context}{\mathsf{globals}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}^\ast\}\).
      +
      +
    • +
    +
    +\[\begin{split}~\\[-1ex] +\frac{ + \begin{array}{@{}c@{}} + (\href{../valid/types.html#valid-functype}{\vdash} \href{../syntax/types.html#syntax-functype}{\mathit{functype}} \mathrel{\mbox{ok}})^\ast + \\ + (S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}')^\ast + \qquad + (S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}})^\ast + \\ + (S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}})^\ast + \qquad + (S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}})^\ast + \\ + (S \href{../appendix/properties.html#valid-eleminst}{\vdash} S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}] \mathrel{\mbox{ok}})^\ast + \qquad + (S \href{../appendix/properties.html#valid-datainst}{\vdash} S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}] \mathrel{\mbox{ok}})^\ast + \\ + (S \href{../appendix/properties.html#valid-exportinst}{\vdash} \href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}} \mathrel{\mbox{ok}})^\ast + \qquad + (\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}.\href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}})^\ast ~\mbox{disjoint} + \end{array} +}{ + S \href{../appendix/properties.html#valid-moduleinst}{\vdash} \{ + \begin{array}[t]{@{}l@{~}l@{}} + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}} & \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}} & \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}} & \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}} & \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}} & \href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}} & \href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}} & \href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast ~\} : \{ + \begin{array}[t]{@{}l@{~}l@{}} + \href{../valid/conventions.html#context}{\mathsf{types}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + \href{../valid/conventions.html#context}{\mathsf{funcs}} & {\href{../syntax/types.html#syntax-functype}{\mathit{functype}}'}^\ast, \\ + \href{../valid/conventions.html#context}{\mathsf{tables}} & \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}^\ast, \\ + \href{../valid/conventions.html#context}{\mathsf{mems}} & \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}^\ast, \\ + \href{../valid/conventions.html#context}{\mathsf{globals}} & \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}^\ast ~\} + \end{array} + \end{array} +}\end{split}\]
    +
    +
    +
    +

    Configuration Validity

    +

    To relate the WebAssembly type system to its execution semantics, the typing rules for instructions must be extended to configurations \(S;T\), +which relates the store to execution threads.

    +

    Configurations and threads are classified by their result type. +In addition to the store \(S\), threads are typed under a return type \(\href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^?\), which controls whether and with which type a \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\) instruction is allowed. +This type is absent (\(\epsilon\)) except for instruction sequences inside an administrative \(\href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}\) instruction.

    +

    Finally, frames are classified with frame contexts, which extend the module contexts of a frame’s associated module instance with the locals that the frame contains.

    +
    +

    Configurations \(S;T\)

    + +
    +\[\frac{ + \href{../appendix/properties.html#valid-store}{\vdash} S \mathrel{\mbox{ok}} + \qquad + S; \epsilon \href{../appendix/properties.html#valid-thread}{\vdash} T : [t^\ast] +}{ + \href{../appendix/properties.html#valid-config}{\vdash} S; T : [t^\ast] +}\]
    +
    +
    +

    Threads \(F;\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\)

    +
      +
    • Let \(\href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^?\) be the current allowed return type.

    • +
    • The frame \(F\) must be valid with a context \(C\).

    • +
    • Let \(C'\) be the same context as \(C\), but with \(\href{../valid/conventions.html#context}{\mathsf{return}}\) set to \(\href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^?\).

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with some type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast]\).

    • +
    • Then the thread is valid with the result type \([t^\ast]\).

    • +
    +
    +\[\frac{ + S \href{../appendix/properties.html#valid-frame}{\vdash} F : C + \qquad + S; C,\href{../valid/conventions.html#context}{\mathsf{return}}~\href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^? \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast] +}{ + S; \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^? \href{../appendix/properties.html#valid-thread}{\vdash} F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t^\ast] +}\]
    +
    +
    +

    Frames \(\{\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast, \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\}\)

    +
      +
    • The module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) must be valid with some module context \(C\).

    • +
    • Each value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) in \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) must be valid with some value type \(t_i\).

    • +
    • Let \(t^\ast\) the concatenation of all \(t_i\) in order.

    • +
    • Let \(C'\) be the same context as \(C\), but with the value types \(t^\ast\) prepended to the \(\href{../valid/conventions.html#context}{\mathsf{locals}}\) vector.

    • +
    • Then the frame is valid with frame context \(C'\).

    • +
    +
    +\[\frac{ + S \href{../appendix/properties.html#valid-moduleinst}{\vdash} \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} : C + \qquad + (S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}} : t)^\ast +}{ + S \href{../appendix/properties.html#valid-frame}{\vdash} \{\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast, \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\} : (C, \href{../valid/conventions.html#context}{\mathsf{locals}}~t^\ast) +}\]
    +
    +
    +
    +

    Administrative Instructions

    +

    Typing rules for administrative instructions are specified as follows. +In addition to the context \(C\), typing of these instructions is defined under a given store \(S\). +To that end, all previous typing judgements \(C \vdash \mathit{prop}\) are generalized to include the store, as in \(S; C \vdash \mathit{prop}\), by implicitly adding \(S\) to all rules – \(S\) is never modified by the pre-existing rules, but it is accessed in the extra rules for administrative instructions given below.

    +
    +

    \(\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\)

    +
      +
    • The instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), for any sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    +
    +\[\frac{ +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~\href{../exec/runtime.html#syntax-externaddr}{\mathit{externaddr}}\)

    +
      +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}]\).

    • +
    +
    +\[\frac{ +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~\href{../exec/runtime.html#syntax-externaddr}{\mathit{externaddr}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}] +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\)

    +
      +
    • The external function value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\) must be valid with external function type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}} \href{../syntax/types.html#syntax-functype}{\mathit{functype}}\).

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}]\).

    • +
    +
    +\[\frac{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}] +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\)

    +
      +
    • The external function value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\) must be valid with external function type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}} ([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast])\).

    • +
    • Then the instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~[t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_0^\ast\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • The instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_0^\ast\) must be valid with some type \([t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*]\).

    • +
    • Let \(C'\) be the same context as \(C\), but with the result type \([t_1^n]\) prepended to the \(\href{../valid/conventions.html#context}{\mathsf{labels}}\) vector.

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*]\).

    • +
    • Then the compound instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*]\).

    • +
    +
    +\[\frac{ + S; C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_0^\ast : [t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*] + \qquad + S; C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t_1^n] \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*] +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_0^\ast\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^*] +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • Under the return type \([t^n]\), +the thread \(F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with result type \([t^n]\).

    • +
    • Then the compound instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^n]\).

    • +
    +
    +\[\frac{ + S; [t^n] \href{../valid/instructions.html#valid-instr-seq}{\vdash} F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t^n] +}{ + S; C \href{../appendix/properties.html#valid-instr-admin}{\vdash} \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^n] +}\]
    +
    +
    +
    +

    Store Extension

    +

    Programs can mutate the store and its contained instances. +Any such modification must respect certain invariants, such as not removing allocated instances or changing immutable definitions. +While these invariants are inherent to the execution semantics of WebAssembly instructions and modules, +host functions do not automatically adhere to them. Consequently, the required invariants must be stated as explicit constraints on the invocation of host functions. +Soundness only holds when the embedder ensures these constraints.

    +

    The necessary constraints are codified by the notion of store extension: +a store state \(S'\) extends state \(S\), written \(S \href{../appendix/properties.html#extend}{\preceq} S'\), when the following rules hold.

    +
    +

    Note

    +

    Extension does not imply that the new store is valid, which is defined separately above.

    +
    +
    +

    Store \(S\)

    +
      +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}\) must not shrink.

    • +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}\) must not shrink.

    • +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}\) must not shrink.

    • +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}\) must not shrink.

    • +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}\) must not shrink.

    • +
    • The length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}\) must not shrink.

    • +
    • For each function instance \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}\), the new function instance must be an extension of the old.

    • +
    • For each table instance \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}\), the new table instance must be an extension of the old.

    • +
    • For each memory instance \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}\), the new memory instance must be an extension of the old.

    • +
    • For each global instance \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}\), the new global instance must be an extension of the old.

    • +
    • For each element instance \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}\), the new global instance must be an extension of the old.

    • +
    • For each data instance \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_i\) in the original \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}\), the new global instance must be an extension of the old.

    • +
    +
    +\[\begin{split}\frac{ + \begin{array}{@{}ccc@{}} + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}} = \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}} = {\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}'_1}^\ast~\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_2^\ast & + (\href{../appendix/properties.html#extend-funcinst}{\vdash} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}'_1)^\ast \\ + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}} = \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}} = {\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}'_1}^\ast~\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_2^\ast & + (\href{../appendix/properties.html#extend-tableinst}{\vdash} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}'_1)^\ast \\ + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}} = \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}} = {\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}'_1}^\ast~\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_2^\ast & + (\href{../appendix/properties.html#extend-meminst}{\vdash} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}'_1)^\ast \\ + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}} = \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}} = {\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}'_1}^\ast~\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_2^\ast & + (\href{../appendix/properties.html#extend-globalinst}{\vdash} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}'_1)^\ast \\ + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}} = \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}} = {\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}'_1}^\ast~\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_2^\ast & + (\href{../appendix/properties.html#extend-eleminst}{\vdash} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}'_1)^\ast \\ + S_1.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}} = \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_1^\ast & + S_2.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}} = {\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}'_1}^\ast~\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_2^\ast & + (\href{../appendix/properties.html#extend-datainst}{\vdash} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}_1 \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}'_1)^\ast \\ + \end{array} +}{ + \href{../appendix/properties.html#extend-store}{\vdash} S_1 \href{../appendix/properties.html#extend}{\preceq} S_2 +}\end{split}\]
    +
    +
    +

    Function Instance \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\)

    +
      +
    • A function instance must remain unchanged.

    • +
    +
    +\[\frac{ +}{ + \href{../appendix/properties.html#extend-funcinst}{\vdash} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} \href{../appendix/properties.html#extend}{\preceq} \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} +}\]
    +
    +
    +

    Table Instance \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}\)

    +
      +
    • The table type \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}\) must remain unchanged.

    • +
    • The length of \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\) must not shrink.

    • +
    +
    +\[\frac{ + n_1 \leq n_2 +}{ + \href{../appendix/properties.html#extend-tableinst}{\vdash} \{\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~\mathit{tt}, \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~(\mathit{fa}_1^?)^{n_1}\} \href{../appendix/properties.html#extend}{\preceq} \{\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~\mathit{tt}, \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~(\mathit{fa}_2^?)^{n_2}\} +}\]
    +
    +
    +

    Memory Instance \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}\)

    +
      +
    • The memory type \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}\) must remain unchanged.

    • +
    • The length of \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) must not shrink.

    • +
    +
    +\[\frac{ + n_1 \leq n_2 +}{ + \href{../appendix/properties.html#extend-meminst}{\vdash} \{\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\mathit{mt}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~b_1^{n_1}\} \href{../appendix/properties.html#extend}{\preceq} \{\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\mathit{mt}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~b_2^{n_2}\} +}\]
    +
    +
    +

    Global Instance \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}\)

    +
      +
    • The global type \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}\) must remain unchanged.

    • +
    • Let \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) be the structure of \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}\).

    • +
    • If \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}\) is \(\href{../syntax/types.html#syntax-mut}{\mathsf{const}}\), then the value \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}\) must remain unchanged.

    • +
    +
    +\[\frac{ + \href{../syntax/types.html#syntax-mut}{\mathit{mut}} = \href{../syntax/types.html#syntax-mut}{\mathsf{var}} \vee \href{../exec/runtime.html#syntax-val}{\mathit{val}}_1 = \href{../exec/runtime.html#syntax-val}{\mathit{val}}_2 +}{ + \href{../appendix/properties.html#extend-globalinst}{\vdash} \{\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t), \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}_1\} \href{../appendix/properties.html#extend}{\preceq} \{\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t), \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}_2\} +}\]
    +
    +
    +

    Element Instance \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}\)

    +
      +
    • The vector \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}.\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}\) must either remain unchanged or shrink to length \(0\).

    • +
    +
    +\[\frac{ + \mathit{fa}_1^\ast = \mathit{fa}_2^\ast \vee \mathit{fa}_2^\ast = \epsilon +}{ + \href{../appendix/properties.html#extend-eleminst}{\vdash} \{\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\mathit{fa}_1^\ast\} \href{../appendix/properties.html#extend}{\preceq} \{\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\mathit{fa}_2^\ast\} +}\]
    +
    +
    +

    Data Instance \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}\)

    +
      +
    • The vector \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}.\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}\) must either remain unchanged or shrink to length \(0\).

    • +
    +
    +\[\frac{ + b_1^\ast = b_2^\ast \vee b_2^\ast = \epsilon +}{ + \href{../appendix/properties.html#extend-datainst}{\vdash} \{\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~b_1^\ast\} \href{../appendix/properties.html#extend}{\preceq} \{\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~b_2^\ast\} +}\]
    +
    +
    +
    +

    Theorems

    +

    Given the definition of valid configurations, +the standard soundness theorems hold. 2

    +

    Theorem (Preservation). +If a configuration \(S;T\) is valid with result type \([t^\ast]\) (i.e., \(\href{../appendix/properties.html#valid-config}{\vdash} S;T : [t^\ast]\)), +and steps to \(S';T'\) (i.e., \(S;T \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S';T'\)), +then \(S';T'\) is a valid configuration with the same result type (i.e., \(\href{../appendix/properties.html#valid-config}{\vdash} S';T' : [t^\ast]\)). +Furthermore, \(S'\) is an extension of \(S\) (i.e., \(\href{../appendix/properties.html#extend-store}{\vdash} S \href{../appendix/properties.html#extend}{\preceq} S'\)).

    +

    A terminal thread is one whose sequence of instructions is a result. +A terminal configuration is a configuration whose thread is terminal.

    +

    Theorem (Progress). +If a configuration \(S;T\) is valid (i.e., \(\href{../appendix/properties.html#valid-config}{\vdash} S;T : [t^\ast]\) for some result type \([t^\ast]\)), +then either it is terminal, +or it can step to some configuration \(S';T'\) (i.e., \(S;T \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S';T'\)).

    +

    From Preservation and Progress the soundness of the WebAssembly type system follows directly.

    +

    Corollary (Soundness). +If a configuration \(S;T\) is valid (i.e., \(\href{../appendix/properties.html#valid-config}{\vdash} S;T : [t^\ast]\) for some result type \([t^\ast]\)), +then it either diverges or takes a finite number of steps to reach a terminal configuration \(S';T'\) (i.e., \(S;T \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S';T'\)) that is valid with the same result type (i.e., \(\href{../appendix/properties.html#valid-config}{\vdash} S';T' : [t^\ast]\)) +and where \(S'\) is an extension of \(S\) (i.e., \(\href{../appendix/properties.html#extend-store}{\vdash} S \href{../appendix/properties.html#extend}{\preceq} S'\)).

    +

    In other words, every thread in a valid configuration either runs forever, traps, or terminates with a result that has the expected type. +Consequently, given a valid store, no computation defined by instantiation or invocation of a valid module can “crash” or otherwise (mis)behave in ways not covered by the execution semantics given in this specification.

    +
    +
    1
    +

    The formalization and theorems are derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    +
    2
    +

    A machine-verified version of the formalization and soundness proof is described in the following article: +Conrad Watt. Mechanising and Verifying the WebAssembly Specification. Proceedings of the 7th ACM SIGPLAN Conference on Certified Programs and Proofs (CPP 2018). ACM 2018.

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/bikeshed/index.html b/core/bikeshed/index.html new file mode 100644 index 00000000..e04eefb1 --- /dev/null +++ b/core/bikeshed/index.html @@ -0,0 +1,17117 @@ + + + + + WebAssembly Core Specification + + + + + + + + + + + + + + + + + + + +
    +

    +

    WebAssembly Core Specification

    +

    Editor’s Draft,

    +
    + More details about this document +
    +
    +
    This version: +
    https://webassembly.github.io/spec/core/bikeshed/ +
    Latest published version: +
    https://www.w3.org/TR/wasm-core-2/ +
    Editor: +
    Andreas Rossberg (Dfinity Stiftung) +
    Issue Tracking: +
    GitHub Issues +
    +
    +
    +
    + +
    +
    +
    +

    Abstract

    +

    This document describes version 2.0 of the core WebAssembly standard, a safe, portable, low-level code format designed for efficient execution and compact representation.

    + This is part of a collection of related documents: +the Core WebAssembly Specification, +the WebAssembly JS Interface, +and the WebAssembly Web API. +
    +

    Status of this document

    +
    +

    This is a public copy of the editors’ draft. + It is provided for discussion only and may change at any moment. + Its publication here does not imply endorsement of its contents by W3C. + Don’t cite this document other than as work in progress.

    +

    GitHub Issues are preferred for discussion of this specification. + All issues and comments are archived.

    +

    This document was produced by the WebAssembly Working Group.

    +

    This document was produced by a group operating under + the W3C Patent Policy. + W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; + that page also includes instructions for disclosing a patent. + An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

    +

    This document is governed by the 2 November 2021 W3C Process Document.

    +

    +
    +
    + +
    +

    + WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + +
    +
    +
    +
    +

    WebAssembly Specification

    +
    +
    Release 2.0 + stringref (Draft 2022-04-27)
    +
    +
    +
    Editor: Andreas Rossberg
    +
    + +
    + +
    + +

    1. Introduction

    +
    + +
    +

    1.1. Introduction

    +

    WebAssembly (abbreviated Wasm 1) is a safe, portable, low-level code format designed for efficient execution and compact representation. +Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.

    +

    WebAssembly is an open standard developed by a W3C Community Group.

    +

    This document describes version 2.0 + stringref (Draft 2022-04-27) of the core WebAssembly standard. +It is intended that it will be superseded by new incremental releases with additional features in the future.

    +
    + +

    1.1.1. Design Goals

    +

    The design goals of WebAssembly are the following:

    +
      +
    • +

      Fast, safe, and portable semantics:

      +
        +
      • +

        Fast: executes with near native code performance, taking advantage of capabilities common to all contemporary hardware.

        +
      • +

        Safe: code is validated and executes in a memory-safe 2, sandboxed environment preventing data corruption or security breaches.

        +
      • +

        Well-defined: fully and precisely defines valid programs and their behavior in a way that is easy to reason about informally and formally.

        +
      • +

        Hardware-independent: can be compiled on all modern architectures, desktop or mobile devices and embedded systems alike.

        +
      • +

        Language-independent: does not privilege any particular language, programming model, or object model.

        +
      • +

        Platform-independent: can be embedded in browsers, run as a stand-alone VM, or integrated in other environments.

        +
      • +

        Open: programs can interoperate with their environment in a simple and universal manner.

        +
      +
    • +

      Efficient and portable representation:

      +
        +
      • +

        Compact: has a binary format that is fast to transmit by being smaller than typical text or native code formats.

        +
      • +

        Modular: programs can be split up in smaller parts that can be transmitted, cached, and consumed separately.

        +
      • +

        Efficient: can be decoded, validated, and compiled in a fast single pass, equally with either just-in-time (JIT) or ahead-of-time (AOT) compilation.

        +
      • +

        Streamable: allows decoding, validation, and compilation to begin as soon as possible, before all data has been seen.

        +
      • +

        Parallelizable: allows decoding, validation, and compilation to be split into many independent parallel tasks.

        +
      • +

        Portable: makes no architectural assumptions that are not broadly supported across modern hardware.

        +
      +
    +

    WebAssembly code is also intended to be easy to inspect and debug, especially in environments like web browsers, but such features are beyond the scope of this specification.

    +
    +
    1 +
    +

    A contraction of “WebAssembly”, not an acronym, hence not using all-caps.

    +
    2 +
    +

    No program can break WebAssembly’s memory model. Of course, it cannot guarantee that an unsafe language compiling to WebAssembly does not corrupt its own memory layout, e.g. inside WebAssembly’s linear memory.

    +
    +
    +
    + +

    1.1.2. Scope

    +

    At its core, WebAssembly is a virtual instruction set architecture (virtual ISA). +As such, it has many use cases and can be embedded in many different environments. +To encompass their variety and enable maximum reuse, the WebAssembly specification is split and layered into several documents.

    +

    This document is concerned with the core ISA layer of WebAssembly. +It defines the instruction set, binary encoding, validation, and execution semantics, as well as a textual representation. +It does not, however, define how WebAssembly programs can interact with a specific environment they execute in, nor how they are invoked from such an environment.

    +

    Instead, this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. +These will each define a WebAssembly application programming interface (API) suitable for a given environment.

    +
    +
    + +

    1.1.3. Security Considerations

    +

    WebAssembly provides no ambient access to the computing environment in which code is executed. +Any interaction with the environment, such as I/O, access to resources, or operating system calls, can only be performed by invoking functions provided by the embedder and imported into a WebAssembly module. +An embedder can establish security policies suitable for a respective environment by controlling or limiting which functional capabilities it makes available for import. +Such considerations are an embedder’s responsibility and the subject of API definitions for a specific environment.

    +

    Because WebAssembly is designed to be translated into machine code running directly on the host’s hardware, it is potentially vulnerable to side channel attacks on the hardware level. +In environments where this is a concern, an embedder may have to put suitable mitigations into place to isolate WebAssembly computations.

    +
    +
    + +

    1.1.4. Dependencies

    +

    WebAssembly depends on two existing standards:

    + +

    However, to make this specification self-contained, relevant aspects of the aforementioned standards are defined and formalized as part of this specification, +such as the binary representation and rounding of floating-point values, and the value range and UTF-8 encoding of Unicode characters.

    +
    +

    Note

    +

    The aforementioned standards are the authoritative source of all respective definitions. +Formalizations given in this specification are intended to match these definitions. +Any discrepancy in the syntax or semantics described is to be considered an error.

    +
    +
    +
    + +
    +

    1.2. Overview

    +
    + +

    1.2.1. Concepts

    +

    WebAssembly encodes a low-level, assembly-like programming language. +This language is structured around the following concepts.

    +
    +
    Values +
    +

    WebAssembly provides only four basic number types. +These are integers and [IEEE-754-2019] numbers, +each in 32 and 64 bit width. +32 bit integers also serve as Booleans and as memory addresses. +The usual operations on these types are available, +including the full matrix of conversions between them. +There is no distinction between signed and unsigned integer types. +Instead, integers are interpreted by respective operations +as either unsigned or signed in two’s complement representation.

    +

    In addition to these basic number types, there is a single 128 bit wide +vector type representing different types of packed data. +The supported representations are 4 32-bit, or 2 64-bit [IEEE-754-2019] numbers, or different widths of packed integer values +specifically 2 64-bit integers, 4 32-bit integers, 8 +16-bit integers, or 16 8-bit integers.

    +

    Finally, values can consist of opaque references that represent pointers towards different sorts of entities. +Unlike with other types, their size or representation is not observable.

    +
    +
    +
    Instructions +
    +

    The computational model of WebAssembly is based on a stack machine. +Code consists of sequences of instructions that are executed in order. +Instructions manipulate values on an implicit operand stack 1 and fall into two main categories. Simple instructions perform basic operations on data. +They pop arguments from the operand stack and push results back to it. Control instructions alter control flow. +Control flow is structured, meaning it is expressed with well-nested constructs such as blocks, loops, and conditionals. +Branches can only target such constructs.

    +
    +
    +
    Traps +
    +

    Under some conditions, certain instructions may produce a trap, +which immediately aborts execution. +Traps cannot be handled by WebAssembly code, +but are reported to the outside environment, +where they typically can be caught.

    +
    +
    +
    Functions +
    +

    Code is organized into separate functions. +Each function takes a sequence of values as parameters +and returns a sequence of values as results. +Functions can call each other, including recursively, +resulting in an implicit call stack that cannot be accessed directly. +Functions may also declare mutable local variables that are usable as virtual registers.

    +
    +
    +
    Tables +
    +

    A table is an array of opaque values of a particular element type. +It allows programs to select such values indirectly through a dynamic index operand. +Currently, the only available element type is an untyped function reference. +Thereby, a program can call functions indirectly through a dynamic index into a table. +For example, this allows emulating function pointers by way of table indices.

    +
    +
    +
    Linear Memory +
    +

    A linear memory is a contiguous, mutable array of raw bytes. +Such a memory is created with an initial size but can be grown dynamically. +A program can load and store values from/to a linear memory at any byte address (including unaligned). +Integer loads and stores can specify a storage size which is smaller than the size of the respective value type. +A trap occurs if an access is not within the bounds of the current memory size.

    +
    +
    +
    Modules +
    +

    A WebAssembly binary takes the form of a module that contains definitions for functions, tables, and linear memories, +as well as mutable or immutable global variables. +Definitions can also be imported, specifying a module/name pair and a suitable type. +Each definition can optionally be exported under one or more names. +In addition to definitions, modules can define initialization data for their memories or tables +that takes the form of segments copied to given offsets. +They can also define a start function that is automatically executed.

    +
    +
    +
    Embedder +
    +

    A WebAssembly implementation will typically be embedded into a host environment. +This environment defines how loading of modules is initiated, +how imports are provided (including host-side definitions), and how exports can be accessed. +However, the details of any particular embedding are beyond the scope of this specification, and will instead be provided by complementary, environment-specific API definitions.

    +
    +
    +
    1 +
    +

    In practice, implementations need not maintain an actual operand stack. Instead, the stack can be viewed as a set of anonymous registers that are implicitly referenced by instructions. The type system ensures that the stack height, and thus any referenced register, is always known statically.

    +
    +
    +
    + +

    1.2.2. Semantic Phases

    +

    Conceptually, the semantics of WebAssembly is divided into three phases. +For each part of the language, the specification specifies each of them.

    +
    +
    Decoding +
    +

    WebAssembly modules are distributed in a binary format. Decoding processes that format and converts it into an internal representation of a module. +In this specification, this representation is modelled by abstract syntax, but a real implementation could compile directly to machine code instead.

    +
    +
    +
    Validation +
    +

    A decoded module has to be valid. +Validation checks a number of well-formedness conditions to guarantee that the module is meaningful and safe. +In particular, it performs type checking of functions and the instruction sequences in their bodies, ensuring for example that the operand stack is used consistently.

    +
    + +
    +
    Execution +
    +

    Finally, a valid module can be executed. +Execution can be further divided into two phases:

    +

    Instantiation. +A module instance is the dynamic representation of a module, +complete with its own state and execution stack. +Instantiation executes the module body itself, given definitions for all its imports. +It initializes globals, memories and tables and invokes the module’s start function if defined. +It returns the instances of the module’s exports.

    +

    Invocation. +Once instantiated, further WebAssembly computations can be initiated by invoking an exported function on a module instance. +Given the required arguments, that executes the respective function and returns its results.

    +

    Instantiation and invocation are operations within the embedding environment.

    +
    +
    +
    +
    +
    + +
    + +

    2. Structure

    +
    + +
    + +

    2.1. Conventions

    +

    WebAssembly is a programming language that has multiple concrete representations +(its binary format and the text format). +Both map to a common structure. +For conciseness, this structure is described in the form of an abstract syntax. +All parts of this specification are defined in terms of this abstract syntax.

    +
    + +

    2.1.1. Grammar Notation

    +

    The following conventions are adopted in defining grammar rules for abstract syntax.

    +
      +
    • +

      Terminal symbols (atoms) are written in sans-serif font: .

      +
    • +

      Nonterminal symbols are written in italic font: .

      +
    • +

      is a sequence of iterations of .

      +
    • +

      is a possibly empty sequence of iterations of . +(This is a shorthand for used where is not relevant.)

      +
    • +

      is a non-empty sequence of iterations of . +(This is a shorthand for where .)

      +
    • +

      is an optional occurrence of . +(This is a shorthand for where .)

      +
    • +

      Productions are written .

      +
    • +

      Large productions may be split into multiple definitions, indicated by ending the first one with explicit ellipses, , and starting continuations with ellipses, .

      +
    • +

      Some productions are augmented with side conditions in parentheses, “”, that provide a shorthand for a combinatorial expansion of the production into many separate cases.

      +
    • +

      If the same meta variable or non-terminal symbol appears multiple times in a production, then all those occurrences must have the same instantiation. +(This is a shorthand for a side condition requiring multiple different variables to be equal.)

      +
    +
    +
    + +

    2.1.2. Auxiliary Notation

    +

    When dealing with syntactic constructs the following notation is also used:

    +
      +
    • +

      denotes the empty sequence.

      +
    • +

      denotes the length of a sequence .

      +
    • +

      denotes the -th element of a sequence , starting from .

      +
    • +

      denotes the sub-sequence of a sequence .

      +
    • +

      denotes the same sequence as , +except that the -th element is replaced with .

      +
    • +

      denotes the same sequence as , +except that the sub-sequence is replaced with .

      +
    • +

      denotes the flat sequence formed by concatenating all sequences in .

      +
    +

    Moreover, the following conventions are employed:

    +
      +
    • +

      The notation , where is a non-terminal symbol, is treated as a meta variable ranging over respective sequences of (similarly for , , ).

      +
    • +

      When given a sequence , +then the occurrences of in a sequence written are assumed to be in point-wise correspondence with (similarly for , , ). +This implicitly expresses a form of mapping syntactic constructions over a sequence.

      +
    +

    Productions of the following form are interpreted as records that map a fixed set of fields to “values” , respectively:

    +
    +

    The following notation is adopted for manipulating such records:

    +
      +
    • +

      denotes the contents of the component of .

      +
    • +

      denotes the same record as , +except that the contents of the component is replaced with .

      +
    • +

      denotes the composition of two records with the same fields of sequences by appending each sequence point-wise:

      +
      +
    • +

      denotes the composition of a sequence of records, respectively; if the sequence is empty, then all fields of the resulting record are empty.

      +
    +

    The update notation for sequences and records generalizes recursively to nested components accessed by “paths” :

    +
      +
    • +

      is short for .

      +
    • +

      is short for .

      +
    +

    where is shortened to .

    +
    +
    + +

    2.1.3. Vectors

    +

    Vectors are bounded sequences of the form (or ), +where the can either be values or complex constructions. +A vector can have at most elements.

    +
    +
    +
    + +
    + +

    2.2. Values

    +

    WebAssembly programs operate on primitive numeric values. +Moreover, in the definition of programs, immutable sequences of values occur to represent more complex data, such as text strings or other vectors.

    +
    + +

    2.2.1. Bytes

    +

    The simplest form of value are raw uninterpreted bytes. +In the abstract syntax they are represented as hexadecimal literals.

    +
    +
    +
    2.2.1.1. Conventions
    +
      +
    • +

      The meta variable ranges over bytes.

      +
    • +

      Bytes are sometimes interpreted as natural numbers .

      +
    +
    +
    +
    + +

    2.2.2. Integers

    +

    Different classes of integers with different value ranges are distinguished by their bit width and by whether they are unsigned or signed.

    +
    +

    The latter class defines uninterpreted integers, whose signedness interpretation can vary depending on context. +In the abstract syntax, they are represented as unsigned values. +However, some operations convert them to signed based on a two’s complement interpretation.

    +
    +

    Note

    +

    The main integer types occurring in this specification are , , , , , , , . +However, other sizes occur as auxiliary constructions, e.g., in the definition of floating-point numbers.

    +
    +
    +
    2.2.2.1. Conventions
    +
      +
    • +

      The meta variables range over integers.

      +
    • +

      Numbers may be denoted by simple arithmetics, as in the grammar above. +In order to distinguish arithmetics like from sequences like , the latter is distinguished with parentheses.

      +
    +
    +
    +
    + +

    2.2.3. Floating-Point

    +

    Floating-point data represents 32 or 64 bit values that correspond to the respective binary formats of the [IEEE-754-2019] standard (Section 3.3).

    +

    Every value has a sign and a magnitude. +Magnitudes can either be expressed as normal numbers of the form , where is the exponent and is the significand whose most significant bit is , +or as a subnormal number where the exponent is fixed to the smallest possible value and is ; among the subnormals are positive and negative zero values. +Since the significands are binary values, normals are represented in the form , where is the bit width of ; similarly for subnormals.

    +

    Possible magnitudes also include the special values (infinity) and (NaN, not a number). +NaN values have a payload that describes the mantissa bits in the underlying binary representation. +No distinction is made between signalling and quiet NaNs.

    +
    +

    where and with

    +
    +

    A canonical NaN is a floating-point value where is a payload whose most significant bit is while all others are :

    +
    +

    An arithmetic NaN is a floating-point value with , such that the most significant bit is while all others are arbitrary.

    +
    +

    Note

    +

    In the abstract syntax, subnormals are distinguished by the leading 0 of the significand. The exponent of subnormals has the same value as the smallest possible exponent of a normal number. Only in the binary representation the exponent of a subnormal is encoded differently than the exponent of any normal number.

    +
    +
    +
    2.2.3.1. Conventions
    +
      +
    • +

      The meta variable ranges over floating-point values where clear from context.

      +
    +
    +
    +
    + +

    2.2.4. Vectors

    +

    Numeric vectors are 128-bit values that are processed by vector instructions (also known as SIMD instructions, single instruction multiple data). +They are represented in the abstract syntax using . The interpretation of lane types (integer or floating-point numbers) and lane sizes are determined by the specific instruction operating on them.

    +
    +
    + +

    2.2.5. Names

    +

    Names are sequences of characters, which are scalar values as defined by [UNICODE] (Section 2.4).

    +
    +

    Due to the limitations of the binary format, +the length of a name is bounded by the length of its UTF-8 encoding.

    +
    +
    2.2.5.1. Convention
    +
      +
    • +

      Characters (Unicode scalar values) are sometimes used interchangeably with natural numbers .

      +
    +
    +
    +
    + +
    + +

    2.3. Types

    +

    Various entities in WebAssembly are classified by types. +Types are checked during validation, instantiation, and possibly execution.

    +
    + +

    2.3.1. Number Types

    +

    Number types classify numeric values.

    +
    +

    The types and classify 32 and 64 bit integers, respectively. +Integers are not inherently signed or unsigned, their interpretation is determined by individual operations.

    +

    The types and classify 32 and 64 bit floating-point data, respectively. +They correspond to the respective binary floating-point representations, also known as single and double precision, as defined by the [IEEE-754-2019] standard (Section 3.3).

    +

    Number types are transparent, meaning that their bit patterns can be observed. +Values of number type can be stored in memories.

    +
    + +
    2.3.1.1. Conventions
    +
      +
    • +

      The notation denotes the bit width of a number type . +That is, and .

      +
    +
    +
    +
    + +

    2.3.2. Vector Types

    +

    Vector types classify vectors of numeric values processed by vector instructions (also known as SIMD instructions, single instruction multiple data).

    +
    +

    The type corresponds to a 128 bit vector of packed integer or floating-point data. The packed data +can be interpreted as signed or unsigned integers, single or double precision floating-point +values, or a single 128 bit type. The interpretation is determined by individual operations.

    +

    Vector types, like number types are transparent, meaning that their bit patterns can be observed. +Values of vector type can be stored in memories.

    +
    +
    2.3.2.1. Conventions
    +
      +
    • +

      The notation for bit width extends to vector types as well, that is, .

      +
    +
    +
    +
    + +

    2.3.3. Reference Types

    +

    Reference types classify first-class references to objects in the runtime store.

    +
    +

    The type denotes the infinite union of all references to functions, regardless of their function types.

    +

    The type denotes the infinite union of all references to objects owned by the embedder and that can be passed into WebAssembly under this type.

    +

    Reference types are opaque, meaning that neither their size nor their bit pattern can be observed. +Values of reference type can be stored in tables.

    +
    +
    + +

    2.3.4. Value Types

    +

    Value types classify the individual values that WebAssembly code can compute with and the values that a variable accepts. +They are either number types, vector types, or reference types.

    +
    +
    +
    2.3.4.1. Conventions
    +
      +
    • +

      The meta variable ranges over value types or subclasses thereof where clear from context.

      +
    +
    +
    +
    + +

    2.3.5. Result Types

    +

    Result types classify the result of executing instructions or functions, +which is a sequence of values, written with brackets.

    +
    +
    +
    + +

    2.3.6. Function Types

    +

    Function types classify the signature of functions, +mapping a vector of parameters to a vector of results. +They are also used to classify the inputs and outputs of instructions.

    + +
    +
    + +

    2.3.7. Limits

    +

    Limits classify the size range of resizeable storage associated with memory types and table types.

    +
    +

    If no maximum is given, the respective storage can grow to any size.

    +
    +
    + +

    2.3.8. Memory Types

    +

    Memory types classify linear memories and their size range.

    +
    +

    The limits constrain the minimum and optionally the maximum size of a memory. +The limits are given in units of page size.

    +
    +
    + +

    2.3.9. Table Types

    +

    Table types classify tables over elements of reference type within a size range.

    +
    +

    Like memories, tables are constrained by limits for their minimum and optionally maximum size. +The limits are given in numbers of entries.

    +
    +

    Note

    +

    In future versions of WebAssembly, additional element types may be introduced.

    +
    +
    +
    + +

    2.3.10. Global Types

    +

    Global types classify global variables, which hold a value and can either be mutable or immutable.

    +
    +
    +
    + +

    2.3.11. External Types

    +

    External types classify imports and external values with their respective types.

    +
    +
    +
    2.3.11.1. Conventions
    +

    The following auxiliary notation is defined for sequences of external types. +It filters out entries of a specific kind in an order-preserving fashion:

    + +
    +
    +
    + +
    + +

    2.4. Instructions

    +

    WebAssembly code consists of sequences of instructions. +Its computational model is based on a stack machine in that instructions manipulate values on an implicit operand stack, +consuming (popping) argument values and producing or returning (pushing) result values.

    +

    In addition to dynamic operands from the stack, some instructions also have static immediate arguments, +typically indices or type annotations, +which are part of the instruction itself.

    +

    Some instructions are structured in that they bracket nested sequences of instructions.

    +

    The following sections group instructions into a number of different categories.

    +
    + +

    2.4.1. Numeric Instructions

    +

    Numeric instructions provide basic operations over numeric values of specific type. +These operations closely match respective operations available in hardware.

    +
    +

    Numeric instructions are divided by number type. +For each type, several subcategories can be distinguished:

    +
      +
    • +

      Constants: return a static constant.

      +
    • +

      Unary Operations: consume one operand and produce one result of the respective type.

      +
    • +

      Binary Operations: consume two operands and produce one result of the respective type.

      +
    • +

      Tests: consume one operand of the respective type and produce a Boolean integer result.

      +
    • +

      Comparisons: consume two operands of the respective type and produce a Boolean integer result.

      +
    • +

      Conversions: consume a value of one type and produce a result of another +(the source type of the conversion is the one after the “”).

      +
    +

    Some integer instructions come in two flavors, +where a signedness annotation distinguishes whether the operands are to be interpreted as unsigned or signed integers. +For the other integer instructions, the use of two’s complement for the signed interpretation means that they behave the same regardless of signedness.

    +
    + +
    2.4.1.1. Conventions
    +

    Occasionally, it is convenient to group operators together according to the following grammar shorthands:

    +
    +
    +
    +
    + +

    2.4.2. Vector Instructions

    +

    Vector instructions (also known as SIMD instructions, single data multiple value) provide basic operations over values of vector type.

    +
    +

    Vector instructions have a naming convention involving a prefix that +determines how their operands will be interpreted. +This prefix describes the shape of the operand, +written , and consisting of a packed numeric type and the number of lanes of that type. +Operations are performed point-wise on the values of each lane.

    +
    +

    Note

    +

    For example, the shape interprets the operand +as four values, packed into an . +The bitwidth of the numeric type times always is 128.

    +
    +

    Instructions prefixed with do not involve a specific interpretation, and treat the as an value or a vector of 128 individual bits.

    +

    Vector instructions can be grouped into several subcategories:

    +
      +
    • +

      Constants: return a static constant.

      +
    • +

      Unary Operations: consume one operand and produce one result.

      +
    • +

      Binary Operations: consume two operands and produce one result.

      +
    • +

      Ternary Operations: consume three operands and produce one result.

      +
    • +

      Tests: consume one operand and produce a Boolean integer result.

      +
    • +

      Shifts: consume a operand and a operand, producing one result.

      +
    • +

      Splats: consume a value of numeric type and produce a result of a specified shape.

      +
    • +

      Extract lanes: consume a operand and return the numeric value in a given lane.

      +
    • +

      Replace lanes: consume a operand and a numeric value for a given lane, and produce a result.

      +
    +

    Some vector instructions have a signedness annotation which distinguishes whether the elements in the operands are to be interpreted as unsigned or signed integers. +For the other vector instructions, the use of two’s complement for the signed interpretation means that they behave the same regardless of signedness.

    +
    + +
    2.4.2.1. Conventions
    +

    Occasionally, it is convenient to group operators together according to the following grammar shorthands:

    +
    +
    +
    +
    + +

    2.4.3. Reference Instructions

    +

    Instructions in this group are concerned with accessing references.

    +
    +

    These instruction produce a null value, check for a null value, or produce a reference to a given function, respectively.

    +
    +
    + +

    2.4.4. Parametric Instructions

    +

    Instructions in this group can operate on operands of any value type.

    +
    +

    The instruction simply throws away a single operand.

    +

    The instruction selects one of its first two operands based on whether its third operand is zero or not. +It may include a value type determining the type of these operands. If missing, the operands must be of numeric type.

    +
    +

    Note

    +

    In future versions of WebAssembly, the type annotation on may allow for more than a single value being selected at the same time.

    +
    +
    +
    + +

    2.4.5. Variable Instructions

    +

    Variable instructions are concerned with access to local or global variables.

    + +

    These instructions get or set the values of variables, respectively. +The instruction is like but also returns its argument.

    +
    +
    + +

    2.4.6. Table Instructions

    +

    Instructions in this group are concerned with tables table.

    + +

    The and instructions load or store an element in a table, respectively.

    +

    The instruction returns the current size of a table. +The instruction grows table by a given delta and returns the previous size, or if enough space cannot be allocated. +It also takes an initialization value for the newly allocated entries.

    +

    The instruction sets all entries in a range to a given value.

    +

    The instruction copies elements from a source table region to a possibly overlapping destination region; the first index denotes the destination. +The instruction copies elements from a passive element segment into a table. +The instruction prevents further use of a passive element segment. This instruction is intended to be used as an optimization hint. After an element segment is dropped its elements can no longer be retrieved, so the memory used by this segment may be freed.

    +

    An additional instruction that accesses a table is the control instruction .

    +
    +
    + +

    2.4.7. Memory Instructions

    +

    Instructions in this group are concerned with linear memory.

    +
    +

    Memory is accessed with and instructions for the different number types. +They all take a memory immediate that contains an address offset and the expected alignment (expressed as the exponent of a power of 2). +Integer loads and stores can optionally specify a storage size that is smaller than the bit width of the respective value type. +In the case of loads, a sign extension mode is then required to select appropriate behavior.

    +

    Vector loads can specify a shape that is half the bit width of . Each lane is half its usual size, and the sign extension mode then specifies how the smaller lane is extended to the larger lane. +Alternatively, vector loads can perform a splat, such that only a single lane of the specified storage size is loaded, and the result is duplicated to all lanes.

    +

    The static address offset is added to the dynamic address operand, yielding a 33 bit effective address that is the zero-based index at which the memory is accessed. +All values are read and written in little endian byte order. +A trap results if any of the accessed memory bytes lies outside the address range implied by the memory’s current size.

    +
    +

    Note

    +

    Future version of WebAssembly might provide memory instructions with 64 bit address ranges.

    +
    +

    The instruction returns the current size of a memory. +The instruction grows memory by a given delta and returns the previous size, or if enough memory cannot be allocated. +Both instructions operate in units of page size.

    +

    The instruction sets all values in a region to a given byte. +The instruction copies data from a source memory region to a possibly overlapping destination region. +The instruction copies data from a passive data segment into a memory. +The instruction prevents further use of a passive data segment. This instruction is intended to be used as an optimization hint. After a data segment is dropped its data can no longer be retrieved, so the memory used by this segment may be freed.

    +
    +

    Note

    +

    In the current version of WebAssembly, +all memory instructions implicitly operate on memory index . +This restriction may be lifted in future versions.

    +
    +
    +
    + +

    2.4.8. Control Instructions

    +

    Instructions in this group affect the flow of control.

    + +

    The instruction does nothing.

    +

    The instruction causes an unconditional trap.

    +

    The , and instructions are structured instructions. +They bracket nested sequences of instructions, called blocks, terminated with, or separated by, or pseudo-instructions. +As the grammar prescribes, they must be well-nested.

    +

    A structured instruction can consume input and produce output on the operand stack according to its annotated block type. +It is given either as a type index that refers to a suitable function type, or as an optional value type inline, which is a shorthand for the function type .

    +

    Each structured control instruction introduces an implicit label. +Labels are targets for branch instructions that reference them with label indices. +Unlike with other index spaces, indexing of labels is relative by nesting depth, +that is, label refers to the innermost structured control instruction enclosing the referring branch instruction, +while increasing indices refer to those farther out. +Consequently, labels can only be referenced from within the associated structured control instruction. +This also implies that branches can only be directed outwards, +“breaking” from the block of the control construct they target. +The exact effect depends on that control construct. +In case of or it is a forward jump, +resuming execution after the matching . +In case of it is a backward jump to the beginning of the loop.

    +
    +

    Note

    +

    This enforces structured control flow. +Intuitively, a branch targeting a or behaves like a statement in most C-like languages, +while a branch targeting a behaves like a statement.

    +
    +

    Branch instructions come in several flavors: performs an unconditional branch, performs a conditional branch, +and performs an indirect branch through an operand indexing into the label vector that is an immediate to the instruction, or to a default target if the operand is out of bounds. +The instruction is a shortcut for an unconditional branch to the outermost block, which implicitly is the body of the current function. +Taking a branch unwinds the operand stack up to the height where the targeted structured control instruction was entered. +However, branches may additionally consume operands themselves, which they push back on the operand stack after unwinding. +Forward branches require operands according to the output of the targeted block’s type, i.e., represent the values produced by the terminated block. +Backward branches require operands according to the input of the targeted block’s type, i.e., represent the values consumed by the restarted block.

    +

    The instruction invokes another function, consuming the necessary arguments from the stack and returning the result values of the call. +The instruction calls a function indirectly through an operand indexing into a table that is denoted by a table index and must have type . +Since it may contain functions of heterogeneous type, +the callee is dynamically checked against the function type indexed by the instruction’s second immediate, and the call is aborted with a trap if it does not match.

    +
    +
    + +

    2.4.9. Expressions

    +

    Function bodies, initialization values for globals, and offsets of element or data segments are given as expressions, which are sequences of instructions terminated by an marker.

    +
    +

    In some places, validation restricts expressions to be constant, which limits the set of allowable instructions.

    +
    +
    + +
    + +

    2.5. Modules

    +

    WebAssembly programs are organized into modules, +which are the unit of deployment, loading, and compilation. +A module collects definitions for types, functions, tables, memories, and globals. +In addition, it can declare imports and exports and provide initialization in the form of data and element segments, or a start function.

    + +

    Each of the vectors – and thus the entire module – may be empty.

    +
    + +

    2.5.1. Indices

    +

    Definitions are referenced with zero-based indices. +Each class of definition has its own index space, as distinguished by the following classes.

    + +

    The index space for functions, tables, memories and globals includes respective imports declared in the same module. +The indices of these imports precede the indices of other definitions in the same index space.

    +

    Element indices reference element segments and data indices reference data segments.

    +

    The index space for locals is only accessible inside a function and includes the parameters of that function, which precede the local variables.

    +

    Label indices reference structured control instructions inside an instruction sequence.

    +
    + +
    2.5.1.1. Conventions
    +
      +
    • +

      The meta variable ranges over label indices.

      +
    • +

      The meta variables range over indices in any of the other index spaces.

      +
    • +

      The notation denotes the set of indices from index space occurring free in . We sometimes reinterpret this set as the vector of its elements.

      +
    +
    +

    Note

    +

    For example, if is , then , or equivalently, the vector .

    +
    +
    +
    +
    + +

    2.5.2. Types

    +

    The component of a module defines a vector of function types.

    +

    All function types used in a module must be defined in this component. +They are referenced by type indices.

    +
    +

    Note

    +

    Future versions of WebAssembly may add additional forms of type definitions.

    +
    +
    +
    + +

    2.5.3. Functions

    +

    The component of a module defines a vector of functions with the following structure:

    +
    +

    The of a function declares its signature by reference to a type defined in the module. +The parameters of the function are referenced through 0-based local indices in the function’s body; they are mutable.

    +

    The declare a vector of mutable local variables and their types. +These variables are referenced through local indices in the function’s body. +The index of the first local is the smallest index not referencing a parameter.

    +

    The is an instruction sequence that upon termination must produce a stack matching the function type’s result type.

    +

    Functions are referenced through function indices, +starting with the smallest index not referencing a function import.

    +
    +
    + +

    2.5.4. Tables

    +

    The component of a module defines a vector of tables described by their table type:

    +
    +

    A table is a vector of opaque values of a particular reference type. +The size in the limits of the table type specifies the initial size of that table, while its , if present, restricts the size to which it can grow later.

    +

    Tables can be initialized through element segments.

    +

    Tables are referenced through table indices, +starting with the smallest index not referencing a table import. +Most constructs implicitly reference table index .

    +
    +
    + +

    2.5.5. Memories

    +

    The component of a module defines a vector of linear memories (or memories for short) as described by their memory type:

    +
    +

    A memory is a vector of raw uninterpreted bytes. +The size in the limits of the memory type specifies the initial size of that memory, while its , if present, restricts the size to which it can grow later. +Both are in units of page size.

    +

    Memories can be initialized through data segments.

    +

    Memories are referenced through memory indices, +starting with the smallest index not referencing a memory import. +Most constructs implicitly reference memory index .

    +
    +

    Note

    +

    In the current version of WebAssembly, at most one memory may be defined or imported in a single module, +and all constructs implicitly reference this memory . +This restriction may be lifted in future versions.

    +
    +
    +
    + +

    2.5.6. Globals

    +

    The component of a module defines a vector of global variables (or globals for short):

    +
    +

    Each global stores a single value of the given global type. +Its also specifies whether a global is immutable or mutable. +Moreover, each global is initialized with an value given by a constant initializer expression.

    +

    Globals are referenced through global indices, +starting with the smallest index not referencing a global import.

    +
    +
    + +

    2.5.7. Element Segments

    +

    The initial contents of a table is uninitialized. Element segments can be used to initialize a subrange of a table from a static vector of elements.

    +

    The component of a module defines a vector of element segments. +Each element segment defines a reference type and a corresponding list of constant element expressions.

    +

    Element segments have a mode that identifies them as either passive, active, or declarative. +A passive element segment’s elements can be copied to a table using the instruction. +An active element segment copies its elements into a table during instantiation, as specified by a table index and a constant expression defining an offset into that table. +A declarative element segment is not available at runtime but merely serves to forward-declare references that are formed in code with instructions like .

    + +

    The is given by a constant expression.

    +

    Element segments are referenced through element indices.

    +
    +

    Note

    +

    In the current version of WebAssembly, only tables of element type can be initialized with an element segment. +This limitation may be lifted in the future.

    +
    +
    +
    + +

    2.5.8. Data Segments

    +

    The initial contents of a memory are zero bytes. Data segments can be used to initialize a range of memory from a static vector of bytes.

    +

    The component of a module defines a vector of data segments.

    +

    Like element segments, data segments have a mode that identifies them as either passive or active. +A passive data segment’s contents can be copied into a memory using the instruction. +An active data segment copies its contents into a memory during instantiation, as specified by a memory index and a constant expression defining an offset into that memory.

    + +

    Data segments are referenced through data indices.

    +
    +

    Note

    +

    In the current version of WebAssembly, at most one memory is allowed in a module. +Consequently, the only valid is .

    +
    +
    +
    + +

    2.5.9. Start Function

    +

    The component of a module declares the function index of a start function that is automatically invoked when the module is instantiated, after tables and memories have been initialized.

    +
    +
    +

    Note

    +

    The start function is intended for initializing the state of a module. +The module and its exports are not accessible before this initialization has completed.

    +
    +
    +
    + +

    2.5.10. Exports

    +

    The component of a module defines a set of exports that become accessible to the host environment once the module has been instantiated.

    + +

    Each export is labeled by a unique name. +Exportable definitions are functions, tables, memories, and globals, +which are referenced through a respective descriptor.

    +
    +
    2.5.10.1. Conventions
    +

    The following auxiliary notation is defined for sequences of exports, filtering out indices of a specific kind in an order-preserving fashion:

    + +
    +
    +
    + +

    2.5.11. Imports

    +

    The component of a module defines a set of imports that are required for instantiation.

    + +

    Each import is labeled by a two-level name space, consisting of a name and a for an entity within that module. +Importable definitions are functions, tables, memories, and globals. +Each import is specified by a descriptor with a respective type that a definition provided during instantiation is required to match.

    +

    Every import defines an index in the respective index space. +In each index space, the indices of imports go before the first index of any definition contained in the module itself.

    +
    +

    Note

    +

    Unlike export names, import names are not necessarily unique. +It is possible to import the same / pair multiple times; +such imports may even have different type descriptions, including different kinds of entities. +A module with such imports can still be instantiated depending on the specifics of how an embedder allows resolving and supplying imports. +However, embedders are not required to support such overloading, +and a WebAssembly module itself cannot implement an overloaded name.

    +
    +
    +
    +
    +
    + +
    + +

    3. Validation

    +
    + +
    + +

    3.1. Conventions

    +

    Validation checks that a WebAssembly module is well-formed. +Only valid modules can be instantiated.

    +

    Validity is defined by a type system over the abstract syntax of a module and its contents. +For each piece of abstract syntax, there is a typing rule that specifies the constraints that apply to it. +All rules are given in two equivalent forms:

    +
      +
    1. +

      In prose, describing the meaning in intuitive form.

      +
    2. +

      In formal notation, describing the rule in mathematical form. 1

      +
    +
    +

    Note

    +

    The prose and formal rules are equivalent, +so that understanding of the formal notation is not required to read this specification. +The formalism offers a more concise description in notation that is used widely in programming languages semantics and is readily amenable to mathematical proof.

    +
    +

    In both cases, the rules are formulated in a declarative manner. +That is, they only formulate the constraints, they do not define an algorithm. +The skeleton of a sound and complete algorithm for type-checking instruction sequences according to this specification is provided in the appendix.

    +
    + +

    3.1.1. Contexts

    +

    Validity of an individual definition is specified relative to a context, +which collects relevant information about the surrounding module and the definitions in scope:

    +
      +
    • +

      Types: the list of types defined in the current module.

      +
    • +

      Functions: the list of functions declared in the current module, represented by their function type.

      +
    • +

      Tables: the list of tables declared in the current module, represented by their table type.

      +
    • +

      Memories: the list of memories declared in the current module, represented by their memory type.

      +
    • +

      Globals: the list of globals declared in the current module, represented by their global type.

      +
    • +

      Element Segments: the list of element segments declared in the current module, represented by their element type.

      +
    • +

      Data Segments: the list of data segments declared in the current module, each represented by an entry.

      +
    • +

      Locals: the list of locals declared in the current function (including parameters), represented by their value type.

      +
    • +

      Labels: the stack of labels accessible from the current position, represented by their result type.

      +
    • +

      Return: the return type of the current function, represented as an optional result type that is absent when no return is allowed, as in free-standing expressions.

      +
    • +

      References: the list of function indices that occur in the module outside functions and can hence be used to form references inside them.

      +
    +

    In other words, a context contains a sequence of suitable types for each index space, +describing each defined entry in that space. +Locals, labels and return type are only used for validating instructions in function bodies, and are left empty elsewhere. +The label stack is the only part of the context that changes as validation of an instruction sequence proceeds.

    +

    More concretely, contexts are defined as records with abstract syntax:

    + +

    In addition to field access written the following notation is adopted for manipulating contexts:

    +
      +
    • +

      When spelling out a context, empty fields are omitted.

      +
    • +

      denotes the same context as but with the elements prepended to its component sequence.

      +
    +
    +

    Note

    +

    We use indexing notation like to look up indices in their respective index space in the context. +Context extension notation is primarily used to locally extend relative index spaces, such as label indices. +Accordingly, the notation is defined to append at the front of the respective sequence, introducing a new relative index and shifting the existing ones.

    +
    +
    +
    + +

    3.1.2. Prose Notation

    +

    Validation is specified by stylised rules for each relevant part of the abstract syntax. +The rules not only state constraints defining when a phrase is valid, +they also classify it with a type. +The following conventions are adopted in stating these rules.

    +
      +
    • +

      A phrase is said to be “valid with type ” +if and only if all constraints expressed by the respective rules are met. +The form of depends on what is.

      +
      +

      Note

      +

      For example, if is a function, +then is a function type; +for an that is a global, is a global type; +and so on.

      +
      +
    • +

      The rules implicitly assume a given context .

      +
    • +

      In some places, this context is locally extended to a context with additional entries. +The formulation “Under context , … statement …” is adopted to express that the following statement must apply under the assumptions embodied in the extended context.

      +
    +
    +
    + +

    3.1.3. Formal Notation

    +
    +

    Note

    +

    This section gives a brief explanation of the notation for specifying typing rules formally. +For the interested reader, a more thorough introduction can be found in respective text books. 2

    +
    +

    The proposition that a phrase has a respective type is written . +In general, however, typing is dependent on a context . +To express this explicitly, the complete form is a judgement , +which says that holds under the assumptions encoded in .

    +

    The formal typing rules use a standard approach for specifying type systems, rendering them into deduction rules. +Every rule has the following general form:

    +
    +

    Such a rule is read as a big implication: if all premises hold, then the conclusion holds. +Some rules have no premises; they are axioms whose conclusion holds unconditionally. +The conclusion always is a judgment , +and there is one respective rule for each relevant construct of the abstract syntax.

    +
    +

    Note

    +

    For example, the typing rule for the instruction can be given as an axiom:

    +
    +

    The instruction is always valid with type ] +(saying that it consumes two values and produces one), +independent of any side conditions.

    +

    An instruction like can be typed as follows:

    +
    +

    Here, the premise enforces that the immediate local index exists in the context. +The instruction produces a value of its respective type (and does not consume any values). +If does not exist then the premise does not hold, +and the instruction is ill-typed.

    +

    Finally, a structured instruction requires +a recursive rule, where the premise is itself a typing judgement:

    +
    +

    A instruction is only valid when the instruction sequence in its body is. +Moreover, the result type must match the block’s annotation . +If so, then the instruction has the same type as the body. +Inside the body an additional label of the corresponding result type is available, +which is expressed by extending the context with the additional label information for the premise.

    +
    +
    +
    1 +
    +

    The semantics is derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    2 +
    +

    For example: Benjamin Pierce. Types and Programming Languages. The MIT Press 2002

    +
    +
    +
    + +
    +

    3.2. Types

    +

    Most types are universally valid. +However, restrictions apply to limits, which must be checked during validation. +Moreover, block types are converted to plain function types for ease of processing.

    +
    + +

    3.2.1. Limits

    +

    Limits must have meaningful bounds that are within a given range.

    +
    +
    3.2.1.1.
    +
      +
    • +

      The value of must not be larger than .

      +
    • +

      If the maximum is not empty, then:

      +
        +
      • +

        Its value must not be larger than .

        +
      • +

        Its value must not be smaller than .

        +
      +
    • +

      Then the limit is valid within range .

      +
    +
    +
    +
    +
    + +

    3.2.2. Block Types

    +

    Block types may be expressed in one of two forms, both of which are converted to plain function types by the following rules.

    +
    +
    3.2.2.1.
    + + +
    +
    +
    3.2.2.2.
    + + +
    +
    +
    + +

    3.2.3. Function Types

    +

    Function types are always valid.

    +
    +
    3.2.3.1.
    +
      +
    • +

      The function type is valid.

      +
    +
    +
    +
    +
    + +

    3.2.4. Table Types

    +
    +
    3.2.4.1.
    +
      +
    • +

      The limits must be valid within range .

      +
    • +

      Then the table type is valid.

      +
    + +
    +
    +
    + +

    3.2.5. Memory Types

    +
    +
    3.2.5.1.
    +
      +
    • +

      The limits must be valid within range .

      +
    • +

      Then the memory type is valid.

      +
    + +
    +
    +
    + +

    3.2.6. Global Types

    +
    +
    3.2.6.1.
    +
      +
    • +

      The global type is valid.

      +
    + +
    +
    +
    + +

    3.2.7. External Types

    +
    +
    3.2.7.1.
    + + +
    +
    +
    3.2.7.2.
    + + +
    +
    +
    3.2.7.3.
    + + +
    +
    +
    3.2.7.4.
    + + +
    +
    +
    + +

    3.2.8. Import Subtyping

    +

    When instantiating a module, external values must be provided whose types are matched against the respective external types classifying each import. +In some cases, this allows for a simple form of subtyping, as defined here.

    +
    + +
    3.2.8.1. Limits
    +

    Limits match limits if and only if:

    +
      +
    • +

      is larger than or equal to .

      +
    • +

      Either:

      +
        +
      • +

        is empty.

        +
      +
    • +

      Or:

      +
        +
      • +

        Both and are non-empty.

        +
      • +

        is smaller than or equal to .

        +
      +
    +
    + +
    +
    + +
    3.2.8.2. Functions
    +

    An external type matches if and only if:

    + + +
    +
    + +
    3.2.8.3. Tables
    +

    An external type matches if and only if:

    + + +
    +
    + +
    3.2.8.4. Memories
    +

    An external type matches if and only if:

    + + +
    +
    + +
    3.2.8.5. Globals
    +

    An external type matches if and only if:

    + + +
    +
    +
    + +
    + +

    3.3. Instructions

    +

    Instructions are classified by stack types that describe how instructions manipulate the operand stack.

    +
    +

    The types describe the required input stack with operand types that an instruction pops off +and the provided output stack with result values of types that it pushes back. +Stack types are akin to function types, +except that they allow individual operands to be classified as (bottom), indicating that the type is unconstrained. +As an auxiliary notion, an operand type matches another operand type , if is either or equal to . +This is extended to stack types in a point-wise manner.

    +
    +
    +
    +

    Note

    +

    For example, the instruction has type , +consuming two values and producing one.

    +
    +

    Typing extends to instruction sequences . +Such a sequence has a function type if the accumulative effect of executing the instructions is consuming values of types off the operand stack and pushing new values of types .

    +

    For some instructions, the typing rules do not fully constrain the type, +and therefore allow for multiple types. +Such instructions are called polymorphic. +Two degrees of polymorphism can be distinguished:

    + +

    In both cases, the unconstrained types or type sequences can be chosen arbitrarily, as long as they meet the constraints imposed for the surrounding parts of the program.

    +
    +

    Note

    +

    For example, the instruction is valid with type , for any possible number type . Consequently, both instruction sequences

    +
    +

    and

    +
    +

    are valid, with in the typing of being instantiated to or , respectively.

    +

    The instruction is valid with type for any possible sequences of value types and . +Consequently,

    + +

    is valid by assuming type for the instruction. +In contrast,

    + +

    is invalid, because there is no possible type to pick for the instruction that would make the sequence well-typed.

    +
    +

    The Appendix describes a type checking algorithm that efficiently implements validation of instruction sequences as prescribed by the rules given here.

    +
    + +

    3.3.1. Numeric Instructions

    +
    + +
    3.3.1.1.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.1.2.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.1.3.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.1.4.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.1.5.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.1.6.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    +
    + +

    3.3.2. Reference Instructions

    +
    + +
    3.3.2.1.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +

    Note

    +

    In future versions of WebAssembly, there may be reference types for which no null reference is allowed.

    +
    +
    +
    + +
    3.3.2.2.
    + + +
    +
    + +
    3.3.2.3.
    +
      +
    • +

      The function must be defined in the context.

      +
    • +

      The function index must be contained in .

      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    +
    + +

    3.3.3. Vector Instructions

    +

    Vector instructions can have a prefix to describe the shape of the operand. Packed numeric types, and , are not value type, we define an auxiliary function to map such packed types into value types:

    +
    +

    We also define an auxiliary function to get number of packed numeric types in a , dimension:

    +
    +
    + +
    3.3.3.1.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.3.2.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.3.
    + + +
    +
    + +
    3.3.3.4.
    + + +
    +
    + +
    3.3.3.5.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.6.
    + +
    +
    +
    + +
    3.3.3.7.
    + +
    +
    +
    + +
    3.3.3.8.
    + + +
    +
    + +
    3.3.3.9.
    + + +
    +
    + +
    3.3.3.10.
    + + +
    +
    + +
    3.3.3.11.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.12.
    + + +
    +
    + +
    3.3.3.13.
    + + +
    +
    + +
    3.3.3.14.
    + + +
    +
    + +
    3.3.3.15.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.16.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.17.
    + + +
    +
    + +
    3.3.3.18.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    3.3.3.19.
    + +
    +
    +
    + +
    3.3.3.20.
    + + +
    +
    + +
    3.3.3.21.
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    +
    + +

    3.3.4. Parametric Instructions

    +
    + +
    3.3.4.1.
    +
      +
    • +

      The instruction is valid with type , for any value type .

      +
    +
    +
    +

    Note

    +

    Both and without annotation are value-polymorphic instructions.

    +
    +
    +
    + +
    3.3.4.2.
    +
      +
    • +

      If is present, then:

      +
        +
      • +

        The length of must be .

        +
      • +

        Then the instruction is valid with type .

        +
      +
    • +

      Else:

      + +
    +
    +
    +

    Note

    +

    In future versions of WebAssembly, may allow more than one value per choice.

    +
    +
    +
    +
    + +

    3.3.5. Variable Instructions

    +
    + +
    3.3.5.1.
    +
      +
    • +

      The local must be defined in the context.

      +
    • +

      Let be the value type .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.5.2.
    +
      +
    • +

      The local must be defined in the context.

      +
    • +

      Let be the value type .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.5.3.
    +
      +
    • +

      The local must be defined in the context.

      +
    • +

      Let be the value type .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.5.4.
    +
      +
    • +

      The global must be defined in the context.

      +
    • +

      Let be the global type .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.5.5.
    +
      +
    • +

      The global must be defined in the context.

      +
    • +

      Let be the global type .

      +
    • +

      The mutability must be .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    +
    + +

    3.3.6. Table Instructions

    +
    + +
    3.3.6.1.
    + +
    +
    +
    + +
    3.3.6.2.
    + +
    +
    +
    + +
    3.3.6.3.
    +
      +
    • +

      The table must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    + +
    +
    + +
    3.3.6.4.
    + +
    +
    +
    + +
    3.3.6.5.
    + +
    +
    +
    + +
    3.3.6.6.
    + +
    +
    +
    + +
    3.3.6.7.
    + +
    +
    +
    + +
    3.3.6.8.
    +
      +
    • +

      The element segment must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    +
    + +

    3.3.7. Memory Instructions

    +
    + +
    3.3.7.1.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than the bit width of divided by .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.2.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    +
    3.3.7.3.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than the bit width of divided by .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.4.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.5.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.6.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.7.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.8.
    +
      +
    • +

      The lane index must be smaller than .

      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.9.
    +
      +
    • +

      The lane index must be smaller than .

      +
    • +

      The memory must be defined in the context.

      +
    • +

      The alignment must not be larger than .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.10.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    + +
    +
    + +
    3.3.7.11.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    + +
    +
    + +
    3.3.7.12.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    + +
    +
    + +
    3.3.7.13.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    + +
    +
    + +
    3.3.7.14.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The data segment must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.7.15.
    +
      +
    • +

      The data segment must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    +
    + +

    3.3.8. Control Instructions

    +
    + +
    3.3.8.1.
    +
      +
    • +

      The instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.8.2.
    +
      +
    • +

      The instruction is valid with type , for any sequences of value types and .

      +
    +
    +
    +

    Note

    +

    The instruction is stack-polymorphic.

    +
    +
    +
    + +
    3.3.8.3.
    +
      +
    • +

      The block type must be valid as some function type .

      +
    • +

      Let be the same context as , but with the result type prepended to the vector.

      +
    • +

      Under context , +the instruction sequence must be valid with type .

      +
    • +

      Then the compound instruction is valid with type .

      +
    +
    +
    +

    Note

    +

    The notation inserts the new label type at index , shifting all others.

    +
    +
    +
    + +
    3.3.8.4.
    +
      +
    • +

      The block type must be valid as some function type .

      +
    • +

      Let be the same context as , but with the result type prepended to the vector.

      +
    • +

      Under context , +the instruction sequence must be valid with type .

      +
    • +

      Then the compound instruction is valid with type .

      +
    +
    +
    +

    Note

    +

    The notation inserts the new label type at index , shifting all others.

    +
    +
    +
    + +
    3.3.8.5.
    +
      +
    • +

      The block type must be valid as some function type .

      +
    • +

      Let be the same context as , but with the result type prepended to the vector.

      +
    • +

      Under context , +the instruction sequence must be valid with type .

      +
    • +

      Under context , +the instruction sequence must be valid with type .

      +
    • +

      Then the compound instruction is valid with type .

      +
    +
    +
    +

    Note

    +

    The notation inserts the new label type at index , shifting all others.

    +
    +
    +
    + +
    3.3.8.6.
    +
      +
    • +

      The label must be defined in the context.

      +
    • +

      Let be the result type .

      +
    • +

      Then the instruction is valid with type , for any sequences of value types and .

      +
    +
    +
    +

    Note

    +

    The label index space in the context contains the most recent label first, so that performs a relative lookup as expected.

    +

    The instruction is stack-polymorphic.

    +
    +
    +
    + +
    3.3.8.7.
    +
      +
    • +

      The label must be defined in the context.

      +
    • +

      Let be the result type .

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +

    Note

    +

    The label index space in the context contains the most recent label first, so that performs a relative lookup as expected.

    +
    +
    +
    + +
    3.3.8.8.
    +
      +
    • +

      The label must be defined in the context.

      +
    • +

      For all in , +the label must be defined in the context.

      +
    • +

      There must be a result type , such that:

      +
        +
      • +

        For each operand type in and corresponding type in , matches .

        +
      • +

        For all in , +and for each operand type in and corresponding type in , matches .

        +
      +
    • +

      Then the instruction is valid with type , for any sequences of value types and .

      +
    +
    +
    +

    Note

    +

    The label index space in the context contains the most recent label first, so that performs a relative lookup as expected.

    +

    The instruction is stack-polymorphic.

    +
    +
    +
    + +
    3.3.8.9.
    +
      +
    • +

      The return type must not be absent in the context.

      +
    • +

      Let be the result type of .

      +
    • +

      Then the instruction is valid with type , for any sequences of value types and .

      +
    +
    +
    +

    Note

    +

    The instruction is stack-polymorphic.

    +

    is absent (set to ) when validating an expression that is not a function body. +This differs from it being set to the empty result type (), +which is the case for functions not returning anything.

    +
    +
    +
    + +
    3.3.8.10.
    +
      +
    • +

      The function must be defined in the context.

      +
    • +

      Then the instruction is valid with type .

      +
    +
    +
    +
    + +
    3.3.8.11.
    + +
    +
    +
    +
    + +

    3.3.9. Instruction Sequences

    +

    Typing of instruction sequences is defined recursively.

    +
    +
    3.3.9.1. Empty Instruction Sequence:
    +
      +
    • +

      The empty instruction sequence is valid with type , +for any sequence of operand types .

      +
    +
    +
    +
    +
    3.3.9.2. Non-empty Instruction Sequence:
    +
      +
    • +

      The instruction sequence must be valid with type , +for some sequences of value types and .

      +
    • +

      The instruction must be valid with type , +for some sequences of value types and .

      +
    • +

      There must be a sequence of value types , +such that where the type sequence is as long as .

      +
    • +

      For each operand type in and corresponding type in , matches .

      +
    • +

      Then the combined instruction sequence is valid with type .

      +
    +
    +
    +
    +
    + +

    3.3.10. Expressions

    +

    Expressions are classified by result types of the form .

    +
    +
    3.3.10.1.
    + +
    +
    +
    + +
    3.3.10.2. Constant Expressions
    + + + + +
    +

    Note

    +

    Currently, constant expressions occurring as initializers of globals are further constrained in that contained instructions are only allowed to refer to imported globals. +This is enforced in the validation rule for modules by constraining the context accordingly.

    +

    The definition of constant expression may be extended in future versions of WebAssembly.

    +
    +
    +
    +
    + +
    +

    3.4. Modules

    +

    Modules are valid when all the components they contain are valid. +Furthermore, most definitions are themselves classified with a suitable type.

    +
    + +

    3.4.1. Functions

    +

    Functions are classified by function types of the form .

    +
    +
    3.4.1.1.
    +
      +
    • +

      The type must be defined in the context.

      +
    • +

      Let be the function type .

      +
    • +

      Let be the same context as , +but with:

      + +
    • +

      Under the context , +the expression must be valid with type .

      +
    • +

      Then the function definition is valid with type .

      +
    +
    +
    +
    +
    + +

    3.4.2. Tables

    +

    Tables are classified by table types.

    +
    +
    3.4.2.1.
    + + +
    +
    +
    + +

    3.4.3. Memories

    +

    Memories are classified by memory types.

    +
    +
    3.4.3.1.
    + + +
    +
    +
    + +

    3.4.4. Globals

    +

    Globals are classified by global types of the form .

    +
    +
    3.4.4.1.
    + + +
    +
    +
    + +

    3.4.5. Element Segments

    +

    Element segments are classified by the reference type of their elements.

    +
    +
    3.4.5.1.
    +
      +
    • +

      For each in ,

      +
        +
      • +

        The expression must be valid.

        +
      • +

        The expression must be constant.

        +
      +
    • +

      The element mode must be valid with reference type .

      +
    • +

      Then the element segment is valid with reference type .

      +
    +
    +
    +
    + +
    3.4.5.2.
    + + +
    +
    +
    3.4.5.3.
    + + +
    +
    +
    3.4.5.4.
    + + +
    +
    +
    + +

    3.4.6. Data Segments

    +

    Data segments are not classified by any type but merely checked for well-formedness.

    +
    +
    3.4.6.1.
    +
      +
    • +

      The data mode must be valid.

      +
    • +

      Then the data segment is valid.

      +
    +
    +
    +
    + +
    3.4.6.2.
    +
      +
    • +

      The data mode is valid.

      +
    + +
    +
    +
    3.4.6.3.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      The expression must be valid with result type .

      +
    • +

      The expression must be constant.

      +
    • +

      Then the data mode is valid.

      +
    + +
    +
    +
    + +

    3.4.7. Start Function

    +

    Start function declarations are not classified by any type.

    +
    +
    3.4.7.1.
    +
      +
    • +

      The function must be defined in the context.

      +
    • +

      The type of must be .

      +
    • +

      Then the start function is valid.

      +
    +
    +
    +
    +
    + +

    3.4.8. Exports

    +

    Exports and export descriptions are classified by their external type.

    +
    +
    3.4.8.1.
    + + +
    +
    +
    3.4.8.2.
    +
      +
    • +

      The function must be defined in the context.

      +
    • +

      Then the export description is valid with external type .

      +
    + +
    +
    +
    3.4.8.3.
    + + +
    +
    +
    3.4.8.4.
    +
      +
    • +

      The memory must be defined in the context.

      +
    • +

      Then the export description is valid with external type .

      +
    + +
    +
    +
    3.4.8.5.
    + + +
    +
    +
    + +

    3.4.9. Imports

    +

    Imports and import descriptions are classified by external types.

    +
    +
    3.4.9.1.
    + + +
    +
    +
    3.4.9.2.
    +
      +
    • +

      The function must be defined in the context.

      +
    • +

      Let be the function type .

      +
    • +

      Then the import description is valid with type .

      +
    +
    +
    +
    +
    3.4.9.3.
    + + +
    +
    +
    3.4.9.4.
    +
      +
    • +

      The memory type must be valid.

      +
    • +

      Then the import description is valid with type .

      +
    + +
    +
    +
    3.4.9.5.
    + + +
    +
    +
    + +

    3.4.10. Modules

    +

    Modules are classified by their mapping from the external types of their imports to those of their exports.

    +

    A module is entirely closed, +that is, its components can only refer to definitions that appear in the module itself. +Consequently, no initial context is required. +Instead, the context for validation of the module’s content is constructed from the definitions in the module.

    + +
    +
    +

    Note

    +

    Most definitions in a module – particularly functions – are mutually recursive. +Consequently, the definition of the context in this rule is recursive: +it depends on the outcome of validation of the function, table, memory, and global definitions contained in the module, +which itself depends on . +However, this recursion is just a specification device. +All types needed to construct can easily be determined from a simple pre-pass over the module that does not perform any actual validation.

    +

    Globals, however, are not recursive. +The effect of defining the limited context for validating the module’s globals is that their initialization expressions can only access functions and imported globals and nothing else.

    +
    +
    +

    Note

    +

    The restriction on the number of memories may be lifted in future versions of WebAssembly.

    +
    +
    +
    +
    +
    + +
    + +

    4. Execution

    +
    + +
    + +

    4.1. Conventions

    +

    WebAssembly code is executed when instantiating a module or invoking an exported function on the resulting module instance.

    +

    Execution behavior is defined in terms of an abstract machine that models the program state. +It includes a stack, which records operand values and control constructs, and an abstract store containing global state.

    +

    For each instruction, there is a rule that specifies the effect of its execution on the program state. +Furthermore, there are rules describing the instantiation of a module. +As with validation, all rules are given in two equivalent forms:

    +
      +
    1. +

      In prose, describing the execution in intuitive form.

      +
    2. +

      In formal notation, describing the rule in mathematical form. 1

      +
    +
    +

    Note

    +

    As with validation, the prose and formal rules are equivalent, +so that understanding of the formal notation is not required to read this specification. +The formalism offers a more concise description in notation that is used widely in programming languages semantics and is readily amenable to mathematical proof.

    +
    +
    + +

    4.1.1. Prose Notation

    +

    Execution is specified by stylised, step-wise rules for each instruction of the abstract syntax. +The following conventions are adopted in stating these rules.

    +
      +
    • +

      The execution rules implicitly assume a given store .

      +
    • +

      The execution rules also assume the presence of an implicit stack that is modified by pushing or popping values, labels, and frames.

      +
    • +

      Certain rules require the stack to contain at least one frame. +The most recent frame is referred to as the current frame.

      +
    • +

      Both the store and the current frame are mutated by replacing some of their components. +Such replacement is assumed to apply globally.

      +
    • +

      The execution of an instruction may trap, +in which case the entire computation is aborted and no further modifications to the store are performed by it. (Other computations can still be initiated afterwards.)

      +
    • +

      The execution of an instruction may also end in a jump to a designated target, +which defines the next instruction to execute.

      +
    • +

      Execution can enter and exit instruction sequences that form blocks.

      +
    • +

      Instruction sequences are implicitly executed in order, unless a trap or jump occurs.

      +
    • +

      In various places the rules contain assertions expressing crucial invariants about the program state.

      +
    +
    +
    + +

    4.1.2. Formal Notation

    +
    +

    Note

    +

    This section gives a brief explanation of the notation for specifying execution formally. +For the interested reader, a more thorough introduction can be found in respective text books. 2

    +
    +

    The formal execution rules use a standard approach for specifying operational semantics, rendering them into reduction rules. +Every rule has the following general form:

    +
    +

    A configuration is a syntactic description of a program state. +Each rule specifies one step of execution. +As long as there is at most one reduction rule applicable to a given configuration, reduction – and thereby execution – is deterministic. +WebAssembly has only very few exceptions to this, which are noted explicitly in this specification.

    +

    For WebAssembly, a configuration typically is a tuple consisting of the current store , the call frame of the current function, and the sequence of instructions that is to be executed. +(A more precise definition is given later.)

    +

    To avoid unnecessary clutter, the store and the frame are omitted from reduction rules that do not touch them.

    +

    There is no separate representation of the stack. +Instead, it is conveniently represented as part of the configuration’s instruction sequence. +In particular, values are defined to coincide with instructions, +and a sequence of instructions can be interpreted as an operand “stack” that grows to the right.

    +
    +

    Note

    +

    For example, the reduction rule for the instruction can be given as follows:

    +
    +

    Per this rule, two instructions and the instruction itself are removed from the instruction stream and replaced with one new instruction. +This can be interpreted as popping two value off the stack and pushing the result.

    +

    When no result is produced, an instruction reduces to the empty sequence:

    + +
    +

    Labels and frames are similarly defined to be part of an instruction sequence.

    +

    The order of reduction is determined by the definition of an appropriate evaluation context.

    +

    Reduction terminates when no more reduction rules are applicable. Soundness of the WebAssembly type system guarantees that this is only the case when the original instruction sequence has either been reduced to a sequence of instructions, which can be interpreted as the values of the resulting operand stack, +or if a trap occurred.

    +
    +

    Note

    +

    For example, the following instruction sequence,

    +
    +

    terminates after three steps:

    +
    +

    where and and .

    +
    +
    +
    1 +
    +

    The semantics is derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    2 +
    +

    For example: Benjamin Pierce. Types and Programming Languages. The MIT Press 2002

    +
    +
    +
    + +
    + +

    4.2. Runtime Structure

    +

    Store, stack, and other runtime structure forming the WebAssembly abstract machine, such as values or module instances, are made precise in terms of additional auxiliary syntax.

    +
    + +

    4.2.1. Values

    +

    WebAssembly computations manipulate values of either the four basic number types, i.e., integers and floating-point data of 32 or 64 bit width each, of vectors of 128 bit width, or of reference type.

    +

    In most places of the semantics, values of different types can occur. +In order to avoid ambiguities, values are therefore represented with an abstract syntax that makes their type explicit. +It is convenient to reuse the same notation as for the instructions and producing them.

    +

    References other than null are represented with additional administrative instructions. +They either are function references, pointing to a specific function address, +or external references pointing to an uninterpreted form of extern address that can be defined by the embedder to represent its own objects.

    +
    +
    +

    Note

    +

    Future versions of WebAssembly may add additional forms of reference.

    +
    +

    Each value type has an associated default value; +it is the respective value for number types and null for reference types.

    +
    +
    +
    4.2.1.1. Convention
    +
      +
    • +

      The meta variable ranges over reference values where clear from context.

      +
    +
    +
    +
    + +

    4.2.2. Results

    +

    A result is the outcome of a computation. +It is either a sequence of values or a trap.

    +
    +
    +

    Note

    +

    In the current version of WebAssembly, a result can consist of at most one value.

    +
    +
    +
    + +

    4.2.3. Store

    +

    The store represents all global state that can be manipulated by WebAssembly programs. +It consists of the runtime representation of all instances of functions, tables, memories, and globals, element segments, and data segments that have been allocated during the life time of the abstract machine. 1

    +

    It is an invariant of the semantics that no element or data instance is addressed from anywhere else but the owning module instances.

    +

    Syntactically, the store is defined as a record listing the existing instances of each category:

    + +
    +
    1 +
    +

    In practice, implementations may apply techniques like garbage collection to remove objects from the store that are no longer referenced. +However, such techniques are not semantically observable, +and hence outside the scope of this specification.

    +
    +
    +
    4.2.3.1. Convention
    +
      +
    • +

      The meta variable ranges over stores where clear from context.

      +
    +
    +
    +
    + +

    4.2.4. Addresses

    +

    Function instances, table instances, memory instances, and global instances, element instances, and data instances in the store are referenced with abstract addresses. +These are simply indices into the respective store component. +In addition, an embedder may supply an uninterpreted set of host addresses.

    +
    +

    An embedder may assign identity to exported store objects corresponding to their addresses, +even where this identity is not observable from within WebAssembly code itself +(such as for function instances or immutable globals).

    +
    +

    Note

    +

    Addresses are dynamic, globally unique references to runtime objects, +in contrast to indices, +which are static, module-local references to their original definitions. +A memory address denotes the abstract address of a memory instance in the store, +not an offset inside a memory instance.

    +

    There is no specific limit on the number of allocations of store objects, +hence logical addresses can be arbitrarily large natural numbers.

    +
    +
    +
    + +

    4.2.5. Module Instances

    +

    A module instance is the runtime representation of a module. +It is created by instantiating a module, +and collects runtime representations of all entities that are imported, defined, or exported by the module.

    + +

    Each component references runtime instances corresponding to respective declarations from the original module – whether imported or defined – in the order of their static indices. Function instances, table instances, memory instances, and global instances are referenced with an indirection through their respective addresses in the store.

    +

    It is an invariant of the semantics that all export instances in a given module instance have different names.

    +
    +
    + +

    4.2.6. Function Instances

    +

    A function instance is the runtime representation of a function. +It effectively is a closure of the original function over the runtime module instance of its originating module. +The module instance is used to resolve references to other definitions during execution of the function.

    + +

    A host function is a function expressed outside WebAssembly but passed to a module as an import. +The definition and behavior of host functions are outside the scope of this specification. +For the purpose of this specification, it is assumed that when invoked, +a host function behaves non-deterministically, +but within certain constraints that ensure the integrity of the runtime.

    +
    +

    Note

    +

    Function instances are immutable, and their identity is not observable by WebAssembly code. +However, the embedder might provide implicit or explicit means for distinguishing their addresses.

    +
    +
    +
    + +

    4.2.7. Table Instances

    +

    A table instance is the runtime representation of a table. +It records its type and holds a vector of reference values.

    +
    +

    Table elements can be mutated through table instructions, the execution of an active element segment, or by external means provided by the embedder.

    +

    It is an invariant of the semantics that all table elements have a type equal to the element type of . +It also is an invariant that the length of the element vector never exceeds the maximum size of , if present.

    +
    +
    + +

    4.2.8. Memory Instances

    +

    A memory instance is the runtime representation of a linear memory. +It records its type and holds a vector of bytes.

    +
    +

    The length of the vector always is a multiple of the WebAssembly page size, which is defined to be the constant – abbreviated .

    +

    The bytes can be mutated through memory instructions, the execution of an active data segment, or by external means provided by the embedder.

    +

    It is an invariant of the semantics that the length of the byte vector, divided by page size, never exceeds the maximum size of , if present.

    +
    +
    + +

    4.2.9. Global Instances

    +

    A global instance is the runtime representation of a global variable. +It records its type and holds an individual value.

    +
    +

    The value of mutable globals can be mutated through variable instructions or by external means provided by the embedder.

    +

    It is an invariant of the semantics that the value has a type equal to the value type of .

    +
    +
    + +

    4.2.10. Element Instances

    +

    An element instance is the runtime representation of an element segment. +It holds a vector of references and their common type.

    +
    +
    +
    + +

    4.2.11. Data Instances

    +

    An data instance is the runtime representation of a data segment. +It holds a vector of bytes.

    +
    +
    +
    + +

    4.2.12. Export Instances

    +

    An export instance is the runtime representation of an export. +It defines the export’s name and the associated external value.

    +
    +
    +
    + +

    4.2.13. External Values

    +

    An external value is the runtime representation of an entity that can be imported or exported. +It is an address denoting either a function instance, table instance, memory instance, or global instances in the shared store.

    + +
    +
    4.2.13.1. Conventions
    +

    The following auxiliary notation is defined for sequences of external values. +It filters out entries of a specific kind in an order-preserving fashion:

    + +
    +
    +
    + +

    4.2.14. Stack

    +

    Besides the store, most instructions interact with an implicit stack. +The stack contains three kinds of entries:

    + +

    These entries can occur on the stack in any order during the execution of a program. +Stack entries are described by abstract syntax as follows.

    +
    +

    Note

    +

    It is possible to model the WebAssembly semantics using separate stacks for operands, control constructs, and calls. +However, because the stacks are interdependent, additional book keeping about associated stack heights would be required. +For the purpose of this specification, an interleaved representation is simpler.

    +
    +
    +
    4.2.14.1. Values
    +

    Values are represented by themselves.

    +
    +
    +
    4.2.14.2. Labels
    +

    Labels carry an argument arity and their associated branch target, which is expressed syntactically as an instruction sequence:

    +
    +

    Intuitively, is the continuation to execute when the branch is taken, in place of the original control construct.

    +
    +

    Note

    +

    For example, a loop label has the form

    +
    +

    When performing a branch to this label, this executes the loop, effectively restarting it from the beginning. +Conversely, a simple block label has the form

    +
    +

    When branching, the empty continuation ends the targeted block, such that execution can proceed with consecutive instructions.

    +
    +
    +
    +
    4.2.14.3. Activations and Frames
    +

    Activation frames carry the return arity of the respective function, +hold the values of its locals (including arguments) in the order corresponding to their static local indices, +and a reference to the function’s own module instance:

    +
    +

    The values of the locals are mutated by respective variable instructions.

    +
    +
    + +
    4.2.14.4. Conventions
    +
      +
    • +

      The meta variable ranges over labels where clear from context.

      +
    • +

      The meta variable ranges over frames where clear from context.

      +
    • +

      The following auxiliary definition takes a block type and looks up the function type that it denotes in the current frame:

      +
    +
    +
    +
    +
    + +

    4.2.15. Administrative Instructions

    +
    +

    Note

    +

    This section is only relevant for the formal notation.

    +
    +

    In order to express the reduction of traps, calls, and control instructions, the syntax of instructions is extended to include the following administrative instructions:

    +
    +

    The instruction represents the occurrence of a trap. +Traps are bubbled up through nested instruction sequences, ultimately reducing the entire program to a single instruction, signalling abrupt termination.

    +

    The instruction represents function reference values. Similarly, represents external references.

    +

    The instruction represents the imminent invocation of a function instance, identified by its address. +It unifies the handling of different forms of calls.

    +

    The and instructions model labels and frames “on the stack”. +Moreover, the administrative syntax maintains the nesting structure of the original structured control instruction or function body and their instruction sequences with an marker. +That way, the end of the inner instruction sequence is known when part of an outer sequence.

    +
    +

    Note

    +

    For example, the reduction rule for is:

    +
    +

    This replaces the block with a label instruction, +which can be interpreted as “pushing” the label on the stack. +When is reached, i.e., the inner instruction sequence has been reduced to the empty sequence – or rather, a sequence of instructions representing the resulting values – then the instruction is eliminated courtesy of its own reduction rule:

    +
    +

    This can be interpreted as removing the label from the stack and only leaving the locally accumulated operand values.

    +
    +
    + +
    4.2.15.1. Block Contexts
    +

    In order to specify the reduction of branches, the following syntax of block contexts is defined, indexed by the count of labels surrounding a hole that marks the place where the next step of computation is taking place:

    +
    +

    This definition allows to index active labels surrounding a branch or return instruction.

    +
    +

    Note

    +

    For example, the reduction of a simple branch can be defined as follows:

    +
    +

    Here, the hole of the context is instantiated with a branch instruction. +When a branch occurs, +this rule replaces the targeted label and associated instruction sequence with the label’s continuation. +The selected label is identified through the label index , which corresponds to the number of surrounding instructions that must be hopped over – which is exactly the count encoded in the index of a block context.

    +
    +
    +
    + +
    4.2.15.2. Configurations
    +

    A configuration consists of the current store and an executing thread.

    +

    A thread is a computation over instructions that operates relative to a current frame referring to the module instance in which the computation runs, i.e., where the current function originates from.

    +
    +
    +

    Note

    +

    The current version of WebAssembly is single-threaded, +but configurations with multiple threads may be supported in the future.

    +
    +
    +
    + +
    4.2.15.3. Evaluation Contexts
    +

    Finally, the following definition of evaluation context and associated structural rules enable reduction inside instruction sequences and administrative forms as well as the propagation of traps:

    +
    +
    +

    Reduction terminates when a thread’s instruction sequence has been reduced to a result, +that is, either a sequence of values or to a .

    +
    +

    Note

    +

    The restriction on evaluation contexts rules out contexts like and for which .

    +

    For an example of reduction under evaluation contexts, consider the following instruction sequence.

    +
    +

    This can be decomposed into where

    +
    +

    Moreover, this is the only possible choice of evaluation context where the contents of the hole matches the left-hand side of a reduction rule.

    +
    +
    +
    +
    + +
    + +

    4.3. Numerics

    +

    Numeric primitives are defined in a generic manner, by operators indexed over a bit width .

    +

    Some operators are non-deterministic, because they can return one of several possible results (such as different NaN values). +Technically, each operator thus returns a set of allowed values. +For convenience, deterministic results are expressed as plain values, which are assumed to be identified with a respective singleton set.

    +

    Some operators are partial, because they are not defined on certain inputs. +Technically, an empty set of results is returned for these inputs.

    +

    In formal notation, each operator is defined by equational clauses that apply in decreasing order of precedence. +That is, the first clause that is applicable to the given arguments defines the result. +In some cases, similar clauses are combined into one by using the notation or . +When several of these placeholders occur in a single clause, then they must be resolved consistently: either the upper sign is chosen for all of them or the lower sign.

    +
    +

    Note

    +

    For example, the operator is defined as follows:

    +
    +

    This definition is to be read as a shorthand for the following expansion of each clause into two separate ones:

    +
    +
    +

    Numeric operators are lifted to input sequences by applying the operator element-wise, returning a sequence of results. When there are multiple inputs, they must be of equal length.

    +
    +
    +

    Note

    +

    For example, the unary operator , when given a sequence of floating-point values, return a sequence of floating-point results:

    +
    +

    The binary operator , when given two sequences of integers of the same length, , return a sequence of integer results:

    +
    +
    +

    Conventions:

    +
      +
    • +

      The meta variable is used to range over single bits.

      +
    • +

      The meta variable is used to range over (signless) magnitudes of floating-point values, including and .

      +
    • +

      The meta variable is used to range over (signless) rational magnitudes, excluding or .

      +
    • +

      The notation denotes the inverse of a bijective function .

      +
    • +

      Truncation of rational values is written , with the usual mathematical definition:

      +
      +
    + +
      +
    • +

      Saturation of integers is written and . The arguments to these two functions range over arbitrary signed integers.

      +
        +
      • +

        Unsigned saturation, clamps to between and :

        +
        +
      • +

        Signed saturation, clamps to between and :

        +
      +
      +
    +
    + +

    4.3.1. Representations

    +

    Numbers have an underlying binary representation as a sequence of bits:

    +
    +

    Each of these functions is a bijection, hence they are invertible.

    +
    + +
    4.3.1.1. Integers
    +

    Integers are represented as base two unsigned numbers:

    +
    +

    Boolean operators like , , or are lifted to bit sequences of equal length by applying them pointwise.

    +
    +
    + +
    4.3.1.2. Floating-Point
    +

    Floating-point values are represented in the respective binary format defined by [IEEE-754-2019] (Section 3.4):

    +
    +

    where and .

    +
    +
    + +
    4.3.1.3. Storage
    +

    When a number is stored into memory, it is converted into a sequence of bytes in little endian byte order:

    +
    +

    Again these functions are invertable bijections.

    +
    +
    + +
    4.3.1.4. Vectors
    +

    Numeric vectors have the same underlying representation as an . They can also be interpreted as a sequence of numeric values packed into a with a particular .

    +
    +

    These functions are bijections, so they are invertible.

    +
    +
    +
    + +

    4.3.2. Integer Operations

    +
    + +
    4.3.2.1. Sign Interpretation
    +

    Integer operators are defined on values. +Operators that use a signed interpretation convert the value using the following definition, which takes the two’s complement when the value lies in the upper half of the value range (i.e., its most significant bit is ):

    +
    +

    This function is bijective, and hence invertible.

    +
    +
    + +
    4.3.2.2. Boolean Interpretation
    +

    The integer result of predicates – i.e., tests and relational operators – is defined with the help of the following auxiliary function producing the value or depending on a condition.

    +
    +
    +
    + +
    4.3.2.3.
    +
      +
    • +

      Return the result of adding and modulo .

      +
    +
    +
    +
    + +
    4.3.2.4.
    +
      +
    • +

      Return the result of subtracting from modulo .

      +
    +
    +
    +
    + +
    4.3.2.5.
    +
      +
    • +

      Return the result of multiplying and modulo .

      +
    +
    +
    +
    + +
    4.3.2.6.
    +
      +
    • +

      If is , then the result is undefined.

      +
    • +

      Else, return the result of dividing by , truncated toward zero.

      +
    +
    +
    +

    Note

    +

    This operator is partial.

    +
    +
    +
    + +
    4.3.2.7.
    +
      +
    • +

      Let be the signed interpretation of .

      +
    • +

      Let be the signed interpretation of .

      +
    • +

      If is , then the result is undefined.

      +
    • +

      Else if divided by is , then the result is undefined.

      +
    • +

      Else, return the result of dividing by , truncated toward zero.

      +
    +
    +
    +

    Note

    +

    This operator is partial. +Besides division by , the result of is not representable as an -bit signed integer.

    +
    +
    +
    + +
    4.3.2.8.
    +
      +
    • +

      If is , then the result is undefined.

      +
    • +

      Else, return the remainder of dividing by .

      +
    +
    +
    +

    Note

    +

    This operator is partial.

    +

    As long as both operators are defined, +it holds that .

    +
    +
    +
    + +
    4.3.2.9.
    +
      +
    • +

      Let be the signed interpretation of .

      +
    • +

      Let be the signed interpretation of .

      +
    • +

      If is , then the result is undefined.

      +
    • +

      Else, return the remainder of dividing by , with the sign of the dividend .

      +
    +
    +
    +

    Note

    +

    This operator is partial.

    +

    As long as both operators are defined, +it holds that .

    +
    +
    +
    + +
    4.3.2.10.
    +
      +
    • +

      Return the bitwise negation of .

      +
    +
    +
    +
    + +
    4.3.2.11.
    +
      +
    • +

      Return the bitwise conjunction of and .

      +
    +
    +
    +
    + +
    4.3.2.12.
    +
      +
    • +

      Return the bitwise conjunction of and the bitwise negation of .

      +
    +
    +
    +
    + +
    4.3.2.13.
    +
      +
    • +

      Return the bitwise disjunction of and .

      +
    +
    +
    +
    + +
    4.3.2.14.
    +
      +
    • +

      Return the bitwise exclusive disjunction of and .

      +
    +
    +
    +
    + +
    4.3.2.15.
    +
      +
    • +

      Let be modulo .

      +
    • +

      Return the result of shifting left by bits, modulo .

      +
    +
    +
    +
    + +
    4.3.2.16.
    +
      +
    • +

      Let be modulo .

      +
    • +

      Return the result of shifting right by bits, extended with bits.

      +
    +
    +
    +
    + +
    4.3.2.17.
    +
      +
    • +

      Let be modulo .

      +
    • +

      Return the result of shifting right by bits, extended with the most significant bit of the original value.

      +
    +
    +
    +
    + +
    4.3.2.18.
    +
      +
    • +

      Let be modulo .

      +
    • +

      Return the result of rotating left by bits.

      +
    +
    +
    +
    + +
    4.3.2.19.
    +
      +
    • +

      Let be modulo .

      +
    • +

      Return the result of rotating right by bits.

      +
    +
    +
    +
    + +
    4.3.2.20.
    +
      +
    • +

      Return the count of leading zero bits in ; all bits are considered leading zeros if is .

      +
    +
    +
    +
    + +
    4.3.2.21.
    +
      +
    • +

      Return the count of trailing zero bits in ; all bits are considered trailing zeros if is .

      +
    +
    +
    +
    + +
    4.3.2.22.
    +
      +
    • +

      Return the count of non-zero bits in .

      +
    +
    +
    +
    + +
    4.3.2.23.
    +
      +
    • +

      Return if is zero, otherwise.

      +
    +
    +
    +
    + +
    4.3.2.24.
    +
      +
    • +

      Return if equals , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.25.
    +
      +
    • +

      Return if does not equal , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.26.
    +
      +
    • +

      Return if is less than , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.27.
    + +
    +
    +
    + +
    4.3.2.28.
    +
      +
    • +

      Return if is greater than , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.29.
    + +
    +
    +
    + +
    4.3.2.30.
    +
      +
    • +

      Return if is less than or equal to , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.31.
    + +
    +
    +
    + +
    4.3.2.32.
    +
      +
    • +

      Return if is greater than or equal to , otherwise.

      +
    +
    +
    +
    + +
    4.3.2.33.
    + +
    +
    +
    + +
    4.3.2.34.
    + +
    +
    +
    + +
    4.3.2.35.
    +
      +
    • +

      Let be the bitwise conjunction of and .

      +
    • +

      Let be the bitwise negation of .

      +
    • +

      Let be the bitwise conjunction of and .

      +
    • +

      Return the bitwise disjunction of and .

      +
    +
    +
    +
    + +
    4.3.2.36.
    +
      +
    • +

      Let be the signed interpretation of .

      +
    • +

      If greater than or equal to , then return .

      +
    • +

      Else return the negation of j, modulo .

      +
    +
    +
    +
    + +
    4.3.2.37.
    +
      +
    • +

      Return the result of negating , modulo .

      +
    +
    +
    +
    + +
    4.3.2.38.
    +
      +
    • +

      Return if is , return otherwise.

      +
    +
    +
    +
    + +
    4.3.2.39.
    +
      +
    • +

      Return if is , return otherwise.

      +
    +
    +
    +
    + +
    4.3.2.40.
    +
      +
    • +

      Return if is , return otherwise.

      +
    +
    +
    +
    + +
    4.3.2.41.
    +
      +
    • +

      Return if is , return otherwise.

      +
    +
    +
    +
    + +
    4.3.2.42.
    +
      +
    • +

      Let be the result of adding and .

      +
    • +

      Return .

      +
    +
    +
    +
    + +
    4.3.2.43.
    +
      +
    • +

      Let be the signed interpretation of

      +
    • +

      Let be the signed interpretation of

      +
    • +

      Let be the result of adding and .

      +
    • +

      Return .

      +
    +
    +
    +
    + +
    4.3.2.44.
    +
      +
    • +

      Let be the result of subtracting from .

      +
    • +

      Return .

      +
    +
    +
    +
    + +
    4.3.2.45.
    +
      +
    • +

      Let be the signed interpretation of

      +
    • +

      Let be the signed interpretation of

      +
    • +

      Let be the result of subtracting from .

      +
    • +

      Return .

      +
    +
    +
    +
    + +
    4.3.2.46.
    +
      +
    • +

      Let be the result of adding , , and .

      +
    • +

      Return the result of dividing by , truncated toward zero.

      +
    +
    +
    +
    + +
    4.3.2.47.
    +
      +
    • +

      Return the result of .

      +
    +
    +
    +
    +
    + +

    4.3.3. Floating-Point Operations

    +

    Floating-point arithmetic follows the [IEEE-754-2019] standard, +with the following qualifications:

    +
      +
    • +

      All operators use round-to-nearest ties-to-even, except where otherwise specified. +Non-default directed rounding attributes are not supported.

      +
    • +

      Following the recommendation that operators propagate NaN payloads from their operands is permitted but not required.

      +
    • +

      All operators use “non-stop” mode, and floating-point exceptions are not otherwise observable. +In particular, neither alternate floating-point exception handling attributes nor operators on status flags are supported. +There is no observable difference between quiet and signalling NaNs.

      +
    +
    +

    Note

    +

    Some of these limitations may be lifted in future versions of WebAssembly.

    +
    +
    + +
    4.3.3.1. Rounding
    +

    Rounding always is round-to-nearest ties-to-even, in correspondence with [IEEE-754-2019] (Section 4.3.1).

    +

    An exact floating-point number is a rational number that is exactly representable as a floating-point number of given bit width .

    +

    A limit number for a given floating-point bit width is a positive or negative number whose magnitude is the smallest power of that is not exactly representable as a floating-point number of width (that magnitude is for and for ).

    +

    A candidate number is either an exact floating-point number or a positive or negative limit number for the given bit width .

    +

    A candidate pair is a pair of candidate numbers, such that no candidate number exists that lies between the two.

    +

    A real number is converted to a floating-point value of bit width as follows:

    +
      +
    • +

      If is , then return .

      +
    • +

      Else if is an exact floating-point number, then return .

      +
    • +

      Else if greater than or equal to the positive limit, then return .

      +
    • +

      Else if is less than or equal to the negative limit, then return .

      +
    • +

      Else if and are a candidate pair such that , then:

      +
        +
      • +

        If , then let be .

        +
      • +

        Else if , then let be .

        +
      • +

        Else if and the significand of is even, then let be .

        +
      • +

        Else, let be .

        +
      +
    • +

      If is , then:

      +
        +
      • +

        If , then return .

        +
      • +

        Else, return .

        +
      +
    • +

      Else if is a limit number, then:

      +
        +
      • +

        If , then return .

        +
      • +

        Else, return .

        +
      +
    • +

      Else, return .

      +
    +
    +

    where:

    +
    +
    +
    + +
    4.3.3.2. NaN Propagation
    +

    When the result of a floating-point operator other than , , or is a NaN, +then its sign is non-deterministic and the payload is computed as follows:

    +
      +
    • +

      If the payload of all NaN inputs to the operator is canonical (including the case that there are no NaN inputs), then the payload of the output is canonical as well.

      +
    • +

      Otherwise the payload is picked non-deterministically among all arithmetic NaNs; that is, its most significant bit is and all others are unspecified.

      +
    +

    This non-deterministic result is expressed by the following auxiliary function producing a set of allowed outputs from a set of inputs:

    +
    +
    +
    + +
    4.3.3.3.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if both and are infinities of opposite signs, then return an element of .

      +
    • +

      Else if both and are infinities of equal sign, then return that infinity.

      +
    • +

      Else if one of or is an infinity, then return that infinity.

      +
    • +

      Else if both and are zeroes of opposite sign, then return positive zero.

      +
    • +

      Else if both and are zeroes of equal sign, then return that zero.

      +
    • +

      Else if one of or is a zero, then return the other operand.

      +
    • +

      Else if both and are values with the same magnitude but opposite signs, then return positive zero.

      +
    • +

      Else return the result of adding and , rounded to the nearest representable value.

      +
    +
    +
    +
    + +
    4.3.3.4.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if both and are infinities of equal signs, then return an element of .

      +
    • +

      Else if both and are infinities of opposite sign, then return .

      +
    • +

      Else if is an infinity, then return that infinity.

      +
    • +

      Else if is an infinity, then return that infinity negated.

      +
    • +

      Else if both and are zeroes of equal sign, then return positive zero.

      +
    • +

      Else if both and are zeroes of opposite sign, then return .

      +
    • +

      Else if is a zero, then return .

      +
    • +

      Else if is a zero, then return negated.

      +
    • +

      Else if both and are the same value, then return positive zero.

      +
    • +

      Else return the result of subtracting from , rounded to the nearest representable value.

      +
    +
    +
    +

    Note

    +

    Up to the non-determinism regarding NaNs, it always holds that .

    +
    +
    +
    + +
    4.3.3.5.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if one of and is a zero and the other an infinity, then return an element of .

      +
    • +

      Else if both and are infinities of equal sign, then return positive infinity.

      +
    • +

      Else if both and are infinities of opposite sign, then return negative infinity.

      +
    • +

      Else if one of or is an infinity and the other a value with equal sign, then return positive infinity.

      +
    • +

      Else if one of or is an infinity and the other a value with opposite sign, then return negative infinity.

      +
    • +

      Else if both and are zeroes of equal sign, then return positive zero.

      +
    • +

      Else if both and are zeroes of opposite sign, then return negative zero.

      +
    • +

      Else return the result of multiplying and , rounded to the nearest representable value.

      +
    +
    +
    +
    + +
    4.3.3.6.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if both and are infinities, then return an element of .

      +
    • +

      Else if both and are zeroes, then return an element of .

      +
    • +

      Else if is an infinity and a value with equal sign, then return positive infinity.

      +
    • +

      Else if is an infinity and a value with opposite sign, then return negative infinity.

      +
    • +

      Else if is an infinity and a value with equal sign, then return positive zero.

      +
    • +

      Else if is an infinity and a value with opposite sign, then return negative zero.

      +
    • +

      Else if is a zero and a value with equal sign, then return positive zero.

      +
    • +

      Else if is a zero and a value with opposite sign, then return negative zero.

      +
    • +

      Else if is a zero and a value with equal sign, then return positive infinity.

      +
    • +

      Else if is a zero and a value with opposite sign, then return negative infinity.

      +
    • +

      Else return the result of dividing by , rounded to the nearest representable value.

      +
    +
    +
    +
    + +
    4.3.3.7.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if one of or is a negative infinity, then return negative infinity.

      +
    • +

      Else if one of or is a positive infinity, then return the other value.

      +
    • +

      Else if both and are zeroes of opposite signs, then return negative zero.

      +
    • +

      Else return the smaller value of and .

      +
    +
    +
    +
    + +
    4.3.3.8.
    +
      +
    • +

      If either or is a NaN, then return an element of .

      +
    • +

      Else if one of or is a positive infinity, then return positive infinity.

      +
    • +

      Else if one of or is a negative infinity, then return the other value.

      +
    • +

      Else if both and are zeroes of opposite signs, then return positive zero.

      +
    • +

      Else return the larger value of and .

      +
    +
    +
    +
    + +
    4.3.3.9.
    +
      +
    • +

      If and have the same sign, then return .

      +
    • +

      Else return with negated sign.

      +
    +
    +
    +
    + +
    4.3.3.10.
    +
      +
    • +

      If is a NaN, then return with positive sign.

      +
    • +

      Else if is an infinity, then return positive infinity.

      +
    • +

      Else if is a zero, then return positive zero.

      +
    • +

      Else if is a positive value, then .

      +
    • +

      Else return negated.

      +
    +
    +
    +
    + +
    4.3.3.11.
    +
      +
    • +

      If is a NaN, then return with negated sign.

      +
    • +

      Else if is an infinity, then return that infinity negated.

      +
    • +

      Else if is a zero, then return that zero negated.

      +
    • +

      Else return negated.

      +
    +
    +
    +
    + +
    4.3.3.12.
    +
      +
    • +

      If is a NaN, then return an element of .

      +
    • +

      Else if is negative infinity, then return an element of .

      +
    • +

      Else if is positive infinity, then return positive infinity.

      +
    • +

      Else if is a zero, then return that zero.

      +
    • +

      Else if has a negative sign, then return an element of .

      +
    • +

      Else return the square root of .

      +
    +
    +
    +
    + +
    4.3.3.13.
    +
      +
    • +

      If is a NaN, then return an element of .

      +
    • +

      Else if is an infinity, then return .

      +
    • +

      Else if is a zero, then return .

      +
    • +

      Else if is smaller than but greater than , then return negative zero.

      +
    • +

      Else return the smallest integral value that is not smaller than .

      +
    +
    +
    +
    + +
    4.3.3.14.
    +
      +
    • +

      If is a NaN, then return an element of .

      +
    • +

      Else if is an infinity, then return .

      +
    • +

      Else if is a zero, then return .

      +
    • +

      Else if is greater than but smaller than , then return positive zero.

      +
    • +

      Else return the largest integral value that is not larger than .

      +
    +
    +
    +
    + +
    4.3.3.15.
    +
      +
    • +

      If is a NaN, then return an element of .

      +
    • +

      Else if is an infinity, then return .

      +
    • +

      Else if is a zero, then return .

      +
    • +

      Else if is greater than but smaller than , then return positive zero.

      +
    • +

      Else if is smaller than but greater than , then return negative zero.

      +
    • +

      Else return the integral value with the same sign as and the largest magnitude that is not larger than the magnitude of .

      +
    +
    +
    +
    + +
    4.3.3.16.
    +
      +
    • +

      If is a NaN, then return an element of .

      +
    • +

      Else if is an infinity, then return .

      +
    • +

      Else if is a zero, then return .

      +
    • +

      Else if is greater than but smaller than or equal to , then return positive zero.

      +
    • +

      Else if is smaller than but greater than or equal to , then return negative zero.

      +
    • +

      Else return the integral value that is nearest to ; if two values are equally near, return the even one.

      +
    +
    +
    +
    + +
    4.3.3.17.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if both and are the same value, then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.18.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if both and are the same value, then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.19.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if and are the same value, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if is smaller than , then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.20.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if and are the same value, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if is larger than , then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.21.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if and are the same value, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if is smaller than or equal to , then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.22.
    +
      +
    • +

      If either or is a NaN, then return .

      +
    • +

      Else if and are the same value, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if both and are zeroes, then return .

      +
    • +

      Else if is smaller than or equal to , then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.23.
    +
      +
    • +

      If is less than then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    + +
    4.3.3.24.
    +
      +
    • +

      If is less than then return .

      +
    • +

      Else return .

      +
    +
    +
    +
    +
    + +

    4.3.4. Conversions

    +
    + +
    4.3.4.1.
    +
      +
    • +

      Return .

      +
    +
    +
    +

    Note

    +

    In the abstract syntax, unsigned extension just reinterprets the same value.

    +
    +
    +
    + +
    4.3.4.2.
    +
      +
    • +

      Let be the signed interpretation of of size .

      +
    • +

      Return the two’s complement of relative to size .

      +
    +
    +
    +
    + +
    4.3.4.3.
    +
      +
    • +

      Return modulo .

      +
    +
    +
    +
    + +
    4.3.4.4.
    +
      +
    • +

      If is a NaN, then the result is undefined.

      +
    • +

      Else if is an infinity, then the result is undefined.

      +
    • +

      Else if is a number and is a value within range of the target type, then return that value.

      +
    • +

      Else the result is undefined.

      +
    +
    +
    +

    Note

    +

    This operator is partial. +It is not defined for NaNs, infinities, or values for which the result is out of range.

    +
    +
    +
    + +
    4.3.4.5.
    +
      +
    • +

      If is a NaN, then the result is undefined.

      +
    • +

      Else if is an infinity, then the result is undefined.

      +
    • +

      If is a number and is a value within range of the target type, then return that value.

      +
    • +

      Else the result is undefined.

      +
    +
    +
    +

    Note

    +

    This operator is partial. +It is not defined for NaNs, infinities, or values for which the result is out of range.

    +
    +
    +
    + +
    4.3.4.6.
    +
      +
    • +

      If is a NaN, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else, return .

      +
    +
    +
    +
    + +
    4.3.4.7.
    +
      +
    • +

      If is a NaN, then return .

      +
    • +

      Else if is negative infinity, then return .

      +
    • +

      Else if is positive infinity, then return .

      +
    • +

      Else, return .

      +
    +
    +
    +
    + +
    4.3.4.8.
    +
      +
    • +

      If is a canonical NaN, then return an element of (i.e., a canonical NaN of size ).

      +
    • +

      Else if is a NaN, then return an element of (i.e., any arithmetic NaN of size ).

      +
    • +

      Else, return .

      +
    +
    +
    +
    + +
    4.3.4.9.
    +
      +
    • +

      If is a canonical NaN, then return an element of (i.e., a canonical NaN of size ).

      +
    • +

      Else if is a NaN, then return an element of (i.e., any NaN of size ).

      +
    • +

      Else if is an infinity, then return that infinity.

      +
    • +

      Else if is a zero, then return that zero.

      +
    • +

      Else, return .

      +
    +
    +
    +
    + +
    4.3.4.10.
    +
      +
    • +

      Return .

      +
    +
    +
    +
    + +
    4.3.4.11.
    + +
    +
    +
    + +
    4.3.4.12.
    +
      +
    • +

      Let be the bit sequence .

      +
    • +

      Return the constant for which .

      +
    +
    +
    +
    + +
    4.3.4.13.
    + +
    +
    +
    + +
    4.3.4.14.
    + +
    +
    +
    +
    + +
    + +

    4.4. Instructions

    +

    WebAssembly computation is performed by executing individual instructions.

    +
    + +

    4.4.1. Numeric Instructions

    +

    Numeric instructions are defined in terms of the generic numeric operators. +The mapping of numeric instructions to their underlying operators is expressed by the following definition:

    +
    +

    And for conversion operators:

    +
    +

    Where the underlying operators are partial, the corresponding instruction will trap when the result is not defined. +Where the underlying operators are non-deterministic, because they may return one of multiple possible NaN values, so are the corresponding instructions.

    +
    +

    Note

    +

    For example, the result of instruction applied to operands invokes , +which maps to the generic via the above definition. +Similarly, applied to invokes , +which maps to the generic .

    +
    +
    + +
    4.4.1.1.
    +
      +
    1. +

      Push the value to the stack.

      +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since instructions already are values.

    +
    +
    +
    + +
    4.4.1.2.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is defined, then:

      +
        +
      1. +

        Let be a possible result of computing .

        +
      2. +

        Push the value to the stack.

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Trap.

        +
      +
    +
    +
    +
    + +
    4.4.1.3.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      If is defined, then:

      +
        +
      1. +

        Let be a possible result of computing .

        +
      2. +

        Push the value to the stack.

        +
      +
    5. +

      Else:

      +
        +
      1. +

        Trap.

        +
      +
    +
    +
    +
    + +
    4.4.1.4.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the result of computing .

      +
    4. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.1.5.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the result of computing .

      +
    5. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.1.6.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is defined:

      +
        +
      1. +

        Let be a possible result of computing .

        +
      2. +

        Push the value to the stack.

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Trap.

        +
      +
    +
    +
    +
    +
    + +

    4.4.2. Reference Instructions

    +
    + +
    4.4.2.1.
    +
      +
    1. +

      Push the value to the stack.

      +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since the instruction is already a value.

    +
    +
    +
    + +
    4.4.2.2.
    +
      +
    1. +

      Assert: due to validation, a reference value is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is , then:

      +
        +
      1. +

        Push the value to the stack.

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Push the value to the stack.

        +
      +
    +
    +
    +
    + +
    4.4.2.3.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the function address .

      +
    4. +

      Push the value to the stack.

      +
    +
    +
    +
    +
    + +

    4.4.3. Vector Instructions

    +

    Most vector instructions are defined in terms of generic numeric operators applied lane-wise based on the shape.

    +
    +
    +

    Note

    +

    For example, the result of instruction applied to operands invokes , which maps to , +where and are sequences resulting from invoking and respectively.

    +
    +
    + +
    4.4.3.1.
    +
      +
    1. +

      Push the value to the stack.

      +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since instructions coincide with values.

    +
    +
    +
    + +
    4.4.3.2.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the result of computing .

      +
    4. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.3.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the result of computing .

      +
    5. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.4.
    +
      +
    1. +

      Assert: due to validation, three values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Let be the result of computing .

      +
    6. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.5.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the result of computing .

      +
    4. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.6.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence .

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Let be the sequence .

      +
    6. +

      Let be the concatenation of the two sequences

      +
    7. +

      Let be the result of .

      +
    8. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.7.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Assert: due to validation, for all in it holds that .

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the sequence .

      +
    5. +

      Pop the value from the stack.

      +
    6. +

      Let be the sequence .

      +
    7. +

      Let be the concatenation of the two sequences .

      +
    8. +

      Let be the result of .

      +
    9. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.8.
    +
      +
    1. +

      Let be the type .

      +
    2. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the integer .

      +
    5. +

      Let be the result of .

      +
    6. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.9.
    +
      +
    1. +

      Assert: due to validation, .

      +
    2. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the sequence .

      +
    5. +

      Let be the type .

      +
    6. +

      Let be the result of computing .

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.10.
    +
      +
    1. +

      Assert: due to validation, .

      +
    2. +

      Let be the type .

      +
    3. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    6. +

      Pop the value from the stack.

      +
    7. +

      Let be the sequence .

      +
    8. +

      Let be the result of computing

      +
    9. +

      Push on the stack.

      +
    +
    +
    +
    + +
    4.4.3.11.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the result of computing .

      +
    4. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.12.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      If is defined:

      +
        +
      1. +

        Let be a possible result of computing .

        +
      2. +

        Push the value to the stack.

        +
      +
    5. +

      Else:

      +
        +
      1. +

        Trap.

        +
      +
    +
    +
    +
    + +
    4.4.3.13.
    +
      +
    1. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the sequence .

      +
    5. +

      Let be the sequence .

      +
    6. +

      Let be the result of computing .

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.14.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Let be the sequence .

      +
    6. +

      Let be .

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.3.15.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence

      +
    4. +

      Let be the result of computing .

      +
    5. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.16.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence .

      +
    4. +

      Let be the bit width of value type .

      +
    5. +

      Let be the sequence as a result of computing .

      +
    6. +

      Let be the integer .

      +
    7. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.17.
    +
      +
    1. +

      Assert: due to syntax, .

      +
    2. +

      Assert: due to validation, two values of value type are on the top of the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the result of computing .

      +
    5. +

      Pop the value from the stack.

      +
    6. +

      Let be the result of computing .

      +
    7. +

      Let be the result of .

      +
    8. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.18.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence .

      +
    4. +

      Let be the result of computing

      +
    5. +

      Push the value onto the stack.

      +
    +
    +
    +
    +
    4.4.3.19.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is , then:

      +
        +
      1. +

        Let be the sequence .

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Let be the sequence .

        +
      +
    5. +

      Let be the result of computing .

      +
    6. +

      Let be the result of computing .

      +
    7. +

      Push the value onto the stack.

      +
    +
    +

    where:

    +
    +
    +
    +
    4.4.3.20.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence .

      +
    4. +

      Let be the result of computing concatenated with the vector .

      +
    5. +

      Let be the result of computing .

      +
    6. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.21.
    +
      +
    1. +

      Assert: due to validation, two values of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      Let be the result of computing

      +
    5. +

      Let be the result of computing .

      +
    6. +

      Let be the result of computing .

      +
    7. +

      Push the value onto the stack.

      +
    +
    +
    +
    + +
    4.4.3.22.
    +
      +
    1. +

      Assert: due to validation, two values of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Pop the value from the stack.

      +
    4. +

      If is , then:

      +
        +
      1. +

        Let be the sequence .

        +
      2. +

        Let be the sequence .

        +
      +
    5. +

      Else:

      +
        +
      1. +

        Let be the sequence .

        +
      2. +

        Let be the sequence .

        +
      +
    6. +

      Let be the result of computing

      +
    7. +

      Push the value onto the stack.

      +
    +
    +

    where:

    +
    +
    +
    + +
    4.4.3.23.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Let be the sequence .

      +
    4. +

      Let be the result of computing .

      +
    5. +

      Let c be the result of computing .

      +
    6. +

      Push the value to the stack.

      +
    +
    +
    +
    +
    + +

    4.4.4. Parametric Instructions

    +
    + +
    4.4.4.1.
    +
      +
    1. +

      Assert: due to validation, a value is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    +
    +
    +
    + +
    4.4.4.2.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Assert: due to validation, two more values (of the same value type) are on the top of the stack.

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Pop the value from the stack.

      +
    6. +

      If is not , then:

      +
        +
      1. +

        Push the value back to the stack.

        +
      +
    7. +

      Else:

      +
        +
      1. +

        Push the value back to the stack.

        +
      +
    +
    +
    +

    Note

    +

    In future versions of WebAssembly, may allow more than one value per choice.

    +
    +
    +
    +
    + +

    4.4.5. Variable Instructions

    +
    + +
    4.4.5.1.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the value .

      +
    4. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.5.2.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Assert: due to validation, a value is on the top of the stack.

      +
    4. +

      Pop the value from the stack.

      +
    5. +

      Replace with the value .

      +
    +
    +
    +
    + +
    4.4.5.3.
    +
      +
    1. +

      Assert: due to validation, a value is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      Push the value to the stack.

      +
    4. +

      Push the value to the stack.

      +
    5. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.5.4.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the global address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the global instance .

      +
    6. +

      Let be the value .

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.5.5.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the global address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the global instance .

      +
    6. +

      Assert: due to validation, a value is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Replace with the value .

      +
    +
    +
    +

    Note

    +

    Validation ensures that the global is, in fact, marked as mutable.

    +
    +
    +
    +
    + +

    4.4.6. Table Instructions

    +
    + +
    4.4.6.1.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      If is not smaller than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    9. +

      Let be the value .

      +
    10. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.6.2.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, a reference value is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      If is not smaller than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    11. +

      Replace the element with .

      +
    +
    +
    +
    + +
    4.4.6.3.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Let be the length of .

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.6.4.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Let be the length of .

      +
    7. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    8. +

      Pop the value from the stack.

      +
    9. +

      Assert: due to validation, a reference value is on the top of the stack.

      +
    10. +

      Pop the value from the stack.

      +
    11. +

      Either, try growing by entries with initialization value :

      +
    +
    +
    +
      +
    1. +

      If it succeeds, push the value to the stack.

      +
    2. +

      Else, push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Or, push the value to the stack.

      +
    +
    +
    +

    Note

    +

    The instruction is non-deterministic. +It may either succeed, returning the old table size , +or fail, returning . +Failure must occur if the referenced table instance has a maximum size defined that would be exceeded. +However, failure can occur in other cases as well. +In practice, the choice depends on the resources available to the embedder.

    +
    +
    +
    + +
    4.4.6.5.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a reference value is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    +
      +
    1. +

      If is , then:

      +
        +
      1. +

        Return.

        +
      +
    2. +

      Push the value to the stack.

      +
    3. +

      Push the value to the stack.

      +
    4. +

      Execute the instruction .

      +
    5. +

      Push the value to the stack.

      +
    6. +

      Push the value to the stack.

      +
    7. +

      Push the value to the stack.

      +
    8. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.6.6.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, exists.

      +
    7. +

      Let be the table address .

      +
    8. +

      Assert: due to validation, exists.

      +
    9. +

      Let be the table instance .

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    13. +

      Pop the value from the stack.

      +
    14. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    15. +

      Pop the value from the stack.

      +
    16. +

      If is larger than the length of or is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    17. +

      If , then:

      +
    +
    +
    +
      +
    1. +

      Return.

      +
    +
    +
    +
      +
    1. +

      If , then:

      +
    +
    +
    +
      +
    1. +

      Push the value to the stack.

      +
    2. +

      Push the value to the stack.

      +
    3. +

      Execute the instruction .

      +
    4. +

      Execute the instruction .

      +
    5. +

      Assert: due to the earlier check against the table size, .

      +
    6. +

      Push the value to the stack.

      +
    7. +

      Assert: due to the earlier check against the table size, .

      +
    8. +

      Push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Else:

      +
    +
    +
    +
      +
    1. +

      Assert: due to the earlier check against the table size, .

      +
    2. +

      Push the value to the stack.

      +
    3. +

      Assert: due to the earlier check against the table size, .

      +
    4. +

      Push the value to the stack.

      +
    +
      +
    1. +

      Execute the instruction .

      +
    +
      +
    1. +

      Execute the instruction .

      +
    2. +

      Push the value to the stack.

      +
    3. +

      Push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Push the value to the stack.

      +
    2. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.6.7.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, exists.

      +
    7. +

      Let be the element address .

      +
    8. +

      Assert: due to validation, exists.

      +
    9. +

      Let be the element instance .

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    13. +

      Pop the value from the stack.

      +
    14. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    15. +

      Pop the value from the stack.

      +
    16. +

      If is larger than the length of or is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    17. +

      If , then:

      +
        +
      1. +

        Return.

        +
      +
    18. +

      Let be the reference value .

      +
    19. +

      Push the value to the stack.

      +
    20. +

      Push the value to the stack.

      +
    21. +

      Execute the instruction .

      +
    22. +

      Assert: due to the earlier check against the table size, .

      +
    23. +

      Push the value to the stack.

      +
    24. +

      Assert: due to the earlier check against the segment size, .

      +
    25. +

      Push the value to the stack.

      +
    26. +

      Push the value to the stack.

      +
    27. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.6.8.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the element address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Replace with the element instance .

      +
    +
    +
    +
    +
    + +

    4.4.7. Memory Instructions

    +
    +

    Note

    +

    The alignment in load and store instructions does not affect the semantics. +It is an indication that the offset at which the memory is accessed is intended to satisfy the property . +A WebAssembly implementation can use this hint to optimize for the intended use. +Unaligned access violating that property is still allowed and must succeed regardless of the annotation. +However, it may be substantially slower on some hardware.

    +
    +
    + +
    4.4.7.1. and
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Let be the integer .

      +
    9. +

      If is not part of the instruction, then:

      +
        +
      1. +

        Let be the bit width of number type .

        +
      +
    10. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    11. +

      Let be the byte sequence .

      +
    12. +

      If and are part of the instruction, then:

      +
        +
      1. +

        Let be the integer for which .

        +
      2. +

        Let be the result of computing .

        +
      +
    13. +

      Else:

      +
        +
      1. +

        Let be the constant for which .

        +
      +
    14. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.2.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Let be the integer .

      +
    9. +

      If is larger than the length of , then:

      +
      +
      +
        +
      1. +

        Trap.

        +
      +
      +
      +
    10. +

      Let be the byte sequence .

      +
    11. +

      Let be the integer for which .

      +
    12. +

      Let be the integer .

      +
    13. +

      Let be the result of .

      +
    14. +

      Let be the result of computing .

      +
    15. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.3.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Let be the integer .

      +
    9. +

      If is larger than the length of , then:

      +
      +
      +
        +
      1. +

        Trap.

        +
      +
      +
      +
    10. +

      Let be the byte sequence .

      +
    11. +

      Let be the integer for which .

      +
    12. +

      Let be the integer .

      +
    13. +

      Let be the result of computing .

      +
    14. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.4.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Let be the integer .

      +
    9. +

      If is larger than the length of , then:

      +
      +
      +
        +
      1. +

        Trap.

        +
      +
      +
      +
    10. +

      Let be the byte sequence .

      +
    11. +

      Let be the integer for which .

      +
    12. +

      Let be the result of .

      +
    13. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.5.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Let be the integer .

      +
    11. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    12. +

      Let be the byte sequence .

      +
    13. +

      Let be the constant for which .

      +
    14. +

      Let be .

      +
    15. +

      Let be the result of computing .

      +
    16. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.6. and
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Let be the integer .

      +
    11. +

      If is not part of the instruction, then:

      +
        +
      1. +

        Let be the bit width of number type .

        +
      +
    12. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    13. +

      If is part of the instruction, then:

      +
        +
      1. +

        Let be the result of computing .

        +
      2. +

        Let be the byte sequence .

        +
      +
    14. +

      Else:

      +
        +
      1. +

        Let be the byte sequence .

        +
      +
    15. +

      Replace the bytes with .

      +
    +
    +
    +
    + +
    4.4.7.7.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Let be the integer .

      +
    11. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    12. +

      Let be .

      +
    13. +

      Let be the byte sequence .

      +
    14. +

      Replace the bytes with .

      +
    +
    +
    +
    + +
    4.4.7.8.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Let be the length of divided by the page size.

      +
    7. +

      Push the value to the stack.

      +
    +
    +
    +
    + +
    4.4.7.9.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Let be the length of divided by the page size.

      +
    7. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    8. +

      Pop the value from the stack.

      +
    9. +

      Let be the value , for which is .

      +
    10. +

      Either, try growing by pages:

      +
    +
    +
    +
      +
    1. +

      If it succeeds, push the value to the stack.

      +
    2. +

      Else, push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Or, push the value to the stack.

      +
    +
    +
    +

    Note

    +

    The instruction is non-deterministic. +It may either succeed, returning the old memory size , +or fail, returning . +Failure must occur if the referenced memory instance has a maximum size defined that would be exceeded. +However, failure can occur in other cases as well. +In practice, the choice depends on the resources available to the embedder.

    +
    +
    +
    + +
    4.4.7.10.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      If is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    13. +

      If , then:

      +
        +
      1. +

        Return.

        +
      +
    14. +

      Push the value to the stack.

      +
    15. +

      Push the value to the stack.

      +
    16. +

      Execute the instruction .

      +
    17. +

      Assert: due to the earlier check against the memory size, .

      +
    18. +

      Push the value to the stack.

      +
    19. +

      Push the value to the stack.

      +
    20. +

      Push the value to the stack.

      +
    21. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.7.11.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    7. +

      Pop the value from the stack.

      +
    8. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      If is larger than the length of or is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    13. +

      If , then:

      +
    +
    +
    +
      +
    1. +

      Return.

      +
    +
    +
    +
      +
    1. +

      If , then:

      +
    +
    +
    +
      +
    1. +

      Push the value to the stack.

      +
    2. +

      Push the value to the stack.

      +
    3. +

      Execute the instruction .

      +
    4. +

      Execute the instruction .

      +
    5. +

      Assert: due to the earlier check against the memory size, .

      +
    6. +

      Push the value to the stack.

      +
    7. +

      Assert: due to the earlier check against the memory size, .

      +
    8. +

      Push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Else:

      +
    +
    +
    +
      +
    1. +

      Assert: due to the earlier check against the memory size, .

      +
    2. +

      Push the value to the stack.

      +
    3. +

      Assert: due to the earlier check against the memory size, .

      +
    4. +

      Push the value to the stack.

      +
    5. +

      Execute the instruction .

      +
    6. +

      Execute the instruction .

      +
    7. +

      Push the value to the stack.

      +
    8. +

      Push the value to the stack.

      +
    +
    +
    +
      +
    1. +

      Push the value to the stack.

      +
    2. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.7.12.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the memory address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the memory instance .

      +
    6. +

      Assert: due to validation, exists.

      +
    7. +

      Let be the data address .

      +
    8. +

      Assert: due to validation, exists.

      +
    9. +

      Let be the data instance .

      +
    10. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    11. +

      Pop the value from the stack.

      +
    12. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    13. +

      Pop the value from the stack.

      +
    14. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    15. +

      Pop the value from the stack.

      +
    16. +

      If is larger than the length of or is larger than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    17. +

      If , then:

      +
        +
      1. +

        Return.

        +
      +
    18. +

      Let be the byte .

      +
    19. +

      Push the value to the stack.

      +
    20. +

      Push the value to the stack.

      +
    21. +

      Execute the instruction .

      +
    22. +

      Assert: due to the earlier check against the memory size, .

      +
    23. +

      Push the value to the stack.

      +
    24. +

      Assert: due to the earlier check against the memory size, .

      +
    25. +

      Push the value to the stack.

      +
    26. +

      Push the value to the stack.

      +
    27. +

      Execute the instruction .

      +
    +
    +
    +
    + +
    4.4.7.13.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the data address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Replace with the data instance .

      +
    +
    +
    +
    +
    + +

    4.4.8. Control Instructions

    +
    + +
    4.4.8.1.
    +
      +
    1. +

      Do nothing.

      +
    +
    +
    +
    + +
    4.4.8.2.
    +
      +
    1. +

      Trap.

      +
    + +
    +
    + +
    4.4.8.3.
    +
      +
    1. +

      Assert: due to validation, is defined.

      +
    2. +

      Let be the function type .

      +
    3. +

      Let be the label whose arity is and whose continuation is the end of the block.

      +
    4. +

      Assert: due to validation, there are at least values on the top of the stack.

      +
    5. +

      Pop the values from the stack.

      +
    6. +

      Enter the block with label .

      +
    +
    +
    +
    + +
    4.4.8.4.
    +
      +
    1. +

      Assert: due to validation, is defined.

      +
    2. +

      Let be the function type .

      +
    3. +

      Let be the label whose arity is and whose continuation is the start of the loop.

      +
    4. +

      Assert: due to validation, there are at least values on the top of the stack.

      +
    5. +

      Pop the values from the stack.

      +
    6. +

      Enter the block with label .

      +
    +
    +
    +
    + +
    4.4.8.5.
    +
      +
    1. +

      Assert: due to validation, is defined.

      +
    2. +

      Let be the function type .

      +
    3. +

      Let be the label whose arity is and whose continuation is the end of the instruction.

      +
    4. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    5. +

      Pop the value from the stack.

      +
    6. +

      Assert: due to validation, there are at least values on the top of the stack.

      +
    7. +

      Pop the values from the stack.

      +
    8. +

      If is non-zero, then:

      +
        +
      1. +

        Enter the block with label .

        +
      +
    9. +

      Else:

      +
        +
      1. +

        Enter the block with label .

        +
      +
    +
    +
    +
    + +
    4.4.8.6.
    +
      +
    1. +

      Assert: due to validation, the stack contains at least labels.

      +
    2. +

      Let be the -th label appearing on the stack, starting from the top and counting from zero.

      +
    3. +

      Let be the arity of .

      +
    4. +

      Assert: due to validation, there are at least values on the top of the stack.

      +
    5. +

      Pop the values from the stack.

      +
    6. +

      Repeat times:

      +
        +
      1. +

        While the top of the stack is a value, do:

        +
          +
        1. +

          Pop the value from the stack.

          +
        +
      2. +

        Assert: due to validation, the top of the stack now is a label.

        +
      3. +

        Pop the label from the stack.

        +
      +
    7. +

      Push the values to the stack.

      +
    8. +

      Jump to the continuation of .

      +
    +
    +
    +
    + +
    4.4.8.7.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is non-zero, then:

      +
        +
      1. +

        Execute the instruction .

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Do nothing.

        +
      +
    +
    +
    +
    + +
    4.4.8.8.
    +
      +
    1. +

      Assert: due to validation, a value of value type is on the top of the stack.

      +
    2. +

      Pop the value from the stack.

      +
    3. +

      If is smaller than the length of , then:

      +
        +
      1. +

        Let be the label .

        +
      2. +

        Execute the instruction .

        +
      +
    4. +

      Else:

      +
        +
      1. +

        Execute the instruction .

        +
      +
    +
    +
    +
    + +
    4.4.8.9.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Let be the arity of .

      +
    3. +

      Assert: due to validation, there are at least values on the top of the stack.

      +
    4. +

      Pop the results from the stack.

      +
    5. +

      Assert: due to validation, the stack contains at least one frame.

      +
    6. +

      While the top of the stack is not a frame, do:

      +
        +
      1. +

        Pop the top element from the stack.

        +
      +
    7. +

      Assert: the top of the stack is the frame .

      +
    8. +

      Pop the frame from the stack.

      +
    9. +

      Push to the stack.

      +
    10. +

      Jump to the instruction after the original call that pushed the frame.

      +
    +
    +
    +
    + +
    4.4.8.10.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the function address .

      +
    4. +

      Invoke the function instance at address .

      +
    +
    +
    +
    + +
    4.4.8.11.
    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Assert: due to validation, exists.

      +
    3. +

      Let be the table address .

      +
    4. +

      Assert: due to validation, exists.

      +
    5. +

      Let be the table instance .

      +
    6. +

      Assert: due to validation, exists.

      +
    7. +

      Let be the function type .

      +
    8. +

      Assert: due to validation, a value with value type is on the top of the stack.

      +
    9. +

      Pop the value from the stack.

      +
    10. +

      If is not smaller than the length of , then:

      +
        +
      1. +

        Trap.

        +
      +
    11. +

      Let be the reference .

      +
    12. +

      If is , then:

      +
        +
      1. +

        Trap.

        +
      +
    13. +

      Assert: due to validation of table mutation, is a function reference.

      +
    14. +

      Let be the function reference .

      +
    15. +

      Assert: due to validation of table mutation, exists.

      +
    16. +

      Let be the function instance .

      +
    17. +

      Let be the function type .

      +
    18. +

      If and differ, then:

      +
        +
      1. +

        Trap.

        +
      +
    19. +

      Invoke the function instance at address .

      +
    +
    +
    +
    +
    + +

    4.4.9. Blocks

    +

    The following auxiliary rules define the semantics of executing an instruction sequence that forms a block.

    +
    + +
    4.4.9.1. Entering with label
    +
      +
    1. +

      Push to the stack.

      +
    2. +

      Jump to the start of the instruction sequence .

      +
    +
    +

    Note

    +

    No formal reduction rule is needed for entering an instruction sequence, +because the label is embedded in the administrative instruction that structured control instructions reduce to directly.

    +
    +
    +
    + +
    4.4.9.2. Exiting with label
    +

    When the end of a block is reached without a jump or trap aborting it, then the following steps are performed.

    +
      +
    1. +

      Let be the number of values on the top of the stack.

      +
    2. +

      Pop the values from the stack.

      +
    3. +

      Assert: due to validation, the label is now on the top of the stack.

      +
    4. +

      Pop the label from the stack.

      +
    5. +

      Push back to the stack.

      +
    6. +

      Jump to the position after the of the structured control instruction associated with the label .

      +
    +
    +
    +

    Note

    +

    This semantics also applies to the instruction sequence contained in a instruction. +Therefore, execution of a loop falls off the end, unless a backwards branch is performed explicitly.

    +
    +
    +
    +
    + +

    4.4.10. Function Calls

    +

    The following auxiliary rules define the semantics of invoking a function instance through one of the call instructions and returning from it.

    +
    + +
    4.4.10.1. Invocation of function address
    +
      +
    1. +

      Assert: due to validation, exists.

      +
    2. +

      Let be the function instance, .

      +
    3. +

      Let be the function type .

      +
    4. +

      Let be the list of value types .

      +
    5. +

      Let be the expression .

      +
    6. +

      Assert: due to validation, values are on the top of the stack.

      +
    7. +

      Pop the values from the stack.

      +
    8. +

      Let be the list of zero values of types .

      +
    9. +

      Let be the frame .

      +
    10. +

      Push the activation of with arity to the stack.

      +
    11. +

      Let be the label whose arity is and whose continuation is the end of the function.

      +
    12. +

      Enter the instruction sequence with label .

      +
    +
    +
    +
    + +
    4.4.10.2. Returning from a function
    +

    When the end of a function is reached without a jump (i.e., ) or trap aborting it, then the following steps are performed.

    +
      +
    1. +

      Let be the current frame.

      +
    2. +

      Let be the arity of the activation of .

      +
    3. +

      Assert: due to validation, there are values on the top of the stack.

      +
    4. +

      Pop the results from the stack.

      +
    5. +

      Assert: due to validation, the frame is now on the top of the stack.

      +
    6. +

      Pop the frame from the stack.

      +
    7. +

      Push back to the stack.

      +
    8. +

      Jump to the instruction after the original call.

      +
    +
    +
    +
    + +
    4.4.10.3. Host Functions
    +

    Invoking a host function has non-deterministic behavior. +It may either terminate with a trap or return regularly. +However, in the latter case, it must consume and produce the right number and types of WebAssembly values on the stack, +according to its function type.

    +

    A host function may also modify the store. +However, all store modifications must result in an extension of the original store, i.e., they must only modify mutable contents and must not have instances removed. +Furthermore, the resulting store must be valid, i.e., all data and code in it is well-typed.

    +
    +

    Here, denotes the implementation-defined execution of host function in current store with arguments . +It yields a set of possible outcomes, where each element is either a pair of a modified store and a result or the special value indicating divergence. +A host function is non-deterministic if there is at least one argument for which the set of outcomes is not singular.

    +

    For a WebAssembly implementation to be sound in the presence of host functions, +every host function instance must be valid, +which means that it adheres to suitable pre- and post-conditions: +under a valid store , and given arguments matching the ascribed parameter types , +executing the host function must yield a non-empty set of possible outcomes each of which is either divergence or consists of a valid store that is an extension of and a result matching the ascribed return types . +All these notions are made precise in the Appendix.

    +
    +

    Note

    +

    A host function can call back into WebAssembly by invoking a function exported from a module. +However, the effects of any such call are subsumed by the non-deterministic behavior allowed for the host function.

    +
    +
    +
    +
    + +

    4.4.11. Expressions

    +

    An expression is evaluated relative to a current frame pointing to its containing module instance.

    +
      +
    1. +

      Jump to the start of the instruction sequence of the expression.

      +
    2. +

      Execute the instruction sequence.

      +
    3. +

      Assert: due to validation, the top of the stack contains a value.

      +
    4. +

      Pop the value from the stack.

      +
    +

    The value is the result of the evaluation.

    +
    +
    +

    Note

    +

    Evaluation iterates this reduction rule until reaching a value. +Expressions constituting function bodies are executed during function invocation.

    +
    +
    +
    + +
    +

    4.5. Modules

    +

    For modules, the execution semantics primarily defines instantiation, which allocates instances for a module and its contained definitions, initializes tables and memories from contained element and data segments, and invokes the start function if present. It also includes invocation of exported functions.

    +

    Instantiation depends on a number of auxiliary notions for type-checking imports and allocating instances.

    +
    + +

    4.5.1. External Typing

    +

    For the purpose of checking external values against imports, +such values are classified by external types. +The following auxiliary typing rules specify this typing relation relative to a store in which the referenced instances live.

    +
    + +
    4.5.1.1.
    + +
    +
    +
    + +
    4.5.1.2.
    + +
    +
    +
    + +
    4.5.1.3.
    + +
    +
    +
    + +
    4.5.1.4.
    + + +
    +
    +
    + +

    4.5.2. Value Typing

    +

    For the purpose of checking argument values against the parameter types of exported functions, +values are classified by value types. +The following auxiliary typing rules specify this typing relation relative to a store in which possibly referenced addresses live.

    +
    + +
    4.5.2.1. Numeric Values
    + +
    +
    +
    + +
    4.5.2.2. Null References
    + +
    +
    +
    +
    4.5.2.3. Function References
    + + +
    +
    +
    4.5.2.4. External References
    + + +
    +
    +
    + +

    4.5.3. Allocation

    +

    New instances of functions, tables, memories, and globals are allocated in a store , as defined by the following auxiliary functions.

    +
    + +
    4.5.3.1. Functions
    +
      +
    1. +

      Let be the function to allocate and its module instance.

      +
    2. +

      Let be the first free function address in .

      +
    3. +

      Let be the function type .

      +
    4. +

      Let be the function instance .

      +
    5. +

      Append to the of .

      +
    6. +

      Return .

      +
    + +
    +
    + +
    4.5.3.2. Host Functions
    +
      +
    1. +

      Let be the host function to allocate and its function type.

      +
    2. +

      Let be the first free function address in .

      +
    3. +

      Let be the function instance .

      +
    4. +

      Append to the of .

      +
    5. +

      Return .

      +
    + +
    +

    Note

    +

    Host functions are never allocated by the WebAssembly semantics itself, +but may be allocated by the embedder.

    +
    +
    +
    + +
    4.5.3.3. Tables
    +
      +
    1. +

      Let be the table type to allocate and the initialization value.

      +
    2. +

      Let be the structure of table type .

      +
    3. +

      Let be the first free table address in .

      +
    4. +

      Let be the table instance with elements set to .

      +
    5. +

      Append to the of .

      +
    6. +

      Return .

      +
    + +
    +
    + +
    4.5.3.4. Memories
    +
      +
    1. +

      Let be the memory type to allocate.

      +
    2. +

      Let be the structure of memory type .

      +
    3. +

      Let be the first free memory address in .

      +
    4. +

      Let be the memory instance that contains pages of zeroed bytes.

      +
    5. +

      Append to the of .

      +
    6. +

      Return .

      +
    +
    +
    +
    + +
    4.5.3.5. Globals
    +
      +
    1. +

      Let be the global type to allocate and the value to initialize the global with.

      +
    2. +

      Let be the first free global address in .

      +
    3. +

      Let be the global instance .

      +
    4. +

      Append to the of .

      +
    5. +

      Return .

      +
    + +
    +
    + +
    4.5.3.6. Element segments
    +
      +
    1. +

      Let be the elements’ type and the vector of references to allocate.

      +
    2. +

      Let be the first free element address in .

      +
    3. +

      Let be the element instance .

      +
    4. +

      Append to the of .

      +
    5. +

      Return .

      +
    +
    +
    +
    + +
    4.5.3.7. Data segments
    +
      +
    1. +

      Let be the vector of bytes to allocate.

      +
    2. +

      Let be the first free data address in .

      +
    3. +

      Let be the data instance .

      +
    4. +

      Append to the of .

      +
    5. +

      Return .

      +
    +
    +
    +
    + +
    4.5.3.8. Growing tables
    +
      +
    1. +

      Let be the table instance to grow, the number of elements by which to grow it, and the initialization value.

      +
    2. +

      Let be added to the length of .

      +
    3. +

      If is larger than or equal to , then fail.

      +
    4. +

      Let be the structure of table type .

      +
    5. +

      Let be with updated to .

      +
    6. +

      If is not valid, then fail.

      +
    7. +

      Append to .

      +
    8. +

      Set to the table type .

      +
    +
    +
    +
    + +
    4.5.3.9. Growing memories
    +
      +
    1. +

      Let be the memory instance to grow and the number of pages by which to grow it.

      +
    2. +

      Assert: The length of is divisible by the page size .

      +
    3. +

      Let be added to the length of divided by the page size .

      +
    4. +

      If is larger than , then fail.

      +
    5. +

      Let be the structure of memory type .

      +
    6. +

      Let be with updated to .

      +
    7. +

      If is not valid, then fail.

      +
    8. +

      Append times bytes with value to .

      +
    9. +

      Set to the memory type .

      +
    +
    +
    +
    + +
    4.5.3.10. Modules
    +

    The allocation function for modules requires a suitable list of external values that are assumed to match the import vector of the module, +a list of initialization values for the module’s globals, +and list of reference vectors for the module’s element segments.

    +
      +
    1. +

      Let be the module to allocate and the vector of external values providing the module’s imports, the initialization values of the module’s globals, and the reference vectors of the module’s element segments.

      +
    2. +

      For each function in , do:

      +
        +
      1. +

        Let be the function address resulting from allocating for the module instance defined below.

        +
      +
    3. +

      For each table in , do:

      +
        +
      1. +

        Let be the table type .

        +
      +

      b. Let be the table address resulting from allocating with initialization value .

      +
    4. +

      For each memory in , do:

      +
        +
      1. +

        Let be the memory address resulting from allocating .

        +
      +
    5. +

      For each global in , do:

      +
        +
      1. +

        Let be the global address resulting from allocating with initializer value .

        +
      +
    6. +

      For each element segment in , do:

      +
        +
      1. +

        Let be the element address resulting from allocating a element instance of reference type with contents .

        +
      +
    7. +

      For each data segment in , do:

      +
        +
      1. +

        Let be the data address resulting from allocating a data instance with contents .

        +
      +
    8. +

      Let be the concatenation of the function addresses in index order.

      +
    9. +

      Let be the concatenation of the table addresses in index order.

      +
    10. +

      Let be the concatenation of the memory addresses in index order.

      +
    11. +

      Let be the concatenation of the global addresses in index order.

      +
    12. +

      Let be the concatenation of the element addresses in index order.

      +
    13. +

      Let be the concatenation of the data addresses in index order.

      +
    14. +

      Let be the list of function addresses extracted from , concatenated with .

      +
    15. +

      Let be the list of table addresses extracted from , concatenated with .

      +
    16. +

      Let be the list of memory addresses extracted from , concatenated with .

      +
    17. +

      Let be the list of global addresses extracted from , concatenated with .

      +
    18. +

      For each export in , do:

      +
        +
      1. +

        If is a function export for function index , then let be the external value .

        +
      2. +

        Else, if is a table export for table index , then let be the external value .

        +
      3. +

        Else, if is a memory export for memory index , then let be the external value .

        +
      4. +

        Else, if is a global export for global index , then let be the external value .

        +
      5. +

        Let be the export instance .

        +
      +
    19. +

      Let be the concatenation of the export instances in index order.

      +
    20. +

      Let be the module instance .

      +
    21. +

      Return .

      +
    +
    +

    where:

    +
    +

    Here, the notation is shorthand for multiple allocations of object kind , defined as follows:

    +
    +

    Moreover, if the dots are a sequence (as for globals or tables), then the elements of this sequence are passed to the allocation function pointwise.

    +
    +

    Note

    +

    The definition of module allocation is mutually recursive with the allocation of its associated functions, because the resulting module instance is passed to the function allocator as an argument, in order to form the necessary closures. +In an implementation, this recursion is easily unraveled by mutating one or the other in a secondary step.

    +
    +
    +
    +
    + +

    4.5.4. Instantiation

    +

    Given a store , a module is instantiated with a list of external values supplying the required imports as follows.

    +

    Instantiation checks that the module is valid and the provided imports match the declared types, +and may fail with an error otherwise. +Instantiation can also result in a trap from executing the start function. +It is up to the embedder to define how such conditions are reported.

    +
      +
    1. +

      If is not valid, then:

      +
        +
      1. +

        Fail.

        +
      +
    2. +

      Assert: is valid with external types classifying its imports.

      +
    3. +

      If the number of imports is not equal to the number of provided external values, then:

      +
        +
      1. +

        Fail.

        +
      +
    4. +

      For each external value in and external type in , do:

      +
        +
      1. +

        If is not valid with an external type in store , then:

        +
          +
        1. +

          Fail.

          +
        +
      2. +

        If does not match , then:

        +
          +
        1. +

          Fail.

          +
        +
      +
    +
      +
    1. +

      Let be the auxiliary module instance that only consists of the imported globals and the imported and allocated functions from the final module instance , defined below.

      +
    2. +

      Let be the auxiliary frame .

      +
    3. +

      Push the frame to the stack.

      +
    4. +

      Let be the vector of global initialization values determined by and . These may be calculated as follows.

      +
        +
      1. +

        For each global in , do:

        +
          +
        1. +

          Let be the result of evaluating the initializer expression .

          +
        +
      2. +

        Assert: due to validation, the frame is now on the top of the stack.

        +
      3. +

        Let be the concatenation of in index order.

        +
      +
    5. +

      Let be the list of reference vectors determined by the element segments in . These may be calculated as follows.

      +
      +
      +
        +
      1. +

        For each element segment in , and for each element expression in , do:

        +
          +
        1. +

          Let be the result of evaluating the initializer expression .

          +
        +
      2. +

        Let be the concatenation of function elements in order of index .

        +
      3. +

        Let be the concatenation of function element vectors in order of index .

        +
      +
      +
      +
    6. +

      Pop the frame from the stack.

      +
    7. +

      Let be a new module instance allocated from in store with imports , global initializer values , and element segment contents , and let be the extended store produced by module allocation.

      +
    8. +

      Let be the auxiliary frame .

      +
    9. +

      Push the frame to the stack.

      +
    10. +

      For each element segment in whose mode is of the form , do:

      +
        +
      1. +

        Let be the length of the vector .

        +
      2. +

        Execute the instruction sequence .

        +
      3. +

        Execute the instruction .

        +
      4. +

        Execute the instruction .

        +
      5. +

        Execute the instruction .

        +
      6. +

        Execute the instruction .

        +
      +
    11. +

      For each data segment in whose mode is of the form , do:

      +
        +
      1. +

        Assert: is .

        +
      2. +

        Let be the length of the vector .

        +
      3. +

        Execute the instruction sequence .

        +
      4. +

        Execute the instruction .

        +
      5. +

        Execute the instruction .

        +
      6. +

        Execute the instruction .

        +
      7. +

        Execute the instruction .

        +
      +
    12. +

      If the start function is not empty, then:

      +
        +
      1. +

        Let be the start function .

        +
      2. +

        Execute the instruction .

        +
      +
    13. +

      Assert: due to validation, the frame is now on the top of the stack.

      +
    14. +

      Pop the frame from the stack.

      +
    +
    +

    where:

    +
    +
    +

    Note

    +

    Module allocation and the evaluation of global initializers and element segments are mutually recursive because the global initialization values and element segment contents are passed to the module allocator while depending on the module instance and store returned by allocation. +However, this recursion is just a specification device. +In practice, the initialization values can be determined beforehand by staging module allocation such that first, the module’s own are pre-allocated in the store, then the initializer expressions are evaluated, then the rest of the module instance is allocated, and finally the new function instances’ fields are set to that module instance. +This is possible because validation ensures that initialization expressions cannot actually call a function, only take their reference.

    +

    All failure conditions are checked before any observable mutation of the store takes place. +Store mutation is not atomic; +it happens in individual steps that may be interleaved with other threads.

    +

    Evaluation of constant expressions does not affect the store.

    +
    +
    +
    + +

    4.5.5. Invocation

    +

    Once a module has been instantiated, any exported function can be invoked externally via its function address in the store and an appropriate list of argument values.

    +

    Invocation may fail with an error if the arguments do not fit the function type. +Invocation can also result in a trap. +It is up to the embedder to define how such conditions are reported.

    +
    +

    Note

    +

    If the embedder API performs type checks itself, either statically or dynamically, before performing an invocation, then no failure other than traps can occur.

    +
    +

    The following steps are performed:

    +
      +
    1. +

      Assert: exists.

      +
    2. +

      Let be the function instance .

      +
    3. +

      Let be the function type .

      +
    4. +

      If the length of the provided argument values is different from the number of expected arguments, then:

      +
        +
      1. +

        Fail.

        +
      +
    5. +

      For each value type in and corresponding value in , do:

      +
        +
      1. +

        If is not valid with value type , then:

        +
          +
        1. +

          Fail.

          +
        +
      +
    6. +

      Let be the dummy frame .

      +
    7. +

      Push the frame to the stack.

      +
    8. +

      Push the values to the stack.

      +
    9. +

      Invoke the function instance at address .

      +
    +

    Once the function has returned, the following steps are executed:

    +
      +
    1. +

      Assert: due to validation, values are on the top of the stack.

      +
    2. +

      Pop from the stack.

      +
    +

    The values are returned as the results of the invocation.

    +
    +
    +
    +
    +
    + +
    + +

    5. Binary Format

    +
    + +
    + +

    5.1. Conventions

    +

    The binary format for WebAssembly modules is a dense linear encoding of their abstract syntax. 1

    +

    The format is defined by an attribute grammar whose only terminal symbols are bytes. +A byte sequence is a well-formed encoding of a module if and only if it is generated by the grammar.

    +

    Each production of this grammar has exactly one synthesized attribute: the abstract syntax that the respective byte sequence encodes. +Thus, the attribute grammar implicitly defines a decoding function +(i.e., a parsing function for the binary format).

    +

    Except for a few exceptions, the binary grammar closely mirrors the grammar of the abstract syntax.

    +
    +

    Note

    +

    Some phrases of abstract syntax have multiple possible encodings in the binary format. +For example, numbers may be encoded as if they had optional leading zeros. +Implementations of decoders must support all possible alternatives; +implementations of encoders can pick any allowed encoding.

    +
    +

    The recommended extension for files containing WebAssembly modules in binary format is “” +and the recommended Media Type is “”.

    +
    +
    1 +
    +

    Additional encoding layers – for example, introducing compression – may be defined on top of the basic representation defined here. +However, such layers are outside the scope of the current specification.

    +
    +
    + +

    5.1.1. Grammar

    +

    The following conventions are adopted in defining grammar rules for the binary format. +They mirror the conventions used for abstract syntax. +In order to distinguish symbols of the binary syntax from symbols of the abstract syntax, font is adopted for the former.

    +
      +
    • +

      Terminal symbols are bytes expressed in hexadecimal notation: .

      +
    • +

      Nonterminal symbols are written in typewriter font: .

      +
    • +

      is a sequence of iterations of .

      +
    • +

      is a possibly empty sequence of iterations of . +(This is a shorthand for used where is not relevant.)

      +
    • +

      is an optional occurrence of . +(This is a shorthand for where .)

      +
    • +

      denotes the same language as the nonterminal , but also binds the variable to the attribute synthesized for .

      +
    • +

      Productions are written , where each is the attribute that is synthesized for in the given case, usually from attribute variables bound in .

      +
    • +

      Some productions are augmented by side conditions in parentheses, which restrict the applicability of the production. They provide a shorthand for a combinatorial expansion of the production into many separate cases.

      +
    • +

      If the same meta variable or non-terminal symbol appears multiple times in a production (in the syntax or in an attribute), then all those occurrences must have the same instantiation. +(This is a shorthand for a side condition requiring multiple different variables to be equal.)

      +
    +
    +

    Note

    +

    For example, the binary grammar for number types is given as follows:

    +
    +

    Consequently, the byte encodes the type , encodes the type , and so forth. +No other byte value is allowed as the encoding of a number type.

    +

    The binary grammar for limits is defined as follows:

    +
    +

    That is, a limits pair is encoded as either the byte followed by the encoding of a value, +or the byte followed by two such encodings. +The variables and name the attributes of the respective nonterminals, which in this case are the actual unsigned integers those decode into. +The attribute of the complete production then is the abstract syntax for the limit, expressed in terms of the former values.

    +
    +
    +
    + +

    5.1.2. Auxiliary Notation

    +

    When dealing with binary encodings the following notation is also used:

    +
      +
    • +

      denotes the empty byte sequence.

      +
    • +

      is the length of the byte sequence generated from the production in a derivation.

      +
    +
    +
    + +

    5.1.3. Vectors

    +

    Vectors are encoded with their length followed by the encoding of their element sequence.

    +
    +
    +
    + +
    + +

    5.2. Values

    +
    + +

    5.2.1. Bytes

    +

    Bytes encode themselves.

    +
    +
    +
    + +

    5.2.2. Integers

    +

    All integers are encoded using the LEB128 variable-length integer encoding, in either unsigned or signed variant.

    +

    Unsigned integers are encoded in unsigned LEB128 format. +As an additional constraint, the total number of bytes encoding a value of type must not exceed bytes.

    +
    +

    Signed integers are encoded in signed LEB128 format, which uses a two’s complement representation. +As an additional constraint, the total number of bytes encoding a value of type must not exceed bytes.

    +
    +

    Uninterpreted integers are encoded as signed integers.

    +
    +
    +

    Note

    +

    The side conditions in the productions for non-terminal bytes of the and encodings restrict the encoding’s length. +However, “trailing zeros” are still allowed within these bounds. +For example, and are both well-formed encodings for the value as a . +Similarly, either of and and are well-formed encodings of the value as a .

    +

    The side conditions on the value of terminal bytes further enforce that +any unused bits in these bytes must be for positive values and for negative ones. +For example, is malformed as a encoding. +Similarly, both and are malformed as encodings.

    +
    +
    +
    + +

    5.2.3. Floating-Point

    +

    Floating-point values are encoded directly by their [IEEE-754-2019] (Section 3.4) bit pattern in little endian byte order:

    +
    +
    +
    + +

    5.2.4. Names

    +

    Names are encoded as a vector of bytes containing the [UNICODE] (Section 3.9) UTF-8 encoding of the name’s character sequence.

    +
    +

    The auxiliary function expressing this encoding is defined as follows:

    +
    +
    +

    Note

    +

    Unlike in some other formats, name strings are not 0-terminated.

    +
    +
    +
    + +
    + +

    5.3. Types

    +
    +

    Note

    +

    In some places, possible types include both type constructors or types denoted by type indices. +Thus, the binary format for type constructors corresponds to the encodings of small negative values, such that they can unambiguously occur in the same place as (positive) type indices.

    +
    +
    + +

    5.3.1. Number Types

    +

    Number types are encoded by a single byte.

    +
    +
    +
    + +

    5.3.2. Vector Types

    +

    Vector types are also encoded by a single byte.

    +
    +
    +
    + +

    5.3.3. Reference Types

    +

    Reference types are also encoded by a single byte.

    +
    +
    +
    + +

    5.3.4. Value Types

    +

    Value types are encoded with their respective encoding as a number type, vector type, or reference type.

    +
    +
    +

    Note

    +

    Value types can occur in contexts where type indices are also allowed, such as in the case of block types. +Thus, the binary format for types corresponds to the signed LEB128 encoding of small negative values, so that they can coexist with (positive) type indices in the future.

    +
    +
    +
    + +

    5.3.5. Result Types

    +

    Result types are encoded by the respective vectors of value types `.

    +
    +
    +
    + +

    5.3.6. Function Types

    +

    Function types are encoded by the byte followed by the respective vectors of parameter and result types.

    +
    +
    +
    + +

    5.3.7. Limits

    +

    Limits are encoded with a preceding flag indicating whether a maximum is present.

    +
    +
    +
    + +

    5.3.8. Memory Types

    +

    Memory types are encoded with their limits.

    +
    +
    +
    + +

    5.3.9. Table Types

    +

    Table types are encoded with their limits and the encoding of their element reference type.

    +
    +
    +
    + +

    5.3.10. Global Types

    +

    Global types are encoded by their value type and a flag for their mutability.

    +
    +
    +
    + +
    + +

    5.4. Instructions

    +

    Instructions are encoded by opcodes. +Each opcode is represented by a single byte, +and is followed by the instruction’s immediate arguments, where present. +The only exception are structured control instructions, which consist of several opcodes bracketing their nested instruction sequences.

    +
    +

    Note

    +

    Gaps in the byte code ranges for encoding instructions are reserved for future extensions.

    +
    +
    + +

    5.4.1. Control Instructions

    +

    Control instructions have varying encodings. For structured instructions, the instruction sequences forming nested blocks are terminated with explicit opcodes for and .

    +

    Block types are encoded in special compressed form, by either the byte indicating the empty type, as a single value type, or as a type index encoded as a positive signed integer.

    +
    +
    +

    Note

    +

    The opcode in the encoding of an instruction can be omitted if the following instruction sequence is empty.

    +

    Unlike any other occurrence, the type index in a block type is encoded as a positive signed integer, so that its signed LEB128 bit pattern cannot collide with the encoding of value types or the special code , which correspond to the LEB128 encoding of negative integers. +To avoid any loss in the range of allowed indices, it is treated as a 33 bit signed integer.

    +
    +
    +
    + +

    5.4.2. Reference Instructions

    +

    Reference instructions are represented by single byte codes.

    +
    +
    +
    + +

    5.4.3. Parametric Instructions

    +

    Parametric instructions are represented by single byte codes, possibly followed by a type annotation.

    +
    +
    +
    + +

    5.4.4. Variable Instructions

    +

    Variable instructions are represented by byte codes followed by the encoding of the respective index.

    +
    +
    +
    + +

    5.4.5. Table Instructions

    +

    Table instructions are represented either by a single byte or a one byte prefix followed by a variable-length unsigned integer.

    +
    +
    +
    + +

    5.4.6. Memory Instructions

    +

    Each variant of memory instruction is encoded with a different byte code. Loads and stores are followed by the encoding of their immediate.

    +
    +
    +

    Note

    +

    In future versions of WebAssembly, the additional zero bytes occurring in the encoding of the , , , and instructions may be used to index additional memories.

    +
    +
    +
    + +

    5.4.7. Numeric Instructions

    +

    All variants of numeric instructions are represented by separate byte codes.

    +

    The instructions are followed by the respective literal.

    +
    +

    All other numeric instructions are plain opcodes without any immediates.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    The saturating truncation instructions all have a one byte prefix, +whereas the actual opcode is encoded by a variable-length unsigned integer.

    +
    +
    +
    + +

    5.4.8. Vector Instructions

    +

    All variants of vector instructions are represented by separate byte codes. +They all have a one byte prefix, whereas the actual opcode is encoded by a variable-length unsigned integer.

    +

    Vector loads and stores are followed by the encoding of their immediate.

    +
    +

    The instruction is followed by 16 immediate bytes, which are converted into a in byte order:

    +
    +

    The instruction is also followed by the encoding of 16 immediates.

    +
    +

    and instructions are followed by the encoding of a immediate.

    +
    +

    All other vector instructions are plain opcodes without any immediates.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +

    5.4.9. Expressions

    +

    Expressions are encoded by their instruction sequence terminated with an explicit opcode for .

    +
    +
    +
    + +
    +

    5.5. Modules

    +

    The binary encoding of modules is organized into sections. +Most sections correspond to one component of a module record, +except that function definitions are split into two sections, separating their type declarations in the function section from their bodies in the code section.

    +
    +

    Note

    +

    This separation enables parallel and streaming compilation of the functions in a module.

    +
    +
    + +

    5.5.1. Indices

    +

    All indices are encoded with their respective value.

    +
    +
    +
    + +

    5.5.2. Sections

    +

    Each section consists of

    +
      +
    • +

      a one-byte section id,

      +
    • +

      the size of the contents, in bytes,

      +
    • +

      the actual contents, whose structure is depended on the section id.

      +
    +

    Every section is optional; an omitted section is equivalent to the section being present with empty contents.

    +

    The following parameterized grammar rule defines the generic structure of a section with id and contents described by the grammar .

    +
    +

    For most sections, the contents encodes a vector. +In these cases, the empty result is interpreted as the empty vector.

    +
    +

    Note

    +

    Other than for unknown custom sections, +the is not required for decoding, but can be used to skip sections when navigating through a binary. +The module is malformed if the size does not match the length of the binary contents .

    +
    +

    The following section ids are used:

    + + + + + + + + + + + + + + + + + + + + +
    +

    Id

    +
    +

    Section

    +
    +

    0

    +
    +

    custom section

    +
    +

    1

    +
    +

    type section

    +
    +

    2

    +
    +

    import section

    +
    +

    3

    +
    +

    function section

    +
    +

    4

    +
    +

    table section

    +
    +

    5

    +
    +

    memory section

    +
    +

    6

    +
    +

    global section

    +
    +

    7

    +
    +

    export section

    +
    +

    8

    +
    +

    start section

    +
    +

    9

    +
    +

    element section

    +
    +

    10

    +
    +

    code section

    +
    +

    11

    +
    +

    data section

    +
    +

    12

    +
    +

    data count section

    +
    +
    +
    + +

    5.5.3. Custom Section

    +

    Custom sections have the id 0. +They are intended to be used for debugging information or third-party extensions, and are ignored by the WebAssembly semantics. +Their contents consist of a name further identifying the custom section, followed by an uninterpreted sequence of bytes for custom use.

    +
    +
    +

    Note

    +

    If an implementation interprets the data of a custom section, then errors in that data, or the placement of the section, must not invalidate the module.

    +
    +
    +
    + +

    5.5.4. Type Section

    +

    The type section has the id 1. +It decodes into a vector of function types that represent the component of a module.

    +
    +
    +
    + +

    5.5.5. Import Section

    +

    The import section has the id 2. +It decodes into a vector of imports that represent the component of a module.

    +
    +
    +
    + +

    5.5.6. Function Section

    +

    The function section has the id 3. +It decodes into a vector of type indices that represent the fields of the functions in the component of a module. +The and fields of the respective functions are encoded separately in the code section.

    +
    +
    +
    + +

    5.5.7. Table Section

    +

    The table section has the id 4. +It decodes into a vector of tables that represent the component of a module.

    +
    +
    +
    + +

    5.5.8. Memory Section

    +

    The memory section has the id 5. +It decodes into a vector of memories that represent the component of a module.

    +
    +
    +
    + +

    5.5.9. Global Section

    +

    The global section has the id 6. +It decodes into a vector of globals that represent the component of a module.

    +
    +
    +
    + +

    5.5.10. Export Section

    +

    The export section has the id 7. +It decodes into a vector of exports that represent the component of a module.

    +
    +
    +
    + +

    5.5.11. Start Section

    +

    The start section has the id 8. +It decodes into an optional start function that represents the component of a module.

    +
    +
    +
    + +

    5.5.12. Element Section

    +

    The element section has the id 9. +It decodes into a vector of element segments that represent the component of a module.

    +
    +
    +

    Note

    +

    The initial byte can be interpreted as a bitfield. +Bit 0 indicates a passive or declarative segment, +bit 1 indicates the presence of an explicit table index for an active segment and otherwise distinguishes passive from declarative segments, +bit 2 indicates the use of element type and element expressions instead of element kind and element indices.

    +

    Additional element kinds may be added in future versions of WebAssembly.

    +
    +
    +
    + +

    5.5.13. Code Section

    +

    The code section has the id 10. +It decodes into a vector of code entries that are pairs of value type vectors and expressions. +They represent the and field of the functions in the component of a module. +The fields of the respective functions are encoded separately in the function section.

    +

    The encoding of each code entry consists of

    +
      +
    • +

      the size of the function code in bytes,

      +
    • +

      the actual function code, which in turn consists of

      +
        +
      • +

        the declaration of locals,

        +
      • +

        the function body as an expression.

        +
      +
    +

    Local declarations are compressed into a vector whose entries consist of

    + +

    denoting count locals of the same value type.

    +
    +

    Here, ranges over pairs . +The meta function concatenates all sequences in . +Any code for which the length of the resulting sequence is out of bounds of the maximum size of a vector is malformed.

    +
    +

    Note

    +

    Like with sections, the code is not needed for decoding, but can be used to skip functions when navigating through a binary. +The module is malformed if a size does not match the length of the respective function code.

    +
    +
    +
    + +

    5.5.14. Data Section

    +

    The data section has the id 11. +It decodes into a vector of data segments that represent the component of a module.

    +
    +
    +

    Note

    +

    The initial byte can be interpreted as a bitfield. +Bit 0 indicates a passive segment, +bit 1 indicates the presence of an explicit memory index for an active segment.

    +

    In the current version of WebAssembly, at most one memory may be defined or +imported in a single module, so all valid active data +segments have a value of .

    +
    +
    +
    + +

    5.5.15. Data Count Section

    +

    The data count section has the id 12. +It decodes into an optional u32 that represents the number of data segments in the data section. If this count does not match the length of the data segment vector, the module is malformed.

    +
    +
    +

    Note

    +

    The data count section is used to simplify single-pass validation. Since the +data section occurs after the code section, the and instructions would not be able to check whether the data +segment index is valid until the data section is read. The data count section +occurs before the code section, so a single-pass validator can use this count +instead of deferring validation.

    +
    +
    +
    + +

    5.5.16. Modules

    +

    The encoding of a module starts with a preamble containing a 4-byte magic number (the string ) and a version field. +The current version of the WebAssembly binary format is 1.

    +

    The preamble is followed by a sequence of sections. Custom sections may be inserted at any place in this sequence, +while other sections must occur at most once and in the prescribed order. +All sections can be empty.

    +

    The lengths of vectors produced by the (possibly empty) function and code section must match up.

    +

    Similarly, the optional data count must match the length of the data segment vector. +Furthermore, it must be present if any occurs in the code section.

    + +

    where for each in ,

    +
    +
    +

    Note

    +

    The version of the WebAssembly binary format may increase in the future +if backward-incompatible changes have to be made to the format. +However, such changes are expected to occur very infrequently, if ever. +The binary format is intended to be forward-compatible, +such that future extensions can be made without incrementing its version.

    +
    +
    +
    +
    +
    + +
    + +

    6. Text Format

    +
    + +
    + +

    6.1. Conventions

    +

    The textual format for WebAssembly modules is a rendering of their abstract syntax into S-expressions.

    +

    Like the binary format, the text format is defined by an attribute grammar. +A text string is a well-formed description of a module if and only if it is generated by the grammar. +Each production of this grammar has at most one synthesized attribute: the abstract syntax that the respective character sequence expresses. +Thus, the attribute grammar implicitly defines a parsing function. +Some productions also take a context as an inherited attribute +that records bound identifiers.

    +

    Except for a few exceptions, the core of the text grammar closely mirrors the grammar of the abstract syntax. +However, it also defines a number of abbreviations that are “syntactic sugar” over the core syntax.

    +

    The recommended extension for files containing WebAssembly modules in text format is “”. +Files with this extension are assumed to be encoded in UTF-8, as per [UNICODE] (Section 2.5).

    +
    + +

    6.1.1. Grammar

    +

    The following conventions are adopted in defining grammar rules of the text format. +They mirror the conventions used for abstract syntax and for the binary format. +In order to distinguish symbols of the textual syntax from symbols of the abstract syntax, font is adopted for the former.

    +
      +
    • +

      Terminal symbols are either literal strings of characters enclosed in quotes +or expressed as [UNICODE] scalar values: , . +(All characters written literally are unambiguously drawn from the 7-bit ASCII subset of Unicode.)

      +
    • +

      Nonterminal symbols are written in typewriter font: .

      +
    • +

      is a sequence of iterations of .

      +
    • +

      is a possibly empty sequence of iterations of . +(This is a shorthand for used where is not relevant.)

      +
    • +

      is a sequence of one or more iterations of . +(This is a shorthand for where .)

      +
    • +

      is an optional occurrence of . +(This is a shorthand for where .)

      +
    • +

      denotes the same language as the nonterminal , but also binds the variable to the attribute synthesized for .

      +
    • +

      Productions are written , where each is the attribute that is synthesized for in the given case, usually from attribute variables bound in .

      +
    • +

      Some productions are augmented by side conditions in parentheses, which restrict the applicability of the production. They provide a shorthand for a combinatorial expansion of the production into many separate cases.

      +
    • +

      If the same meta variable or non-terminal symbol appears multiple times in a production (in the syntax or in an attribute), then all those occurrences must have the same instantiation.

      +
    +
      +
    • +

      A distinction is made between lexical and syntactic productions. For the latter, arbitrary white space is allowed in any place where the grammar contains spaces. The productions defining lexical syntax and the syntax of values are considered lexical, all others are syntactic.

      +
    +
    +

    Note

    +

    For example, the textual grammar for number types is given as follows:

    +
    +

    The textual grammar for limits is defined as follows:

    +
    +

    The variables and name the attributes of the respective nonterminals, which in this case are the actual unsigned integers those parse into. +The attribute of the complete production then is the abstract syntax for the limit, expressed in terms of the former values.

    +
    +
    +
    + +

    6.1.2. Abbreviations

    +

    In addition to the core grammar, which corresponds directly to the abstract syntax, the textual syntax also defines a number of abbreviations that can be used for convenience and readability.

    +

    Abbreviations are defined by rewrite rules specifying their expansion into the core syntax:

    +
    +

    These expansions are assumed to be applied, recursively and in order of appearance, before applying the core grammar rules to construct the abstract syntax.

    +
    +
    + +

    6.1.3. Contexts

    +

    The text format allows the use of symbolic identifiers in place of indices. +To resolve these identifiers into concrete indices, +some grammar production are indexed by an identifier context as a synthesized attribute that records the declared identifiers in each index space. +In addition, the context records the types defined in the module, so that parameter indices can be computed for functions.

    +

    It is convenient to define identifier contexts as records with abstract syntax as follows:

    +
    +

    For each index space, such a context contains the list of identifiers assigned to the defined indices. +Unnamed indices are associated with empty () entries in these lists.

    +

    An identifier context is well-formed if no index space contains duplicate identifiers.

    +
    +
    6.1.3.1. Conventions
    +

    To avoid unnecessary clutter, empty components are omitted when writing out identifier contexts. +For example, the record is shorthand for an identifier context whose components are all empty.

    +
    +
    +
    + +

    6.1.4. Vectors

    +

    Vectors are written as plain sequences, but with a restriction on the length of these sequence.

    +
    +
    +
    + +
    + +

    6.2. Lexical Format

    +
    + +

    6.2.1. Characters

    +

    The text format assigns meaning to source text, which consists of a sequence of characters. +Characters are assumed to be represented as valid [UNICODE] (Section 2.4) scalar values.

    +
    +
    +

    Note

    +

    While source text may contain any Unicode character in comments or string literals, +the rest of the grammar is formed exclusively from the characters supported by the 7-bit ASCII subset of Unicode.

    +
    +
    +
    + +

    6.2.2. Tokens

    +

    The character stream in the source text is divided, from left to right, into a sequence of tokens, as defined by the following grammar.

    +
    +

    Tokens are formed from the input character stream according to the longest match rule. +That is, the next token always consists of the longest possible sequence of characters that is recognized by the above lexical grammar. +Tokens can be separated by white space, +but except for strings, they cannot themselves contain whitespace.

    +

    The set of keyword tokens is defined implicitly, by all occurrences of a terminal symbol in literal form, such as , in a syntactic production of this chapter.

    +

    Any token that does not fall into any of the other categories is considered reserved, and cannot occur in source text.

    +
    +

    Note

    +

    The effect of defining the set of reserved tokens is that all tokens must be separated by either parentheses or white space. +For example, is a single reserved token. +Consequently, it is not recognized as two separate tokens and , but instead disallowed. +This property of tokenization is not affected by the fact that the definition of reserved tokens overlaps with other token classes.

    +
    +
    +
    + +

    6.2.3. White Space

    +

    White space is any sequence of literal space characters, formatting characters, or comments. +The allowed formatting characters correspond to a subset of the ASCII format effectors, namely, horizontal tabulation (), line feed (), and carriage return ().

    +
    +

    The only relevance of white space is to separate tokens. It is otherwise ignored.

    +
    +
    + +

    6.2.4. Comments

    +

    A comment can either be a line comment, started with a double semicolon and extending to the end of the line, +or a block comment, enclosed in delimiters . +Block comments can be nested.

    +
    +

    Here, the pseudo token indicates the end of the input. +The look-ahead restrictions on the productions for disambiguate the grammar such that only well-bracketed uses of block comment delimiters are allowed.

    +
    +

    Note

    +

    Any formatting and control characters are allowed inside comments.

    +
    +
    +
    + +
    + +

    6.3. Values

    +

    The grammar productions in this section define lexical syntax, +hence no white space is allowed.

    +
    + +

    6.3.1. Integers

    +

    All integers can be written in either decimal or hexadecimal notation. +In both cases, digits can optionally be separated by underscores.

    +
    +

    The allowed syntax for integer literals depends on size and signedness. +Moreover, their value must lie within the range of the respective type.

    +
    +

    Uninterpreted integers can be written as either signed or unsigned, and are normalized to unsigned in the abstract syntax.

    +
    +
    +
    + +

    6.3.2. Floating-Point

    +

    Floating-point values can be represented in either decimal or hexadecimal notation.

    +
    +

    The value of a literal must not lie outside the representable range of the corresponding [IEEE-754-2019] type +(that is, a numeric value must not overflow to ), +but it may be rounded to the nearest representable value.

    +
    +

    Note

    +

    Rounding can be prevented by using hexadecimal notation with no more significant bits than supported by the required type.

    +
    +

    Floating-point values may also be written as constants for infinity or canonical NaN (not a number). +Furthermore, arbitrary NaN values may be expressed by providing an explicit payload value.

    +
    +
    +
    + +

    6.3.3. Strings

    +

    Strings denote sequences of bytes that can represent both textual and binary data. +They are enclosed in quotation marks +and may contain any character other than ASCII control characters, quotation marks (), or backslash (), +except when expressed with an escape sequence.

    +
    +

    Each character in a string literal represents the byte sequence corresponding to its UTF-8 [UNICODE] (Section 2.5) encoding, +except for hexadecimal escape sequences , which represent raw bytes of the respective value.

    +
    +
    +
    + +

    6.3.4. Names

    +

    Names are strings denoting a literal character sequence. +A name string must form a valid UTF-8 encoding as defined by [UNICODE] (Section 2.5) and is interpreted as a string of Unicode scalar values.

    +
    +
    +

    Note

    +

    Presuming the source text is itself encoded correctly, +strings that do not contain any uses of hexadecimal byte escapes are always valid names.

    +
    +
    +
    + +

    6.3.5. Identifiers

    +

    Indices can be given in both numeric and symbolic form. +Symbolic identifiers that stand in lieu of indices start with , followed by any sequence of printable ASCII characters that does not contain a space, quotation mark, comma, semicolon, or bracket.

    +
    +
    + +
    6.3.5.1. Conventions
    +

    The expansion rules of some abbreviations require insertion of a fresh identifier. +That may be any syntactically valid identifier that does not already occur in the given source text.

    +
    +
    +
    + +
    + +

    6.4. Types

    +
    + +

    6.4.1. Number Types

    +
    +
    +
    + +

    6.4.2. Vector Types

    +
    +
    +
    + +

    6.4.3. Reference Types

    +
    +
    +
    + +

    6.4.4. Value Types

    +
    +
    +
    + +

    6.4.5. Function Types

    +
    +
    +

    Note

    +

    The optional identifier names for parameters in a function type only have documentation purpose. +They cannot be referenced from anywhere.

    +
    +
    +
    6.4.5.1. Abbreviations
    +

    Multiple anonymous parameters or results may be combined into a single declaration:

    +
    +
    +
    +
    + +

    6.4.6. Limits

    +
    +
    +
    + +

    6.4.7. Memory Types

    +
    +
    +
    + +

    6.4.8. Table Types

    +
    +
    +
    + +

    6.4.9. Global Types

    +
    +
    +
    + +
    + +

    6.5. Instructions

    +

    Instructions are syntactically distinguished into plain and structured instructions.

    +
    +

    In addition, as a syntactic abbreviation, instructions can be written as S-expressions in folded form, to group them visually.

    +
    + +

    6.5.1. Labels

    +

    Structured control instructions can be annotated with a symbolic label identifier. +They are the only symbolic identifiers that can be bound locally in an instruction sequence. +The following grammar handles the corresponding update to the identifier context by composing the context with an additional label entry.

    +
    +
    +

    Note

    +

    The new label entry is inserted at the beginning of the label list in the identifier context. +This effectively shifts all existing labels up by one, +mirroring the fact that control instructions are indexed relatively not absolutely.

    +
    +
    +
    + +

    6.5.2. Control Instructions

    +

    Structured control instructions can bind an optional symbolic label identifier. +The same label identifier may optionally be repeated after the corresponding and pseudo instructions, to indicate the matching delimiters.

    +

    Their block type is given as a type use, analogous to the type of functions. +However, the special case of a type use that is syntactically empty or consists of only a single result is not regarded as an abbreviation for an inline function type, but is parsed directly into an optional value type.

    +
    +
    +

    Note

    +

    The side condition stating that the identifier context must only contain unnamed entries in the rule for block types enforces that no identifier can be bound in any declaration for a block type.

    +
    +

    All other control instruction are represented verbatim.

    +
    +
    +

    Note

    +

    The side condition stating that the identifier context must only contain unnamed entries in the rule for enforces that no identifier can be bound in any declaration appearing in the type annotation.

    +
    +
    +
    6.5.2.1. Abbreviations
    +

    The keyword of an instruction can be omitted if the following instruction sequence is empty.

    +
    +

    Also, for backwards compatibility, the table index to can be omitted, defaulting to .

    +
    +
    +
    +
    + +

    6.5.3. Reference Instructions

    +
    +
    +
    + +

    6.5.4. Parametric Instructions

    +
    +
    +
    + +

    6.5.5. Variable Instructions

    +
    +
    +
    + +

    6.5.6. Table Instructions

    +
    +
    +
    6.5.6.1. Abbreviations
    +

    For backwards compatibility, all may be omitted from table instructions, defaulting to .

    +
    +
    +
    +
    + +

    6.5.7. Memory Instructions

    +

    The offset and alignment immediates to memory instructions are optional. +The offset defaults to , the alignment to the storage size of the respective memory access, which is its natural alignment. +Lexically, an or phrase is considered a single keyword token, so no white space is allowed around the .

    +
    +
    +
    + +

    6.5.8. Numeric Instructions

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +

    6.5.9. Vector Instructions

    +

    Vector memory instructions have optional offset and alignment immediates, like the memory instructions.

    +
    +

    Vector constant instructions have a mandatory shape descriptor, which determines how the following values are parsed.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +

    6.5.10. Folded Instructions

    +

    Instructions can be written as S-expressions by grouping them into folded form. In that notation, an instruction is wrapped in parentheses and optionally includes nested folded instructions to indicate its operands.

    +

    In the case of block instructions, the folded form omits the delimiter. +For instructions, both branches have to be wrapped into nested S-expressions, headed by the keywords and .

    +

    The set of all phrases defined by the following abbreviations recursively forms the auxiliary syntactic class . +Such a folded instruction can appear anywhere a regular instruction can.

    +
    +
    +

    Note

    +

    For example, the instruction sequence

    +
    +

    can be folded into

    +
    +

    Folded instructions are solely syntactic sugar, +no additional syntactic or type-based checking is implied.

    +
    +
    +
    + +

    6.5.11. Expressions

    +

    Expressions are written as instruction sequences. +No explicit keyword is included, since they only occur in bracketed positions.

    +
    +
    +
    + +
    +

    6.6. Modules

    +
    + +

    6.6.1. Indices

    +

    Indices can be given either in raw numeric form or as symbolic identifiers when bound by a respective construct. +Such identifiers are looked up in the suitable space of the identifier context .

    +
    +
    +
    + +

    6.6.2. Types

    +

    Type definitions can bind a symbolic type identifier.

    +
    +
    +
    + +

    6.6.3. Type Uses

    +

    A type use is a reference to a type definition. +It may optionally be augmented by explicit inlined parameter and result declarations. +That allows binding symbolic identifiers to name the local indices of parameters. +If inline declarations are given, then their types must match the referenced function type.

    +
    +

    The synthesized attribute of a is a pair consisting of both the used type index and the updated identifier context including possible parameter identifiers. +The following auxiliary function extracts optional identifiers from parameters:

    +
    +
    +

    Note

    +

    Both productions overlap for the case that the function type is . +However, in that case, they also produce the same results, so that the choice is immaterial.

    +

    The well-formedness condition on ensures that the parameters do not contain duplicate identifier.

    +
    +
    + +
    6.6.3.1. Abbreviations
    +

    A may also be replaced entirely by inline parameter and result declarations. +In that case, a type index is automatically inserted:

    +
    +

    where is the smallest existing type index whose definition in the current module is the function type . +If no such index exists, then a new type definition of the form

    +
    +

    is inserted at the end of the module.

    +

    Abbreviations are expanded in the order they appear, such that previously inserted type definitions are reused by consecutive expansions.

    +
    +
    +
    + +

    6.6.4. Imports

    +

    The descriptors in imports can bind a symbolic function, table, memory, or global identifier.

    +
    +
    +
    6.6.4.1. Abbreviations
    +

    As an abbreviation, imports may also be specified inline with function, table, memory, or global definitions; see the respective sections.

    +
    +
    +
    + +

    6.6.5. Functions

    +

    Function definitions can bind a symbolic function identifier, and local identifiers for its parameters and locals.

    +
    +

    The definition of the local identifier context uses the following auxiliary function to extract optional identifiers from locals:

    +
    +
    +

    Note

    +

    The well-formedness condition on ensures that parameters and locals do not contain duplicate identifiers.

    +
    + +
    + +
    6.6.5.1. Abbreviations
    +

    Multiple anonymous locals may be combined into a single declaration:

    +
    +

    Functions can be defined as imports or exports inline:

    +
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “” contains additional export clauses. +Consequently, a function declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    + +

    6.6.6. Tables

    +

    Table definitions can bind a symbolic table identifier.

    +
    + +
    + +
    6.6.6.1. Abbreviations
    +

    An element segment can be given inline with a table definition, in which case its offset is and the limits of the table type are inferred from the length of the given segment:

    +
    +
    +

    Tables can be defined as imports or exports inline:

    +
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “” contains additional export clauses. +Consequently, a table declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    + +

    6.6.7. Memories

    +

    Memory definitions can bind a symbolic memory identifier.

    +
    + +
    + +
    6.6.7.1. Abbreviations
    +

    A data segment can be given inline with a memory definition, in which case its offset is the limits of the memory type are inferred from the length of the data, rounded up to page size:

    +
    +

    Memories can be defined as imports or exports inline:

    +
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “” contains additional export clauses. +Consequently, a memory declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    + +

    6.6.8. Globals

    +

    Global definitions can bind a symbolic global identifier.

    +
    + +
    + +
    6.6.8.1. Abbreviations
    +

    Globals can be defined as imports or exports inline:

    +
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “” contains additional export clauses. +Consequently, a global declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    + +

    6.6.9. Exports

    +

    The syntax for exports mirrors their abstract syntax directly.

    +
    +
    +
    6.6.9.1. Abbreviations
    +

    As an abbreviation, exports may also be specified inline with function, table, memory, or global definitions; see the respective sections.

    +
    +
    +
    + +

    6.6.10. Start Function

    +

    A start function is defined in terms of its index.

    +
    +
    +

    Note

    +

    At most one start function may occur in a module, +which is ensured by a suitable side condition on the grammar.

    +
    +
    +
    + +

    6.6.11. Element Segments

    +

    Element segments allow for an optional table index to identify the table to initialize.

    +
    +
    +
    6.6.11.1. Abbreviations
    +

    As an abbreviation, a single instruction may occur in place of the offset of an active element segment or as an element expression:

    +
    +

    Also, the element list may be written as just a sequence of function indices:

    +
    +

    A table use can be omitted, defaulting to . +Furthermore, for backwards compatibility with earlier versions of WebAssembly, if the table use is omitted, the keyword can be omitted as well.

    +
    +

    As another abbreviation, element segments may also be specified inline with table definitions; see the respective section.

    +
    +
    +
    + +

    6.6.12. Data Segments

    +

    Data segments allow for an optional memory index to identify the memory to initialize. +The data is written as a string, which may be split up into a possibly empty sequence of individual string literals.

    +
    +
    +

    Note

    +

    In the current version of WebAssembly, the only valid memory index is 0 +or a symbolic memory identifier resolving to the same value.

    +
    +
    +
    6.6.12.1. Abbreviations
    +

    As an abbreviation, a single instruction may occur in place of the offset of an active data segment:

    +
    +

    Also, a memory use can be omitted, defaulting to .

    +
    +

    As another abbreviation, data segments may also be specified inline with memory definitions; see the respective section.

    +
    +
    +
    + +

    6.6.13. Modules

    +

    A module consists of a sequence of fields that can occur in any order. +All definitions and their respective bound identifiers scope over the entire module, including the text preceding them.

    +

    A module may optionally bind an identifier that names the module. +The name serves a documentary role only.

    +
    +

    Note

    +

    Tools may include the module name in the name section of the binary format.

    +
    +
    +

    The following restrictions are imposed on the composition of modules: is defined if and only if

    + +
    +

    Note

    +

    The first condition ensures that there is at most one start function. +The second condition enforces that all imports must occur before any regular definition of a function, table, memory, or global, +thereby maintaining the ordering of the respective index spaces.

    +

    The well-formedness condition on in the grammar for ensures that no namespace contains duplicate identifiers.

    +
    +

    The definition of the initial identifier context uses the following auxiliary definition which maps each relevant definition to a singular context with one (possibly empty) identifier:

    +
    +
    +
    6.6.13.1. Abbreviations
    +

    In a source file, the toplevel surrounding the module body may be omitted.

    +
    +
    +
    +
    +
    +
    + +
    + +

    A Appendix

    +
    + +
    + +

    A.1 Embedding

    +

    A WebAssembly implementation will typically be embedded into a host environment. +An embedder implements the connection between such a host environment and the WebAssembly semantics as defined in the main body of this specification. +An embedder is expected to interact with the semantics in well-defined ways.

    +

    This section defines a suitable interface to the WebAssembly semantics in the form of entry points through which an embedder can access it. +The interface is intended to be complete, in the sense that an embedder does not need to reference other functional parts of the WebAssembly specification directly.

    +
    +

    Note

    +

    On the other hand, an embedder does not need to provide the host environment with access to all functionality defined in this interface. +For example, an implementation may not support parsing of the text format.

    +
    +
    +

    Types

    +

    In the description of the embedder interface, syntactic classes from the abstract syntax and the runtime’s abstract machine are used as names for variables that range over the possible objects from that class. +Hence, these syntactic classes can also be interpreted as types.

    +

    For numeric parameters, notation like is used to specify a symbolic name in addition to the respective value range.

    +
    +
    + +

    Errors

    +

    Failure of an interface operation is indicated by an auxiliary syntactic class:

    +
    +

    In addition to the error conditions specified explicitly in this section, implementations may also return errors when specific implementation limitations are reached.

    +
    +

    Note

    +

    Errors are abstract and unspecific with this definition. +Implementations can refine it to carry suitable classifications and diagnostic messages.

    +
    +
    +
    +

    Pre- and Post-Conditions

    +

    Some operations state pre-conditions about their arguments or post-conditions about their results. +It is the embedder’s responsibility to meet the pre-conditions. +If it does, the post conditions are guaranteed by the semantics.

    +

    In addition to pre- and post-conditions explicitly stated with each operation, the specification adopts the following conventions for runtime objects (, , , addresses):

    +
      +
    • +

      Every runtime object passed as a parameter must be valid per an implicit pre-condition.

      +
    • +

      Every runtime object returned as a result is valid per an implicit post-condition.

      +
    +
    +

    Note

    +

    As long as an embedder treats runtime objects as abstract and only creates and manipulates them through the interface defined here, all implicit pre-conditions are automatically met.

    +
    +
    +
    + +

    Store

    +
    + +
    +
      +
    1. +

      Return the empty store.

      +
    +
    +
    +
    +
    + +

    Modules

    +
    + +
    +
      +
    1. +

      If there exists a derivation for the byte sequence as a according to the binary grammar for modules, yielding a module , then return .

      +
    2. +

      Else, return .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      If there exists a derivation for the source as a according to the text grammar for modules, yielding a module , then return .

      +
    2. +

      Else, return .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      If is valid, then return nothing.

      +
    2. +

      Else, return .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Try instantiating in with external values as imports:

      +
    +
    +
    +
      +
    1. +

      If it succeeds with a module instance , then let be .

      +
    2. +

      Else, let be .

      +
    +
    +
    +
      +
    1. +

      Return the new store paired with .

      +
    +
    +
    +

    Note

    +

    The store may be modified even in case of an error.

    +
    +
    +
    + +
    +
      +
    1. +

      Pre-condition: is valid with external import types and external export types .

      +
    2. +

      Let be the imports .

      +
    3. +

      Assert: the length of equals the length of .

      +
    4. +

      For each in and corresponding in , do:

      +
    +
    +
    +
      +
    1. +

      Let be the triple .

      +
    +
    +
    +
      +
    1. +

      Return the concatenation of all , in index order.

      +
    2. +

      Post-condition: each is valid.

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Pre-condition: is valid with external import types and external export types .

      +
    2. +

      Let be the exports .

      +
    3. +

      Assert: the length of equals the length of .

      +
    4. +

      For each in and corresponding in , do:

      +
    +
    +
    +
      +
    1. +

      Let be the pair .

      +
    +
    +
    +
      +
    1. +

      Return the concatenation of all , in index order.

      +
    2. +

      Post-condition: each is valid.

      +
    +
    +
    +
    +
    + +

    Module Instances

    +
    + +
    +
      +
    1. +

      Assert: due to validity of the module instance , all its export names are different.

      +
    2. +

      If there exists an in such that name equals , then:

      +
        +
      1. +

        Return the external value .

        +
      +
    3. +

      Else, return .

      +
    +
    +
    +
    +
    + +

    Functions

    +
    + +
    +
      +
    1. +

      Pre-condition: is .

      +
    2. +

      Let be the result of allocating a host function in with function type and host function code .

      +
    3. +

      Return the new store paired with .

      +
    +
    +
    +

    Note

    +

    This operation assumes that satisfies the pre- and post-conditions required for a function instance with type .

    +

    Regular (non-host) function instances can only be created indirectly through module instantiation.

    +
    +
    +
    + +
    +
      +
    1. +

      Return .

      +
    2. +

      Post-condition: the returned function type is valid.

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Try invoking the function in with values as arguments:

      +
    +
    +
    +
      +
    1. +

      If it succeeds with values as results, then let be .

      +
    2. +

      Else it has trapped, hence let be .

      +
    +
    +
    +
      +
    1. +

      Return the new store paired with .

      +
    +
    +
    +

    Note

    +

    The store may be modified even in case of an error.

    +
    +
    +
    +
    + +

    Tables

    +
    + +
    +
      +
    1. +

      Pre-condition: is .

      +
    2. +

      Let be the result of allocating a table in with table type and initialization value .

      +
    3. +

      Return the new store paired with .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Return .

      +
    2. +

      Post-condition: the returned table type is .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the table instance .

      +
    2. +

      If is larger than or equal to the length of , then return .

      +
    3. +

      Else, return the reference value .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the table instance .

      +
    2. +

      If is larger than or equal to the length of , then return .

      +
    3. +

      Replace with the reference value .

      +
    4. +

      Return the updated store.

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Return the length of .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Try growing the table instance by elements with initialization value :

      +
        +
      1. +

        If it succeeds, return the updated store.

        +
      2. +

        Else, return .

        +
      +
    +
    +
    +
    +
    + +

    Memories

    +
    + +
    +
      +
    1. +

      Pre-condition: is .

      +
    2. +

      Let be the result of allocating a memory in with memory type .

      +
    3. +

      Return the new store paired with .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Return .

      +
    2. +

      Post-condition: the returned memory type is .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the memory instance .

      +
    2. +

      If is larger than or equal to the length of , then return .

      +
    3. +

      Else, return the byte .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the memory instance .

      +
    2. +

      If is larger than or equal to the length of , then return .

      +
    3. +

      Replace with .

      +
    4. +

      Return the updated store.

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Return the length of divided by the page size.

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Try growing the memory instance by pages:

      +
        +
      1. +

        If it succeeds, return the updated store.

        +
      2. +

        Else, return .

        +
      +
    +
    +
    +
    +
    + +

    Globals

    +
    + +
    +
      +
    1. +

      Pre-condition: is .

      +
    2. +

      Let be the result of allocating a global in with global type and initialization value .

      +
    3. +

      Return the new store paired with .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Return .

      +
    2. +

      Post-condition: the returned global type is .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the global instance .

      +
    2. +

      Return the value .

      +
    +
    +
    +
    + +
    +
      +
    1. +

      Let be the global instance .

      +
    2. +

      Let be the structure of the global type .

      +
    3. +

      If is not , then return .

      +
    4. +

      Replace with the value .

      +
    5. +

      Return the updated store.

      +
    +
    +
    +
    +
    + +
    + +

    A.2 Implementation Limitations

    +

    Implementations typically impose additional restrictions on a number of aspects of a WebAssembly module or execution. +These may stem from:

    +
      +
    • +

      physical resource limits,

      +
    • +

      constraints imposed by the embedder or its environment,

      +
    • +

      limitations of selected implementation strategies.

      +
    +

    This section lists allowed limitations. +Where restrictions take the form of numeric limits, no minimum requirements are given, +nor are the limits assumed to be concrete, fixed numbers. +However, it is expected that all implementations have “reasonably” large limits to enable common applications.

    +
    +

    Note

    +

    A conforming implementation is not allowed to leave out individual features. +However, designated subsets of WebAssembly may be specified in the future.

    +
    +
    +

    Syntactic Limits

    +
    + +
    Structure
    +

    An implementation may impose restrictions on the following dimensions of a module:

    + +

    If the limits of an implementation are exceeded for a given module, +then the implementation may reject the validation, compilation, or instantiation of that module with an embedder-specific error.

    +
    +

    Note

    +

    The last item allows embedders that operate in limited environments without support for [UNICODE] to limit the +names of imports and exports to common subsets like ASCII.

    +
    +
    +
    + +
    Binary Format
    +

    For a module given in binary format, additional limitations may be imposed on the following dimensions:

    +
      +
    • +

      the size of a module

      +
    • +

      the size of any section

      +
    • +

      the size of an individual function’s code

      +
    • +

      the number of sections

      +
    +
    +
    + +
    Text Format
    +

    For a module given in text format, additional limitations may be imposed on the following dimensions:

    + +
    +
    +
    + +

    Validation

    +

    An implementation may defer validation of individual functions until they are first invoked.

    +

    If a function turns out to be invalid, then the invocation, and every consecutive call to the same function, results in a trap.

    +
    +

    Note

    +

    This is to allow implementations to use interpretation or just-in-time compilation for functions. +The function must still be fully validated before execution of its body begins.

    +
    +
    +
    + +

    Execution

    +

    Restrictions on the following dimensions may be imposed during execution of a WebAssembly program:

    + +

    If the runtime limits of an implementation are exceeded during execution of a computation, +then it may terminate that computation and report an embedder-specific error to the invoking code.

    +

    Some of the above limits may already be verified during instantiation, in which case an implementation may report exceedance in the same manner as for syntactic limits.

    +
    +

    Note

    +

    Concrete limits are usually not fixed but may be dependent on specifics, interdependent, vary over time, or depend on other implementation- or embedder-specific situations or events.

    +
    +
    +
    + +
    + +

    A.3 Validation Algorithm

    +

    The specification of WebAssembly validation is purely declarative. +It describes the constraints that must be met by a module or instruction sequence to be valid.

    +

    This section sketches the skeleton of a sound and complete algorithm for effectively validating code, i.e., sequences of instructions. +(Other aspects of validation are straightforward to implement.)

    +

    In fact, the algorithm is expressed over the flat sequence of opcodes as occurring in the binary format, and performs only a single pass over it. +Consequently, it can be integrated directly into a decoder.

    +

    The algorithm is expressed in typed pseudo code whose semantics is intended to be self-explanatory.

    +
    + +

    Data Structures

    +

    Types are representable as an enumeration.

    +
    +
    +
    type val_type = I32 | I64 | F32 | F64 | V128 | Funcref | Externref
    +
    +func is_num(t : val_type | Unknown) : bool =
    +  return t = I32 || t = I64 || t = F32 || t = F64 || t = Unknown
    +
    +func is_vec(t : val_type | Unknown) : bool =
    +  return t = V128 || t = Unknown
    +
    +func is_ref(t : val_type | Unknown) : bool =
    +  return t = Funcref || t = Externref || t = Unknown
    +
    +
    +
    +

    The algorithm uses two separate stacks: the value stack and the control stack. +The former tracks the types of operand values on the stack, +the latter surrounding structured control instructions and their associated blocks.

    +
    +
    +
    type val_stack = stack(val_type | Unknown)
    +
    +type ctrl_stack = stack(ctrl_frame)
    +type ctrl_frame = {
    +  opcode : opcode
    +  start_types : list(val_type)
    +  end_types : list(val_type)
    +  height : nat
    +  unreachable : bool
    +}
    +
    +
    +
    +

    For each value, the value stack records its value type, or Unknown when the type is not known.

    +

    For each entered block, the control stack records a control frame with the originating opcode, the types on the top of the operand stack at the start and end of the block (used to check its result as well as branches), the height of the operand stack at the start of the block (used to check that operands do not underflow the current block), and a flag recording whether the remainder of the block is unreachable (used to handle stack-polymorphic typing after branches).

    +

    For the purpose of presenting the algorithm, the operand and control stacks are simply maintained as global variables:

    +
    +
    +
    var vals : val_stack
    +var ctrls : ctrl_stack
    +
    +
    +
    +

    However, these variables are not manipulated directly by the main checking function, but through a set of auxiliary functions:

    +
    +
    +
    func push_val(type : val_type | Unknown) =
    +  vals.push(type)
    +
    +func pop_val() : val_type | Unknown =
    +  if (vals.size() = ctrls[0].height && ctrls[0].unreachable) return Unknown
    +  error_if(vals.size() = ctrls[0].height)
    +  return vals.pop()
    +
    +func pop_val(expect : val_type | Unknown) : val_type | Unknown =
    +  let actual = pop_val()
    +  error_if(actual =/= expect && actual =/= Unknown && expect =/= Unknown)
    +  return actual
    +
    +func push_vals(types : list(val_type)) = foreach (t in types) push_val(t)
    +func pop_vals(types : list(val_type)) : list(val_type) =
    +  var popped := []
    +  foreach (t in reverse(types)) popped.prepend(pop_val(t))
    +  return popped
    +
    +
    +
    +

    Pushing an operand value simply pushes the respective type to the value stack.

    +

    Popping an operand value checks that the value stack does not underflow the current block and then removes one type. +But first, a special case is handled where the block contains no known values, but has been marked as unreachable. +That can occur after an unconditional branch, when the stack is typed polymorphically. +In that case, an unknown type is returned.

    +

    A second function for popping an operand value takes an expected type, which the actual operand type is checked against. +The types may differ in case one of them is Unknown. +The function returns the actual type popped from the stack.

    +

    Finally, there are accumulative functions for pushing or popping multiple operand types.

    +
    +

    Note

    +

    The notation stack[i] is meant to index the stack from the top, +so that, e.g., ctrls[0] accesses the element pushed last.

    +
    +

    The control stack is likewise manipulated through auxiliary functions:

    +
    +
    +
    func push_ctrl(opcode : opcode, in : list(val_type), out : list(val_type)) =
    +  let frame = ctrl_frame(opcode, in, out, vals.size(), false)
    +  ctrls.push(frame)
    +  push_vals(in)
    +
    +func pop_ctrl() : ctrl_frame =
    +  error_if(ctrls.is_empty())
    +  let frame = ctrls[0]
    +  pop_vals(frame.end_types)
    +  error_if(vals.size() =/= frame.height)
    +  ctrls.pop()
    +  return frame
    +
    +func label_types(frame : ctrl_frame) : list(val_types) =
    +  return (if frame.opcode == loop then frame.start_types else frame.end_types)
    +
    +func unreachable() =
    +  vals.resize(ctrls[0].height)
    +  ctrls[0].unreachable := true
    +
    +
    +
    +

    Pushing a control frame takes the types of the label and result values. +It allocates a new frame record recording them along with the current height of the operand stack and marks the block as reachable.

    +

    Popping a frame first checks that the control stack is not empty. +It then verifies that the operand stack contains the right types of values expected at the end of the exited block and pops them off the operand stack. +Afterwards, it checks that the stack has shrunk back to its initial height.

    +

    The type of the label associated with a control frame is either that of the stack at the start or the end of the frame, determined by the opcode that it originates from.

    +

    Finally, the current frame can be marked as unreachable. +In that case, all existing operand types are purged from the value stack, in order to allow for the stack-polymorphism logic in pop_val to take effect.

    +
    +

    Note

    +

    Even with the unreachable flag set, consecutive operands are still pushed to and popped from the operand stack. +That is necessary to detect invalid examples like . +However, a polymorphic stack cannot underflow, but instead generates Unknown types as needed.

    +
    +
    +
    + +

    Validation of Opcode Sequences

    +

    The following function shows the validation of a number of representative instructions that manipulate the stack. +Other instructions are checked in a similar manner.

    +
    +

    Note

    +

    Various instructions not shown here will additionally require the presence of a validation context for checking uses of indices. +That is an easy addition and therefore omitted from this presentation.

    +
    +
    +
    +
    func validate(opcode) =
    +  switch (opcode)
    +    case (i32.add)
    +      pop_val(I32)
    +      pop_val(I32)
    +      push_val(I32)
    +
    +   case (drop)
    +      pop_val()
    +
    +   case (select)
    +      pop_val(I32)
    +      let t1 = pop_val()
    +      let t2 = pop_val()
    +      error_if(not ((is_num(t1) && is_num(t2)) || (is_vec(t1) && is_vec(t2))))
    +      error_if(t1 =/= t2 && t1 =/= Unknown && t2 =/= Unknown)
    +      push_val(if (t1 = Unknown) t2 else t1)
    +
    +   case (select t)
    +      pop_val(I32)
    +      pop_val(t)
    +      pop_val(t)
    +      push_val(t)
    +
    +   case (unreachable)
    +      unreachable()
    +
    +   case (block t1*->t2*)
    +      pop_vals([t1*])
    +      push_ctrl(block, [t1*], [t2*])
    +
    +   case (loop t1*->t2*)
    +      pop_vals([t1*])
    +      push_ctrl(loop, [t1*], [t2*])
    +
    +   case (if t1*->t2*)
    +      pop_val(I32)
    +      pop_vals([t1*])
    +      push_ctrl(if, [t1*], [t2*])
    +
    +   case (end)
    +      let frame = pop_ctrl()
    +      push_vals(frame.end_types)
    +
    +   case (else)
    +      let frame = pop_ctrl()
    +      error_if(frame.opcode =/= if)
    +      push_ctrl(else, frame.start_types, frame.end_types)
    +
    +   case (br n)
    +      error_if(ctrls.size() < n)
    +      pop_vals(label_types(ctrls[n]))
    +      unreachable()
    +
    +   case (br_if n)
    +      error_if(ctrls.size() < n)
    +      pop_val(I32)
    +      pop_vals(label_types(ctrls[n]))
    +      push_vals(label_types(ctrls[n]))
    +
    +   case (br_table n* m)
    +      pop_val(I32)
    +      error_if(ctrls.size() < m)
    +      let arity = label_types(ctrls[m]).size()
    +      foreach (n in n*)
    +        error_if(ctrls.size() < n)
    +        error_if(label_types(ctrls[n]).size() =/= arity)
    +        push_vals(pop_vals(label_types(ctrls[n])))
    +      pop_vals(label_types(ctrls[m]))
    +      unreachable()
    +
    +
    +
    +
    +

    Note

    +

    It is an invariant under the current WebAssembly instruction set that an operand of Unknown type is never duplicated on the stack. +This would change if the language were extended with stack instructions like dup. +Under such an extension, the above algorithm would need to be refined by replacing the Unknown type with proper type variables to ensure that all uses are consistent.

    +
    +
    +
    + +
    + +

    A.4 Custom Sections

    +

    This appendix defines dedicated custom sections for WebAssembly’s binary format. +Such sections do not contribute to, or otherwise affect, the WebAssembly semantics, and like any custom section they may be ignored by an implementation. +However, they provide useful meta data that implementations can make use of to improve user experience or take compilation hints.

    +

    Currently, only one dedicated custom section is defined, the name section.

    +
    + +

    Name Section

    +

    The name section is a custom section whose name string is itself . +The name section should appear only once in a module, and only after the data section.

    +

    The purpose of this section is to attach printable names to definitions in a module, which e.g. can be used by a debugger or when parts of the module are to be rendered in text form.

    +
    +

    Note

    +

    All names are represented in [UNICODE] encoded in UTF-8. +Names need not be unique.

    +
    +
    + +
    Subsections
    +

    The data of a name section consists of a sequence of subsections. +Each subsection consists of a

    +
      +
    • +

      a one-byte subsection id,

      +
    • +

      the size of the contents, in bytes,

      +
    • +

      the actual contents, whose structure is dependent on the subsection id.

      +
    +
    +

    The following subsection ids are used:

    + + + + + + + + + + +
    +

    Id

    +
    +

    Subsection

    +
    +

    0

    +
    +

    module name

    +
    +

    1

    +
    +

    function names

    +
    +

    2

    +
    +

    local names

    +
    +

    Each subsection may occur at most once, and in order of increasing id.

    +
    +
    + +
    Name Maps
    +

    A name map assigns names to indices in a given index space. +It consists of a vector of index/name pairs in order of increasing index value. +Each index must be unique, but the assigned names need not be.

    +
    +

    An indirect name map assigns names to a two-dimensional index space, where secondary indices are grouped by primary indices. +It consists of a vector of primary index/name map pairs in order of increasing index value, where each name map in turn maps secondary indices to names. +Each primary index must be unique, and likewise each secondary index per individual name map.

    + +
    +
    + +
    Module Names
    +

    The module name subsection has the id 0. +It simply consists of a single name that is assigned to the module itself.

    +
    +
    +
    + +
    Function Names
    +

    The function name subsection has the id 1. +It consists of a name map assigning function names to function indices.

    +
    +
    +
    + +
    Local Names
    +

    The local name subsection has the id 2. +It consists of an indirect name map assigning local names to local indices grouped by function indices.

    + +
    +
    +
    + +
    + +

    A.5 Soundness

    +

    The type system of WebAssembly is sound, implying both type safety and memory safety with respect to the WebAssembly semantics. For example:

    +
      +
    • +

      All types declared and derived during validation are respected at run time; +e.g., every local or global variable will only contain type-correct values, every instruction will only be applied to operands of the expected type, and every function invocation always evaluates to a result of the right type (if it does not trap or diverge).

      +
    • +

      No memory location will be read or written except those explicitly defined by the program, i.e., as a local, a global, an element in a table, or a location within a linear memory.

      +
    • +

      There is no undefined behavior, +i.e., the execution rules cover all possible cases that can occur in a valid program, and the rules are mutually consistent.

      +
    +

    Soundness also is instrumental in ensuring additional properties, most notably, encapsulation of function and module scopes: no locals can be accessed outside their own function and no module components can be accessed outside their own module unless they are explicitly exported or imported.

    +

    The typing rules defining WebAssembly validation only cover the static components of a WebAssembly program. +In order to state and prove soundness precisely, the typing rules must be extended to the dynamic components of the abstract runtime, that is, the store, configurations, and administrative instructions. 1

    +
    + +

    Results

    +

    Results can be classified by result types as follows.

    +
    +
    Results
    +
      +
    • +

      For each value in :

      + +
    • +

      Let be the concatenation of all .

      +
    • +

      Then the result is valid with result type .

      +
    +
    +
    +
    +
    Results
    + +
    +
    +
    +
    + +

    Store Validity

    +

    The following typing rules specify when a runtime store is valid. +A valid store must consist of function, table, memory, global, and module instances that are themselves valid, relative to .

    +

    To that end, each kind of instance is classified by a respective function, table, memory, or global type. +Module instances are classified by module contexts, which are regular contexts repurposed as module types describing the index spaces defined by a module.

    +
    + +
    Store
    + + +
    +
    + +
    Function Instances
    + + +
    +
    + +
    Host Function Instances
    + +
    +
    +

    Note

    +

    This rule states that, if appropriate pre-conditions about store and arguments are satisfied, then executing the host function must satisfy appropriate post-conditions about store and results. +The post-conditions match the ones in the execution rule for invoking host functions.

    +

    Any store under which the function is invoked is assumed to be an extension of the current store. +That way, the function itself is able to make sufficient assumptions about future stores.

    +
    +
    +
    + +
    Table Instances
    + +
    +
    +
    + +
    Memory Instances
    + + +
    +
    + +
    Global Instances
    + +
    +
    +
    + +
    Element Instances
    + +
    +
    +
    + +
    Data Instances
    +
      +
    • +

      The data instance is valid.

      +
    +
    +
    +
    + +
    Export Instances
    + + +
    +
    + +
    Module Instances
    + + +
    +
    +
    + +

    Configuration Validity

    +

    To relate the WebAssembly type system to its execution semantics, the typing rules for instructions must be extended to configurations , +which relates the store to execution threads.

    +

    Configurations and threads are classified by their result type. +In addition to the store , threads are typed under a return type , which controls whether and with which type a instruction is allowed. +This type is absent () except for instruction sequences inside an administrative instruction.

    +

    Finally, frames are classified with frame contexts, which extend the module contexts of a frame’s associated module instance with the locals that the frame contains.

    +
    + +
    Configurations
    + +
    +
    +
    + +
    Threads
    + +
    +
    +
    + +
    Frames
    + +
    +
    +
    +
    + +

    Administrative Instructions

    +

    Typing rules for administrative instructions are specified as follows. +In addition to the context , typing of these instructions is defined under a given store . +To that end, all previous typing judgements are generalized to include the store, as in , by implicitly adding to all rules – is never modified by the pre-existing rules, but it is accessed in the extra rules for administrative instructions given below.

    +
    + +
    +
      +
    • +

      The instruction is valid with type , for any sequences of value types and .

      +
    +
    +
    +
    + +
    +
      +
    • +

      The instruction is valid with type .

      +
    + +
    +
    + +
    + + +
    +
    + +
    + +
    +
    +
    + +
    +
      +
    • +

      The instruction sequence must be valid with some type .

      +
    • +

      Let be the same context as , but with the result type prepended to the vector.

      +
    • +

      Under context , +the instruction sequence must be valid with type .

      +
    • +

      Then the compound instruction is valid with type .

      +
    +
    +
    +
    + +
    +
      +
    • +

      Under the return type , +the thread must be valid with result type .

      +
    • +

      Then the compound instruction is valid with type .

      +
    +
    +
    +
    +
    + +

    Store Extension

    +

    Programs can mutate the store and its contained instances. +Any such modification must respect certain invariants, such as not removing allocated instances or changing immutable definitions. +While these invariants are inherent to the execution semantics of WebAssembly instructions and modules, host functions do not automatically adhere to them. Consequently, the required invariants must be stated as explicit constraints on the invocation of host functions. +Soundness only holds when the embedder ensures these constraints.

    +

    The necessary constraints are codified by the notion of store extension: +a store state extends state , written , when the following rules hold.

    +
    +

    Note

    +

    Extension does not imply that the new store is valid, which is defined separately above.

    +
    +
    + +
    Store
    + +
    +
    +
    + +
    Function Instance
    +
      +
    • +

      A function instance must remain unchanged.

      +
    + +
    +
    + +
    Table Instance
    + +
    +
    +
    + +
    Memory Instance
    + +
    +
    +
    + +
    Global Instance
    + +
    +
    +
    + +
    Element Instance
    +
      +
    • +

      The vector must either remain unchanged or shrink to length .

      +
    +
    +
    +
    + +
    Data Instance
    +
      +
    • +

      The vector must either remain unchanged or shrink to length .

      +
    +
    +
    +
    +
    + +

    Theorems

    +

    Given the definition of valid configurations, +the standard soundness theorems hold. 2

    +

    Theorem (Preservation). If a configuration is valid with result type (i.e., ), +and steps to (i.e., ), +then is a valid configuration with the same result type (i.e., ). +Furthermore, is an extension of (i.e., ).

    +

    A terminal thread is one whose sequence of instructions is a result. +A terminal configuration is a configuration whose thread is terminal.

    +

    Theorem (Progress). If a configuration is valid (i.e., for some result type ), +then either it is terminal, +or it can step to some configuration (i.e., ).

    +

    From Preservation and Progress the soundness of the WebAssembly type system follows directly.

    +

    Corollary (Soundness). If a configuration is valid (i.e., for some result type ), +then it either diverges or takes a finite number of steps to reach a terminal configuration (i.e., ) that is valid with the same result type (i.e., ) +and where is an extension of (i.e., ).

    +

    In other words, every thread in a valid configuration either runs forever, traps, or terminates with a result that has the expected type. +Consequently, given a valid store, no computation defined by instantiation or invocation of a valid module can “crash” or otherwise (mis)behave in ways not covered by the execution semantics given in this specification.

    +
    +
    1 +
    +

    The formalization and theorems are derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    2 +
    +

    A machine-verified version of the formalization and soundness proof is described in the following article: +Conrad Watt. Mechanising and Verifying the WebAssembly Specification. Proceedings of the 7th ACM SIGPLAN Conference on Certified Programs and Proofs (CPP 2018). ACM 2018.

    +
    +
    +
    + +
    + +

    Change History

    +

    Since the original release 1.0 of the WebAssembly specification, a number of proposals for extensions have been integrated. +The following sections provide an overview of what has changed.

    +
    +

    Release 2.0

    +
    + +
    Sign extension instructions
    +

    Added new numeric instructions for performing sign extension within integer representations 1.

    + +
    +
    + +
    Non-trapping float-to-int conversions
    +

    Added new conversion instructions that avoid trapping when converting a floating-point number to an integer 2.

    + +
    +
    + +
    Multiple values
    +

    Generalized the result type of blocks and functions to allow for multiple values; in addition, introduced the ability to have block parameters 3.

    + +
    +
    + +
    Reference types
    +

    Added and as new value types and respective instructions 4.

    + +
    +
    + +
    Table instructions
    +

    Added instructions to directly access and modify tables 4.

    + +
    +
    + +
    Multiple tables
    +

    Added the ability to use multiple tables per module 4.

    + +
    +
    + +
    Bulk memory and table instructions
    +

    Added instructions that modify ranges of memory or table entries 4 5

    + +
    +
    + +
    Vector instructions
    +

    Added vector type and instructions that manipulate multiple numeric values in parallel (also known as SIMD, single instruction multiple data) 6

    +
      +
    • +

      New value type:

      +
    • +

      New memory instructions: , , , , , ,

      +
    • +

      New constant vector instruction:

      +
    • +

      New unary vector instructions: , , , , , , , , , ,

      +
    • +

      New binary vector instructions: , , , , , , , , , , , , , , , , , , , , , , , , , , ,

      +
    • +

      New ternary vector instruction:

      +
    • +

      New test vector instructions: ,

      +
    • +

      New relational vector instructions: , , , , , , , , , , ,

      +
    • +

      New conversion vector instructions:, , , , ,

      +
    • +

      New lane access vector instructions: , , ,

      +
    • +

      New lane splitting/combining vector instructions: , ,

      +
    • +

      New byte reordering vector instructions: ,

      +
    • +

      New injection/projection vector instructions: , ,

      +
    +
    +
    1 +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/sign-extension-ops/

    +
    2 +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/nontrapping-float-to-int-conversion/

    +
    3 +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/multi-value/

    +
    4(1,2,3,4) +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/reference-types/

    +
    5 +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/bulk-memory-operations/

    +
    6 +
    +

    https://github.com/WebAssembly/spec/tree/main/proposals/simd/

    +
    +
    +
    +
    +
    +
    + +
    + +

    A.6 Index of Types

    + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Category

    +
    +

    Constructor

    +
    +

    Binary Opcode

    +
    +

    Type index

    +
    +

    +
    +

    (positive number as or )

    +
    +

    Number type

    +
    +

    +
    +

    (-1 as )

    +
    +

    Number type

    +
    +

    +
    +

    (-2 as )

    +
    +

    Number type

    +
    +

    +
    +

    (-3 as )

    +
    +

    Number type

    +
    +

    +
    +

    (-4 as )

    +
    +

    Vector type

    +
    +

    +
    +

    (-5 as )

    +
    +

    (reserved)

    +
    + +

    ..

    +
    +

    Reference type

    +
    +

    +
    +

    (-16 as )

    +
    +

    Reference type

    +
    +

    +
    +

    (-17 as )

    +
    +

    (reserved)

    +
    + +

    ..

    +
    +

    Function type

    +
    +

    +
    +

    (-32 as )

    +
    +

    (reserved)

    +
    + +

    ..

    +
    +

    Result type

    +
    +

    +
    +

    (-64 as )

    +
    +

    Table type

    +
    +

    +
    +

    (none)

    +
    +

    Memory type

    +
    +

    +
    +

    (none)

    +
    +

    Global type

    +
    +

    +
    +

    (none)

    +
    +
    + +
    + +

    A.7 Index of Instructions

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Instruction

    +
    +

    Binary Opcode

    +
    +

    Type

    +
    +

    Validation

    +
    +

    Execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    (reserved)

    +
    +

    +
    + + +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +

    +
    +

    +
    +

    +
    +

    validation

    +
    +

    execution, operator

    +
    +
    + +
    + +

    A.8 Index of Semantic Rules

    +
    + +

    Typing of Static Constructs

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    Limits

    +
    +

    +
    +

    Function type

    +
    +

    +
    +

    Block type

    +
    +

    +
    +

    Table type

    +
    +

    +
    +

    Memory type

    +
    +

    +
    +

    Global type

    +
    +

    +
    +

    External type

    +
    +

    +
    +

    Instruction

    +
    +

    +
    +

    Instruction sequence

    +
    +

    +
    +

    Expression

    +
    +

    +
    +

    Function

    +
    +

    +
    +

    Table

    +
    +

    +
    +

    Memory

    +
    +

    +
    +

    Global

    +
    +

    +
    +

    Element segment

    +
    +

    +
    +

    Element mode

    +
    +

    +
    +

    Data segment

    +
    +

    +
    +

    Data mode

    +
    +

    +
    +

    Start function

    +
    +

    +
    +

    Export

    +
    +

    +
    +

    Export description

    +
    +

    +
    +

    Import

    +
    +

    +
    +

    Import description

    +
    +

    +
    +

    Module

    +
    +

    +
    +
    +
    + +

    Typing of Runtime Constructs

    + + + + + + + + + + + + + + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    Value

    +
    +

    +
    +

    Result

    +
    +

    +
    +

    External value

    +
    +

    +
    +

    Function instance

    +
    +

    +
    +

    Table instance

    +
    +

    +
    +

    Memory instance

    +
    +

    +
    +

    Global instance

    +
    +

    +
    +

    Element instance

    +
    +

    +
    +

    Data instance

    +
    +

    +
    +

    Export instance

    +
    +

    +
    +

    Module instance

    +
    +

    +
    +

    Store

    +
    +

    +
    +

    Configuration

    +
    +

    +
    +

    Thread

    +
    +

    +
    +

    Frame

    +
    +

    +
    +
    +
    +

    Constantness

    + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    Constant expression

    +
    +

    +
    +

    Constant instruction

    +
    +

    +
    +
    +
    +

    Matching

    + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    External type

    +
    +

    +
    +

    Limits

    +
    +

    +
    +
    +
    +

    Store Extension

    + + + + + + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    Function instance

    +
    +

    +
    +

    Table instance

    +
    +

    +
    +

    Memory instance

    +
    +

    +
    +

    Global instance

    +
    +

    +
    +

    Element instance

    +
    +

    +
    +

    Data instance

    +
    +

    +
    +

    Store

    +
    +

    +
    +
    +
    +

    Execution

    + + + + + + + + + +
    +

    Construct

    +
    +

    Judgement

    +
    +

    Instruction

    +
    +

    +
    +

    Expression

    +
    +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    Conformance

    +

    Document conventions

    +

    Conformance requirements are expressed + with a combination of descriptive assertions + and RFC 2119 terminology. + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” + in the normative parts of this document + are to be interpreted as described in RFC 2119. + However, for readability, + these words do not appear in all uppercase letters in this specification.

    +

    All of the text of this specification is normative + except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

    +

    Examples in this specification are introduced with the words “for example” + or are set apart from the normative text + with class="example", + like this:

    +
    + +

    This is an example of an informative example.

    +
    +

    Informative notes begin with the word “Note” + and are set apart from the normative text + with class="note", + like this:

    +

    Note, this is an informative note.

    +

    Conformant Algorithms

    +

    Requirements phrased in the imperative as part of algorithms + (such as "strip any leading space characters" + or "return false and abort these steps") + are to be interpreted with the meaning of the key word + ("must", "should", "may", etc) + used in introducing the algorithm.

    +

    Conformance requirements phrased as algorithms or specific steps + can be implemented in any manner, + so long as the end result is equivalent. + In particular, the algorithms defined in this specification + are intended to be easy to understand + and are not intended to be performant. + Implementers are encouraged to optimize.

    +
    + +

    References

    +

    Normative References

    +
    +
    [IEEE-754-2019] +
    IEEE Standard for Floating-Point Arithmetic. 29 August 2008. URL: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933 +
    [RFC2119] +
    S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119 +
    [UNICODE] +
    The Unicode Standard. URL: https://www.unicode.org/versions/latest/ +
    \ No newline at end of file diff --git a/core/bikeshed/katex/dist/README.md b/core/bikeshed/katex/dist/README.md new file mode 100644 index 00000000..de4b9faf --- /dev/null +++ b/core/bikeshed/katex/dist/README.md @@ -0,0 +1,119 @@ +# [KaTeX](https://katex.org/) +[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) +[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=master&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) +[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) +![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) +[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) + +KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. + + * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://www.intmath.com/cg5/katex-mathjax-comparison.php). + * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. + * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. + * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. + +KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. + +KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). + +Try out KaTeX [on the demo page](https://katex.org/#demo)! + +## Getting started + +### Starter template + +```html + + + + + + + + + + + + + ... + +``` + +You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. + +For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). + +### API + +Call `katex.render` to render a TeX expression directly into a DOM element. +For example: + +```js +katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { + throwOnError: false +}); +``` + +Call `katex.renderToString` to generate an HTML string of the rendered math, +e.g., for server-side rendering. For example: + +```js +var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { + throwOnError: false +}); +// '...' +``` + +Make sure to include the CSS and font files in both cases. +If you are doing all rendering on the server, there is no need to include the +JavaScript on the client. + +The examples above use the `throwOnError: false` option, which renders invalid +inputs as the TeX source code in red (by default), with the error message as +hover text. For other available options, see the +[API documentation](https://katex.org/docs/api.html), +[options documentation](https://katex.org/docs/options.html), and +[handling errors documentation](https://katex.org/docs/error.html). + +## Demo and Documentation + +Learn more about using KaTeX [on the website](https://katex.org)! + +## Contributors + +### Code Contributors + +This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). +Code contributors + +### Financial Contributors + +Become a financial contributor and help us sustain our community. + +#### Individuals + +Contribute on Open Collective + +#### Organizations + +Support this project with your organization. Your logo will show up here with a link to your website. + +Organization 1 +Organization 2 +Organization 3 +Organization 4 +Organization 5 +Organization 6 +Organization 7 +Organization 8 +Organization 9 +Organization 10 + +## License + +KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT). diff --git a/core/bikeshed/katex/dist/contrib/auto-render.js b/core/bikeshed/katex/dist/contrib/auto-render.js new file mode 100644 index 00000000..6980cdd1 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/auto-render.js @@ -0,0 +1,327 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else if(typeof exports === 'object') + exports["renderMathInElement"] = factory(require("katex")); + else + root["renderMathInElement"] = factory(root["katex"]); +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ auto_render; } +}); + +// EXTERNAL MODULE: external "katex" +var external_katex_ = __webpack_require__(771); +var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_); +;// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js +/* eslint no-constant-condition:0 */ +var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + var index = startIndex; + var braceLevel = 0; + var delimLength = delimiter.length; + + while (index < text.length) { + var character = text[index]; + + if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; +}; + +var escapeRegex = function escapeRegex(string) { + return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +var amsRegex = /^\\begin{/; + +var splitAtDelimiters = function splitAtDelimiters(text, delimiters) { + var index; + var data = []; + var regexLeft = new RegExp("(" + delimiters.map(function (x) { + return escapeRegex(x.left); + }).join("|") + ")"); + + while (true) { + index = text.search(regexLeft); + + if (index === -1) { + break; + } + + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index) + }); + text = text.slice(index); // now text starts with delimiter + } // ... so this always succeeds: + + + var i = delimiters.findIndex(function (delim) { + return text.startsWith(delim.left); + }); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + + if (index === -1) { + break; + } + + var rawData = text.slice(0, index + delimiters[i].right.length); + var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData: rawData, + display: delimiters[i].display + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text + }); + } + + return data; +}; + +/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters); +;// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js +/* eslint no-console:0 */ + + +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + +var renderMathInText = function renderMathInText(text, optionsCopy) { + var data = auto_render_splitAtDelimiters(text, optionsCopy.delimiters); + + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + var fragment = document.createDocumentFragment(); + + for (var i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + var span = document.createElement("span"); + var math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + external_katex_default().render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof (external_katex_default()).ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; +}; + +var renderElem = function renderElem(elem, optionsCopy) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + var frag = renderMathInText(childNode.textContent, optionsCopy); + + if (frag) { + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } + } else if (childNode.nodeType === 1) { + (function () { + // Element node + var className = ' ' + childNode.className + ' '; + var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) { + return className.indexOf(' ' + x + ' ') === -1; + }); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + })(); + } // Otherwise, it's something else, and ignore it. + + } +}; + +var renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + var optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (var option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + // Render AMS environments even if outside $$…$$ delimiters. + { + left: "\\begin{equation}", + right: "\\end{equation}", + display: true + }, { + left: "\\begin{align}", + right: "\\end{align}", + display: true + }, { + left: "\\begin{alignat}", + right: "\\end{alignat}", + display: true + }, { + left: "\\begin{gather}", + right: "\\end{gather}", + display: true + }, { + left: "\\begin{CD}", + right: "\\end{CD}", + display: true + }, { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +/* harmony default export */ var auto_render = (renderMathInElement); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/auto-render.min.js b/core/bikeshed/katex/dist/contrib/auto-render.min.js new file mode 100644 index 00000000..c169ec63 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i escapeRegex(x.left)).join("|") + ")"); + + while (true) { + index = text.search(regexLeft); + + if (index === -1) { + break; + } + + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index) + }); + text = text.slice(index); // now text starts with delimiter + } // ... so this always succeeds: + + + var i = delimiters.findIndex(delim => text.startsWith(delim.left)); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + + if (index === -1) { + break; + } + + var rawData = text.slice(0, index + delimiters[i].right.length); + var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData, + display: delimiters[i].display + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text + }); + } + + return data; +}; + +/* eslint no-console:0 */ +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + +var renderMathInText = function renderMathInText(text, optionsCopy) { + var data = splitAtDelimiters(text, optionsCopy.delimiters); + + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + var fragment = document.createDocumentFragment(); + + for (var i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + var span = document.createElement("span"); + var math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + katex.render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof katex.ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; +}; + +var renderElem = function renderElem(elem, optionsCopy) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + var frag = renderMathInText(childNode.textContent, optionsCopy); + + if (frag) { + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } + } else if (childNode.nodeType === 1) { + (function () { + // Element node + var className = ' ' + childNode.className + ' '; + var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + })(); + } // Otherwise, it's something else, and ignore it. + + } +}; + +var renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + var optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (var option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + // Render AMS environments even if outside $$…$$ delimiters. + { + left: "\\begin{equation}", + right: "\\end{equation}", + display: true + }, { + left: "\\begin{align}", + right: "\\end{align}", + display: true + }, { + left: "\\begin{alignat}", + right: "\\end{alignat}", + display: true + }, { + left: "\\begin{gather}", + right: "\\end{gather}", + display: true + }, { + left: "\\begin{CD}", + right: "\\end{CD}", + display: true + }, { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +export { renderMathInElement as default }; diff --git a/core/bikeshed/katex/dist/contrib/copy-tex.css b/core/bikeshed/katex/dist/contrib/copy-tex.css new file mode 100644 index 00000000..f9255789 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/copy-tex.css @@ -0,0 +1,14 @@ +/* Force selection of entire .katex/.katex-display blocks, so that we can + * copy/paste the entire source code. If you omit this CSS, partial + * selections of a formula will work, but will copy the ugly HTML + * representation instead of the LaTeX source code. (Full selections will + * still produce the LaTeX source code.) + */ +.katex, +.katex-display { + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; +} + diff --git a/core/bikeshed/katex/dist/contrib/copy-tex.js b/core/bikeshed/katex/dist/contrib/copy-tex.js new file mode 100644 index 00000000..bf54df2f --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/copy-tex.js @@ -0,0 +1,116 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; + +;// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js +// Set these to how you want inline and display math to be delimited. +var defaultCopyDelimiters = { + inline: ['$', '$'], + // alternative: ['\(', '\)'] + display: ['$$', '$$'] // alternative: ['\[', '\]'] + +}; // Replace .katex elements with their TeX source ( element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (var i = 0; i < katexHtml.length; i++) { + var element = katexHtml[i]; + + if (element.remove) { + element.remove(null); + } else { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + var katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (var _i = 0; _i < katexMathml.length; _i++) { + var _element = katexMathml[_i]; + + var texSource = _element.querySelector('annotation'); + + if (texSource) { + if (_element.replaceWith) { + _element.replaceWith(texSource); + } else { + _element.parentNode.replaceChild(texSource, _element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + var displays = fragment.querySelectorAll('.katex-display annotation'); + + for (var _i2 = 0; _i2 < displays.length; _i2++) { + var _element2 = displays[_i2]; + _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +}; +/* harmony default export */ var katex2tex = (katexReplaceWithTex); +;// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js + // Global copy handler to modify behavior on .katex elements. + +document.addEventListener('copy', function (event) { + var selection = window.getSelection(); + + if (selection.isCollapsed) { + return; // default action OK if selection is empty + } + + var fragment = selection.getRangeAt(0).cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } // Preserve usual HTML copy/paste behavior. + + + var html = []; + + for (var i = 0; i < fragment.childNodes.length; i++) { + html.push(fragment.childNodes[i].outerHTML); + } + + event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version. + + event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); +;// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript doesn't support + * CSS modules natively, a separate entry point is used. + */ + + +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/copy-tex.min.css b/core/bikeshed/katex/dist/contrib/copy-tex.min.css new file mode 100644 index 00000000..6f97f56c --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/copy-tex.min.css @@ -0,0 +1 @@ +.katex,.katex-display{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all} diff --git a/core/bikeshed/katex/dist/contrib/copy-tex.min.js b/core/bikeshed/katex/dist/contrib/copy-tex.min.js new file mode 100644 index 00000000..9e9d26ec --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/copy-tex.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var l in n)("object"==typeof exports?exports:e)[l]=n[l]}}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={},t={inline:["$","$"],display:["$$","$$"]},n=function(e,n){void 0===n&&(n=t);for(var l=e.querySelectorAll(".katex-mathml + .katex-html"),r=0;r element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (var i = 0; i < katexHtml.length; i++) { + var element = katexHtml[i]; + + if (element.remove) { + element.remove(null); + } else { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + var katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (var _i = 0; _i < katexMathml.length; _i++) { + var _element = katexMathml[_i]; + + var texSource = _element.querySelector('annotation'); + + if (texSource) { + if (_element.replaceWith) { + _element.replaceWith(texSource); + } else { + _element.parentNode.replaceChild(texSource, _element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + var displays = fragment.querySelectorAll('.katex-display annotation'); + + for (var _i2 = 0; _i2 < displays.length; _i2++) { + var _element2 = displays[_i2]; + _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +}; + +document.addEventListener('copy', function (event) { + var selection = window.getSelection(); + + if (selection.isCollapsed) { + return; // default action OK if selection is empty + } + + var fragment = selection.getRangeAt(0).cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } // Preserve usual HTML copy/paste behavior. + + + var html = []; + + for (var i = 0; i < fragment.childNodes.length; i++) { + html.push(fragment.childNodes[i].outerHTML); + } + + event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version. + + event.clipboardData.setData('text/plain', katexReplaceWithTex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); diff --git a/core/bikeshed/katex/dist/contrib/mathtex-script-type.js b/core/bikeshed/katex/dist/contrib/mathtex-script-type.js new file mode 100644 index 00000000..d82c41d8 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mathtex-script-type.js @@ -0,0 +1,112 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); + +var scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + var katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex__WEBPACK_IMPORTED_MODULE_0___default().render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/mathtex-script-type.min.js b/core/bikeshed/katex/dist/contrib/mathtex-script-type.min.js new file mode 100644 index 00000000..af028303 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mathtex-script-type.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o,i,a,u={};return o=n(771),i=n.n(o),a=document.body.getElementsByTagName("script"),(a=Array.prototype.slice.call(a)).forEach((function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{i().render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})),u=u.default}()})); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/mathtex-script-type.mjs b/core/bikeshed/katex/dist/contrib/mathtex-script-type.mjs new file mode 100644 index 00000000..1083b927 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mathtex-script-type.mjs @@ -0,0 +1,24 @@ +import katex from '../katex.mjs'; + +var scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + var katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex.render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/core/bikeshed/katex/dist/contrib/mhchem.js b/core/bikeshed/katex/dist/contrib/mhchem.js new file mode 100644 index 00000000..c557b4e8 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mhchem.js @@ -0,0 +1,3216 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/* eslint-disable */ + +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); + + // +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + "\\underset{(...)}": function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + "\\underbrace{(...)}": function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + "\\underset{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + "\\underbrace{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {//ret = []; + } else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } //#endregion + +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + assertNever(buf); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + + assertString(res); + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // +// Helpers for code anaylsis +// Will show type error at calling position +// + +/** @param {number} a */ + +function assertNever(a) {} +/** @param {string} a */ + + +function assertString(a) {} +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/mhchem.min.js b/core/bikeshed/katex/dist/contrib/mhchem.min.js new file mode 100644 index 00000000..e0c4a5e4 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mhchem.min.js @@ -0,0 +1 @@ +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],e);else{var n="object"==typeof exports?e(require("katex")):e(t.katex);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}("undefined"!=typeof self?self:this,(function(t){return function(){"use strict";var e={771:function(e){e.exports=t}},n={};function o(t){var a=n[t];if(void 0!==a)return a.exports;var r=n[t]={exports:{}};return e[t](r,r.exports,o),r.exports}o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var a={};return function(){var t=o(771),e=o.n(t);e().__defineMacro("\\ce",(function(t){return n(t.consumeArgs(1)[0],"ce")})),e().__defineMacro("\\pu",(function(t){return n(t.consumeArgs(1)[0],"pu")})),e().__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");var n=function(t,e){for(var n="",o=t[t.length-1].loc.start,i=t.length-1;i>=0;i--)t[i].loc.start>o&&(n+=" ",o=t[i].loc.start),n+=t[i].text,o+=t[i].text.length;return r.go(a.go(n,e))},a={go:function(t,e){if(!t)return[];void 0===e&&(e="ce");var n,o="0",r={};r.parenthesisLevel=0,t=(t=(t=t.replace(/\n/g," ")).replace(/[\u2212\u2013\u2014\u2010]/g,"-")).replace(/[\u2026]/g,"...");for(var i=10,c=[];;){n!==t?(i=10,n=t):i--;var u=a.stateMachines[e],p=u.transitions[o]||u.transitions["*"];t:for(var s=0;s0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(i<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n=0;n":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return a.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return a.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return a.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return a.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return a.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return a.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var n=a.patterns.findObserveGroups(t,"","$","$","");return n&&(e=n.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var s=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var n=t.match(e);return n?n[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,n)))return null;var d=function(t,e,n){for(var o=0;e":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var n;if((t.d||"").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,n=this.output(t),t.b=o}else n=this.output(t);return a.actions["o="](t,e),n},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var n=[];return a.concatArray(n,this.output(t)),a.concatArray(n,a.actions.bond(t,e,"-")),n}t.d=e},"- after o/d":function(t,e,n){var o=a.patterns.match_("orbital",t.o||""),r=a.patterns.match_("one lowercase greek letter $",t.o||""),i=a.patterns.match_("one lowercase latin letter $",t.o||""),c=a.patterns.match_("$one lowercase latin letter$ $",t.o||""),u="-"===e&&(o&&""===o.remainder||r||i||c);!u||t.a||t.b||t.p||t.d||t.q||o||!i||(t.o="$"+t.o+"$");var p=[];return u?(a.concatArray(p,this.output(t)),p.push({type_:"hyphen"})):(o=a.patterns.match_("digits",t.d||""),n&&o&&""===o.remainder?(a.concatArray(p,a.actions["d="](t,e)),a.concatArray(p,this.output(t))):(a.concatArray(p,this.output(t)),a.concatArray(p,a.actions.bond(t,e,"-")))),p},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:a.go(e,"o")}},comma:function(t,e){var n=e.replace(/\s*$/,"");return n!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:n}:{type_:"comma enumeration M",p1:n}},output:function(t,e,n){var o,r,i;t.r?(r="M"===t.rdt?a.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:a.go(t.rd),i="M"===t.rqt?a.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:a.go(t.rq),o={type_:"arrow",r:t.r,rd:r,rq:i}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&a.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:"chemfive",a:a.go(t.a,"a"),b:a.go(t.b,"bd"),p:a.go(t.p,"pq"),o:a.go(t.o,"o"),q:a.go(t.q,"pq"),d:a.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType})));for(var c in t)"parenthesisLevel"!==c&&"beginsWithBond"!==c&&delete t[c];return o},"oxidation-output":function(t,e){var n=["{"];return a.concatArray(n,a.go(e,"oxidation")),n.push("}"),n},"frac-output":function(t,e){return{type_:"frac-ce",p1:a.go(e[0]),p2:a.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:a.go(e[0]),p2:a.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:a.go(e[0]),p2:a.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:a.go(e[0]),p2:a.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,n){return{type_:"operator",kind_:n||e}}}},a:{transitions:a.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:a.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var n in t)delete t[n];return e}}}},pq:{transitions:a.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:a.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1],"pq")}}}},bd:{transitions:a.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1],"bd")}}}},oxidation:{transitions:a.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"tex-math tight":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"9,9":{transitions:a.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:a.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),e[1]&&(a.concatArray(n,a.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?a.concatArray(n,a.go(e[2],"pu-9,9")):n.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),"e"===e[3]||"*"===e[3].substr(0,1)?n.push({type_:"cdot"}):n.push({type_:"times"}))),e[3]&&n.push("10^{"+e[5]+"}"),n},"number^":function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),a.concatArray(n,a.go(e[1],"pu-9,9")),n.push("^{"+e[2]+"}"),n},operator:function(t,e,n){return{type_:"operator",kind_:n||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,n=a.patterns.match_("{(...)}",t.d||"");n&&""===n.remainder&&(t.d=n.match_);var o=a.patterns.match_("{(...)}",t.q||"");if(o&&""===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var r={d:a.go(t.d,"pu"),q:a.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:r.d,p2:r.q}:(e=r.d,r.d.length>1||r.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),a.concatArray(e,r.q))}else e=a.go(t.d,"pu-2");for(var i in t)delete t[i];return e}}},"pu-2":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var n=a.patterns.match_("{(...)}",t.rm||"");e=n&&""===n.remainder?a.go(n.match_,"pu"):{type_:"rm",p1:t.rm}}for(var o in t)delete t[o];return e}}},"pu-9,9":{transitions:a.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var n=t.text_.length%3;0===n&&(n=3);for(var o=t.text_.length-3;o>0;o-=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var n=t.text_.length-3,o=0;o":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"rightleftarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}}(),a=a.default}()})); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/mhchem.mjs b/core/bikeshed/katex/dist/contrib/mhchem.mjs new file mode 100644 index 00000000..55511ad0 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/mhchem.mjs @@ -0,0 +1,3109 @@ +import katex from '../katex.mjs'; + +/* eslint-disable */ + +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex.__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex.__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + '\\underset{(...)}': function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + '\\underbrace{(...)}': function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + '\\underset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + '\\underbrace{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } //#endregion + +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // diff --git a/core/bikeshed/katex/dist/contrib/render-a11y-string.js b/core/bikeshed/katex/dist/contrib/render-a11y-string.js new file mode 100644 index 00000000..a96caca4 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/render-a11y-string.js @@ -0,0 +1,875 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/** + * renderA11yString returns a readable string. + * + * In some cases the string will have the proper semantic math + * meaning,: + * renderA11yString("\\frac{1}{2}"") + * -> "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +// NOTE: since we're importing types here these files won't actually be +// included in the build. +// $FlowIgnore: we import the types directly anyways + +var stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +var powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +var openMap = { + "|": "open vertical bar", + ".": "" +}; +var closeMap = { + "|": "close vertical bar", + ".": "" +}; +var binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +var relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +var accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +var buildString = function buildString(str, type, a11yStrings) { + if (!str) { + return; + } + + var ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type + // $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +var buildRegion = function buildRegion(a11yStrings, callback) { + var regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +var handleObject = function handleObject(tree, a11yStrings, atomType) { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + var text = tree.text; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error("\"" + tree.family + "\" is not a valid atom type"); + } + } + + break; + } + + case "color": + { + var color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, function (regionStrings) { + // genfrac can have unbalanced delimiters + var leftDelim = tree.leftDelim, + rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "hbox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, function (regionStrings) { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + var body = tree.body, + name = tree.name; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, function (regionStrings) { + var body = tree.body, + index = tree.index; + + if (index) { + var indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + var base = tree.base, + sub = tree.sub, + sup = tree.sup; + var isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + var regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start " + regionName); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push("end " + regionName); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + var supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } else if (/phase/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start phase angle"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end phase angle"); + }); + break; + } + + throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet"); + } + + case "vcenter": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString("start verbatim", "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString("end verbatim", "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString("start " + tree.label.slice(1), "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString("end " + tree.label.slice(1), "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "cdlabel": + { + throw new Error("KaTeX-a11y: cdlabel not implemented yet"); + } + + case "cdlabelparent": + { + throw new Error("KaTeX-a11y: cdlabelparent not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + + buildA11yStrings(tree.body, a11yStrings, _atomType); + break; + } + + case "mathchoice": + { + // TODO: track which which style we're using, e.g. dispaly, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + case "internal": + { + // internal nodes are never included in the parse tree + break; + } + + case "html": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (var i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +var flatten = function flatten(array) { + var result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +var renderA11yString = function renderA11yString(text, settings) { + var tree = katex__WEBPACK_IMPORTED_MODULE_0___default().__parse(text, settings); + + var a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +/* harmony default export */ __webpack_exports__["default"] = (renderA11yString); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/contrib/render-a11y-string.min.js b/core/bikeshed/katex/dist/contrib/render-a11y-string.min.js new file mode 100644 index 00000000..e7461890 --- /dev/null +++ b/core/bikeshed/katex/dist/contrib/render-a11y-string.min.js @@ -0,0 +1 @@ +!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],r);else{var a="object"==typeof exports?r(require("katex")):r(e.katex);for(var t in a)("object"==typeof exports?exports:e)[t]=a[t]}}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var r={771:function(r){r.exports=e}},a={};function t(e){var o=a[e];if(void 0!==o)return o.exports;var n=a[e]={exports:{}};return r[e](n,n.exports,t),n.exports}t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,{a:r}),r},t.d=function(e,r){for(var a in r)t.o(r,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)};var o,n,s,i,l,c,u,p,d,b,h,m,f,y,w={};return o=t(771),n=t.n(o),s={"(":"left parenthesis",")":"right parenthesis","[":"open bracket","]":"close bracket","\\{":"left brace","\\}":"right brace","\\lvert":"open vertical bar","\\rvert":"close vertical bar","|":"vertical bar","\\uparrow":"up arrow","\\Uparrow":"up arrow","\\downarrow":"down arrow","\\Downarrow":"down arrow","\\updownarrow":"up down arrow","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow","\\langle":"open angle","\\rangle":"close angle","\\lfloor":"open floor","\\rfloor":"close floor","\\int":"integral","\\intop":"integral","\\lim":"limit","\\ln":"natural log","\\log":"log","\\sin":"sine","\\cos":"cosine","\\tan":"tangent","\\cot":"cotangent","\\sum":"sum","/":"slash",",":"comma",".":"point","-":"negative","+":"plus","~":"tilde",":":"colon","?":"question mark","'":"apostrophe","\\%":"percent"," ":"space","\\ ":"space","\\$":"dollar sign","\\angle":"angle","\\degree":"degree","\\circ":"circle","\\vec":"vector","\\triangle":"triangle","\\pi":"pi","\\prime":"prime","\\infty":"infinity","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\omega":"omega","\\theta":"theta","\\sigma":"sigma","\\lambda":"lambda","\\tau":"tau","\\Delta":"delta","\\delta":"delta","\\mu":"mu","\\rho":"rho","\\nabla":"del","\\ell":"ell","\\ldots":"dots","\\hat":"hat","\\acute":"acute"},i={prime:"prime",degree:"degrees",circle:"degrees",2:"squared",3:"cubed"},l={"|":"open vertical bar",".":""},c={"|":"close vertical bar",".":""},u={"+":"plus","-":"minus","\\pm":"plus minus","\\cdot":"dot","*":"times","/":"divided by","\\times":"times","\\div":"divided by","\\circ":"circle","\\bullet":"bullet"},p={"=":"equals","\\approx":"approximately equals","\u2260":"does not equal","\\geq":"is greater than or equal to","\\ge":"is greater than or equal to","\\leq":"is less than or equal to","\\le":"is less than or equal to",">":"is greater than","<":"is less than","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow",":":"colon"},d={"\\underleftarrow":"left arrow","\\underrightarrow":"right arrow","\\underleftrightarrow":"left-right arrow","\\undergroup":"group","\\underlinesegment":"line segment","\\utilde":"tilde"},b=function(e,r,a){var t;e&&(/^\d+$/.test(t="open"===r?e in l?l[e]:s[e]||e:"close"===r?e in c?c[e]:s[e]||e:"bin"===r?u[e]||e:"rel"===r?p[e]||e:s[e]||e)&&a.length>0&&/^\d+$/.test(a[a.length-1])?a[a.length-1]+=t:t&&a.push(t))},h=function(e,r){var a=[];e.push(a),r(a)},m=function(e,r,a){switch(e.type){case"accent":h(r,(function(r){f(e.base,r,a),r.push("with"),b(e.label,"normal",r),r.push("on top")}));break;case"accentUnder":h(r,(function(r){f(e.base,r,a),r.push("with"),b(d[e.label],"normal",r),r.push("underneath")}));break;case"accent-token":break;case"atom":var t=e.text;switch(e.family){case"bin":b(t,"bin",r);break;case"close":b(t,"close",r);break;case"inner":b(e.text,"inner",r);break;case"open":b(t,"open",r);break;case"punct":b(t,"punct",r);break;case"rel":b(t,"rel",r);break;default:throw e.family,new Error('"'+e.family+'" is not a valid atom type')}break;case"color":var o=e.color.replace(/katex-/,"");h(r,(function(r){r.push("start color "+o),f(e.body,r,a),r.push("end color "+o)}));break;case"color-token":break;case"delimsizing":e.delim&&"."!==e.delim&&b(e.delim,"normal",r);break;case"genfrac":h(r,(function(r){var t=e.leftDelim,o=e.rightDelim;e.hasBarLine?(r.push("start fraction"),t&&b(t,"open",r),f(e.numer,r,a),r.push("divided by"),f(e.denom,r,a),o&&b(o,"close",r),r.push("end fraction")):(r.push("start binomial"),t&&b(t,"open",r),f(e.numer,r,a),r.push("over"),f(e.denom,r,a),o&&b(o,"close",r),r.push("end binomial"))}));break;case"hbox":f(e.body,r,a);break;case"kern":break;case"leftright":h(r,(function(r){b(e.left,"open",r),f(e.body,r,a),b(e.right,"close",r)}));break;case"leftright-right":break;case"lap":f(e.body,r,a);break;case"mathord":b(e.text,"normal",r);break;case"op":var n=e.body,s=e.name;n?f(n,r,a):s&&b(s,"normal",r);break;case"op-token":b(e.text,a,r);break;case"ordgroup":f(e.body,r,a);break;case"overline":h(r,(function(r){r.push("start overline"),f(e.body,r,a),r.push("end overline")}));break;case"phantom":r.push("empty space");break;case"raisebox":f(e.body,r,a);break;case"rule":r.push("rectangle");break;case"sizing":f(e.body,r,a);break;case"spacing":r.push("space");break;case"styling":f(e.body,r,a);break;case"sqrt":h(r,(function(r){var t=e.body,o=e.index;if(o)return"3"===y(f(o,[],a)).join(",")?(r.push("cube root of"),f(t,r,a),void r.push("end cube root")):(r.push("root"),r.push("start index"),f(o,r,a),void r.push("end index"));r.push("square root of"),f(t,r,a),r.push("end square root")}));break;case"supsub":var l=e.base,c=e.sub,u=e.sup,p=!1;if(l&&(f(l,r,a),p="op"===l.type&&"\\log"===l.name),c){var m=p?"base":"subscript";h(r,(function(e){e.push("start "+m),f(c,e,a),e.push("end "+m)}))}u&&h(r,(function(e){var r=y(f(u,[],a)).join(",");r in i?e.push(i[r]):(e.push("start superscript"),f(u,e,a),e.push("end superscript"))}));break;case"text":if("\\textbf"===e.font){h(r,(function(r){r.push("start bold text"),f(e.body,r,a),r.push("end bold text")}));break}h(r,(function(r){r.push("start text"),f(e.body,r,a),r.push("end text")}));break;case"textord":b(e.text,a,r);break;case"smash":f(e.body,r,a);break;case"enclose":if(/cancel/.test(e.label)){h(r,(function(r){r.push("start cancel"),f(e.body,r,a),r.push("end cancel")}));break}if(/box/.test(e.label)){h(r,(function(r){r.push("start box"),f(e.body,r,a),r.push("end box")}));break}if(/sout/.test(e.label)){h(r,(function(r){r.push("start strikeout"),f(e.body,r,a),r.push("end strikeout")}));break}if(/phase/.test(e.label)){h(r,(function(r){r.push("start phase angle"),f(e.body,r,a),r.push("end phase angle")}));break}throw new Error("KaTeX-a11y: enclose node with "+e.label+" not supported yet");case"vcenter":f(e.body,r,a);break;case"vphantom":throw new Error("KaTeX-a11y: vphantom not implemented yet");case"hphantom":throw new Error("KaTeX-a11y: hphantom not implemented yet");case"operatorname":f(e.body,r,a);break;case"array":throw new Error("KaTeX-a11y: array not implemented yet");case"raw":throw new Error("KaTeX-a11y: raw not implemented yet");case"size":break;case"url":throw new Error("KaTeX-a11y: url not implemented yet");case"tag":throw new Error("KaTeX-a11y: tag not implemented yet");case"verb":b("start verbatim","normal",r),b(e.body,"normal",r),b("end verbatim","normal",r);break;case"environment":throw new Error("KaTeX-a11y: environment not implemented yet");case"horizBrace":b("start "+e.label.slice(1),"normal",r),f(e.base,r,a),b("end "+e.label.slice(1),"normal",r);break;case"infix":break;case"includegraphics":throw new Error("KaTeX-a11y: includegraphics not implemented yet");case"font":f(e.body,r,a);break;case"href":throw new Error("KaTeX-a11y: href not implemented yet");case"cr":throw new Error("KaTeX-a11y: cr not implemented yet");case"underline":h(r,(function(r){r.push("start underline"),f(e.body,r,a),r.push("end underline")}));break;case"xArrow":throw new Error("KaTeX-a11y: xArrow not implemented yet");case"cdlabel":throw new Error("KaTeX-a11y: cdlabel not implemented yet");case"cdlabelparent":throw new Error("KaTeX-a11y: cdlabelparent not implemented yet");case"mclass":var w=e.mclass.slice(1);f(e.body,r,w);break;case"mathchoice":f(e.text,r,a);break;case"htmlmathml":f(e.mathml,r,a);break;case"middle":b(e.delim,a,r);break;case"internal":break;case"html":f(e.body,r,a);break;default:throw e.type,new Error("KaTeX a11y un-recognized type: "+e.type)}},f=function e(r,a,t){if(void 0===a&&(a=[]),r instanceof Array)for(var o=0;o "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +var stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +var powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +var openMap = { + "|": "open vertical bar", + ".": "" +}; +var closeMap = { + "|": "close vertical bar", + ".": "" +}; +var binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +var relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +var accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +var buildString = (str, type, a11yStrings) => { + if (!str) { + return; + } + + var ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type + // $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +var buildRegion = (a11yStrings, callback) => { + var regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +var handleObject = (tree, a11yStrings, atomType) => { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + var { + text + } = tree; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error("\"" + tree.family + "\" is not a valid atom type"); + } + } + + break; + } + + case "color": + { + var color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, regionStrings => { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, regionStrings => { + // genfrac can have unbalanced delimiters + var { + leftDelim, + rightDelim + } = tree; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "hbox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, regionStrings => { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + var { + body, + name + } = tree; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, regionStrings => { + var { + body, + index + } = tree; + + if (index) { + var indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + var { + base, + sub, + sup + } = tree; + var isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + var regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start " + regionName); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push("end " + regionName); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + var supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } else if (/phase/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start phase angle"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end phase angle"); + }); + break; + } + + throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet"); + } + + case "vcenter": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString("start verbatim", "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString("end verbatim", "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString("start " + tree.label.slice(1), "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString("end " + tree.label.slice(1), "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "cdlabel": + { + throw new Error("KaTeX-a11y: cdlabel not implemented yet"); + } + + case "cdlabelparent": + { + throw new Error("KaTeX-a11y: cdlabelparent not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + + buildA11yStrings(tree.body, a11yStrings, _atomType); + break; + } + + case "mathchoice": + { + // TODO: track which which style we're using, e.g. dispaly, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + case "internal": + { + // internal nodes are never included in the parse tree + break; + } + + case "html": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (var i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +var flatten = function flatten(array) { + var result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +var renderA11yString = function renderA11yString(text, settings) { + var tree = katex.__parse(text, settings); + + var a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +export { renderA11yString as default }; diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..31b8d8d1cd45f2758ec58158c8edf53bcbdf5d12 GIT binary patch literal 63604 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 MC&E?(&ao~37sa3Q&Hw-a literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..13000fc5efe98c35f7cfc84a544489786e341afa GIT binary patch literal 33504 zcmY&eQ*b6su>E4&$;P&A+qP}nwr$(?#xDf zCI$ck{Ij4v0Q`UBo6GO7*_*WnFe{g)~-LWF9dMI@mk^Tg(4n%^)lQ02JY<0$z!Olj%RLufacE>_3#7iqz$J zY~*Ny8Eme0t^VL6Z#Iz#=Wv7#%Po>w#+aIwmA1GY$F;kM zCTu(Lbt~n#ljTa6#ftOlz={;p@iB{8iRP+Tu+=6nn&A{}S*hue-oRfY$r%SgK_(e? zH|O|aROC%?Co2kWQ+_C%nJCBJksWP&?%|owvDys%rZt^i-h8*-_7X zc7_nR1Zegh=1_n8fB>9m+Bb<2;h)o?K|3UnMUoJKC72WkW`MV7bNz5<~^(~}HjmTRrTfJMxSnVr6 z=X>3E+*U-z=QjK35PJBg?AaGHyFOZn0$>s)#odFXr$az%SFV;Xufqmy3EMD?TGwq< zt6QB)b?VfP>hNEP((!FntX1hLMEn=wvb@YY%DQ(3G`bBN&q8mV1-41Xx)PrPrmK1J=a+~VBo%paGVqcXHFC?ZNJwhLrJ(%Tl3Q1z4yVyhz7cXi6n zZL79pSrKCTY7j=Cs0lf4wHBjx#^(jWy5Dm?e`Ps+7mi7#*?$p@(sfurHeF+oz18Kq zcf%(6+$7x#lACs>05M!(OXP0P6e_XtwoNZw!ixM*@5pfwnL=0-ZXKBAgq(#scijT} zem5LrO>ETp+`sguE||mTUlJV+megja9Jk$$Gg>)Vuja*=m(Xo+ebAoRe$BJ5fdH4D z`dq~E!l?@=rL<7q{?sntk8Id(FmK>f-S(fXkKOisH$4la`e96~0^6~ag-~~ZQhej$ zC|S@i*KUkUWTpvw?nqBQ3KFB!iv+0%Kw$(kJS`zz6>TfwBq}@}%>e+07YKv(J0rJ# z&vO$r$N|-BH(d5Jp`q`uTS}!{t6=mVkO6vuFx%f0j3+b25fLssJOhYQ+3lHh^`!s> zz16qH#(m9L_PlOYc`WV}GprJ}E3dQTaCNheL0NaG0xSVbsR~j^85JR0Zg}jp?JvJq zh&I!`6s_)lo_8q(Ux0yc?P~EhKB_f{e2@7OM%<2~h~drGX1s-rGwBPv^cDTu%_81> z-m+dDY1#(8_eUYbZRclMdW>V45xsh1n@UY8xt950sEbc?Z-Scf{Gq~vB}VxWEdA80 zIcSxUNH?*e-SSEsvWJXlh9Z8%2>uj)R;pA2JeuRf=j3l*G&hZEqWGk=Jt0w_{-IEd zy&2yM<5%i!dc-|8$YeBS=xde4OkkVnJw#|^s7)c?v7((5hE_0+)7MSPXd)%*R5`UZ z&4B5$;+Y-IJOjObR4ePh8KBJ9-IX>aobrie%()P?k0V=cC zG;k%Z9g9b!x#BHfDI zq?{=?orf>k_8-BQ?+HlTF1P{MP9J|BF{f_Cf&pcGRl&9@)E>k*AZjy%pwHGw zP~;HJ!vMLe&qiCB5OBh-az(83{`lS0M89y8W1)%YqoWOJIvy{FH76?0z>jGOy5KLC z4j!3NyM(IrbRwa!uXmPhi}B_M3Ctb>-f`bZ8kX`yf3D<2lfan24{;8P>Ec|qaRBINY-*RtNhhO7_f0ya>)p!f6C<<{?0G_lbMWl?9zHiwJvN))sTO z<)4J||1@Z@WSZzH3U4hZnNBS`GCJCn{O1bRb-55`AzI;pPVV8`%4ZVVrz?iw; zY@r@fPQ+rBc_heNh&-~y2DtpT-B8}ppX~YQD#!OY2PU9$6}gib?f_=Dksy_i?pe?5 zthCBukjr;%eG!Uo(WX5w$NSq_-Fsxp4y!O`s%aXA zuY7QtibIpk$8D@jYo2*IABaE2c2Ugm$K zkK2^6a6DtLv8DjS0w*V>=Wd~H@xlKq{}*u1gk@&BE?GzVG^z*h_M56&iTg#gX8AR# zwXqHp(@a#AA+un@O=;3oMN{gq_03AcTVQ{s<9r$V-;t zQn;x3)9H8$o%y+KvdH_X=BhsTMeL(`u(Hf1`h0w}dTjfn?z=~NNPsMk*osy$k7T-! zjy0sEdTpAO>O}IYfLkw4xc!>_AkwTB7c+mxqJ8~>d(_$vm$yLP;PbicDvB#gyTqTu zWJQdp`i3ROC&7GZp37DU*b|VOmInYnHP@xhdBGF13q@A1-G0*J_W}; ztE>x^i@ZMz0Kh_d<+RJEdX}c1P`VJx)!j0G470S<|>1xN$yYNX6#u)p@vig17JMGx zq}z3kn-hmw)Ldr^9{C&&VTSEj+>0U*W&!SM8=|4K4blCjim z3}gG%ZC4x&8Qc?cKZm?8S-!NU;_Xemg5UP>ro3BUr8&5%rlmj9ejeCXBb(ka0b8%P zf>%w3Ti|dwos*f3LT*O1%CWYF%_Jw*n5{yEqqlCDTs-dCL;6J6^8qcqF56hQ<2_9E zd~x6=9$`|wqU*dVXu^}8P{hnF^Yc-OSNq4 zvXq-117GE*6o;~I&u|GbKWhB*>|Q!~{U^%dFkCUQ`b{?28AdVeb4<%oJ**%f2n9WW ztjwJ7dX^unS^VUWLbimO7Y_;|G}>T}FrLY$istXvYh6Y@rLgL{(mpiu++8*}PG1!0 z!A`qQ!%=S#4<5_eoVY!M(*B=3?*Q&g40bo-y&PZh69BdCiC;5I31elYY+{*M3+aa1 zb%9%IR%8x`(@k6~^=9*@4JV4BVmcW_=79_dd)&%-;5O_8)WZ*QHf(I_cx3H4CS^a2 zPoJ|YTYl1VP@}WD{QjSZm|Aa)+>|Ju>Y32$)jkSUw;y%Z#?orGC!`&`7n#waAbY)G zEOSZln!#Y&cb_1H?{~_|wY+9%Jn4gKy&Nz3ew;v8HR2+D1mS24?CA1urI}BY+n0tH zs_S~RMgNy9a=gyd7j3#52sYNGtn2b{;F4CsDp_%tEv3@ zj|}!_lwoj%Kour!C@LM5zcRv!DdazY$?%_T#bq;cwb@$!7I8{sP=Q!@%}B6H0^)vQ za~Q{_?>dxuJR%)A>5%$Z{=4q&8<)NVdJC9sg#9j+r02C3T)AUmEC9Yhgq?gu-+o4M ztjn0HYJ`BBlXow(AqO_{0DK=&ym=Qa5EH=NQ}UV~J?+!xW!tU+VMgNve!iA1%L`g7;}v7ZH-7|@gu$$Mu=g3;&n@*u)2PK~ttXbO+^q!g{EZZvh|;xW zi^i))$)dm(67%yOijT5YO%qa(8W-FrJiBJYt%P~O=8<9L5MILYvLH#e5SbWa_ju z{@^-Ld%q5>3#XbHoINo0tk0zKH2Xl2<@0fI0oC6ecFB5A2@@O0zf9}4(rHU7NZI_7 zPpQYt?QiM-1m}jqiXWnX)%pF~k#}j3y(pMOhfR;Mkr|z%G%`)PwQ<#+@8{mC$Y(0}cy&9z!R<)BBAN-mf?)_X+y+e~=kLI@3E z0nL0R#-ssQZv;jt?|0bnX1rKiGg8#NJSUJ4N)U)PQ`a8=EX3jhc?`K4>?^Y-fp1{BYy>MV0{L$l zX9~eUT1;n|J$L7O?u`*Sx35GZxnwJ@0o`Mnlpn$37JH2u( zYqnE4WjJDRYvfzENUV4skFzf+w&b!4x-9n?nTMOfodGn!q7g!+SWL0cgxzLZDeVH+ z05D3cuJ56)v;#my1);k2LmUnTI7JGbAQuk+?d=d0SP%mos_)|M(Du zIyll>>V#F(VP0x)V4k0Y0OXiaBUAUPyqEGm;r&#M`eoD_KS^G^$=GXcoI`y*&D6{4 z6byG`9xJSf%c|Bh@*{|3p_`DYF;`H9#a;v$(oj72}r7?N*1P+@c@WYM)IeI!YAb>^ByGb$llS@H@Y(b8d_Z`8_ z1>U@Wfs{tPI;axwQun>(9+7qNE8X!C=^E>JiyW`_@IzYe2$ogaZt|@{AWKXzOmtXb zJt?KU8byUU7gO4kB5YCA)PsLXl9Hsjniu7Q0l5O((q(yA2{_TN0z;>^}h)EF}=LHhm>=kzbmUtAI)g)kj^N++R%O?UpqrF6cnDv~cuv(1#L6H!^=%j^5Y)-mt|62QG8!9sp-clcnf z;5rQ`?y}IFI*ca@OoB}n0;j{P@D33Do#89~Y`cLF5O3L|)qnfNE*l_d!A)F7XBnM8 zSzMxMK097`Gsh8H6c9WL3PgxZVw4Ujn|UF(FHp$fMcV4gxdmZf`x1F2cOJzUs;b>; zaDfKxT(NicpZ_8?sAk_)2k)!jBgHKD1u-nN;Yiv{DcjF3BF|^HMzE5nu*3H}+tIG? ztywAVh#eJI+?X0}F0~vPQyC+aG*MFIEE!!gKk zE5Kre)}r!9Exn#Bz;Ore*aoJG_4(SszUzRfp}}4#LKCdzQ}ikwU(8L=dIj71ef|vx zWC@jwA#9FEc4jLHgiYRsYfIWY>|D=*kd-!3f7y8_>1sEn^iU?5?}bB4ey?)4$XouI zvmMj<+rxi%KIx znE)g(VEUow351fk*(4IuD>w+vcH#%)h+dN$;I@z!P6^EE8}(rD8NS2UKeu=d_T#N@ z3|0pUD6uH%6h@vsPdD|-7+<;Q1R_0>yl)BGR!<@2AwBGffbD zA2iY6jlt=pBECryG2Eiqe`I7dfcNVx{aZph#Xf-|-WtYayGi%mcr$E8nj1wlc=p!~ zS}J8r+=H-9pofLJ3WJr9h;4P&N@Zdjq{`aGnsTL_sDlvGv!Etv8VKnPxZd;u=gzsj zl03OX(zNz=w@o_%R5lJcvfSR-8G(yDQbvx;s=iU@ndNdH*eo z-@XOHk{a(T{0o_Hh>+kENvQEKdoNv)1dYZJ$Do4HmrukGXtl-F&36pp3&*gqCWuq%qNGL>67z#6` z4y7yPK&wEm@)~5m?a+u~ae#yzhU33lz<@W1>2}!dltEp0K&{KQgzqLEujx6I+~cWE z(5kF3D+=KEmh?OQqGeQEa|ZqvxS}4m)zUINRdI5gjL@Ab z3H(~7436Z(=w-5+WuV-SjdvX(BrxLSxGX!D?WxMT*t6LZct^;YT^};0ara3*%e0Ct zInZNsQIpB}ACBv1I9^wiMf6Bo&!!*BK??c0{ONZ49?2c5a1_Iiye~5nJ0qT6N1Np~ z8gFz$V}r(L95mC($B3_UUM!Of`0-s7T|9wbAj$JldYEk|11GU;j>#Nk?0*P+v5|05 z3|@BpJcj^4fK~f~3+Fq~fZOuFu2uP-b~v7>yJcu5D{lcWTE{`@{BAQxIY!7TCow9& zUZa;TR3Bm>SgvD4_~6l;+|79FEuym}D#UnJRrl^j8BVJFR^f@-#QsjW`F<$+iCn7u zkW55m-e)Vi(5s95Mdk7MrqO`A+%WSp>sHj_JGQZ{ZqU!Kp3 za)^~=k3B@E;rfI8vw#%L$@gjC-g?XWnepzkaF^QdXXweWc#|$-|e#n zI|`JLJ0Gh=Nn425?OmLA{%zr_Kt;ciH7!G@nYx#uLHX8HN*w$y;|8plgUHm5$_|vw zVvM2w(H!(L3HSb8I5^(;b9v1TIHaiie(kl~tlyO^_ai@F{*-L$@=o<0LbGXzjXXyr zVCzkuCp6%aln73^xC47z^d|33-0}W|7Cil#zR7h#Z%Rz2_s2MQbGLi#-R<#wJejdK zYo^R32d_Om+ik>(AJ+@&x0gjk_43{B)31E>0;abgEXHdVDbbCYKzS(UACL0J9A{qO zvBE2WMgvm;z?=>`$&_ZTrtM+#>fjv;WWcuv>NeSG6TB%#h=r*?%@B)eW4cuLERk+S zDs?w=DP^5AZQ?Fst)99^tFSs(T@7ov%2uI+{IShQ4Vws9QW$26t*zKBlT@z{*x$($ zDfoPt?XZS-*Is7L!U&If=`wgPg#nHfbXntK*Rf3pvxRvp6o!-uF7_Yk6eHFw4JCyJ zmqL|Lw{^#O4nJ?DtO}FkTHK^q>`v%>!cVXAr^|aR#s@}f#s7AwP0+CN2v?M=TiH0$ zMFxPq9<+X6aP8)(JQ3Kdk83RW5Y%OP(OSZ&-D)s-U9^=JTMvY!XDf=!84YAR758iN zwS4?`^Zb6<+K_J#a^KMa&L>?HAo;U|2F-KkP`tqsJDuw0(7=uPhw&ia;2wwdt=|4X zXNGPSL9cSx-}hD(HRbi4a>w!MtiNDiy6_wuo1r-jJSQb=Bd7Rw5W}H+dc+#4Qig*D zpFN;gcYCFeSgj04mD1?8IV$E|Q}=QeSW=*+j8GezkQbXJ&mW%Y`STSgFu-w7U^F7T zL(RMaIt`dOAVwkRH+~OBuK>{g!c!SI!|@V#d|!-y_^XvQiNtqH2BI&q2y5tIVZN-2 zIrM1sBKFpX zI(}4IG1T1EAHA#!_P4Ef)kZ0`W)<>%j%NAL@-X6)D97l=CK2sDB|B2v;1-sd{&_YI zkOKxn8HdZyFsr7o+?XL!;UT$2CJ$w4^R*@?oSXnWtGwdBp|z}5{zLGzM6|y_DP%}P zjrEAw_}lPVEpw-4CDRmqpczb!aMZFpkp$rck#=Zh(%>JAZk@}@8V^6>Y@*7)HjV7# zrCQ759c3Hqc7mj#3xt?9+<`H`5a#xj=mHptf6+yYD>%!YFsAg;GWmHy z$Kt+OYKgdNFnQ4qyN=qUNpTBh^fnY5htStew;F>Uh}nfTUMOnm5NcEC`PV-@+;y5Z zD*>m>bAl!{$V`ppy4qb%;KY9()e;6o(sG6h!x^>-N9=KdUk^wzC*ZfxtWP zBSn-nQAu$C$FtY2Z)&USDz;hGhf;T+rm9NNH@nL!=YafKsFDhTF7Nr2ReaL}o zwY?I6nUJLswANoS28Hq?uSSp(6PSGQTd`r0SJy|@?fu|Nu0re8R2*7@z)={#qV;Pj zP64K+Tcz_$;ViFH6_!k8?d~9ckKD_y0qQFun?a6+++|tWsHv=Cbm`nuA_->A0eLR^ zVMA{SwenHe&yW&*f#w?wxerz_2oBg)-1^?QNTZt#wr}doLa|biqg3Yfp@z)tRcFi#i_A;s^nAqs?CSHJj>8(2W zXSQSkhC<>3>dV60GxmGrNQ300L>N|Aq12Q(f~siC=eux4jIUgV|t9h z*KLgOyHS%YE^51|y1KL5inHpQCgR{!fp0e4)_|ta7#qguyW%VtHKYl##2Y@`?4mdf z$VsWPi9hufsx5^^OJ)(CB$z$~Oj$Ns8%bYG+2z(ZWWW_ zERF9#eFUu4lP0AuvvOe2^JKnTj#a8@Tg)h*F+!1?P_~RB#RMHrtB_axQ))IMMOer( zL?@{uX0z71Z@fIFkH=|;FfUjziI@k!>t_jtS4jw51l0(;A1R5{3sJ4hk-J7$rXjIyxs5Pa`YR(&Ry)~f`LuzdU}@Wu_s z973`MtLL~~weHtV6qqzTi%2@m=wOhVk+x6-Tdz`mPme6J4}0Y%$aGQI`0aM~78;U0 zf`!Oz_`ot%R0ya~Uvxc|N_6smXV7jb(a7nIqspA6zo&C$V>(HTig+`;^#xZFC*}Qe zu;@97=ymjh6A{@Y26$PN{pOtCVt3kQWim}{ zYeE|(T+l&JK~rtVa75tw4YafluM1m;bZ*m3I7OY8vXCPi%^ECpJ6?wLc7qhcxGT4s zSYDc<>4_*$K>^dKqUHNSSUXF>tY~%_Os{KH#H|lkLgtHp@O?4dSR{2b&(5Pb@qjP< z)mSuW>^+8fa-Aiq06ZpD^)8`AXlg?#)?|h}@rT5ZmH9B79<_vOoN>WTXc{{%e3gn) zvNWaS9L-`yrYJQxq{5)`=*1|4Y@_IkHv5ELGTuG9WSkYfVIXop)c7k%XnS_1 z@sISQ{41&SZkBG}Ny>4xEl_819gKp&xpuS|gqSjM?)?K3rKy(GdrL}_Dh^$NYK;2$ z6iUgaMBCV{m=RdVg;FRuAN(s(25+O0E!SgCu52xe zO}`Ed$b?;!VQU#bPgoSTJqk)%+JiH=W=!CtzL_@EX0uOj?d~V(G$b^sbk(`#WP^8t zUy+AO4qIK%QHx}aVp?;f<$MuPO=HgEdAWw1Gq&s0hjvAGOtoR0I8rNUZqAG$CxM}=IknMm`K`r^ zY3=)wgH7q0o${frWOZKsQNs8cL~;Pu=#zf|b0t~Rlh##nL~n8Wm5VR@`S=Q|d@tRW zg9}vc?D(f-_6B~ymA9{HCE34(J4Eev)w`(C6NGwJmII(;5Q^n{md+NYcJ1+}sYz7` zfisBx)+MMmnm9&NDRS|qpw;xfRFS6E^DC`wmgKc4rdWO-#-sU2!72-xa-T4Vf+iv& z%BYdIm1Mbb0?7fXlo}T;4`?dsn&M}`^H{Cb+Rco{#%hLR^a6y<$Us$iGl^9fmz%B~ zs74us+p3E%NjA1t*Zuf%2didRpA3?^8I%w`I#~k2wXrIYDAt6goVRXilH09|_9pc5 zLfQ%h?ez);#OM*O6*zMWv$ZN~^{Ufjh|=C)*Ltn97l^9+iJ+t&gP`2a>k{)_Cbo>N`0MVmPRN-Y1xkn<`|xQTfqPWyg&i1~UTDfierDNIUlQ_3fTShNC#KTPvN_ z6}HNr?W4uS8*>lt$--YjyANTyR!FI@%@#LRTdK+K*e#_~em^NLBd?FXmW7pQ zH|jNw{{6?DXrkCd#}1)klQ2o{hag&|Y)_LGwHwR{SwimMRC+43eTZ4rWC!9Wkrp3+ z5ZPb5wk~<*+;MeIA@JtfZ;EWRi+gl7Oa@yWaJ$G-N9dTbskcD+3WySgG)~`D`QI`) z4q1akrq`p-^Vnc4exF#h%~S>wtyj0ck1*CF%S^D+&X(pSzp|)My*$03yG)~}(1Z+1 zaj9l1bp?+QGSo?uC=Iou7uHG(M}n?33XR^S|J#Zw(aQ5yGiA!1Azxe`6iWD5|L{xh zDUN|AINdWb3;pKEX()w;4KEh@_WP7&v&OY}IUw!GMh~Qono;LZDvi4gu*p$g`YTSg zhmIhXNn@83VnPeG790m&9eG*xJYQW`Qu@HQ@glRSt&Iq=A@C(DJygpf(E6G%gp4%G z`KughIB*)i_9YQRF5oKe8N9_-z6sACES9Fy@W-PMxoENI{#}WrP(pdJY?yuoF=zr2hW|?s#bF8{AwsvE}pd;Of^qMhm zCSwW0+kyg%K5@dFV4 zY%X0?$)r=$OW3~QN1Ds}@3@PL&e+41J2B0j4=N}@;O;LAXDaB;gIVKusXfy+lJfeT!M?SZu!hp?UMTBo zwAD#rhGNE))MJ({2xmoq#hM;pj60x>6k^QGt6@(?f|THK6qC(bfvs z>2OCBNiH}=Ty4wF0W^8T`E(#^H0Hqr)J)OMC+8w9t^h8j%$l>lZgC$TcPVyCu)Zp7 zEN|O)uDKg*1AO-p4U>pRZCu86gk14RlsSx*FMnrD*;528%Z5TG?Y??gA1>v>-OygP z6|051>LG1xy=fC?LzvLgJ!La*`?!zbS`Hz^0kN)c!_~fzboF7@y~`on-X<63VH8}u zbU!9LO%9zNXzl{`LK7FJ>8Mp3t_Z_M&Il<55o(O7z#D;KUsJ1$$=pyz1ho?Qy!pmV zDthzTdFvfV1AiZcZFx{BxR`8p3tQ zk~!NNd`2k7DI=tY7v7FJk>!8=K4LquemdxZB&KA**u(vFhNl{lCi1?sxTxkxP$&^M z+Xi(3MpKdJyb0naCHibV&64tb;Y{$`|Fn0>;z}|ak;D^^* zv}z&4r?>*E0|u3Ma-JEoyXp>=%fu|($69?diNE9Rznu}srZ3Fn3XLjzRB}t|BYEsw zw5MK3yqK`mBPuNylxy2{92UHCIY`Z5#LKchF7|q|nok-QP0qs@J^fgv&S^_F!GU(z z&1bCB;K2Y9sSNvjlVZl-@6o3!qp-7EVOK>S4%eb}HfQF${B^_{jKm-Ymm&6BO`bm& zWrFa_xXTNAkZ0q~KF?{&B3BY&ba-0z26J@Pm-UWHE&DSB7Bg2+b~{UT{`VtM}=~k25~MftDhTL z!CBZ}X(gUmz!+oBy}Yd8wtLoNeSZgB>?jT<6Co0qQNXT-G2&%)SN5^~4ulwzF^#t| zkP{h`BHi}7#<;`m$jY!f3~jq;=Y}JdKbL(2K4B5AR^l4}=Bv7pNsYQ1|;r9!C2fjgt+|%j5_NRn5vf$kNTGl;4FW&C(uAW|I(^mb=wpYvR&x zb{BYCm%5kvNSB|h(Oh5g`C5wF4NUgBd1!LiYqYg&Xe+C>nzfOvZ1DQ)tBbqc zA2nKvD4Z;&#pTZ;&S~jsuQ1gNX-=iRux*^3Cfx)54N$w7Blc#p4jnx#0&v=m4FyJ? z22nKR6EpvUj<(Cn{)EXe;8YZcgy@WHM{IDJHFzGHa>|GB_j%^_Je`~TC0<;%;?XR) zWH-m^4_Tc7*@WxFDsdM0+ANT8l1IxU?@l?zJN8=#E9iFo<10UDziNugzKavPRo&wVs$W7BHjspO3aZ!~6guNCIqK)-gvrU=omJ0VVvdibu@>Zcwx zR%u1Z!5t0e(#Q`1f*?T-1Sr57c1pnbz?vi=qyR2^w(=mO8)X*UYOIk2u@zI2^q4f) z&d-i{CGoe89aWVBCYU+b;nhTZ%{rn7e_y|4UQKANxPP@S@wMVwiwD(VvI{&}Xwk{A zjt3E>-3{u<(EGL`eC!)UWo(*4L{fs185Pxiwj>SX$OCdbmzXXumJ(<%62XT6vc&vr`oNYm=SMo-~S* zH0d&?(B4o!RX!pz*4#yU6%Qkd;gJ*pO+|+%^?~-1{pd?ospiUy;-)47DL#EvJ+nUra>5k3G?L}ri*u=^*3#08 zD|ZG}H7u&z$}k8d$`3wVYe{s}wUv~ztMDnM$`gw%J+}AGM3cc{WckYMhbSoT<-d2! zcuOWOlkt>SjASM* zCPL!hQhE>SW8(oYx49*`*MrVF5ow1Mxe%6?U=S(;S!1`O(H7)@GgeFljxjkOH^K4% zvdwjrXc1#ao*FfFYz-Tx)CLp>p<^ge;GBuHGIL3K$$4&|T?2phGw!ojf$1E<1PirZup zLd<&^4A~mE7^qEB!a1{o5s7FlA-Bmu!j{4Gz8G3iF#k3wP3PQ>rQgHd5LJ@0r%f3 zX;B*4>$R*zhmN!ro(4CEOittY(3ub)`dLD!>{=JkdFJ>y=&Wgpp;Uu zl%d(lv}dz@0N>g9104i&9w*mV)7dI0(#2%^tF96r{4>2%&3ZWU#=*K+5oLi1QfqUS zz|h%fB5JY`j*Y3wsFdAhcL^?y5J(SeLId61rOkuSVXT3`Q%vcZ4TlY2TP1a&ptW$h z;+kJ`nJ>u~qlHL#Pgy6acVtvvpbEv1abCiewGaNbFu(EfqEKLd7$>*iLgNaBD2`cu z(w*wn<^Z3W(P0{v9D_LZ>GoQ7ts81TG>0uWBNDl=K2%T_#9fK({%wUT^OK=A>~vX{ z8;RVz^(iIJ_JbBHvGWoAW~)QMyKT9l+4qthb~VMn9`beK74s~8I?mf;_5)WjSFwtE z2+Y49=aQbfvaCug)$OP2j@+VaHEkIeHeWWQ>rqjf=*?De*;hMLbvHai2YMey(9uy~ zHJeqiuVu^Fyd1Dtl@}$&y~A{JrT~0+AtPFk^&V@l&y4XfL-LxzL}SX6g@JUrXyjL} zS{b2Hn|@EcCxq7#5X=u9IdQ4{@d-{mRSLsVPTGBI*=W^akLJ&1@Sxj`d*r)sqAwa! z@EB=uhqB|S*`|bhyE8KLdug>OD(ij~(R)LclC#raB0hcRc)!u9w~z%F`N|iF%~ho1 zI3ktxX3Ip%V^Kdnz0Xu_aqW%sS{(@mA&5Yvs~cq^WsVOfcGB^B`wcj+3`p}o(`&Q{g+#(Hw7t26$X&u#h|)qK^%{-Jr`?4D zeed#{lu~@}4CDHRB94HsW(Dls){WqhG$v3KBss(Gkoa#(RLMI(Z%a!sk?&9sJIcb)6#Yp(d&%CyI zZd+_vUfttsa`m?=Ob-Uzljrde%VBcrnYBq*OD=M_T=?J+PH}MYdg24p`;UnPbnyyv z^m8KO{v2^>Til#8@-z=H!jJ^r#lf*sUA&hQ?!$4{Mrb}mx+6^5_ygBTUL!}dD6xo> z|L=11q`2|-304o#pPE!_*PR$`KM-{}Q652Gd=>Re`sqc1iBnA#Uov{Cow-OuD2?pT z{p`73q$*0N$E|oL`XT_O{nW5HFb6+ohR3R_E@V~wo48BRFDCZd>Dk^yNAyt~dm%IJ zoS+QM2G~T@gXTOO)?A}^WT&3_l=vgcXR(@?(l1`2kBbZ9dQ{t7LYInQDMVmr`V+t5 zp%9_xADO>Wzo|pK61my8L1`xM%5WHIM!N0~ij9n}T^vhF>!-fh;@85|#ig%pQ`FFJ zNuPVguz&x3(&xgLS&8sDV~A=xtKNU#-+L@APwn}-mP4eovlf?gg;=UYqviqe_^xa3 z-G)1|v%5TyX+M6yN1Khj^Lt00qS(#`CAM;N`vBRIsbY9{=ch>J?*6-E=@8W_Z&4ku zk5T9^c7M3GDrwDQY})7ZIdRc-MG@XU)%fal4O?n$h^W+JBjaGNp54)}3QaFV^NYDA zQ-}Ddwk1({c#_TQi-ICa-Wv_lD$*B8*TscfO}9*}3Z;gw79F%US_kk-1QVG+9@Iux zWtC;KNsm$$D@Tt~3%Bh!U}qNe2m5!R1*spq(A1_4b!yB;m+5GcDLCmYEq=-I0Mo}b zEqtMvCX1O?7jEpDEIKvZ$4FkG>44LRV82Ggvd_EqtN$CXyCY7mG(ODQmW!YBXmfON z?jjvu*>kl9`2x!9$9u6Bf0weu@nKKpvwO0}iWf|BM^N#cC{pb1^BubaB=9MSUf?p+ zEqknt10{kJkF9z1rXWguKU64X%$9S9720CK{O&em+uy2@(M|s0LX4NHD)L)kA1tu2 zi8ZX)2$k`ZKdViZHsuRlM!z~|LBbLEBXShrA=>ov@FW#Ad}Ht)Reu5*`Ps!n>5Hml zo*Nq$6HX{S@gxZs(A2t;*i<~9EbQ_1uBel`SCmPHpTEK~q39ILeD9;uJR>*r6lXqV zU2%*RJJ#lB7_K)|f;)Kc!baZc@;-GMsbr$8j#KYry7+s~H`3m-d&qe4tXO0!5H2%t zC~P73m{U3a2b@4-zb~cgWqIzac!Z=RpLeIsYASRm7cx!Gu=|Uy3yT8fkF>WFjI6zG z6*5eX;MHY+0VVPF^6(5j<86YMhO5P37QXOAJL4w*#<$Bdvb^r%K(?1!oJP8aN0W7M z`PI}30Neq)fjYVkEL3aR^kPuEbL<`-8NT&45SGDieLUOq=p*pqz-?E8mnX9X&fSK> zHQwMS(J0<0NeY9*G~mF8;df}7Izy*%V?_n_v4GA=d->gW!@LE^gZBJO<=(w3maDq; zut;mCC@dmfw5Tn+q+3zE;|1fK4NO^eQrWolb=g{Vp%*eKp6J~pV4XF*lyE~hV3ZGL zAR6uOSB?CMYX;mZp`QSyZ10Oqxqn~)r{tbCTnl4&!4mi`9(qK-=V`*#h&DF=)}4l# zEQ#jZjK-^VVefU<51UrRPWDz;_LgLtN>ui*gTD2S{_#(btt59sXI?s#xrdeC)oLm%fs^(Tam3=QZ*&Ef>*GhHpMO!Bm z7YkE&@mi|e7MwA*O{{FLt6-IeM=r)5tc=GMVBe+0o@YWG}RbE$L zXzeE6aWlBIH#&(?#aQV6;I7{9vh9+=K~PgzWohQd~fF$ zg%0MT~ecmDK`~5e_p=8j88l< zYY^bemT3v(%Ln!a&4jPH5g0r>6^IiS@!^4q6|+GBwDm{3yhv=V+NmSY;q6V=r;7}s zsQ<>8)HSbd!QulXACF7TWki#$F9hXpH5@F>#+wEJ$(Hkd19xQPBnW1jBeksI>93@1LSVc`yE+Yd?{c+=b0^QE&zvk)sFGceufI=H`#}d zfIE0qNT*=ysg=o*IvON~5u7u)t%gNSU^=O--rq!2d7mZhYdbzw`1@; zj*`MsqQaDu8kmF&U_|q~TKDFw`1LzOQd%x_=XnfV-Rg2AdeG)|-Zs56Rw)%kM`YK+KZ`DA0dz8%FR zfmRfUV`=bhIqIR%*A?F9o@uw)%g+lk7P?_`@|5*5!eYV*s0b?%IJj>wdB>wp;L*o* zm&okOm%bcuzC9I$HMhV`H?gf(Muc!y_a_lPcXd*fpI08cWJO|8$@<>OuVt zij?y|{{skyU38|RS**AjuMNMg@;(OmgdS}+V_rIyMqY{<@b9B3*p7G6<77Jawv9zzb zy808J3^-r73J3ZRy1NgCPzp#-SJnh12pCfF8y3cm0uWfnl!?v$05P;}`)p}V{A3d!+z!~^vVP3gCkz418_I5y9=Y&ag)rIyp z^kyGJp=vO^-aCdLkect+-XJyi?P8M4>sRyOfSeKVx1B67Wz-Kj(_gGPj}@!#Ywqd2 zuAmr;96nut@P4U%@lwqbznpUV;aM?&>gvAbCZf5#FJ0~<2g!6h<3zUsD=N=BUjp`z zOxiVslPZ7RK?nCKJg(SYvM90rYTal2GTklTH4+R*f+Km4-?MUKjMC7e6=%h3TWfdR z7*Yp)AG-9(xxw-^doEMI#@i~B5w~&BKs1J$c|C6)k{{g{2i6V@Wt#gj8-l>R%6O#IFER1fTjoAHE;YK`nM35EhQ&%akjb!#4LRPh2Po3c9a9yNQARz_XUFD8T% zjDt?>2ms-Ljg@M9T98&kV|nh64gN1`!!lTAP}yV;FazKKl;?h? z{^y>Biri1te@!FPo;mG#AfExRcn;J~d;phEd|<{W_;=Tew6W!#6Ix1Zo_2RqlYm|! z&-7^!Qfn0iPY910nW*W@Kk<-qIoXNdGhl~5_~#M=9OhjUZLTU60q#jh)HDzp@U)3X{_b<3%CtOpve{qJDqCuvx0hd)5%VVUYjzgq#^HIz?^poO zDK6jqfIPr^<;QQS>xWeVe^n?RmiIHX(&9TtCO`Q;fAXFmo4on{Kp=PT{Ir54Ruvb3r{-Vbn@4*@#{cIki4lSF1ZuXb}#eZV=Oo0sN zLU!b_s3%E%r6IUsA@pXI2zTCaJ$I?@0J-w2g9l~D`^&Ne<#6C^CDeFxt-)060b@gG zd%`?$zoI-6)bG5@>s_l3RgWGT9npvLef$i|Ip);hWWI_UZy!(|Hl)@^exJwqh=gxcXk!Zgws0+&#u%|~U2MrBjPc?iZ z=;S8uf-^kOVLqbTmRh{w^&aR!k^7+wfkTIOb?%jFRaIp&N-NBEYd9(SQf+mi7V=Ff zc6=E_#X81{j3~wn^)iC8X7F(Eca7`eOeNO6GYLMW>w$|e;7V11uG+GlyLUOc8%V06 zI;Co*VRcFs`PR%zVAYiJ-#YJH;_fH~{n!GB=V1(gyu9Y#P<3``t_@BbbK2VV=tPY9?d$cbSE zlI9Pw7z6dRR8WmW&#;7HQS32XKcR~v_nRY)i1?3#jo@NkF!x`KJElt2LhAbU5y;iT zYX>!NcKTv()S`5#mHDdUYr!TdO()W4;+y`AG`Ne8tJ!}QoKMm71OD^-j;|w3KK}&T z=3Y~HeE;$F&TTrD<+P1f!F^hd)~%wEqBq7Bc2CYuEp3z8tHO>){;tUKI{w^PHxP6C zmg(-?77-g>ZzAO0mwT_bnr$VF!+jldThifJ)1bw(jU39lm!Z9GxHQo`pu>`^37B8s z20Q0>t3s-9+lT?0x8G|E{0*K~y$ExOM-xx`>7(vS^v2dOLaFH(CsV1QRSUhIHgSWR=;VVZNvPf{a?~yTq9Ahp!61Ai5Wp`O?yvr01XWY{(=UZ?3Ap*!EB^jy6Nrf( z!!j(jETrh^hE|s!|0F!pL!Kh*FQ+1t$zDY==>r#(RpnZOf2Pc2c+rK-wK;rU3BVK+ z|HsJiLzeJr^{qtU-~YzL7QnOK;~m|EZ*tS`cP;mnh^cEF2 zETs18)l{G^9$^OftFB(e7cij({M--p_yd3f0g_6T{A^ZXhJDIAd)@EkL~-$)x>_Td zn06-^>jR6H*GI#ZRpF>)?trsnJf^1f$^J94`_A0& zvD{Fz6ce7xwJs^0F>47?bAFWYEFdWmC{$%Le_6f5p;Xj9jh!HbIoG%UtVF{udMC;!mg z!Y7}sn0#~)K4u}Klk(~N&OCFU-umQ|Qxg1ET5YqGU>chKTI$TSN=T59lm#!=oxBv3 z=nj&-`(z#si(r-AL8fCvNnjEIvftHmkj$XhID1Q~H_nrq@ zB09C^Xu4Sa#8J~vFaTKuSLh6KKR|x>-GuAH0es_q_q`DxGF=mLPv+jofq-r^ggJyg z`Y3wyrQ-27zxi=5O7)(6M6DTtDI+_EwBfxCC2wNcUeNFzmNEGhaD>ju-FKU}*Q}^x zx^Mv@3j_F0Yw|GyiD7Yk^iku%+O-*AekKFPVZG-oeZF|Jw+CU=AF9pF&YvXbdxzk; zZq?H9g@8$Lv{jGB^o|89DjJ*Pa=EW-WBy$GqGeSL-nogrLA+F^L9TV7tfs1Cp32ws z%n3x%*|o5$vQr%!S#@lmmiu;q2}fG4mtXlUz8UBGJ8I>}mR*HCQ1i4G{{Tx4M=-q$cfF74v$_^o{ZJp+2;Zw0_HwL zMWTGuz{UW>FPv&gHP zy|)eU4%?+ zQ`b;;VTPm$Pd3||DlEUAx*qkn^^sR`m1TIU)E!#1^7>SgfxjdU z-5WM|s))l9P_b~^LV^CuQePL`7?@P1xpTOyzD<1LvySuSFPZbleN6&^r=HRq`{y)@ zr=M~HMT&sd@9FU)HPfDuxb}I5)}?4QdHG~Z>FSEBEa5TW*Ju2lKGVud0~q5gq&#Rh zFFKp(42YD^))9bGhQs?Sk{0u@ch6mB$q&}Ro>E&N81cXdpE3K=13JKIyPUvB0a$ZQ zStk12dtLWEw{^I!BPRKIZ*GLS+qDluN>e7u9O{euPuO;+e@e z3`RK~G2GmDZ@XRSIP40;=fhx$c)X&iq%>aH&=lc;n-?r(ro|u};JU|iIm-XDu`(SA zH4ZfvJ+o9jGwc&Nrg2y5GqssSesyq9?|Op^sK5QTV~Hu}-kAFleYmnIQ&rj6fZ#gn zvBks_#jbg-VWdGlRmE%1(+TXCBZ{o@fzFpSy%t*g7+e+;4L^ zB!plsqlCDeOdLf5u<)O~*buZRd*iK?x|BgP0x(zSB=^hQ&w>9lm;CHm9*c6VS9!{W zVtm#1wNan-*F`5OEYMeU;8_7Ej*a|K*PAF@()^CAt}cIRxo&e<{N?jLf7aS^;I2*~ z2~~tKDl6|d6gmh20cqE^Ba-%#(}m43et+(FdkBX`%mFBYBvMKyKBb2_fC=W?a=%`W ze7+UrPahb1O@DI`xbCuh?gtiTc=#^73~oLw^tf&uzQNW7hw`;|W(gNT3jD5nDYF^R zeLZS0c*7gE+|`2A3MvfN<}Sy_$;Dck9CM5nMNW(sdS_Y5-rD-wsW?Tbbr@7$_IXDc zzrXhM#_LtMZD7uTk^7U>4jU8SL`EnI8;yw{1+ZO4EnjxQ(J5w_DagbN7(s)KJoj=c z_dj0(gItKVZgTwS>jq4uf$%qw2010{GZU}33@?s3V%YEk;g-qBH^MH1k|n1(XRHRM zM$CC_5^}^k?6YO!$Izqv%85*B!Y1{NQ>AYa*Q$1%Z7^)2Ldb!;p<538-IovwN?;FC zU)O6uJC7L{rcxVW0yq#OyL21APE=F;hOJxtqe@0T@pxW|$H5Uw%kEvx$lS2R$h0`@ z-S2rL`Qr$_s6~Ap`nrorG5%m^b`+*{dESn0NA#MWU*4IZ1b5GlzXZ=2mQULu(b4S6 z?H0?O@~Zr$BH1I_s2>Fvk33XBRd*5$COlF(y6Efc8*Dv9tnB`OlsXd+&62$Y&qgGH zYNX$=%a-;^j`3NuA}&pF8PakGth4f5hHzgILunL?XSGxSbqs4fK%&!mDJp0Z{5T{B zP0r$EM0~w_sO+3_efJ$cVdaU}L{_gsHL<@ul!*Yf+5VJ?By3oEpt}D&Q`h6qr3!?V zhP_=DG&HP%X_SX-FLWS>T98bK`C!h6DDflrGWyYvqiyT#eN9{25E!;^st%Pqx|!~+ zUsOjT5fDRnPcd0mHbqa}`7u0}0s%j80CZ5%eV&DUnva%B7#9;-j-fP7Ed-RP`g!Fj zO2DQFx%nV`X0Rkmt0FBi;=I47Ky-0x*Zc?P?~!9r-7><22eNPJkVw4+scpFUmZ3T0 z%1SJnS+KlE;Krt=SAZnZ`AF;jEl|{D^&u`W5%~?aof6 z68un4UVIf^Zo9|mD$#q#0==!S5rh8na;v>I*5PrxEO&L`YSxxpFlNB4rSn9fo)c_%8&lvVA!OccT#N2 z|C=^BTNY;eUx9IU#LQgZzW^lBmggCa4cdTOJHz~CJ(J1WsU;;!ZRP4z(laP{CZv41 z>%G&MaFIy#c(Cx?$FOHnNUCBjOr>6P9&rKyXUO>v;6eMeHwOhGtEsrKVu0GZAq1r` zch#nqA3tTwHpGTEUh+_iTRMMe#d7S|tKX7~9tIT9L z9tfHSVpScqWVSXn!B+_SGdsRM{n|XWJ|a>{vR%IDu_%caUfem!(NyGAfA1B^%^pGZ z3K3Rcn+f?FL@LN$GOAMqg?4Q zC~|+X30=2-Mee;wwgLpPOtL~+z*o-5eF+kM6}>5~;F~ znYGIVpR@4ITj9R@;_;Eu#GGr#R^19f zkgKfgykK1dUEOvU1nLa~@=IVK5?PhL7hrIN1{~bF<$@cL1;!$Hm;au(kILkfwY1b}lNcR|Ss7n{DT3bkcsz_@aAHuc#PcH*9;P7a6M> zEI&KbPz%+8K-Y(S{|+>IX?!#2)-Y^&70qP zZAMM9HbJt9`S1LbcYIFXG3MVcRbvqr^O}Gf~C*DeIc`u5rDff#e#se^} zCYSSbNAN71=if*K2J78^aS(spYR-< zt;PJfKQ9!Y9IAK2-G(hZ)lio=vuz^P-5KD%SV;XDZ+R!}=m^;+^@|kcWwgm*vPMP~ zfrH@7pQUPw5|Q*u^;BD?FFyrn>4Y<~uJ}HFijP*7uDKeR;c%>p z8&ZbcPi1GzYz>RP6`%gShT=9|umU0X-ot$FLV=b%lE{jWA*b$ib^5Qv9legt}B6 zQ0n~k+vi^l@atd0ukn+Xz>j}kHz+g27e0=N`0+0YHDecpL%Ch_eIEpP4Z_*EcX;oU zy`5Z%|KTxKWDWPIeK;ZsjHUF#LN68DTg`_Z%e5@mNgmZQR<(%w*!g>4m5G4cy;Va-4fHY9XN$y7sC{RJSZGy!Y^=53!Wsy_lA0&iZ zPzjs2%BvK>tLYc7n!+ z5|&((4U;>%xJ2RUPb?*5(=5F3C><-jBg-Swdv7$(dL6m%Y9+i=FF9)?ALsBi2Z}oW zhe4`)9^Gsi)M6kyuiI4_C)B9B9SsRfZp~z&ny!tPG@FES+d8%oevEQXiTps}z?VZt z>Vc?1a;psn*4o_;4fUpP-2e<3Iks4M$GFSk-FDP3RD0`sRY-#=%RGTy9@iL8XoLQ2 z!XwyBT0QP*S22GlHu)*yzXx3c?8QZ4-vi5Md(~gW<(c{v;m*&HacWY|@MjJ;#3a3l zl;vqXNAkZX)*8Zu?{V+V7ADWtnZlT&8fh9%GRn%ej#pb1t}^E|QAz!?v)H=?BOIzB z!WeSE!Zp0?_?e?zDhxMXg9IpH)W1+HV?t{$p^(M4A+E&kM;@(t2;@B0;VcCxJjo07oZ7SF42ZVjmS1o}L z1P$Gh%bfvrW`&AYJEzNcE^6r>o;S2_Jq2#*xNA{UHy#@7X<8CA;Di_Pe_0@4kQd>5 z$eplSE6sI>!5=2>u3Wsmq`Iwks52tWi0&-hRs!R-jWxl@7ms^o5|5X(nC#I{Io?Wd z?f(Fcb&FO1#XV7Ln+RKmzgUeTudY#(P;IRgJyI_U`TZK9 z6={~x=AK|brdcX={6-10QD^3MI??p%ilDUAtMV=Pn%T75%v3rn+pBuL>2@h;pFJ~K zYtgdg7?&qJ>+R{99Nk4{)4q2tj0QV4mcb(6mT;B=FqCl{*-tNQUv4UOi zUf>rGhtjB<-1fe(-fsbmd;7hzCvN{Qze8F#HRgoz31S+$@e}~E#FVL{9_QC^QkR)J zrAjw7Z$y2vxM~X(@;=pmQLkwfkoSDVRVVfk|9;$0=t=&4pwHxKUjE|03vnuQS)F)< z{8o;vt7V@#R>*YwQ`!oV`hvl0`Hj?g{`avH`BM|*__$$N6aOth`~wZ!pc9{DrY>+` z;u#kg2E5JH{NDlFAUMd?JpM=Zu!V-m{jdBA`K==?{xNdec2wJe!`GA-V&v-+uT2V( z6wi7;-=(X0eCimSd_#4;e(@rG)QYQiZK<@PVljn3{8b({GV}h7#T*9J-hJ)6@-zCQ zM3{WyQ&j4OXiWSsTA-A1rGt7g7{mo22vHj15@fn%;KYBUKr5_Id{llBAPkk{Ti(<@ zHylb{0H3Y!5o8l@o?#Qd$EU8_Vf+SRrp@+vv;1rGaZXrkFXmmav`@FtJlgm1x)s%3 z=yu+#Dj#Zd>_ipl9JdR>%h1&Ym#$PES^~lRs6u__-Xb4|eNf65)H;iLf`Sw=KR%QO z#wYuR5u>lJ$mbWHUI+|Ll{d-v119BqFy7d`dgpcHDn|1?z0f@w#4}!C$S4m|KOSR9 zsIVd>^{u0IM_KV+b*i zm`|MargndrPDF@J(G@I3e+{17F&cUK;6J;gUxS*RhXR>iP`{`4oNnFp$$1w4=K#7d zS z9Q&fzM|EhYYPT2LkBcG|?Jl;U!jx;aXwEf!k~IpiA*7qhc`d8L98g#e zCBVb0TINM2-Z-^&a#Ejp>*O!KdJ(OtR$8=e+UpDR2>zDZJ?UeOG@i&OX!EHP`fsk0 zeY&iUCwV01RmZ`!txVc#9{AZ?I=N}l-c9qqA!~!;$iJsL{!*w6ChMZ}%!ZJ#WL?Z@ zMZ)6({hCPb`@g9O6~Vnf-#Q-q7u!af7xs}aM%bSdQI6#m$WQIV=@*J|QP^j^YijmI z4LSbV#=q^x0WB@S~Iv}%2#wxR)_zE%(|+86Lp0^8p3#s z*;?yYpt-Qej13O3aIn05MbF7LotK~TszbN3v4fnM2AemRMP#M;d)cS^t7^?~msO}H zzhFhOzT8HL@aD}dBCD%H-lB89g=w?4s$Z2>RajJqE!smT*OIjV-}N{9ruFZwyxBLj z+`Il=^+sfVxY6se+q7P7#NR7t0DEV-L?t*ayr1oYlxaade0g@;-z+K$=6zO0V?HL! zYQrbH@+3S>_Svp7foa0y4`#ctWTL7_em`2e5s#3N#D3q&B2Q-Cq$qv7&5E*=eC2`7-dyM2Tlb2`2`E-%0zXIG06M~sXjTDm~m(cxXV z-}~9SxNx=;4AT)_gjI}FtG4%KYdQ2!<1|})I9Zr*Vz&13^6yR(DfNb@-)Mh^r?tAN zeF~;_u@f;bS8>c6oVI!^^y_Om;kq4c%zD+Asb}6{Qx+ZxI)ek53_;7_;pX0#0?wKH z8uEuNef|^SKKaB2lkcud^iI80Di)hu=qILLVU^|6-Y8XgC8!i>*kg=9%{4V1O@znF zd6biyn*7_OYOeLqQ=Gg2Z|5f8eMWRV+SEiXF4E;rFk)~Li9C2H!?;E7xGOpy*}Pd^ zqluwqg^OozsqoiyzYAZ$?P`83A*Be1`|`~&|K?YbcF_w$ywBcx&a=AKtp$>RXiY=5 z6heA5XgvR%1a1F*BM>kS9LN}P6W8htR>4wW1dtI*5cq@lA|TP_$4Aqf8o-oK?>zc4 zejVQH?fX=~N#!zor(pAafI3q+Hwl-r|0(c%(@%LI%Z30+Qjbn6H}re;_eJEOvCOoradugKH;B)6!#VT3NQk{h3%sv&K8jhGN#x2Im z5^aG?xs|jH($X~lLR)bqh{J?1!L9Ebs>$|uG7gsv4LeE8;7u)^UCYXCZ~}U$dCsvr z-7lR*23u+5uhy!G=Qn*(zoG>Ls;SSYQZ=(lW4ma(oDgt=f!tsGpM={M$K0P?2!bnr zz1nL8T3SiiBuuI$lH#x$-nBGS%OtHW-ZnGhn7!;5oG_0)d(}>m%$}7}$9oOIEY$Jz z*(UjF_h|>T^QAsrERuJj%H}H3Bdw8R_O%wpM+M7NnWX}E%`?$sH@$YzW4P7z_Ga=E z(U9S>-u(aYmz*tMk+0uH_6(zdp@T%Tdw#r~D5x!!)@ag=rfl$zOjqf9%d=RGquw~S9Lter)wxr$;@_X@pAe{`; z11$IA;LW&3E7~P|qqgltyM&WyA?YCxun+@JZVEn%|J?rInfecG-AZ+vlkXpC=|>)P znj2m#yymjHKJ!oP4ZeLlY-nzFR90`_#N zVsW2rSFe*cal-a7rQX!mc2ORaS9_7*cOkT3jMhs9?D&CoHm27V6l9PE`}dTh+}-99sx4izO~#b*w2O#A zURnwq!CN@=zc2Zbxr!ga8Q)$Y07_xQs)C!!j`;0Rj z=lt_`zv<16^PYF7Qj9TSL-vU4el;{Vc=!RwdD~mNJ2q@dZoVPJPB7NwJy|3eX1E?j zKGdEq%8x6*y3{<`+%D}e2)<#{^=sv7_N z@I~aIpg-!_W`E@q0Q#EVrD`;^G;2bU4W2uF{5NycokFu1$`PC#;*DYf)}patbf!IV zr-p&yo3R~3y=YU_45)UV*HtEFHBdD+5+jx#=9U3J!L zT=!Rz7-PC{LP3m;_Dvf+79|fh9SX3*hR6OWud{<0w$7THz=O;pv5Y&1E5D!28F>lIgN-w}jaVwnOHS^>*~7lx8v>N)j`@M9=n6 zBq8M3B+r`OSsJ)}Q^Mnz3U5c`oyWJGNsGy5eVu%Zk;dQ~$p|g#eG>zyX8KQPC>7b} z?(P>~lu9<%rWvQwYT5z3qRzU7@o8Qk+$1Hg(v?7{|Wp#-S9= z5{!z*yiFwcB&8kn=uyk!pa$g#s{vYCdzVhLh5rZe#Nadl00031009I5u>b}D00000 z0ssI27yyj`001Hm3;+NC000005&#ka5&#katO0}q5CYBvuLOAoFa{h3v2 z5+OMuVIhej=ORubs3QC$S0kw-?<71Vz$JJk^(IdyuqO*AY$weq9Vm(^5h-9Paw(@N z%PK4?St^_=?<)fsQZ?>KNc^Eqlc+d5o2>pN&W|2!Z(Ks>uW ze?8zn8a_upmp;lq@;@IxTtBQp6F_i4P0U_qDB`+eMaF&J4ba#ut+vYxJe&Lf=S>?K}y+6WJ~x=g-s_-%T6;+qE9qW z+)xovLs0Ee7EwDrxL=E>c`lds3ECzf$2-AyaTuv{WusT~x1C0aZs; z&sI}bz*i(!;aHkk0$Fug#aa|vr&}{y{#?Rcq+Wnt-d{dn(qLy`pkV-EKVh_DBw~zX zFJrT0Ib`Hzk!B=j(`RpI@o04b00031000310FRtgY+nyN^#Bh8=l}o!0Nqt$z5oCK z0Nqt$zV_DsF$pOH>i_@%2mk^A000000C?JclQj(6Kp2JJoy*M3%-s6iDILqq-7;ra zr%vfEbz@vAC6)nZbR}`W>A@iaz~Jv5j9?2LNs-Kpp-D#`p$?QZ6!ml&@k` zG7O8zSXajc_XUHgPf;wngt5$&660fvdG9bh zxyrm1SmtM7&Cr?o=ba#yeBQeJsfwF@;9!o{qi@wZL(lqN`hn?Ye|S0O-8l(_Q!Dkw#eRY zG8ik`@`G`}>~<+CB#TI6e3jgweo}gVt>6YB?Yrq&`4z}iBiy9c-DixAr11G4*e}Xm z^d1 z+qM74IW>VIsNg36qWTA20C?JCU}E~sIDvtcfq|)uX%7PfLl1;ze86DH$i#pI8W)xb!4Sp#n(@2>14DltGf0+cEs#)PU<3d>B@r(G0C?JD z&r_V7K@bG+S;n@v>uzp;nb@{%<1Myr+qP}nwlO!ov2A}jvr+Z@7ed&B-VyXEgVGk# zPDkmWz9@zYx2P^WqN(U0mWowkv-n{1+E3d99S(Y)*uqa8Y;2l`+b zCSWQSU>Vk93wB{I4&oHf;3hO4;;o;b|5=$(CY32=TG?GLlRM;Yc}O0W=L1~c6kbo( z*Q%u&tR|}2YQH+IE<`hL!)-90`5}s?n_Mcl z2Wbw*&Q{<=-lQ{r^<^Q^fbx zm(l0q-~59=@N!jKe9iQl_BC~dcM5M5UI5eGFaiMM zNeXZP0C?K0R@ZvlOb#8YxmT4Grhu8q>otdp)7=Zlv^L%K`^c@NCFg$kD$l@u8BpnW z`)CW0l6(1^RWO4xz&XIsLZJY~zV8J9Z+?i;?KfE3{i~19Oq>qFj}Y(sn5#!W`$fNK zwd8?mSttS&T5fcNA#~_EXefm6qk}mmEonKJSJ3{PuT+Jrv8*8s-6U7hZc@){%;~*P zfWwj&I%;EK>r*F}%h54t9p156+ZnAI?j4||bUS6EOg4#P%RdY{HG@4JEGW#|Sk*q~ z!9+o`c!hAj0`I}G9X6yrQZINn?ym5|Kb3p(}=1mn% zld8J|oMrngdD5vq5F2p>IJo79qye@K^6CYzUW8^C1c6Cx;jnI@*zr-kVP}i><{P}n zt9x&vALF9M9zTlWAPCw~fQB6eT?7HN36FFG2a5`*f6PMOpTYrccSJ60b3bjRD*=UcBg`FqM59Fsuy4k}0R>#`D8VX-1K<;IEezNt+(@e( zRGooQp*?rTIvSiIb$XD7vr`OPlAfT4;Kee6c9(2nazhYITstC+S}UWCEXBwr;rNiE z1VvpGG^$cSpGSs8-lHt0w1OEL;xU!vavrv$4F|^+xdPyre$5Baf;xobyxXDOc-pTC zMXQt)AP!oT87FiIaR@j;v^hAb-t75Fp}i42#F0b!$-%OEv+cjx&6K7^`f{qTs63hfthY8ZJB83E)dYm3 zN%c2Ld%9Vdv@j8(EQv3TVx?mkM%t~a5{bxpdp=G|7d#x5E{;fI%7yUz&6|dp5M|-I zE;CRen-L|IejER5n-7St8ey#34&G3S!SW{Y&GME?@+@zwq`=ZtNs;9pm6TZCRY@Pq zdn)N?d0!<1ENvxw{9`F3rX@7c_y^w>2h|B_+; zdou*hC1`FbNo?@U&MJIl<0HC{j}<@@F6pL><|IGZukFN}p#6o~M;RSEB3VozIDeO|@LC7qu^f|29_ST=LAQGS(Nw2Q)9KABB$Q z9DJ!7H9f~01fnPVuT;=sTVhd1Z88^hWYRk1C*9eYNCJ6J$xZ69qzs#clSG;& zgo~0$&LYVYlEh*?qR&|;I+2U0a}jy^?mkJ6a|I4A^|%1i7N@#g$R(m_xo0BGseMy6 zIVpE>rDsdQWK5&j^Bb@vEt51oB^`Ry3M|!W_v++tm#m2wO?$Unl1F~^L?yb{u8@D= zoQ2$L@tTs*U=}y=hW5A2oxq2sppncP72Cn}Q`Q}G>y*{KF!rhlt#HAlO~EUopqgF#j^GTRQl~0p_TPLb?gPr9s1QP@Vpt(yBq~S%qY43IG+l~u8ZbcvCTYM_R16`ssisw8 zN<~HSX)`J@&C&^)qchFZnHK0wi>$Llv7`{N%sRn}Lcl6bw_=S3q-nr94cK6Pp3F^xzqK z@S<%~vb`_*vUKim z^>F6*WnKFNM3VtT0C?Ip$*~Q>Fc5{|cO(G=C=Deo5-3wd)^$`M3a3s6U<4W@H!zD2 zH;yM@E5KM>^}YXa2zZ^05Is6aqk=+z5zO=xgeJkSDq3W%i=UK^MGM06>$#4|9#H@+ zTe3&vT5HlCSoUcLg&e@$Ms_Jhbp@5J?a%*5I$u{*H-X+aSKeg;_SG;2^9P$3D%Jo1 z0C?JCzy_3nP?g1t+h%Pe zY@TgTr*YD_Bk0Jwl0MbUx!6a0UjUaVa)wi9FNv3-iBEA`Zv&s^I;%~5hX1TJ@mcPl zI@`qOczEh@6QA#jUppN_kBDc*i!7NLQ*&A` zMuoJQBK_)QWp~$$nUkN_ymkNX+}{6cGs6KY=JkqrZ`6|W17CQ@2ko;upY%Q+@+Ds$ z;w|OjCp9#^3<1jWC*AA3Zr=L0Iw$w$n-x>ds=%h2ZsnJ1*VOb}_WE{|oJFdxVI$2y z5{(nEJF?@yyymhtOI)VXrmh)LR8%7%tKH3tw7aimRjH{|5r}f=HGsLL-1bM98 z#5}r*!B^k**Y9|ZbJNK->FNilIuphN1YM1Fy+;5Q`NtGuW8dZSZ?wGljaHJ)KhrOZ zUpwWZ`NHNW>>oW!&pN-sr`P}h0C?JL!9_s>002PI|F_}p?sIn^?%s(T0jNMFh=4ah z&%8%~KVLT#`G+Au0t5*YAxexm36i8plOaovJOzrBC{v+IjXDjQv}n`e(g1hd@@$X? z9u3)Lw>|dSXTJjuI^?h;jymSJ6HYqiv@^~+=e!Fpy5zDeuDa&B8-|S-HD=s|NmHiH zm^EkKf<;S~tyr~Y-3A{vZP~Wtrdw{i`_nvv~g_mA={Y?-&7(omG z006s;__l4^sJ3n*BP%Dbps1v*qN=8@p{b>VC3X|PugB|UdHR2O*`KzW zvIZ?W9B@Sc@Os!z+ue1d(~Wm8$Mf;DocK3&Flf9Sg|8} zf}lZ*4m}2}*svq>qM*Tu2{RU?F9~KW*svq@Syph1fc2lN;)V#16CJF=$>8uS=2V#16CE4Eo@ExOsE#`_-& zF(M*=9!_{z;W7MHZy19?`>;EnPTS4u`uXjvUZ1-)>q^9D0p!F8rHXW!B3$ z8;nz}#uLZqv8$mW|2U$@fDsdBELhbvqF2j^9s@>9nAJL>$Aa~bUBqL+hzTn;?6^>k Zph1rTBPPsPegQv2UjYCC00IC101uUzBwqjk literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..378b7981bedd7a5247659d497698e23adba239d0 GIT binary patch literal 28088 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 J!+SpG{{|NCU;F?7 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..cf82f36e092ee0366d808e3db128d15915f575ed GIT binary patch literal 7704 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 aF2JB5{tzzBJ=nH|T+tVABS4@40001^9chOE literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a8cdd0e9a05d5e8c7038e3f74d1e3c427c08d5e8 GIT binary patch literal 12316 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 Ig8?xAAG=oyW&i*H literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0bcce6fbe464b11c517d2ad04371953c724760a0 GIT binary patch literal 6912 zcmV+b8~@~YPew8T0RR9102=@R4gdfE05CKF02-_S0RR9100000000000000000000 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 GK?nfhAXUu( literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..57cef5cf0071e17c12ef946d5c54c26f4d7c934f GIT binary patch literal 19552 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e4ad521a038a4bf9e6b25f6f6702aaabffe88d92 GIT binary patch literal 11344 zcmV-WEU(jdPew8T0RR9104z`d4gdfE08GFD04wJg15h8i9WV!Q5qnTayNRbREnL;4hj=cdk-7y|$E#Dq#h_GU0o>0Wxf8 zjuN(66O?@GD{2?Dy6S7qX31Lem{ew&3AvYS(=B3h_wdt0Q$j?$&g0l>8V`a**5eQY zdVGlYH^zeyDjShh|JA!nG3%TuTalvwH?^eyt8AIH(s>0W0EZB1ByTh$Z}G^Rv!!kF zmS@Y?r1j>>zUp$dpcGzF#cnCRvbi}&S zvp$CNgs}>o9MNk({f6{zlqh9kmukz)=gqYQLGo2ykO2gFlE;ETi^JgGq=A6WL!qua z1L$`&{PL?W#(QgS0O`>GNon*~GqL*CUpqicZqh&?@c(rn5M9^8(tzQk4Q5BB>v^{% zXlbAdlqyr9TCGX8>?FSCzg~IuN`%cWJxi}f^33?x`1SG+xB1T(KKGeVed3Xmzc-n1 z<~D$xSZ|;j#y`zZ-=B}B#tmTSy&|RYJ3|5xf?;UD*E2xgd?ma46*$^t{UuJ3Z$Fbn zIu}KhmlN4@-V>q(qYOF#%Q0$21oL%TkwCooiX6}$a!Z$Hv`>eKQ43k>YpIMKNw{?Y zs!qawYDupTI@0MdDhs0|YC_|#1qmJE42;Q)7ov%bH&=8mO7+4zvKT+xJ zI<(+_o3#Au>Z)-#8Im0YPcCfZcjySae9w68y3Tfs;OuGf?8Q)+pIX)_QJ{IGfCt?0 ze>qH%Ppt%*MV05vx%?zeV3LVu?ax3GR5>B|1HrjuUb7rY*=Y7GotZM>YI?@Y3$r#E zF=fIEu$N4qqE?Xyh9Hg9f&$mVUhYcK)p_4HT`MxoHHHj|FjQ2aCMTT<^iKC`hfjXs z8{R&V^Z(y9OE6I(E$bn!xwK(H%p1773(Org34OX%6hMi+4j`@uae2vAKv=JmNQP75 zcZR}XawPz8Sm)%7%8NFAb9dF469>~LlhH|wavbVoA3UH`2UAiNl*JV5@kk?Lm`e>U z;sWxVvW)pn?ocZs7m@~Ywnl3r#quCR-5KcAsHZyA=7l?03*L#h$3Dai6w*21E3aSC z#AE?ngI^lai@?=r7NFlYeFm2HF_3vmoKbn1ON|yI@-vfK6UbBA__`Ge{TbL@Y9l#N z!I@bPUpLn&=O@{@u!{oN{aNtBSQYU! zzBUWi%!L_MB>~*##8%wt7Qf`?9izC90)$@0n3NFW5`l!oK~kcSl6Xi<3^I}cSxJPP zBu%s+K4?o;zitIVP5j6hEpObe(CaI|*YEUJmA^+Uj~Q;Ituw@Syr!(mMl2v5i)dIv z!!jCH(6EYzH8iZFVFL}DXwzMw30mkyBI6Z(J$T=(x)kijZ7cwL$=)D7B7Fd3cr+(z zNm}>Dxws<$2IeYP^vQ#$>%{(`@VYzm}n6f-}c;>*=gfg~5o~ccGC6yfW*xA*rmra6! zc11>M$q8kS1}#UXqCG~;xG*Lrj}FQ5k)E0rUDBe76pRyz&U7txb5?Oh2ZJ%n7nYG` z>3{Fqq0D2AfJ&yG9NLr{2AO1Q>XoWOjYhn?ZOs8~kXA~uP&WDe{bD+@Zp0@%#y#wZ zwnxJQi5-uloSJ42xH;HCP!p*=PaR`ea~l@WSX}~jdyX6KZ@J;twtT4HaIFV@1Q#iF z`4C)Y&M!31_A<|^hsann7=p+FVvHsW`HK@(SMzC*E)+DVWl6<;{0xdb9!emF^)F%^ z$9_Ai0+H(Y)qAPxmJM!D1o6IT$_DPAt?a}^zcMlqT;jB_DZ*5m6e|7R0iD3mwC zArTxy@xde?l%8zH3*}G&D#9(PEmAI0DN-%k8eiwsJEze(&Ca=v-GYXp+{RGuU?_Jn zlzSM;eGKIRhVl@@Wg`^goM?{=Qk1eXL77jHHzuge&QQPya~1MJ1uPd4FBn$}k86eJ z8)hDGn>fHu1?*L@!`>_4Q4#Q@2zXWmyd)T0RlrRJyF;&t4@JbMBH~LC@tt7sQ2}2S z(?4{~*X?q{$u>LM`Mhut@4T7zD2~YOtsV5(ZK@~$2A;1NP9&l4k}h+A&<_A2{DPB( zNPUo9`iLN%?>r6oyfNe+AuJ6O6IxKsYn0R~G^Vx1CwNUUwQ3vFdfZz80s9Rc=}<&g zwh9i|!YkBDrb>Y<+&OQ?mG(UUS@q*liKtT8<)9ypm(7qgWqBcm;H-LmWh~d_ z7XiFHwK!B{VY2l3_UIA>r!5nSo9kjTnz5)L}(4k{5R z;U&?jE`dTIiL<;<6B>Um@e>Oe11Ys%CZuuGQC)Y)Q&qdC&U|c2J~*4W<}Ou+%l8{j zv)aV{Q<07d=V#@gp14==>BY|q?rK89Km!sfB~zFa3=04L`Nc1U!R@l{KdXPaV*b0) z$={n6c=kAh8UMIACZRjby|up3me55$jpC(LpAKJ}2)k4oK# z1T>^HJhv{}W-a)0byAicFjlOtsR3MH>b2EpX4LNoCivFgN6Txn`R9ESq4b3TKO_Hf z7-@;T5!%l2N?!>`eaPKyx%r-!(M&e>C}{dnSjWT;Z0U;$Qgv z=T%?8GmJIH9FWwUN{K<7s3Y(J(oG1S?N)-?N6T_r$J z@xKGE)eQAdajU;dVA34WS7c$tKI!Lm0*|aAER>DZuMu5kwh&vpWZgIpfrN4GAed>z zDKx=aGUB`z^xXnsy*#!RejT9&5M zg*Aa*UiZEnJWRF)jRPSbT^ySllg2G$<-0ac{8?pyV}yMx8&-F8r>$1E=pW3-I1rvs zDCy%0w9L(vE%`HHu--`hsCBVk@V%E9ZVk2|c9HsI<>+Vxzj?oh*IO0bc z+F}^;$!fW^>Dq}UY|k_s`WEL_5WVX`qg=j?k03gynS)(hJu0GM$1Z+8dMP~5znn>p zN?V-72p?HCZj-;i;6%5JicXI;qAy6CdN+s4z#dhC>gLi^-FPeA4M`%JGdo$gX|AsQ z+&$EgYfyZI|2%VMCZ=*TgKU=lk*<0SZlrc0z0@rps+(A@^PX+Pmp2)~j}+=XBKh*b z|7}J_G#qctV$)eZO&lK5?H=!(K6VEVWgu!tOje2B`&P!zYM*OFhG=xyMLx1WP4~jal}rvnJf@@ z)#-Ge%wXT!jZT?TL8rxifipao*;2Is-WrO~Ttnt}MCr$9gNcDB@miP#dM`&Mj`WXS z*IUO_$fK^s!cTjdZAOaYqHa@bI?__R$wnsEKe3g4b3kDlS=#1D2X(jTv`j0+>(`nw{GN*I<&$M&qaR@YS%pPKl`dC<4Fj_>f5JD5@5%f!eFy_QmrslUBjiSI2^<*6uC00=`MS&Aavnv^?Lifs0X8$LulO`_z8%QGq`%8{V0{38F3}lOvZRdr z5;Xf9`-b`6*y~s#Jl~O8Ym>KbtQv;U0P`>mGeYb%&+EG{VZ}!yapvYc`jO-_8*y$oV^=k1}>7?j!SbvUL@5r)9c%oTxa|e4;WRF7xl1 z_wlvHn}sx|I%JM})iKa1m|_iY--XoW{v>;68&tIBJD5Wu#j*?fPl8pHO-Y9=l_>$r zBHbWw%eE}MH&Ye_ha_HL|L*Y1hI!n?x=vwpj^qSoS}m|U;3K{tN4Qpj)@Ac|?%8)J z315rDg1K#)EbmxvlW7;|%hE=hRkViNL$dR{(lgB1A?d)x{l@goX~>1!yB(8Qk+mV@ z>(P%Wmnm*q!^wy0J4XJ80sX#|Q?jc<^NJc1(7qv5yvGtP@g*`rmjDz|_0^^&R%mtJ zCMR;OV;MQ^58OCn3M z(jByfh<1Y72o4q5J1$2X;aYRH-e2(Z=g30jx4+_p^;qv%YLVJMd$7~(Z1EKi6DFVQ zIY0tgYE~>_y<|X*psrtZFf0#&Pu2+@I?(p?M~u}?5a$@^*)W2^5Z8tzN+Yt5Y zg0=)CjG|TTPcMrEk!zagUG+F&8qxepMPjJf3v_z3Ge@1bj?`X@q0v)q5LY#VTXvYu z8>WW|W2Es1QGZ?LS<(M_lT4&>L4JM($SM$&G#jtvP=Q9{qyA zBsE|vSL9{e3<47&DZ1Xru}jmtQC3`(c&-M=nBNuey^1-9p>OD{p=-Vo_-&z!=SVx% zwEQDV1`ZSU#qabH8c2()&EhT(i}XExh~q#1uA*b?EnQ1!Uvd|Xg}K;_r77QaHW!wg zw8-~HGb@1S!3ci|Y$Vh-&r=)G>i2JR537lJe^F^)V%Y<(mV*8OR@J09V^-Jav6Zl|o*iXRC)VQcsn4z?YdM&=0 zu@h*yhyR4VXGKm6t}4(PN1^{%|Adu%NMArq9wHgkHsJgf$pY}Xw}$6WERG(bexaK$ zS*KQvzGuq+rt|y1&5dZ_A+7Vz8WC3C1+L*zfWaHan2>bI>>tJD{EEr>D!s6lSt$0a z37bR_Oi!}e;DenNPf9pvjqrTMnvmN1%5qI0Nt)G1$ zh{}zLQ45b<6Q-F4r$XzlQE32b*1!p(Fhi2w2IBuF!R90&q^##~_KH(*q5&ZP#GTPO zw>QYV&gO-=d3T+me5Te`EYsD;X+~W`6(*g9?EMt>E}(u_6M&3V*_sZ{9!VyYkL@g5 zpsCjC=;2MU6=9rND`jsJ3#=SWD%4PsC@(GvRRLEwHgoLfZIqhpe&hsf4$FC5*bwzB z|4wA^IF>$wrhP$)+p@9CSI)BxF1=pWWz|Mpa|WXdn1!RSYwq)vn?iP_YHtNV>X|tt zQB-lJajGx@{_=XYC(x3zM2{|PR|REaFEK1^?|J>L1(P8K%X@~_XSd_cY4xn~GP|NY zR%=y5_uTBV%)&F%VeoPx>=C8uNzSiK;F%}RO{oJ7r4@R8TU~(B7L)t^+M0udebM2V zbL6;ltk&1{&>Bx4DJyR|qh=PG3&k#D)Wxu=;d7gV+Nh&@vbA2XUcJgPS*MIT=ii^! zKBeV7+G|j~s-_Y)@cEijk7K%%{9}<@Qyy=#$f0$g`toV4GU{IKJ}PCOb}uyX8L{=a zSA@}6D1);2sI5rYnPU>VXXNvP-#|>b1rm|KYHDD}4K)U(*QuGAax?Nz!OWs&32*9f z$RurKmsxo%8G|f`S|)$L{$hiUl`jnQytk(x?%JbkYq5*%EabJ;@@kBIgH2@O6k;qj z`P@eXt98ZE>2X#DsJ1lh?+TRaf3j8t ztEIOWx-9Jfy|^laD|J4Q(lDS@lxlkgzU**ByYijOD72!2T42`Jcze__?fB*YYFU-O zd-wp=K*@)Z?l)yLXN9XQrPl&Wo14H3L@7pzI~MFuR*T`z*0lxoa+4L3<#|GPmDSf9 zC~%c`Y(Z!~fzYBs1<6ScAAc&JvQ~`c^yZgk=`D=Qzm-Klr8Ai`^N`Bx;~0C<`i5X* za841ozgV-g=|}dNT3=ssQ$!RKO}7FQtk^pwysKEBSGh&A_Fl;+48Gco4-3~O{i(p4 z+X5DoI=yM$cyqYU|HBu94KdgJ5qDQ-e4$I+$T+Ch=SA-|Lqxjv80+f|pOJD}I%#I0 z@xk|KM5JUsLp7KQzf<5iEU)Q0nlFDuvQhB9^ZJpB(aYE8H`b{0);FC~ZL9P4)=i|i zm2PEU>DK154Mq8#67&cB861ct6BE@qOUSgs85H0of7MVf(_kz;^42&yzpi+Tz>!xT z?^>dB*zA^aLbf-baF~ogRno4t<$8!z(%k&Qokdz`!i?2if1CN{#HJ&8{Y`K|eMnE; zY*!{Ivo_;HJ^ghwFJZ~wZ2}V6slD9SU5c?1>L_XnAP*G%?<|P8j>jw)-Rp zr^>&6Q&TFGiaTtL4SxPwF%B6?d-Kg7;x`sSlhbxCUBxbJ`m&Hxg{oE zHK*>Ial1~=H_6@(xRR?0rifBU*BP5@EOD8rGw-d5?Tci6kQ05RlHD5fAN@K!;S1IY zH=KofX9=RfkRfzQ6BFpG_)>6yRIbSiavDwlWIkc<0j25m!ff69Fa z{@9;WzaEKRN@Z#)tCFP)DwS#>W{lZ#dDC!(P6TbL%js0~&=NK?OH4(?;FLoWeMl{# zt!d;Jv>vpSXFw3+0fksE7M8wIOf|V`8%$$~X+S@_~IPSxvb&Zouxvn_2U zl>`7HLa}O!KcDMzJ3B2#1<|&AQ73IN>0t+!6kNNoQRqZ8op!wcl9*Bs@}ONHxIq9c z7ggpYXBEugAIY^8Sqv<};3~x+mqE1HRy_Cabt8KXXgNXRkcL?FH8RgZU#mO6L5WCY zhZO&pp?g3^Lo;}M*0%G{RIO}5qjU}ZVqjFwEl*Wx9>OkUoGd? z%>K63fZ#tByfjx_V8g7rj(Ns{B33k?^k6-iviSH(w2i?bw|7zST@S`BdP8gZyrxR8 zt=K%hwS)5U+ViDk;xN|Dk2^y|YI>Ua0O%o}xfUqC`iVP&eVN4S{r^CUj8#~qA>VkL zVhQx*SZfE0Y95S7Gt2d=a1CxKmtMDXfLcwmH+R|TKjq^^+Zn{N6~2UyU5HK3%QGDv zsk68H62I*H`Cka zGIUS^%?cuM=tIx~TImI_PXm5eXC>6@~Qm~Vz5lQFI z|Be0YCJ*(l;FFxPo#So#CiA*wlZUv}HE)l9OGd4(M@pAoMi*93rt$d`owcQ=2-{UL za;O}XpR))@?ORGC32BH%FB5#J|c<~?(>=4QH>&uHWa zpgzzn!$pe9=O{=@c6HY@g;xuL7B=!j_4hTFRM@C zol&nY-cU8K@6!#fvDV1;6;oSXGo&q~N5iUGI!8x0z1F@cVkZOAuU3oX(d)J z*>9YXhpsQ|F8rBYZrlpAJ&rZtQYWTdX4mv!&{_qp=+Bcj;T?HyGWv*S2m!KS5%f={eRHgq8eY!XCqw&PH zIly9I@-$b_)@B?{7<{6QhhKeINXTGM))%5DLoY9pSy_4P)g1SM6O%d$s2)-y-2wg2 z!Vcl3n;pzzljf$lKcMl73Oy)~xDaDwn=Sl3>*qQC@o}ptOpJs53gg3WC0~NEd~HaZ zAuHPQN9}GH|4lnvt}7Ir^@6FGO!VSy+ellK! z^A~yi5*5=yAw3FKz-Zj(w~v3*k_?OQ;OJq6*SkZ8R~s3^nemM>opNUDd(+jDIXI)a z#plWF_hstp`loUqJfBHMtp+~q6uuzwAe9aK=6BAKE}q+x;Qi<4l9}qVw`tXpg4xgx1Cs*S(3c<6jHhCpc^bdH*vz{!Pf^HpsjK`cFMsYni=fP9 zC`hHwGVxh|?)oKv|De~r19-mXNQT78EHrlY__?$rxAuK|L72by*6l5@Iym>kYzTT7 zLt$=ea)g-4yzB%bYad!*psgTVVHS>K=Zy$Yk47lHRzxyfR^(tUM8WhY#rm^oB?7$_ z4}5uh5rVcD=jewwzqb_Fczy|#v~aN5mN`mT0tYys(H`IX_kGwW`+*+M*=|xr8mAvO z>|^$s{&FMqc|&OZJT0#r7SJ#4`gKkY_|;V-?&+bY>E+jn(2u9T7X7Z8MVF6YlUpMl zY@g~=ME5t#5gkgByW7(I{2tGvZQsKs-OuQ}3ivD*mVJsCy8D1T0Z&|lHgYqZCl|Hy z2-E#0<_o=1>8QSQt<8=AK=-2M4|ez^_U%rJ)W1b&Q#<6n3IQ+eowxdV%fh0R!dsG5 zFDRPSbD%jcx0WeOyg>C6;NQMv#O>sn1$L8D63UM5i`hfAe%{4}nS!aU+4Gm2`l?~x z)`iis|7Tss*Fm4JoR|6E=r7o=;)gwN$~krVF;g%J{nqZm)nkppxQ*|#`Os6@(n)md@;~7p)is0)vc?-kb!65rO)4EZ{JH<*gw|b;m9n&kr z@l1mwz1jwgh|r#p+;7ssKYj|nlveBC@KPXV^9^FFBQ#JoHKN5DG5StN)`~08M7mC) zwR_T@8I>1CP>@+=YX< zaM_QtVK=Zbn|0jd_#BFvIQ2d-Lk9pDR5?(Z&!PhF`zs4_B0pZWrI8M`{WqQ*>P-r`v|`(`A7 z{L$a&BpR8$c)=7IR1;j?S>a5Br#8;a{FsTe+N2)#o{z?UTY(2Vv2&oo2^0o+IlR2q zPB-JS-7!_V`Q#WhV~A{{rvI7Jk_Xuh|+Fh zdG$w5+ofl*Uqui`&U-d9%x$MZf8E!^HC+{`$Pg0sZRc%Xs z8E+jMgG00Sz<%Cx5GrtguxeNy*5(7;l1FF1dlaP-4z%9)sNYDHY98dCKe#YfRYq%z zF>?<>9>bWi?2oO&0Du9$JUgBeCG=zYs`J|ueA@Aad=qPg=U`Pk%h@jvPpw~-D;$oy zgsjR>^WaqvV!Lj>_z1P=T$8?VDuW3E{%Km3Zf6z_fG6ZfyFha@>|gq!-x^o$Y`B>F z#;3>IGyel7yGM#XME6{PQ%qQ>6c^t#T+!mC`y7!vrrh2k!3K(h1)t8XX|l-En&llL zwy(gz`~Y~*^Sm8v;m_%mX4GsXFdHIroZ!>^Ws!wix=fLWslJ8J+we9L4+-4LArY39 z74cmh=*!;SsY5Obcop0M_g|PMuH?4pZJ4u5F(_o2g$d+M;uYzDxTwQZV&2AR7iH8~ z_7gJY8po_Zzsb!pstXTw+I1{1#Y2V`!)wZgM8Z^=KLc7v_a9zt&xh{v9qWqOjxW#C zuFc7fmy9tgXpY#eSb|so(L>bqXYFoUwVKr(TeGIpVH~)O_hcP_5ZfK}_b#Joldb@-)8+pPP;s4PIdc91s~Halc#6LTeApbtH7UmV18~xSmx!7E&_eDa&qQ>?Pmm6Pk+tmEf1bN z_SJt5=(nYB^#4e4x@2DF|1sgvpmmw*^W@vF-z5I(BH}UE^O(%imNnCimT*7>Ikewy8#^$CTHB> zOJ^SQ30bJOjNi2dYD;epG5|fn&HsQac|sW}{S?LKgPt`X{VT37SBu;wN;h{I(Nyj( zUayq;FglgU*wN{L0(0Kgl_VBcySr=03=V;3(_$)-7HTn;D^8ipmMG+U3o)t?fAsJ{ z$@BW{uiucF1TYCWQq7QVQG}MNlV|;$A$nec7t{>}CwHrclDiaf|6{ zX8c&Vmiy*C<*l({^;9Z}by%__Sw1|5B`81^W+Qe`Qij3;#VeYErhTIp#2mnB56ZxU zRP`=ve}LL3kiFi4>CGG+0D`Kx2$H7I6>l?zk0%q z_%!r7>zf#tR!Qv@pDzo9^8li3AD1Q?HI%Q${99i&y#qn)G&*y>V+IAiU z)P?iXnA|uo9V<}GPz4C6(DSmZE#9|_r08>uy7d^9+ z2C-n!t;5SK^5`xDy5TizRAP%D-(3y5kRjo6-T7Du>^=hI?y#Jal>91`kSJERr-IV$ zC0J5Xp4RZWAkry`*%ob*jcBIzzmjr1@@pv_Z0Fo0xu{mo1j!rL3eBVQ+eS%aLt?T4 z-B%Z;tCZB)xPNFIF}Qu-7OnaPu)qhK*zk&dgLE#|A?*}>*pCf3Xg9#H>A>tp0a-g2 zx*k3J)xtM*2|+H=NT5M*0*2&|{YYf)n-mAZPqXPsOPxS#aIdWeZH zuV2c4tS4$@ivSFFkp0*f^RRH$b0AK)`szkzDDj^<_9^Kyz`$ie$cBW1hJl5HM?jQ= zge+H{d=yl41y~BPad7eQ6%h~;5y#qhOGZwiSP3N+HH}hQWyr22KZOfB|qO7z&1E4&Jp&0)23Qnpqx5RhcSR6>71n zdM-7{`5kn}A0GvS$Ip*||7ESs{ZUZn{zo!`_}j&w5Ku6Deh873L-&8C>40S=fGHq; zww-Th`oO}mv&a$MSfmIVB<|Q5C}xP) Sn)`md_M!IZr;LV0km(Q)+9@Fb literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1793994b4739460dc42696d6d35f9ed3a06c7e71 GIT binary patch literal 19544 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2e15d01d3e7ba25a91c9fb2b8a1def71aae86f55 GIT binary patch literal 13196 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 C8a;*p literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f481b143c030720d035f8442243fa990ace74788 GIT binary patch literal 11304 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%0AyXsVmej{?y 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 Tay;iB;wah|00962|Nj6FpV{_1 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Main-Bold.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cdb9ecc32834eb9d49cc1ab39f8d4dc64891432d GIT binary patch literal 25336 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 baR-a_aFhsnz`Ro)jg7oobBEF$J3~% ztE)~|o!`Ek-|q}ZIF8e~QykANZ{OWhoBOLre#~)K|2@twAGvPjhWn1?pW?V{ws0I7 zJ#zAvG<_j*faC65!1V*iZn)~Y!`!0B`DxJ9g z$jWU`UGYJVJ9Y}sm#$m6{RUFgaqZYL$8qU5tXy~Hq1n6e-8=C-;SD!jfAcLXZ`dB- zxcl%TkKJ(7l{Z}ZIrW{ZV^eqWAGTzeHlm+-Rqn znZwvHp%Cc4lQ?kt1;y&jGa@H(>EWG0Rv~ zlBHt68rP@~0JSns$ddRPe!&eJwK^ZL?s$G6**Q4gQC|_AiDY2@+S|74n&$FQ;as0C z0arXJkzC19SQyiY;h*UYc19)M9MQzA;t0FkK7;(ATFvzAb@&3(75>tpq=UGx*B$;~ zEhw2Wzb9&t%jSmn&mZv;-9Nuum%L6@l+O7izf%zVqDw3;nspm$m-|xfWPO)WMnE4x_UR`#mClO=1;eseP|&b&)aJNG1F~$fXQLis2xeC;j;(_)iv2bXp z?YXXRK?#ixsDh6V$AxeroUTHXd3486kJFtBOCATM&P=+t`u`9^^zn)V#BT^NKZN@h z*+o784HD+07j%)lo{octBg0H(Wpg8?VM~o^E6HF>WAzj_?;W-@mLgAIrn37!y(ZH^ zNLCW}bralI3^2koay05t;EldoC$*=DsAKt_LbjpMmmGrQrcWOE_7xvEtP(*N)%`EM@8N47TGZJS z{*u(_oA87kc*1-fPw;0MkJbCSsl{I4-y|Kdc&^2+U`XpDfMjaHOj5?)m`|~r8Wzlq zRe_3zEd3%QCdnxh84mMG((iNfodwEERLmIO5b2YZlxsv39j`OU^s_;CO5{!Xf=;>} z5eKj6!Hg`+q_ark*-_aW^1CJeUQslZ4ni+IYJ=#rNA08x-gmFPhd)3MaCyM%;}}LQ zlOShW+CKnO%p}d=+XL+J zHxHE-M1A{^Qx^Ts*}OZhC36#{;e8=v!_6IP(4+LtM`bySdmi9^i<~9_ct_F;PIgbf z&3>SWgb{$@dS1ErUQzW6%02h;F5(n#@Qbq06C8~H`n9+v>2ej;owU_B>`gYE1c}UrS!aO7~%cRN@Docwp zGXxcBu^`iu5IfVf*p8SVC$66DpYk3)6f14q`GsyXKkYU;lcJak>t1cp4EJ<-Ux+Jr zp8N~XzC$C|JiYzE{khIsruxAxCFi@bwO_GvGO7NJ zp=?5{nx*gHHUdL&#`~hJ%>fUXUY3|n>1TZ5XTMtTF$bDq1`q>PGCY{R z8Z!*c1X}Jo6bacCig~=@LdKl+YfhKb7ni=eq(mc{WF#f?gV*?^u8{yS6|*~$Plg2% zag0P=gm`L6r;ArarTDp+p-xUfkx07i@yLqq5kE*4lS!FI4JCAX^TXFc_iVdD_TRgd^m{f=b`K>Z@osork~?o4g{l>1jZE6F9w}+XSC=qFzZun{r@Q=73__xQQIF2-wyc zIMafa$pf<^%$|eh7Ts~tfabNC9|OpbQ-y9)9ARPwkdXeL!9ap3X<>R^A! ztGS$#66k608qZGh`bYQ5U750rI{JRwDF_0b?0QAz!Fs~++=WGJ-E3zI*P z$A-qTMxbc6z>FYc-(V=jtRrDch%s>y8lEY8iTo_xAsg>Fvgwc$F7uX2r6Bol-#?O? zaFWqrJ~2Yw{7Og=1%GFsP*hT@pFc3TQzL?CR0pXiS0y(DHkN(K#T$nPopI;no{U-; zjRrSe>5Pntj-3Mm<3mFlp|c)QaVnlI0JKWI|K`E<^g3aXIeae_@$5` zkWFNxVVvt*KO|e#PQ^-Fe6M`~2)~Y7Ux_T)W^M_0-MOWgWqn#Unxz&P*W1is6W<6K zjAh1z8oR<=Gf0Z@oRY@v6R?b!P3kEOh zZsyKKJpv3ip@K*650Xt?ogpV(B%XvP7}fnHcS!Z7Gd-(6ydXVCxeu)U61j%o=XP_4 zfq~2SmSPM8jNch>)(>NOE6B9$E5Ko12!q!4{TYTB9tuT<3`<@tDFUWimx63?(YmFj z)M2md{NT+;GNpwL{>V%wM813fX^)xXWg-W6KXCtzZ}p2r57dS}a&@5Ucy_?EwKvx} zYH9;R+Ye}o<EqL?On5z5SQ}ZYIQ=QhN91Z0@$v;(lOFlm5l+Qi!za4Mzu3nfoRR zwb8Itfq3Z>3UVJp$ju3~t`&35hZ<2%5hqDp7I^??^jRl#F(C z2%189r4U*%52ak$&drs@icd*OBo(gr4~SlxMhwVO8oVZW{EEa=dOh!S3+Emu2nZZ- z_2KKo*}wYUq1k&aYcK%_$LU95yQjIGum)S^N9tu4tO4>1zJAN;WEAWR+QMKleaJR$ zRwBwy4%j@=M-U*%5`1}E9(W{{@EPe%mID1anVVf?U`ev@^=~+y5S*L)Q!as*WXFEL zsKz$cHoCw6w+?|_uaaL%dv_;N8#k$Y5{^bi`gA5k7MC1-Q)3bd6Cbqz48mTL&<)OD zb(0_78>OLfx7!(y?CeP)=oK7-2P0@Nz5RBin*5iU;gQvMj=A|az7ZJU^<%K=A3(P4 zG5Uwx7FhMsJhSR;?q?1NXxJDNYxSB%MWzcZ@F4^1Vh^1g3RwtZVH*Z8)yLd%Uf3}5 z@cUXC5SwM1e`VntbMvFLLwSg9_$8@XV30IlN#Br4k%8V*;RsbtfYo zA>Z4)@7jq6_VjJvIo~%5A5$WTLIgz)?Y+;*A6`s#)qD4B+J00Q;wdqiqSPgocX!5h@UKN#D>SntnQ^G4=l~o%Xy$=h$sSO%X!6uDdJGW~ zGw_Uvl`g0nMx`%(Svh{2GkNxbNZ0c>Tm=sV-v{ZwFVD}+%~$pY-ZJD3vPlCHHS$`* zDR*AmTR;7YkVpvrBOYO-LPqq*t3RgHxHrG36Eazs?r1@e^0M0z6jUjaNFEv$>Ym{)x2Odbx5iKLR0&2TNtELmWGWMmvSWHdS?Wr6 z;FG{Bnu70L%~SQeA|*tQIozS!cBE(!)mcZ)!bjF#2oQTq9&~V6Vw5w z8V>|rr2LUGc*9xG9}*m334C8uUlHLF+8hsTO#)j6u*G7}eXfhK^%`XL0~Ot385svz zwgtCk`M}MY0-cGt)F7#3sNhff zL@fj)Ov1u@OkPgpqAA%e2xNHJR&2e=TRN}u8w^$+Zjgl?Q9vw%gk=jk!C}=%8anix zz~6p5QT17$#KM%-e-TxWq{WS}gWM6D^tho@*A<>eQ9Vcs05i|5{fvJU5`PGoiLyLr z9#BAOUm(&9$VImTkcLVGU4&XVwQ;I-_O&+v%&8f#_=>+iA)? zl**+CTxcZxwd)gyyRB4KwVFtrx<8Sy?1#Xs4&!*SaKvxtxvJIKdFUj|GImCgc~$>hb?e71pkjXI+3JlL%#3I1E=MOUCnTj?=dEv;jax-HuRWlV+D)pY@e z4YDsVtoB0z?*vwdfz?h+W3{l_PUYEXW2tS1))vg){duljuMH-AdphU3X2^(l%|F6kH+)r7KQ3)AP zp2@0<-Z{FV1&1+s+x|q1eSkU4jk?p`$muIC>y3~6Q8p3ob-+YpJ(7sEl1%;%=6f9u z+|D|de?ENgG@04b8P9iH*(Aore}Vbmi}}Y{ewwp=cmTj0T0jx-1zDcba_X7>l4VQk z!Mj*QEB0duewaOI4Z`;dOv$yGm(h>G*80p)a-QoEA42v`+_sgCiys>pt1zG-~Z6=e1Opt+=k@D%0|N)A~ID8hZGU~WCGs760! z*&X7;igAlIF7~W!)(3Aqd|G(uAzqOKe#O=m7MBbG%e}9oD_*M$7!O;nuz}_8b;EkG zsGm&S7z@Ma854w}cicr?76NMP`b=;K zj^=Y$tn0IfzW64rNXx1b6lA)MOipMcL1gy@+2!4xOl*UM2Vf{kfMEH4-9ttu=%sVU z=Lt7J1+W6IvnZg2vX&^dIe>=A>YskK+e>5^Pk5kx1ZH*hoG3{G2{1;v&|2&TMuWeO z(ev^Fhs$4w#K6%iFqr@gTxcrbd&$fpgYwH33G*{AG6^k|_4#MlqlViKC4}#gLsY4T zojjaP3Co+iQ^~Em0VSdZr^I(L)rVx+>QC>S@!1B!GUyRDxbC;Qx~TZ1=xGdHd2pbR>&|5hYWlXmLq{&`M(DJnc@&McV%AnRZG-a z$u8a#3!Nut>`lw4>u`jFJDgHrb|&oFIUMzQk>)WaUY#!0W4fzs`npB>Ww|TVQAn40 zpDOXbO!A*!tS|sW`NKaosB%L_PxTyhYYl%%6T`Y73Bjl!MN<_m z_TSu|taD<3jFEMII+i~iXhj6%uf@sHwCojx+O~w*;Zy;6;MaHxyc3v?r}`?BDM`wW zsi%bj>gsg~6i%U0=+Nm6&WQ#|Zy@9zb?t+9d_QJwc%l?&Vwg@+g`Abl8EMdNmY?u@XrjdmR!ax*? z$ST?bYL6pV)pu3s8QL}I&hPK9x(@UzWCO2+>WG5;ep%sf>z`F=C!L#j@AuT+lnT0z z45=iR5?!cR5MqJ@4gps05|CA4F4MJdWY9-U;@n-&cdqotJCrKbg|7>WB8eI4)M$@W zsd||sP`)N#duvXv$P~*FNLJk7?Ffe<<&x<32e!oAO#A;X#P2wLhT8=!&AM}nN*>aYV!?Ws96MdB-sAPN)onBP z<|*PMiWD|_!Wo~0dJs+iHdH*6I{z(Z;ZUH!`v+q^vDKG1ye*3GZx}H?I$i*8N;^~Qq z`sQwNh3JkX_yzwgtC!f~hSifYQ{q)L@w9j4V94$I^UtkY{dLdiYd`Wi-TO)4Q6D)4 zg-d1SB2!0Kua%eY23@}jNdE?q&Hz#`gOt@FK$u~}V8u{nAXczm}!v|1bcPpw|q9_^bDcyfc=-Y8EM#N=28-Yo6{Skwe|8DwCk2 zqrPx*3ole6@RtQSy)71lbMM1h=s;-JVKN8@$m2ti83mECJ}<2vly3U; zohUYuRd2wK^1rh7vhWI^VP4-c=B0}KfW>>v^@F6bsWU0H7?rIjhw7}5u4oN{Klqxc z7QkC${D9LoB#?6}?rEV2{L;oyKON{tPLpAatTfCV^XOqQJ>ARUD}q?`l7x;s4C=N zwGTwp8K9uUHmQ_)NWh0hg{zKTb=Ahj-z=9w^^4*?77wtCcafOn6?9K4WsLeZzoPN0 zUtj$*ClHOo2a&v26<2p!ADHYjFXR2d>f^xbB;ye)6K?4}Bm@dYc=wWlOmVHRWjd@N zOKKTkAdDqc8JgEgaRDJDxsyUI!YBtop#kPKf|14q%V%sfEF%SGgnHp++23|sY~GW| z4-odk1yr3*sXxMpx`KO%BQGi_=_w+WLyYAFA}W&qvh*Hr6zP}Xa7qq9TP9WZy7Zb z;B(7nWg)P(a<;Ksw-hvR$zLJAUnr}D=0eH)!(I`1!WsXGw!M&A&nt#g^ zf5wZd=;XmWz!fTVe9C?C8IR``e6V8`8H1s(NlsQI`rNZuUyUn_pW(5CCl3J|eqdt* zuz@8K=&g2D8q-=KmeFMYZGK@w3f{9B5{nfG<6wbxK5H{%og_u+XFnsVMpjW3(pZRX z+LVygh#_cuP&x2V=P(l#N&GY%byw()15rc@io+QZrD^&>SQ}B4ll-|q2XKN^o#*UBLz7koa5iDeg=dmvGG;cWv7 zU3TXkM3heHyy)yK=by|K3cxrl<13;jk{^?oh-ld`u+|gjKK2BgLV}7sq<8IAJnNAQ zpG8%1dH#Z zpFrh5>PdM<7dSzXXe)UFiZEtuttl4C=jcP2DDNSX@L^t7`CD1Tf!nV@LGIas(wvl_ zNy1G8S+0}3q)NJ<0C$Ji{)nDj`zOwYCx9b?I~0PpiYxJ;!!D8hTz84Dyuv%mVVO!O zWrE#jG2G#`U((yj=TR9j2j6&N;KCRVGpmKH?5~ymVvbvD-QV)=EQ?`9tg_^XIb<5C z<=jEPfzgPv`Lf!U(@4{0nUwpxW0^c9u5d__y;?+&HJ2}5ko}WIb?`b@PV%QyzKGW# z&eC96(n`wyEqiv~ilT`Gc!ucFp#1P#ouXR`ECnG`o_H?N;h+_%NRAX;B;^~M-JSJ` z`G#D2n!$B7;7X$kxdUr?%8R4r2wSbRYpOt8=4hT5d|M`v^M`2I0f1x&tT0^+BKR;M z5X>Yvp-!Be7kQ!HE1(cgb1IgAQ~sU0k58t0I=3y!nLFy2HxfB1Zi!}4fpCZ7eJ*bx zpzPb^3xvP^8GvJD9*{DH`MUc~W8daf>c5P{$Q2_Ic&u0j_3kT2!XB4ijOBN12Ys&u zG$HawTrcPwweqJ}lEY+}G%(fyJP_pbaUGH~IEByaargHs-G?WgXcjTBS~CBxt;b!W z9C_<;eJ-8uHp8hxHj(HI>pt%tojGB|=`v7HGCelx^|{ljEACKZp^jWF5iBKScc2zu zfbp|A=Rsh2g4+uWZ=cCth+%tfA(jQa2-Wua0N-*8?J(ir$4I`=F@)09aVMNH?B zZ;UUveEbvtF}{k2$6ZK|t*o?Zffzw>%jZ5O`u=_Vbqo}VlK+m%pB!Y$E z!PH&b$68d0_Z}V|+ImH;*X`dBGaTj51>^4MVcDC9UVC}1LBptG*atq@kz;zmW@w`Z zQn2;~{91SZz&?;tn~ByL#*$*j^>S;S-f{~uZ~MpMs`_{&6_Eu2b&*Meg{CMO97M$} z?BK|V5Oh}#O{Rn0*+?oSNPb!J@(}*X32T5jH51OD{-e^sa{f4K)6n4nTbB#JN9x_5 zd>gD8tHl+tK5X2aT1p2K*}iz#Oi-Wym~N^_y0tFf|KjMu%BY)GiYA)CC^xWHr-PtI zm74`M#`_a2!naqmtcc8VbfL>^0k>q@_Fip)w_F3DqFv+6R{3mwhLXQ4J9};@dR2ES zd-VqDZsg^pCzu!>Cc)GDo~pWh;j|&RlO3Zvb=-~0!3|DfFy+;>TsoOB3}aWS7AuZ) z*TzJW5WSI*@{_+Kjj^o*K{*~uhWT<>T$&2!abn2Ep%)6XtS{bs%BFns! zS&SCfu%!ivHWT)`|B|AG)V@X27R$B6FI&=DVT@(t$P1p}R5e0DnVjErh=cooU8*t} zp6{EP-X>^WhT`*~(*#SSShVLodk1?a-J@hV655bagmbDl6w_4a56QlZ1WI|}0noHC zIP3@y-ahDd`J#Pr_yk2z2lv-X?$Y}~yScSrk;ee53)M$hmv_rdkJx>2j5h&?WGQB5 z_gTsXR!FjxpQZg;aSKy+ATnM9__3<;Y&0RrA*FC4k9yZgs{do19bKa;<-5aS83A)O zCa7qbkprDG4u5qVQ}6C&=X>L*oMvDKXe||tcghqEFg zwp_3CGHJ^kNZ#^97&aIKFx3wSrA}f!=n(43gwkHonH==MN5_(hrUIm(Ig~4o=3{=J zUKKoh8_{$<R z#sEOKptKAbNDWgPWZ@+HmhJ1Y%O)_uC~PI(*z&t9-C-my=2+VZ_g1Mlknd0Biwhkc zd^pvaCUU0a8#Ud6^Ljs3iL3-6o}v z;l2TVdKcz8U^ z*tz$-m!g}6;gr4roE`v9NB%uHwN=}{iOT;F%HF2B@~?xb{{UWY31)^?E{%}EO92lp z&pg;Ac(6gP6Iw7Eb~7#Lw}Vkjvoo2t4O@Sx#XEMI9jXyOXNsp6JLCsLR1QCM*b{y( zM(^6Xxg!yk8bU}-H9R;XUDLaX|9WRMo4V|zPER|do{>8iHdO9Tg$Lav7pdHxX1;vr~=(~J< zg`^b@xeBo%kEDdj+gi01ED2y`>eYYDZyV`}k+#nY{_PJ3_)bi`bJsnG;Nf0fPqzc3 zOi*Ib9|82Ui1%vTJfI)z&pH4-^OP)~0JBHP*Ougq*C8#0*z3i8^*T%cfh>@778x;p zfQXYE>FM0Q$oo!TCHSkwP^9RP9FMl(SJHted=XajC_17gDZF2=Cwg7p67R~VSg@2z zx{Q6>0>*LVg=j)Y;g_hK`>PAeNs#$qsSfxbE99D5F2Xz1 zHBJ?$6ZVfryQiW`qto^18B|xwSnd!vZWjFUXwdnH9Wsc7I^X(6!Kt_%R1S_K$A+6} zp5mOr>NuEYekZ7~2xwZpS1f9zzO9)t(8oZvD1e$DBk*hf3quN0 z!leJ*jersk`KOi-IMqlZVviQo zjRl{}RDHUu1$zhd0h1aBqhza>6ks#n0%Kho5f)i7sBPy5z^)ifewa2rvKHM`jwF98 zVERFf^Ff2rC{(&9^o%j$aSfLR-i+4B=le^!iA-|SF~8$o^}HEOaJ%JB;k& zrtGW~d(P`jguU@3O37^h#K5etz^twQ+jW21_9-AguRr-;qabUv#($fFEZhK8!B)Bl z&;v4hZ#8M=djrM(aAvwQp!N(l1L%~^Mjf&!`(^N;=HFE-fr@&;AxsuyaL?+<;u<9* zF+^!3<@GpFDjSk`)Ct`julIFSKhU`)>I^%aJ&$DOmO#vYBiJHlZ4;xUkv-aP81sXX zgzEUZ3_?bbCi$`K3g*&^(;ezsiaOFMy+y$T;NE56Vh@Y?Z5_hk8EADIfKKZ?Y^8*4 zP}>TyQLucw7TD~I7kF)!hGD);wq}w zw<^f*4Rse9@o;Zg^kiK5#Rok>Zv#E|EWV<8ZL^c50Ec=D1MzSVG!bOE4nO0+qmM;; zVT^Uww{m{JF3gvZ<#9TOuKSiCw>hb$Tag|FPXIZPhykz&8Q8cJ!fdmE6%?bnwxcD> zde-6Stz;Eb2{_TkV>0je{SCCoYhffq5I5gB9sm(;(WS`4^$*r4H<})0asp?v$By$GTi!Lv3NS(}jM1-iUUn4&5R4#2hph zEIK$!bmX2-(vKtN55da{=)V^8TYC_+To9r+a*^U-A!`1`U@n@g7os_O&>YOfat$+@ z9kgD!=Q8fOjeY@r`X$`cjG-(P+S-~w%Zxz8F@Kiw?FP$R&Kc8U3`BBgaXO=9(!6V9 z-$uXmBDfCmE9wYKQ5myWDo!VTUk8zr374AdEIB-BESw<9LS*PlI22v+qPC5@3i~L0 zfb(+&@K%=Pr1FT?fxK1*hApBoY_blgqHQ;97yv`2cn|>Gk`IUMIGy5lF)A^738*1s>3%tfzJ(>K1#ku5}u#t;&m!J%rT+R&ioI zn2`*SvuA_B(H@Pk+4kG5j=0eIgc-{oF!n|+vu(8O35Ix7>ss92s_U`JdaS##JGT5U z@JPl25xNmt!h|{?{aGZWB=ib2$b1Al4w%N4*t9c%uGQ!UjehvKP!L&99tB)+5_91f zuLZEjj%Y;V+iU4ea0r=OQ5I0asFE4Q<#b}>98vLjdt-?NsZLC1us=cqV#F#wSg*vY z2TNU!M42QKkIv6&WI0HNwtCf*=`k!7S{oR!Av;WKq|F#o6!jsHGAV z*MyYMI#rgG(|sGz2#vNDfI0%KU9Nky~yN zX%+c`gZIYV4`8VgJFFYIqKs2)3Z?5e_+aQ3F5a5zR!FWfag^^waq zp>rZ?VC`9zvU!TKaXNWpTD|SWu4B5G+$Knf zD=r*`&#P@1XVlJn(Y#Noe*Hr4hFr=YO?$mg7~bEX zPnW~KY|t%v#{#m$qxdsJiDbOjug53--f%MDnRWlk>OXhyE{((-JqtDTmh;>$WS%Br z!3GhZ??yG_wuPx-7YCkVb{tr-e*kreL2hdwtPCS-#9X#Uy`_+Vd&_4jN~E;}X3M;Y z7{5MFEi@8k$1!1Y;T_RBvVs{SsZURK&$=XM z>0ZC6Xfs(U?sKKcv06EtG(}Ph{W6y9jgePQhky^Z!`MQMWD4%p`=M{5zn zqzgsQikvVz=l%dmhY@t1wxa4c0R`@OVV zQe=lTSa(!*`Q_{0>q5UBxq-Shk)9x0X;Uh4{4LhG>z?-Ni9ItLl_a)?c=9kd=|N?_ z9@@2aB9GcC_-n}igWfFuNVh!}o38(vT>s<$(F8wv`ahM`=Uzlr)dwN@*TO0(FW&Wr z{t~ms1&AmZkJa+ooO)3oU5jv5iUF7H;*20`!#HoInA~^sW%xCHwn4Kw8WIoTXNuD* z&~15RHc{;-)%lOmWG>d5VI`qtav?g?ku1^k&30F!c;d^=?&@sf-nWb14I|AHxm3NU z{Oo5%^hns22@7~`qna)ZAJ>(GDz6pEDhf_Yl!)=KCfhH z2xc^3Yiu(OO~EkR79FNBO>8A|fs)7vtW{A8Rn`krG0# zg;Ff9Yyj(z9N6p+9DRp@WhT9EXwvPAg*QQRhLStmN@As7%=kk2{oBoeSkA_#-~6R; zTnrv|5nU-ToAZOUI=K%LGXaU|V(SQOZID6NUO=+=!7?QQ9V%j->)Q5(v8E4Rp~liE z<-`SxM#P=&?dq*t5MHy?a7in^0FrBPd zP|BmKzCb!#k9|QMm{&+CpX!ST;|ceyOx~(v*Q@{gl`tehUZw}>!(0m3L8UUV)9SMb zS&hA{VooYDCxppgy^m}XuwTdnDB(fhyRMfiMbvaiw`0pFf~}wg`Y`rWd`(5WPtR=w3PXqMhZk662aN!GKN5x4gUu+j*O$PP(7dzNK@Q7V*`RY!(rIZYvB zS0a&<glqt*ke`#EpaLL-`}wRIFh+LE&tNP9Jz_ymD%DuPtrSv7suB-cc!?^BHw#XB zOQhGWO^#p(72b{Ae_-qBqQLgQB5Cp}y$9=88FputVb->|K%`whiYd2U9-M)>lE|Ln z!c=eAA*gyp^sS7_#^t69o3vm%O+w$CDs~2wF3BUi8oQiiA)4{2eic=h=xQL`uV|1w zg$T-xr^yy>tpo&f$Jw0`rEN&%yK}snE>@BX4Q7)0D(d2r*_uj`=SJCon*PIoDq5n^ z{{ztyanJ$!0IsESi&Z-)6BU>yeh*4Pb1wWGCFRW$bwof<6HzqdL#5yj3s_ z(}K+`fX_^tArt#s_zOJLM5sou6-8Z+Lut_GG`f0v^^LqL^W>jI$8coJ+@AM*>CfpG z5JsVD;sDz)n4nRd{)VKU`|Q=Edif21&h{mG8WrgGp))%OD|d)_g4Gh@{gx+)2U~Q6 zp+kINMZV(sdKI9p?dvgLS!7{yAJPrXdA7YshFB)3sLew7YHv2h0u4(aer0CQf%}rN zKaP^sxCI+7+Z=0HsoMWTgd%PKmjFxJfrz4R~DQWc!S^i0s^a^6shk%|+hU$}C z61nJHfIb_Y9vfH~pL+5S7Pp(d@B>bN>0KN5$|PUCzVqH5HF2~Qt@%<1{~)jV(KAJ4 zWY9#YSpFHbB`97r+g*5uX$I^=LjMsonFVJVOfzKc)w*@7k8({03JR}%A?#DbfQH%! zwl2sNG-~Kg1hs-K)kOw9JEF6C1a-_>IOW4cj$=0Qm_|bmjqQEK3ZQvK@gK}(SqqNn z?C2yha^v8jR*RtN5V;afvVw0g6HjkN*o}<}KKH)&S*6S#w(oMg$ob7Y{ru4**d7gC zgv{$-#IMchA}PX~IR#o@wr8Xiv7%@Y4Yl8P;*HsHE3pC4T3sZTC<82+LC#vqEyA`4 zX{kxOJ)P<2mWv7Qv<(wuT8rX#rWapDvHE$Rwcba+uL`d3{E33<0w+=ja0B~LmQ5lg zB4|GB)+z)I{fv`;=wa-BAqFC@4iuw$0v<|nMpVN=^f-4=F>)x>K(+Ad_gB9!IC97~ zxKwLX2qGC@`y(&>1q~5AD(@8ZJ^WDXL>vm_`J_A=l&Ihke;e&k%vkQ*Xkh!bZ}U3F zyS&&4)5SlF$7nfU(& z&2$;~r+7)tWLJ9wp-dO8%Z$ui#0!*>z3IlkG3de#Gk((E=>mG{;y(QK9{ooMn)F|L z_0nprwZX-Os>|BXX1yC9ok6d2kx3D&6+eNT+8nTe9U7t4E(k)v8LeEIrD_mdx3Z{1xZ(T(mZvdBfgKn<)Rjck?&i5#LnqOv<8UIN`$VXX&hO zu6{#sP>oFU2X;D$c15Qz)fmx zI?6<vl$`)3{4*dv0b6G`tG@2y0M z!>^icyL5YZ*R3pfjn0elu`Mq0HzUJ22b@h&cE-CV5ghp*CfT6xP_;Hu&$v)g#tRNz z(#MC736(AB$6jlrNbd${kdFZ7A<*(5c7(YP8sy{+hcDljfVIe5i&xA_SjmA)^lG)* z^O!|o>O_WZVL!H;AmbbsGZ_ysYFo&W+a3Q%p<^wCeaW&nAuJ*ltXl*c%(G_MD{@s- z(Y76NiF)!~m!oypIXuMH{{g$vxHo-c1U>Gc;TTG=WQe=mZ(hzyQ)VkOM`WjNV+>p1 z-gYupvL$EyN|HLxP1A)lVKc4(ya%p-7Xmx>Nr?L9j$ovXlit;N~Heo*R+74 zmaE?xVI{K?PZ<&53KWI;|caC}Ljysuy)7PI4C)_^uA6cgHj^QE1 zxP6UyDBz4RDf$L5{}eFKdaJNAFSA8$HevM;Oez@a88R#qSjwb@u>tghL!-CG!w^AD z+laP_fvh2uDC@^oLQKJ1Jt^mj0_M!ZcW-kPak=#COW07(g(Vqx_XuAgnzLUahi`!% zzXO8hN6JVDeOq2t*}=DdDNgo4d{bE(Aos>g-5oIu%ZzMLM>VTl7qTOk~-gEc)%dTO?R9$zty-R4?5nKr#8ywaDDo)Ph9n=Rd zZvie3Kyr@(msP9gHEUJgGhfG&LWV=I+`1dX+?-I&PLtaBh0(KpBlZm>{Ez`?_9)A-F2eOqft{lv?YusETRfVM1sNQs|BYNj%(_^n?HHuV;-SDv9;sA*Pmyp?lzfP`sGRdR z#!Bh@HT$mJxz!Wgw6%L@zpn$Gx~RGDhI&I&%)zcMEPmkIGWE?oy0ve1)Ezwm934hn zbdprg_j&kVx6cE8*GQ+d8a)ViKldx)gO~m$)8hBLuzN5%M9!_AJI6a-^WD#p-Q>-P zWmx};M`k*;6@yt03B%+%f7VGQnX9Cfv{D`E9K=T2lFoK@CqK_7v;F8f@l9i2_mU@sxX+>_%?>W7x&L0pGoXvIOS4UuxzkD+XuOGylppa-aoP4S#dP0?YcF z8$`eK>2+{tHZRqS02i!p{oRcg7G852k;eZY{yGTLcpUct_a6M63-%9zHg;8i48N1e z?%4l)h&tKNe(uBAd-7-W&*(q%75;MmD}rCxAY38bEj%OqSZs)2k&a1UkvGYoRx-*v zlvTA~y;FTwD`+2glpMe13_0(1`CaeVJN2))yWEd?COq%*PI^Cs?An9=fdBUc6M>H# z730a^Scrt)6#5bVKEa;w8^cdW^vJD|Ka7q=ABl;v>tZj(cgH`I*q`{FVYDFDli_b(MeVI?^5MeyT_7Io&(i`=ja|)pu5ZuliEWT{~9$ zBoM*ygx6#KJMTE;9{mO9=6}r4^PRni|DgSjJf4KU++X1{dal@6{Cmavn>HNTY8`Xr z0q#M19rtOz$=!q3NBEQ6W8^6Q!ooMWr}2u@?c87D+`DmZA9;#9fcKkmE``?#yza(p zck6f%?qpC{<2xCw!c#d&@|_kP}waqRsvZjzqimiRdLyZnvZH*wFe3UA`R zg7-2_oVw{wTBSAe^k2DmF*$H&N9vClvNo3(7`<}rQ_<9~q9 z^Q42@1ANTk8FRSC#(Q!82>B(5J zaoo!u?(cuvKDXo8>`~-r(&+@BUK`{NfCpbmbKK)sV5;Pg5E*e?+Ik+l3(g@o$vkWJ zE|3!5=kRTjlhFG#f_0nA5KG*Nou=N;J;ybBo_4kf_@2CYOCiMUHUz4k( zo7~>T*`;)P^Cvic=jNug`@mweKh`WQEgwst*}K@J`IS#95d9-Z%)_xvrpYZexoLCe zdCXyYd8(^PD$Vrrv92bqm>DzE)#NMbqc89QgPWRe`lr*&%Ts4*V0!9oo}X^g={>in zn@$r4(SiExS`5<8)JYOQN>DeQ*O=)&9)8z9@yDnSA;MkePbaTfJ zoSImQrJIB7XmDvMebye08I^FV^(o!#W!HPz$j|IpOamKdR?1q}er%9o5-U zeL1$gw6qihwwliABTa7CVw2m<250a&wz-*PN6F1ApYU);*oaSv+~K9Aqbo~IQeIkW zL9moQ3V6(^rLLw}NzbO6LVg7>$ zYRZ+SI$dUezRbe9f{*5u33f53R+{wiu_if!i8STTuBKW^v)SqZOW+P;2#mQGgLWC*n1fGX77>8S)RQ|D`y4v9;=)c*?YWlR$}jo%2}Dc zCo5+a_MWPoRoQ#F0&Lj$Z%WI+w3+U1lFOO2bTum%Tnw&XywSecb-~5L`o){2}<19_}M6z0LPmlQ~IWzb}b z{a+mccI;}_+9W=!OS6pQn$^y;A~9wcp%fVv`z}Dw>y7EJqz9~-58!V0eP(}MO+fox za<=R|7yLcT&drROgJ=7R!C=Los~80Um;BB$gk@#0tJ$b@heo@aga6i0F!m7)9|DQE zU_RZQo@XinsNHzx%)B`d6|@M$2dxW>G)RaM0EUO5yMoOSh6zxod285NCpXn}OqZ`b z(`}~Hqi1l>k&B0=yY2fmC3C7hI^A4mI%Q(#;tN7rOvhdj3Sx9=ifLL6N*m9|49vOZ zrUYtVEUu6&QnsyF_dP~&r z?stiYU?NNWO(cX|{Coz0%wCvnqtQZ%JJK5fLMb>GD%;;(bw zve}{*G=Eofy!|u_`z>-UGY99jAh$_80sYa&*=W?QZsBinA8T zjExI6=2zgLP1&F`b~Yht-H<#Rpt;If4Yr1Hzs33gF_xac6odU|xR~La>9J9BFqXN1 zUouOrdCo%t50~3mS-_`}a)!~2;iU!5Itn%d1%@s5@J=A%{_bWSQoiYR&Tq!;NWkB0 zV9b_Ea|mx+85U=O?(`gta2s3ODvY6&$L8 zW*%quurcglFB`)S_OUVSV1MNWXv1k7E#e5a9Y;%*7ZCQaqXRgy&t1mG5q9n%8)qF| z&c<0sSFmx`(INKCSqxid&twNH?3wJ~FncCDIKsv(;NU15!w#-wW7xqlHs*h~c5Y2^ z6j2;My*Cz6kh0>XFjZTMN)aw0kl<<{%evwvsGC3(%BK;Kon&`ecb7|ymzWqOTBh_P zm=9p>f?zZczW9&_-+hRe@>}?Zztg>}i(+{xnOgeaJ*Uq(b53{9%<1VF1&da%6ewf$ zQsi5`6rHttDLQBMQk1oNDau*B6y>d6ik7hP@wx*GHdjfo<8=qefkidCl2wxAN}Owf zN>g@FX_hUG?ogT)Dv#E=uG*ZfvF4!GIPaj6zX6|7$MS-MO7NzGO7Ir6V|9LS+nnY1 zj)O{m(Lp7Dmzraa-z5i?;Ie~C@E)`$>in+QoaOhvgG&B^gG#ok{><{IZZcgt6(N>g&P zn|pvBMO&TGcBZr(emHV~SRuGMd9z6aZ2@T|*P6U32{z4rrFZ42YL{6*#SOvwjOOQ4 z)o#t-h>9za)NE(k|2F$w{+OjxzRgn9 zh(f3te4U@ehWNtu8s>^Ywre=Z_eQ>};gIy0duli=T_#b(k%sa+1M|dE9M3ix4&LG! zlqD(1d8GQXC>drNVyvN<XFZN}DG)1*K0(o^(NaDS6i7 ze!ju;cbo^Y$u8%|sCg3Up5;0YH&5o_m_xIZ;A!v-v6Sb*J~TP>N+ufczn`bAscQMfjtZBr$x ztYxsasv=nRQCU;8ph?mf=>M#?WeopHCb0n4`*C zslQvqvl4ZUh*Fk$14av)mDvj50k#sh)!td4tb{D>ec8Hq2he5vWCWR(3)8aCkbiQ1&8|UhdU-FEHZ=(tdc#UxeUH bq2y2@ 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 XQy)2N2E!5kuR{J|CYSE2&iU05)N^-- literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2f270de3fe220039d830d6c8b6a55405e238a499 GIT binary patch literal 33548 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..c6693779244005d8fa5fd1caeb40f2fb83c21e1e GIT binary patch literal 19664 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e89824d6ada9603a9906f731c4e4f87a9a98b46b GIT binary patch literal 16976 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

    viU|OFj=e4`Uxes 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Main-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2aa480a009c9ea0980ae03efe95374ba7e48095f GIT binary patch literal 26252 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 H1poj584H<_ literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c3a1c3e448f0a5de06c4808e45182a52ad74c29c GIT binary patch literal 31168 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

    Eu&q4fgkTE zI7`hs*^(N*Yj`H@)bD>!vtLu{yVrWG^m*pFl6cV(dk2kZLPHuM#_=8FHTuOK_kO<1 z)|pk?(NDMhQ{}ijyxj%OjzsOaq$A^orqN_*)63iEOAtI5Fbn_y09$6;TWx&YXPcOsnOj&|S=-p!**iEoIlH*JxqEne zdHeYK`A-IcP$ZT}Wpag5rPgS5`qfzDH0W3mL(!!CoM(k=+i|K)@6(uHzs2rM+slLc z2;=eTm|ly+L4<0ynbQwzD#0GaL27}10KEWxhr}&>W+m*?BYv@fUrLC8(+w5-%nBkM ziYA_kYO}8dH*uW|Zh-x;^27vEm+nNC3APU!k>~6j9c$D9PY<99r&8FIm0ov3L%@}& zdHrW0a~71luB7R~B!UI<32}o73!O>iz50&}A1^1fNr=K9LWWy}Bo0RRF2{{Rml Ck2E6y literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..82f609f6cacf6b6f7fd71529864fb729dcc383e3 GIT binary patch literal 16464 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 tj;J-T=u*Jev3WSG6=6W0TzXz3+RY8TIL^ zQ&s1`uct;}f*`ns*9xMre&BFlW8u-|Ul)W^_u}aKshc-$lk)#Di0|LR_phG1`xO~! zHTBPeaOY`!zv1j{*WP@x_re2$aQfG96XV*AJ8#2ruOQrCz^8WYP4}IBs@^jh|LD-<{hpxi`HN`)K`{S5UxbEgx-20Y`!@yQjyC2$C2*mE&oA*Hpj8E->1+DRO<%t8&eM$s4_^3TgPq5m^2Hyp zud@G3a0q2VdnRqFoHr`1fuUw26b$5ZY@k=n=SumUqT(kQ41~g=W@Azu94w!{_V(-l z_#13NG{W6!N$074hbFUdw?Cb&h7JBFx4q`RyMM^EVzm+Vu|&Yvr|+)M&iT|pe6&_E zuw>yFe*Gr0Hdr-KS>RQyA&=1>dI4hI8a>q%IIg6HSx*C4H`h4X`hikdGUlX&Fp zurA3OmlWT0M3bEUjXmprr=&%ueVWL^dtxekLK4NCqI~vwu5wxNc>$m5^(nHX@L&EV zodYop&llKdv5q;cqr_<)7W`p6Ty;yTo2!ZvXj)4nyo41spkh7c`XJUs3&N5HfFo6* zOO#xxb>p5Rx4Rja0{(I+ruYr6-EiHV4poyBmm!OBt~~QtALE>Tc-k{~U}iAI<#4ns z#`cd+OiU)|cc#1wS0CgIUm5p$xOjWTsP)xbDLUtm#sEXl#V+d!J8rOwGAb^De1(eU{ z%7p*xqS=@!$Mv4RWMt4A>s7i-iXzR3ik>R2jW#0jOg$qy7MecK;eknCdQk_q`Q0JT zT_+a2fxE^-Sv4OCW@RS&<$x!5dL&oZxZ?D2l_{P*jZ;-M8VzSsQIF9*>J;-`)5Y9m zT4wlD-q3;}ZSttW_h*aA3^+G&agzNR`$J(wm;~pJjW*)o+;FSeXbd$brB-W@NK_ge zY}tS{!@g!H90ccdc#FQNc_LfB-0}h9&nijDrRuUO$()I=KAYs+SX_LoB>Mfz6<{Oj z3dWsg(Ue5hIlAkl bkjNkHJg_g%TmmXm<_xpV(PkvG2%I0Z_=eRU8#~n-(r40B^ z`2nlXA9*)%Tm#g4o_$f+1!|2KiCQ34oq$GKyEtT)v=HWiG{ITYzPk}J+3&J!_377f>x+RdcH z@a9{>Bb8=XVNm0;(Wnf1BYw|SNB7PT4Zp^bh=h}F-6Q(~314(P9hd&ldql4_4aZ=% zI}voV)1|Ix4UZ6O|fh$6n5(p6LqKRpBlPx=BRpR@mL{U zi3KNj&l7E0pw0K#9{?uh>9hm1X@QThbjW|R3E==KEY`6ABLFQj0W`?iP%dvBR+VMQ zd5%f4EE{UE{O{Nfby|wMYxJau%k;VOw>TOC_<~`lhO%9KEps`O7n+q!%uy?-*_tnIYNh@Qzq(j2=Zro_NS4j+@sMZa zfMD@i7yEr^=mB9j_-tmVH%GEg8jjF!3&-G~O$r-OPy@o$2sJGvK)MJA;6Q(g7|sUY z;xy8W_kf*Ty5flU%vH-uWv|yg)!PVphT^3nbL(!tch#xvo*o$)Kal!*Am5#c7)n2)7hU6hTSg3J2UoL)iKYF(eW$BYsr>7$e8}RYr2}({Ys@UHW*E@&v;_7nZ>d( z7VAm$ojsL{0^XrU-T0?mfl0l7QB*Dl<+!)+__fzUd&ypxD2jawze03~4z~Hbo4+eMRmtU1w@z}; zJ4eT5O^r&r>~L!^R^4(XzVdDcp3MN#AMuZZWA_Ui;MuDWFHV(B@GN;4Iaqj$MTsAq znK1D!fuUN~i6A2xYgx9oY5M@CJWv8F!!fWVjt=5lkq!be9m7WlS%yoJrs%36MPQCZ zSz@naqI;p-az!D_uZg=^-H2EGg%RJC7y+vJjbrjC)J~Ys>|h;_|(CJM)&SO zaHy}K?7N%geP(1~O`SQzU%^BM$>g%=F*)OUsnpD8yJnoCV^3>oYL5dRfC)~4?1~PF z7Z%9c!B{Bb3tVj$N}GRQ9ffh@Z{D>_!eRBSWf^|J|AT*4ScLW&$w2!s+q1CA3&eCF z1$Wyh0%`#B4)YyO@n&NR|AGMy9Kzy*k@#b~=LaWmnrOM%@gu6MR2y42CD|3^k+&Yt z=dXR-uP)afUK#5zDC6DSa4<2_?NQvbpsdF$lc(}mhfhR%Z{B!F3$C4VFkj@B8JDDS zZSBoL$6Z$?3-{i>a6`;wdKdQ^v2Ks5ZT?i1MOpNMqlGM#RvxtP>qu|L2QI%vcTkqd zPJ(Lt9*T#9-h(&{DCwL)fBa zb&YXRg3Du^Md1eah?<0$m25-N>KP=n~nw?s*Xa;RcoCwYZ34*W~WY}Ai zaV!*r1N*;2XSU&w7JOcUrYK6ZxrMub1n#Z_?#{+7YikSpHtk;$ za%gf`ThiSfB&#ZEO8OZZnB)yom&E=y_tU&QG^B02p+BKrKbcqy7~)I99^Zl;S}-_# zYz2(YvYFPnlJ&s3ARVH>s!ws?M*)~obGDVqD8^#cLY=Q0czJoCB`)i7GP&e;09T^I z9()}Xg2x;ZH4%a)%i={rQf1Yh2&7cyH4hkEAgF1+I!Vc^G-tw!M>a3-*RbWU#}f(@yB9;Wj-=|@PsSs)tkv1gQa*1Fm2#HN114ux>Il^4<{}ySUj$Ro65RfjnGT{Lt zjEbS`;`&4Y;wnm_dudN=+MzpSj05ScOA(iHIaRM^EChOs;4@i=y9ATWc+Zoy7>hu$ zL5aFN5&}Jk7at;&*yi^ie@ugtwV@|%HgfR?oVc(Fc#@jMg`HJ*1kHBdXw@772Gb1= z0;iEaC*?#&z+}I7brcIlQltC&_7$FRODe3wbdmKEO82ZUVw zQ^f|{Pbg4}*GV*pfh{{tr{SXEUzlvS^|M6+K)6M%#^8YH;af6cd+a4kdgzh3BPnfj zhdgu)xh)Pph`E#)f+!qh>{iJg^{VjRyvvcHfJakB@A3p!K$9;shoj_O2DI*C&?2L= zt96g5gZn^ay>Zw4d^k)Jps2FbcSSaH7~br*@)x)HA1;7N?61j=07(ItH$TTRlH1|o zP9EjpeVDop`Xs8iXsc!@fMfW{0HK#@qa8@?_`aeswA(#kcq(Dh za`@%af}y&{y#oa;e(_E{;fI953jn}w8BS6EKhHc- zD8Q)cq42)xfCiWMj@N(y$c*fCf&n?A9w`pU?+4@=vSV;|NF>OO1uu{xHz_v-kB59) zi%GyvtdkuVg=<>F;d&X}c{73Op=#Fu;#C|AY< zOFro#fTQ$Lf)z#keDQ0_!G{GGl#Ff`p8VcPkhC} zMM3xmqkh0kdIb0!YR!WLy3d$vI@x!YCmxpDSZI+sMn8-W6EzdH@7dG{<~E zeuNJu4QMKO;3xKlx%h`78ycJr0u+D)77*RL{U-6anlXqV+a`5^a zZd}~U%#(@Ct*o*z;r0c+ldW*3cY3553r~#Q(@OH^nftA`yy3n>&H4E~59IYn@605w z`u5(F2H>fg#j#HwUpnp6O8cKWLF+>_#Qz!8nH8?Y`VKGkULFl~7#{qNzl474$97&} z;a-l#x58oaRgka_Y1?%I-R&!c zC}7Ix*uf*(Tp@1iTWX-g!d#zfDuJjr(wsLLyXO_|mta_47%Sy9=nJMPZ+-;2lj)`S zu5QX_H7-tC6dMp$gsYGnICgOFOurww0U3^2C#%!(2~Z%g2?-^LsEM!yJ|#8|Td0CX z6_KHDQ7C13{U9wcNcy1(6CO5S9;i2t-|JyR5qVMVtuh`<$ce5MXH%6V=OyYpi6b8Q`vFu$ zz_#U7U&ifF!uRE!V=OmNcMN{|UOjtPBNeUw(Sy#^b%Q~zHvMQ&&u7cAoW&y-f5`t0 zJaVh>2zcaGceE(4dMRSIcmzNL{4E|q@|aj-D>5d#YBLXUdwF0|wDEx$^1tPt%D~d4 zXxnBcAan;ebqoss*vH&g_7$b@164(xlVx|rEtR~oVgw?oE-iQ+GN_Pcje9Ddz{El( zd&vteoQNDFH|>&}dX6my=ckOAAKb=f7xu?y^4`!Et8M86?&|OA*8^)UpIllp2I}d2 zl6wZ+ieZ+kPCn(0I9*;XrjK|V5tXwCA4X|mhXZ=aKZO-`hFsuAaq~Yxa>ZE>FQ?Mb zo&(Syujl_mI0Wsv7_@vO!Ue_XV75yL&y|s5gEFxq2Fs)bi5Xj4tOp|5_6&pqd$xvP zu6s9a8q5Xl!PhJNGxW@N}5v zxodf#abvRTWYg1%p?*(6hF{JC+925NdH(CdNkH3o$rk4=SKIc@ngkJCaD+BniV`C$ z^2G6MC>#z@LIT{E&-L;$JP<@vB2sg3axKFQfefi`CCA<$e^vfA7Gf6wj!NQ*b5dUc~jVvKPJ~ zS?6WZjaUY_CmT8rF4%+wt^qGS0kWZ#bF$Fz@@CSi6aqDteVOEBQMX0aGN;=iC2(Wa z72iEEeCSotlRFKiXHPsf4?`*X7frENms0QBICu+!0N(5$v4rkrLPa*z;{5T}#0|^r z4f;zMOYQvgp0#sV?NNMT)A67k>cD{ZU~r;ExkuFw65N zK6i_D^h_`a9!}O2j#a6`ZJr?+usy6ixn}`$TN_)VGQ@j*%jSZqf(wXzvZ4%SP$Uzj z&9^GDX~JFK&6S$dXN5q{o~gTom`a7DWC zQIY%&QReqbPRk{*9CCQy2wa)vEP0xS4@v2W{uDd>E!}b0)7sA<4s2_`7wG%^{UfV4Db$ml70`* zvR^vDMO7&z2nmvy$W0^ibQSp@2*2t8RXM zlfkcIf2*3s=UNX>F&(k}ear#hmvT^-ynQ6V)Xg5mIOmEzz&;$a0PY3{SBk?+bcvF& zIcA8WCtT>AEPU4xy*^#kE#Hk~D*~f`1XzDH@fKmdX!-v@v!y)os|*yEJ37e5o$dH2 zs0e_aI?gHz?eGV7@|)!=VUpz;*tHOdBeXZsuygZ4OEW<+5kr%WRG92v3G5F!fO<*s z9_!b?$!?Y%LkSDd?%WljBLN*s$WwCjT4t~>o{q?x1CFR-gic;zSj83DyRY8?oJ+^9 zn3|RJW*#W<>`kW**d5pVi|O*^s4T{!-G?0hd>Pt0gO2jb|z z{aabN@GneUJE849nou2@>R>UawE0umBhiCY66Z(h68+E~VnS#|{ifJ(3IN0H;gJi! zg)oXa=68EjQQh_rf5LvsK8ZZj9{7i|L)9SphXKk^T1&HBj!XVuuw)AcNr6Q@oNt7Q zhRm*{5Hz;C4A4R@J1hYeuLtUp;VC^dd^?y7*)EA^r)W2f0D*nTcwE`jY&%76q7u|4ty#0cxPt z8iJ(Tf{qXu`2$PWLKy%iD*&*4vo-b>X6#aOJx0tJnEd6dlCk|tqse^%RYJ@Sr78Y& z0`>?AVG&g;CE|@_bJ4WV~|ww^4=BZ zoIt$K-lV6a^@ukUo?Bc3*X01slk7QR7+g2dO} znuXX$OG$qy;Dyn1`g5&XEaP=fX+DqlnsF3m90)mMlP5yH8+-izl27ij{@@t=HrBU z*1V@;V{&P6)>MQs9l^%E%-;fPZ2o(kY<}V(w8BQuxmz;&S0s3-> zQa!>LpdY9@D0>jLy3+Qks6!_ZS<67{ctC&aZ8ACxh zxY~cTh(4m8p4)bB5$w>2GMO*-N1TCdVr|G!RHmrr_(yk%WizTI*tymrys}4Gx>4IvV*L5Q8D=gR*rxIL%V`fPzvXFahAJ zmc@Gzl8#+K#mv?f1TwCG61h9h!#-mo!TS1;4TN%Xm+Ph&?CGi$`U~-D-eDR^hi1B3 zHFOVpdWXYBM{cCJRHt(vRC=;(?pvgCE{tAJ< zfEB=!3j=TZedUJU=Mwu(ZLX>2GO{aegrC?F7>xvNk2<#4niU4^G)Eh+$I%k8#p)ZoywrKlP0 zikJ~J2u4B~4@C=-;@0F?BcARWkXfxJ``pfIRFo440sV{hQa@)`%6v6kikP9U$nQtO z*$HqR*F48^!QQgV$M3r@q(_zD5d#Hk-^h`^65@=1S^7womMn&FVPkpa{UN0 z`~VcvZrdc;(rPwXCDTgN;~e0Dk>%8y673aNZ9?T_Zds$t}M z{pH?J-COrMoN?0=4RF&9lEr(Xk=~Y~xC&VpH=H13%wvRi7mF~*P#L^qkV(BeHgA=@ zW^UXQ@5&ZxAv2m6xsmgfYj79+Su^Mw*Sb8>184^JU70aky^fORGNNv0Z|$_^@_P)O zRp0iuEkjL`SOVATz|asd6r~8)*7E+L(m<~SHoc@ZNtqB%!XXG8{lFKrN_ML9Xl;nS z7EzR_NDf&SBk9Z z`d!?78GI1%RhMj*i$Ua=6h)MLcO%BMU?-?Y?yiSpOMRN#@sco;?j_Iie?Ly`v$^WvaBKkf(1@pN^esAq|wb5=d6d<0Tr|9Nr>}M=lL+W>dg+?vskkAB!ZH zgLA_k_^(kKMAP zyTi@Z8*fx1&hAXH&YK z%*ieitVy%Hty3%-`hBLtv~HdC6f%{N+3#`but&L9Jno2-Js7*3XnXh_R;NwP z51O>B0EG~brCVt*T5buT4HEA`FIsLIY@J0MyLd{eHCtp=D@=GpT$LN$I`(iF0m<1P zE%p?e4xZ1mW|NX<3}v4|e^4}XF27%Lis;M3VNt!YP-JYrhdCC#K?oSvGc*1~F{Sy< z$KOOL8;={{tsGPm%Gi9vro)M6{RsSIER=`Er(=>91bE!wdH{Zdh*4dhS{yL zNTw$jka;0xXgBF+pTd%2gSLM2~u-h5TOxy10LRY4*80foY zQ1g_!3IRiU`@P+o$K&4oob2oo^WjkqIg`8nBV7GE_O_f@>zZ%>%jyx|E^R~}L7 zDXg8UONGeR+ASKqXi<=UO0eOSO~{UaNszoGH9PtO(>vJ&8|2pnZ#OH9zKZiN$(%6Dl*(aO%h`mrQYhi-~a0yn%qw&wYb^1G@^z zn!`65(F=(Ra$xXkJ%+mwb0!qG%H&wMHtXWD8`cpX{Gt<)jZf<7%cXllX0H!^4EHv) zKX7?Gk;GyJX@90q_7r+N_FTbdAAS@X8=a7v6Dk;FpHAzJ*>Wd8!(oC0o^ zY3~hq-HPP5RB1;-2~en5tCPKjSkCY7 z0F8%p=gM%Fv|#+D^un%krnlSAmEx@fq!}XN0DH%K70W(>Z`e11o1?%@FC)GICr}53 zE!<6tN-XdIB6fbz@k`vYg&&)rpxiAzNzz3o%61^^^4#|f*%NcQ(;spObSaKN zqPDS;giPm~{;nwp3LgRPIWUNgdx>aJ*WA^-jQ&r>Tj)8nFK)<2ch!&1LpOSuT;uFn z1a|He*J`M6DBetV@QTHZ!5pq~$|31Y8#stwiEvPs$2CQErYiNTb|t({r{AMd6JB{3 zT!E@Q|0DE>Q_dtu8qlg2K|~O9+HsGK0&+37%0`!(#Fh(5XmwEH^yh!-4fe z{t9fVL@{!^5n)FkJiBQ3f}>s|rz`QbMQXKwTrqZ`kqcd8Fv+NQZ1uEmwYXESvfbj2 z9jBFWy$cP@)IERU8|YO;uOPL7$?yZ~sDlNt`zIhI;5o-52IWnPiki(pO{43w)oNHP z4VfrF@|+OJh=>w4pV)jm>IDchHC6FRGW*bL*u*&Be3<@Yf0`E!t0WZFf3VQC*$ z$b<`<*1oYzolyhU9-O7AO42FN9vphiwoxH{LY!fDM_F|u+Y^J_*xY8FRFOP{n?Oh< z%WD&Y%qO`BbTzoM)0BhGp_go@>fOD-U7Cw8JzS}~*}{|-jyNW7M`o8l$i;^qLMd3J z{jxqEJ_DB@k-4M=Ub6A(yGL)(QF6Hc=*C@o=Fn*%RbQRE{!#NIsLn7qHqWA4cxIlX zM0Dx<^t=QNF#(O4{C%JZ^&^|aY4%<$#li?NnJ@^j&@g8L5tkZ{AwPC6I8IW7QMsHG zNX>M1WBrSJK0IMiX-uEaaJHrfQIQRxhl6Q(d(VI?eK>d|;6=H|H{$W29f7lp0_S}w zbHfgScY+S3F7i_hEW7!c&F8SMaI0Ks)y2&JJ$8ROv)Pg*Ek>KKJlNMP3fRjoI?&ru zLSNM@(N}fF!Ft)S_X)PL*ket0#*Tnd{VC;3mZ?E?AL;>af}ff>EIL}1FPo~QWNfFH zgs+t)>WefRJJ=-D7~{}BWY@N@z@C=BP}xWBV=O@%OVF32Ccf|k#R2g_520$P zUFf(%pGF`EYP*nVe$RVlS#f&RE?~t)doDJ=hB7FBR!uQ0=As0OKbL#QwWqs8)o@~K zwOWH5i<|$ze~F`Q6+I(w6p>$4TN3g!TAxT6Cz-!t^G*meJ9Y>KN7}HCsiSLqdDboxo3+}^I=Fa7TcK$8}97McAU6%KEcCL(Pz$@5QX-9A`tCO&^ z&9XqMZPck;_YzEW+2tn5Sf`Js+1XL>6gBw2jJ`U=4%;oeE^8+nsj{E5F<@x{+Y20z zTx!aq-gkDXOMjC15tclL#=fXmwEbZn6%Bp! zdm==Ry8@Nr<1N_vME8}Z>SW)i-Ub9-PM^e8h~GJtHE%{GR#(VkH~~VTMFSrkQk~Nk>G)ItZPYuK<{t0>sf|b$=5VR zjE!C0jE_UBJ0jCZvU$Ir?NMbj$g1h#+G1&W$M&N;lh=iv=xT5T=S@x3pj7=_b%rNP zQ@ZGI@-R}Af!cbc@7^LdLnxuzZCQgmMh-bu=HP~uNZ00{*!&LiS)GkXD0l|3dr{$9 zI(_Ad6?b>{V05G_t;^6b=;VN^{wQ#8gYXJyn451ran-P9?dpUQA$p-s1CTm^f}Yl2 z+Av^;oamSWI({B5hU`un!VX+o+Tv-VqD6X#P#E?@yn$v|cy@X%V)YDp_Fplvs9$Pt zmmM65MPucDPxRpg1=1Q_8H*z9`M&57wH!Q6MoFgAyy^U>HJWg zlKg%PQ6xrq2gc83IT!%qU3vgfjaZl{L`k>59vbwN^Bvr-9GP6wk>x@!2W=g2RR)>S zS00J0TCyScWMHkKsUyL#Cvx9f9^2hRFN^8$hn-5wCyPo~kJPO@#o^dz{`5~_O~lKw zEBAfuo07XUc5OVc&&eEyuAnL8s#k|Jehe*OKf|NP#K?Qg{b92Yh6HUU+JrM&s&^et zxPj3X=pYlF;Wq-KWy`vk$^Nt-&Y0QP6>F}{E$=$vhiW2&6k0+nfV6j%`nkkPC}3?h zFe1f+dwU$IOsuw=8VLI<@k8~cqlMKyT}f(HksO{O#53srS~-9PXr8WSY2RF9egEvf z=B_7mm+`_JPB~_NB_fYuyj?_lX8&04c1HlXBOCSHKDCkI~j-DY@H;xD%VWA~NNd6lYIN zoeztH%AV!LE9`uAZ+9#+JgB-*&&MCt2xdbI15qC(u6NHQOUXS~xn-4kZ{2W54nn5= zE*0-oF+%AjH81w;%xP=xE*Wv2!;$xudM2_t&+g*%Zh}3G-t-A*`5dAT?U~V<%jyRJ zBxXm{sH|qWM5OdBK+EV0M*c8N6D)xRFW>~XJR|T<3kM;Pgp8!}ekop$g=)jxBTXF` zuDhCV-q7P~C25+QtW_!~g9uIBlR?kGYD}JGY^-toteo$u91z`~BS++Z_mT0Or=+pv z@&2nbuI9?MZ}#v7<$^++!pa+th$%NE_pOJ$n?H5P-r^Ek(1R^LlsKsNT8h5T?Zaw zLU`psIDRm|kL|Kj_`KBu1*t88a&Y=S9}l9u9n1zKE#=Wp{;jyvqwE4M?4!y`+W{NF6c!A?xQh5u zB^j|yI%r}mO&bzG3PM7uY^h}%s8)$}K`l6Zc74n>2qn>t*f9-$IFPPc|s zmZ6m1ws&OU>YUu;?>D@$OuvU~zJO+k9w$!*@+P#IqxXSE>*`NeWgj39;_Wg24qZvv zT5KHsuWBEl9Ffuj7z)A)r2T-D2yL~3yma-$s=it!Mt-;G%D7E---~LhKU4jUK!1HhcDd{F=UF=9G`p&O z2>XEzp_5~rPs{8?rdf1t|=#iw%xn`%%?suF&{H#7J%zI*1H$D zruT=T(-j%9t;{%O_$*JFUInmqaL1~_exLCK96d#+tSe*vQS?SDvgT4EnO3=|jD>VP zSJAl~WzU&zCI73Z(jl+2nMlFjaxGA7#Qn99&zo5NNFHyoA$jeGh3vsfXwQg3D?u*- zS%@ZSAmD?T9Y0n~V|)6fXwXXv)(%r}V5KB!3eBN&)~pW8TaD+3-GOT)Dx_qydaA#Y ztQBg7xIfDEjSGRFcAR(JG4F zn-=CzOM$ei^IvgkVjsWod0uyE4!7?jUszb!Wn|oj`sggoU&vWQ#}R{7?y~Col&A4h zUvt>Xh1+;5U&1^gmiPch%oejtl^%TWI4xKw>PD*alYwrhE2wE+(;Z+>SVb$md~MEW z_U2@4Y;~pF0aSN>wk=j4a)zsehvJ&s=hFESs#YGC@gt8ja!~ONsc(6+Bi^a&T;2_< zOZpJOQoFbbTmKxgf#`t?Mz@EWZhDa)LXPqD2U4z* zD=2sU&AY(WUZzy4c55r8oYAKIq*GHq^%;1Ito*w-*L`j+@bDiORK$V&$+lZXQzY70 zX;ne=-hB!h{Cccvin7gYz(yB@JBVB}7?)mCLYmu-EJB1}m?Wg;ZI92^<=_ZX<`z5K z+-^HXV3LlRA~z6`GkwFb#Ec|VI#c520t$xE<*AUjG@?ryYejwGsKJu?RBz0+kaTcY zxA?r+oy}I$$LJB|fFo$~PqJC$MjSoKibG_`q?L~E!fQV6U4n)W!>mhUkUFn?Om+FM zsi%XgjwT?*?eswi#PV{)bZfZ)+sA_SNq_uUy$yq=hb6qR{B+#fZVc5>fR-`bLC`PyA< z6Oxd&cJ5Yk*3Ml>cE{HyPdjWWR1g~sWxEUl1zW_4YA9r>{Lw5wBYMlb){x8y8H3aJ zuLj)Cd?^%it<)l8{S3Vti4v$rd)fn!KR8pmeVJ`$EA@!K|Hnw$N2 zPw!Z7`qX^ByO3WZnMhxJ2YUzBHv*aHqaFKU`>ko)ylg2MLZU)S&{`HrK`3k;>qvnG z#b5eDCO^l==tW|$J{XMDvmxj>XC}LJr_L(;-I5W;9ui-$&!s9_XfbTUXWq|p3wQy7 zYxz32SWLqe#*LoTN}xa@d@v{2h! z%y%}9qH}r6lEZdFWwwT%T{ser9UF+G*kk7cX=Q9&HjfVP4!{43vF>tEtCWXo-65y* z`266=FgD1D%rMhB-htJ3+tFdXGb+1M>0U2Jdiwh+Ykh=0@5O&Z9_C4*0_=6VLWmE+ zh@A(MlCabrX_5}ca?mGW(dV)aC)#s*`{h;%M$W(+wwi%_O8MXiH?hVV8W%|GLdQ>7&2icxy+gCCYXNUBg(8XfMaO4B>Gbh6gl6?KcTwq*vK zMShsN)nsQ23F*B{78`i7{ZeQz_N{2l?+H$>`Aqi{UM6aVpXnQj4#czFb(9PH`YOR- zWp7YRxh2V}uNRlcDz8Z?cSx?VQCq*PntY@X=E_3e&siOA@s?)ev{nn!1_`k@!A2 zHGZUTgt}Ry7YFz%Af(-hRqFWgTdsv|P>^w;N@oWgI|X5tKEXtQyF=4**&5nuR+t>1 zfkYJKRptX)VtQ}R>59f-CI1)t@J!C{zt52^=R)on8dQSxa;BW$>v0}RC%YZeU&zp4 z;Q0IRQ%i-YPg9_Lu;=B3E}3IJp7hW)v7d-=utfRw4`&`YFc-mwdE{;aB~9z=eKf25 zEB42sJ}ABZ;pDl+ey1$zIqN;Ne)RC)55MXfKsoFsC~eo(_NPtqCqXi*8bCgGGTyd} zOR&P{!EdsrRMWA&bjnEm3@iUiSHD@?WxCkG!&G1URV8Rn-x^SfAxpt1G@u%vSv#SJ zBiNCw^s4InnOb})hGw6v=L3EBmzMn++s&3y7tk-f7mqQP4>{mR^afVGz{&G*% zB^Gp}T1A_aD0@rk>Va^uFXhEstRTFc`g{2xVy=Ve2hpB6aim5&{kMCwEH<@M6}IUE zKSOcDsS1bSdzCvpy+!29NNgV@)<7+wR05}4fmt{dqO#oJz{ls3iEtzl4I2}wv6T_Y z>2ubrc>5HZGju7y5EJM@XW-W1uAVnZJRJR*7QA$|#hWZHhLF}sbK_bC8{NVumy+Sy z;E^>c8m%wP-9QPvTlS5P7}&pzI9*C$uj17oFUDVCBz#BDytqMcuoixveXY9~4$Ws( zV^~WJ_p%oVCUWe#HPFFM}{JdVpH3aS()lBGYc8$un0^G#2kO^ zNCX0eE+J%m!p&C8l6|FU^##xwz+1N5^2A}6 z9F3ou9K?&XCN}?Sa!~E-<=VAFfdspMqz@iMZ(Zt%-xia3n|S=6nA26-Z${SM6H-pB zbL@`&9q^HJaljYr?;ki6^hx4BU-;XhY5CK?%e{w^$F6QnYW!252BzGNH=*Z)!>jv= z*n-U*z`IcT$*<{efb@JUeu+qOd^$j<5EoLi(}{>y%q0TY-CdEzI}=4 zp-|$c85K1qq@-1GtbEh%1Au-GeX`^a4qLk%7sh%G$cELWZ&9jsnL`N00I~y8%j2>g z2*M6jAoc~q7c;l)8fL&^0A*j>HDC4a@Dv|eSAqxeraHI`OmP^!Blr599QkJ~UDI`Q z>5G={sQbL-OtDl7{&vrB?a#nZ9oO-iwukL;=z2o!3dMDo7H|d)!@x!l2a5GyAzv~w zHdE+okTc1w{f(~%WgF0OX{#U8TDY|?a4A_XB463I)qt1$HR}*gsFv@RKd1MFvmRHb zOk1l_NGbQ=WxLJEzU=jrysLyBM4m56>sjf%EAWYLXSUebw z??UjHs7N^1QI_(fztHM8tOM&UL4ZqmnMxrx+p;x;XnVC(1F`tf7P7&i-}*n>uEQRP z{I|F12n_pln(Q{L58Vx_wL1sQ9#ERQ1H8{)-~nM3!9+Q@0_oLljBIpfQy?up*Y zKooC4;saIh=DqUBfkYH6`F7;YO%v{V`G7qn{Pw?ZQvk zt?X;OpZ_BN2l0&fN763o&*gdf5_{iAt}`2~O6|6c!30_%Y<2M2=h3T}qp68h`#>%#v#(u{mHIv#yj zOo`nT`)+(D{*}a9;%}3u@$-i%E%lzXkbW|=EAwQwKl{IOZ_F3+A1rtaHy6HBoG3n5 zij;0EJyWihZ!UkME7kQ(*H5}vyFc8$*|XU5c+Zb2XDZ*SURC|$+S%G)^{)4Ry)WK( zV;}xE0t2mccI*XWE}_^i;F|C5mC|1MQ*E@b&%3u*q4kQPmRpAypS zSs}(N!iabf$3G$@#V-qaF^}TW_XDBDz9Z;-TBx%%!OwmPnK1{(Jwi#m1@~GNg6w-j zj{W<^Z?n(fn$P3=p9q8Odcn`fG5>q`{Hit1<6eIDM|d|HVCUCj{WC({TH_~#0{^}+ zNU(^8Fp9M$_%C8zrvFjoX8`?OHNy5j5;z}dfA&&sotxX-lEkL&vQ zl|q>PlTgEXYh8R)Fwuz?W;X&KW5Crjf|n<-o;L$0cL-7b7{<5Y9Ulh(%Mqahe9-(k z_Djo=l7fvIWp84yRn7KGC90$+*c}5W4at$S^J_))ALdJR?-GwAB zfZz1|fFKFa;arU&SB) zRsUbNE?&en8RQ>k&>{B$@rfOCe_i~rcph{AidS%Dqp) z3gb5I?3qNCjy{EVna?IN80Kf6@-siq<=eu_>Y25tLX2kC+ETSGR@%Y2ReD}KG&k3o z5YL>>w4YyTOQqvaburi6!l{L}vap(Mi^a7=SFU1m{M>4$y|RKs(`)fedzePUYipVF z_H3-E3x_)2GVMB@uhY!uS5`B?#<`75TVGjS$B_)3(`htBqoMWq`r6uB9N20bbEn$E zq1CpqOp~+t9$#*!Xp~ysc-AYNq8ZQ1!pXI@(;I7TR#{u?K(LlM4S4diYqhpq%`9Zv zQgH(?sdFoh%q`6JWVac| zS-qT*4Ervuf+frW^!3cbx%>tZ)k3xqCxWyyaV&Ccl^|_?W8Qv*>t!x)7jP9W-Ue;w zMQ-B%{Or>%Ll750qIf>L)&nN?RL^t1&_2B}Uu%1-03nlUd*=2KWEg-#Z7+R0gl}Gp zUOwE&Yat~A9Gt?!+rGK=%(?YU+XuAO+Gch6$m)6N^!!?(?K+dcx7PMomk+KkAGQz1 zvpDXzjt8pe1#|A`>Uq@<8%jTbO)`F=p{Yuqxoc^jSEv z+BWmEnT56+?B{}Dug_-Ie}ryhTD!XAWN7>3?e@vqj+3SBlXuuBGgYDOsk|(l0O}bVRDyFSd|AMk!MbvQ zk3RE&k3I{4k3Nflk3LI)k3P$Qk3PEqAANQMKKkqdeDv8{&5T=u)K|@{wHo%p$1-pmz7UbBp;!sGwCCK4@K7 zq+!N_0bqC(x+~NUW10kYTC}E}H-y=?bFOmcTyH*;89#@6j$J-2(`(kC7W@p;# zq*JC3u0AbgJd-c~^E%f%Iv#VWQ{lIGS==i4%jDwLfx zw-Lv9eGU5I#n)_LY0&@qT^qykJf5%%aN@&y3hwt355Yo6B`Z)OAchQvg9UlfN^r*w zvR1SR5x+Z{^wP7yEaO|a$Y2F>se_CBIM6h)eX6ZPnPf7%@{9CPqT=M%ISUvY({16% zYHwy72Ax*V?Sr`KHYwUl5#M&>)VA+p6Y*y`Z$00k7BqjYJ+<{T3;P{%t&@ZEVvx5; zJPrNPOIY014$rNw#9>o2<7>U=>ns4dow@Anq4>&WXJ;=vyLIi(`@Q&zxoUf~vU9@L zMOzP?ueQf3=fHl%W9K00FSj-jw6|Ty5*I9xiH%D(<~QJ=&Dx+7JLe&3y^uT`pk3AT zI&2Mbzs33gXDq$=QVjP0hKmW`q{qhd!}076e#x$N*0~4;JX+bp$`ZbfRkB1g!b=C5 zZ4~SV3WB!S!#jb5`+M6%kn%k*b9@=MV*!7=g*khx?Gb$JBP=ce-I-l5!duwdUnPca z?*p0-RG$)rT^Oujz-Vx=`V_N{9Kygla+u~U;?xnELxZCCg5$>xArtn+-?tNFua41PSe`6_;x33ErvAb750$k+-1$76Ex>;Ts*OT z*L$pQ))n{KL%QNVdq~so$9*R3TfWjB(u4=>Ax(G{=1y+k@72~f>wd4Xhcx}Q_K>E( z4p&av_j}MD(u9ZXAx(G~bEmfN_j>D_b-zdKAx(dSJ*4Sx#FbO_{T{W4G~t{*qzR8z zpTedqc(!dN{uH)rEg)!uEnAzdw6!yBv9NOQmO-xx2mrry2<{|%Gi;q5^4)e`P-ma6 zC-9%I(de1H=D`MPdt6iS9|zFbG5aY8!d?UlPJDCD((d7D>)R(ON}fMoU~fE#fZ&a* z^!@bw`7ZkYtR~n8g!#4j`7#}PPJ6Aur0F-FI%3Vl3HtL)QN#cFhewJNM)hgE?;kDAA4*^?K4j4mGQ{j+%2>Sx)fw!UMQJ@2EK_X+k% z9G|r2eFF17!JfnSCVjX5ID|VW;+N1Cgq$1Y0BFn*|9`ME=7J%7qB9opRxFCazt+40*@7H7@ufV+B_`M;PHY_9fX{pJ-G+J+6#M@U=a)b6#tvmRE~CrNCs*<8dq54MO$J?q#3O{U zyYc%pj%?8=WBqSwH{&SL`)BDwe4~Tf*Wq4wUUuDKzuglb9b(2uf;`McObgFnA-ioGX2}Rvdf>F!K&`Yzw5!1 z8^THarl(%Q$cFXA8B|68pU$qVCt)B6cY1oo6A6g%3Wx*^)JhC7KA-_&)QCZ%MtxYI zfsHL~Xi1E({tSPte%l(Ke6pKn@7dX%nI_$tofR!Z@Z}6J3lV&zO9%nhR>+`_vH)WV z8FPNATLR_{%-}zLlvX?*q|%;nNGleb`m!Yq@*;gW;3w1$x1ocMdrbQ z1?)W*A>#+Yssye#0nY;8S0Dq&&}mgMlN0diDfqe$Y@0Y?Z~;x%CGfrm-EW{DxCL*t zLEjG6_#P7dh&{|F=~;S#Iu+J!!cGo%)J)Mdyvokf9L|-@(*iBh5-rmTC1{nBIF6U1 zG_6sF)}>Dz&)c9)+M;dRfp_gJnF&Xi4xmMPi%yn6mv#Lkh-Ovu1 ze#P8wpUDqgZgH*62WZgo1MYYur8VSAE8ua5T2*6?KV)hby|jUVr1fnlWQH9#SKm>g zh{{j^R=J1dEAxG(JJA?1oU?OzG?Cx9;kmpw#wg>Vrw3wOQ;Q-cWD{fZgMtqfdU%o5 rJl7sDJpyj3s4(@Y#Ejv>8Qwbi_n9*v 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 YhNZa&i-~!#<#q7#7vgdC?M>4e0H3(~#Q*>R literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..68d11eeed17c474d7594ec10c2e100051f8ab96f GIT binary patch literal 24472 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..cd6dbb1cee55420edbb4998c72a8f2ca1319d61b GIT binary patch literal 14396 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 WU=9t?y3SYf-)0320QUI_K>0sLo#zJt literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c2b93c827a53902d815cd39bb355567143620175 GIT binary patch literal 12172 zcmV;7FLTg$Pew8T0RR91056OH4gdfE0AL6J0538C0RR9100000000000000000000 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 OC9BjoMiT}+YXAT|kZ>XZ literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2ea5de4d900ba99126f7b71ffcd787cc278264d1 GIT binary patch literal 22332 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..d022507580297419a1cfbaf716d398145e7476d5 GIT binary patch literal 14100 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 U9gyxlf8Ebx1qcB2{S83)KMS>>M*si- literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e890b37c9a776e94e9e70a6f1d7eae0802cccfb2 GIT binary patch literal 11956 zcmV;lE=$pOPew8T0RR9104}ru4gdfE09UX804`ks0RR9100000000000000000000 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 G6R@o6c=qA| literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c2066ca23be1043e5175f848eeea7ed9d85c8044 GIT binary patch literal 19408 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

    %y+(TD4t-Hq+&pG-dIoD1jnmO$ zG}V{5Z7s%P{deEn(Y$htuG&&G_UUG4-?E-k(@mef$wc9vmsg378|RdYqaW5&!KO7k zZH+X?Of@Tw6;(mC=me(F;p|3uiWcGprWJ0+F^$<_UF#-3!tDZ`rYn!b6zq)ohG zD3v5eAf50`*b>$(A+@TmXbe}BL5E;nYYe+6zw@MmMpua}N_HNqe2@D`v{+wtSQ|W0s*zdktau=p!O?Rq#~>>#DDQVFhvBkDEhzG~H-rCKFksYtbzHfYUFkc}bs z9AJl4D&`(Tp6Q(Dd6f>XgV7KVReSJo1lAhpI9WqzOWY#OY-;lb`)Z@jz4g%bLbzk< zQ%k*v#*PXOX>`=XHkEp)Ze-->RL7{#;VReJ?X|M2;;zMOA389mr^SlEB{YMN2S7tB zsRZ9#c6I;e>96lnJAhw~n&T(5D`Ij0ST*-~)a>oO`iA<5}##8uWMY z_@FwPO865oYhk~sF&?L>8^Q^!xJLl;19N&uWA|0x)$dw~H0-^rqiLkOcRt-@p&ISr zl3B`JwPT>X$8y(j?ho3qvEtbqj_(?%^%c7{JE@>)r^4gPK!fK7Il34#3xE5|7<1m=M*rD;?1^)OXyx|tHnj3+0U93| zq16JYAtT(=OvP1afL83L;?ALg5u2dVXr$VqY1=ID-{7-b_zyR?dBxTN>mQ9%J8x7Hq^W3i-_E?SEkx z6*PPhLZ&Kzga;Rjo4U1r*4v`Rnx%b`1nZsJsp&?~{_EBkKbaX;G;Gjj7e0v+O8nU^& zcj#E|b*|`gzoFDNFS;7M5x!n(?HwvTs!2cA>q@zJ=Cc~C^#_9atydsJ!4MZzHNXhQ z0||uvaK%-HtP%;g*Hb7^fUJl%wdk(#hYh~Kk?nZ`wQNw%+-0v&ZkxNz>!qS-*0k@R z5sgjLC5e@B#p%*A4fWH$QKhLzqh!`8R=GjS!{bFIaxuG=h9g?hsvW!O@M8v=su{cT z@Iw~(((9Dm4@#Cmr@+p^-f%ltus3ihuxFsN-EOH80t9kiU~gbuGIzaOm#Rr_p6oK{ z4Kc^gc${Wt|MIkPa$;h8@f6r)2W_d&Q8L}QX;+cxa7_CjMn3a_`*Yu92N->wijK4x z5C^&RhM@`GL@sMHq&LOwM=AwbLo^4{aZ3i$;X@U+^9l|cPNgO{F#N?K=GG+`2-`O8 zDl0QsErF(_sWjH%j-?gXm7}v;9abo{>b^ugjs0b4vTW`wPNi>NDJ{;7NzsK(cCBdG zT+`u4YQk(N+Scavbd3ZRx=01VTUs9!Z6{@CtP6i zO)DG_v}^41Y;!I=BxobY=;0y8&MnA_BC|(0?=ZLU5zNgaQvdqgT=O~I;GH@>*Mg`3 zw-i4v5CngaD8=qGlxJ3!k+8p6#`THP#pM-v zQM#cOSMC!DEfsb3C+LomeYu5Ey?%mz!r7>YgU8@yoq|96+%RtDcI~F~bnXKDy?_z) zfRuCd60B!DEeF_Chg6I?cv>$QhuoXGy1KirEpPYIYe#0O^68^gxFX&`@4WMxJ$sY& zOWU_?-~N%{WF0$n4Kx0Z2_G5E&?ldG&wJ=-4-SGT(SY6`08PrU9^!grVp4n|M~XW> zSUG0WND?H3OSYzMbJIrOAw(PE8Kb%mqE!J-U^EGD6^R+UEy1^mznA{g6HkVf=DG5F za?%q|BICBBj_uzX%l#tv3uuG!1TCh;TrE(t6L~NNd9V$O2NU9iE_Lqw%=Gl{g>xiQBsR zE5+onj?U}br(JSwlo}ITuCh~YsBEZHkQl^GXoyx;CG}c;N4%<(eyWn{w>Ik@_+U_~ zWBM&Ii>9`uQd?ZA^@VF0+-Ud~n%pZMpSQ$V=3oY$okKme_FMW>(5D#QGa|cEw-H(x z!3LaTHK+q5YCIJTs$8(=!=+@w=1QkVw-r0WEe3OEt*f}V1y+IWm=|m{UaOdBjx`!g zv1%QCUsQ3O*xKxm4w~c;1ySMF-j^FIDWUq&n5aFz~qn;=+>F`dvi>=6f- z43rw^U0sGEehS2x%f^foZHW@_t; zaHiQ@ruWuS6n&Xws$_ArqXz;mOZDR&=}l$t>TDx z4CL;i#|9eX;-(oL&t#RZMd?4%Z{TcVknBJvYjS8y8pkTI(}8&YT!~{IXu=Y(D{dHJ zjS-qR9#uv)nK;cD;o;*||_{psp@ZtB=lFtc|uUDcR~~`q4ny zh+n7F)(!UC6@~_NyBzrhott=G*mSZBvIG8W?P98uB|TM7m?1 z-qp6-{fUo%_#thpqhgbE+bx)fA#+N|r`cnm^`&_#$a#9-;ymlzx9{9n=(D*V!q&dF z79(F#dzV0G7%s?Ep*P=@Ah5bA;vhKoL1y3lJo2Z;jz~>orG*JXc~#V^&UhKK<^J=v zsI4Y$HOk#Mm)8_ma$Uex{L6rhdkpK5loe?nG4B%kx$O*MCFk($^2ou7aZz|wke55m zI6c=HB6`GuLwl#DGCIv08pC#1v_dc%8Vz^xnc?t}k7MSGV#2}sLQDwCvX>xfbyydt zVqBhG@Ey1|yp+0^klLA~jZLj~X;bDBil3+bYzO^@zgq6RnEvNEL7#8!Sm!Qa@NgJ3 zDtGf|3vY$N8ha$w!_N;6J1^q$EWINo(Tmri&lj}F%h0h_HMdmifF_8BNZxUU=6px|Tz_T8>7#Zw~Kfzqih%T8Uqb2=^B zx3tKRTfy66)i!kYC1U{{{mYnOdDrO7t!7#${*vA3$bCCb^;2!_+pAznxW;a$Pphj| zVO4LDK>?Pjb==%=61eI{ToDLVpEoSPH09gTt1lB<>l9UMd#v$Z+HS5578g~A2jVT& z;*WRSrla~Qx#ir|zZOG+Xu0*n)innD)`qV6sGOHB+K-j_DIPL^>du4;igdWtV41h6ikBrMJJsER+}<htMhCSf(M}MR5fiZNn7pS)=dVJAt-CMj!oTuJI*}ZT4QLbpP8IeNssH~iGiDL z8o26eeOSj-4{HD`JcAr~F;=h_ygDaTF-H`B(Sl>JDK}WY& z%zqs61D_$D%XRpuGR#=65B%YA%!8PP=fFx-{_rRUkD|b(Rym_O*w9jDre;|rP>07g zLDM#23Q6^0)3j}i#Heg;wPnhy)3KN^1HY`g&LA{2r0KIt?)4d+(z_Pv`1ck?poXd~ zUu|8v_7$qo(g8&ZoV+inr>_7G{LvQy2lwx7oJuJK5^fa=tjF^{2qfSY1^Md9XCB|( z*5>iHHZ=)%duN>WWmMVSWvY^OW&VzpXa4c!p`ps!Au4_{xTiQ-$qX5LlcKL_%KVf| zq-ia#(k+CQia5vd6bA^$(RL^Dp__!*4dPvJ5|MMrizWE=!uB1sq0x9ir1D-l5{bt4 zYdlr1K(QinBVnlU8%48Ote~&_m{Q*w8B=t#RC3T;Z_T|ar#)6U-3Zu6sKy}3r3Rkm z;-{PM0p5IfDS7GOr(;t76gbIG#`YZA<1k!zUGC)ZTaME!2Ake}dx?c^jXiLR#}@BU*Jl<$eXON&da4@WorX|!=fBoSC3J2D^gc|ksk{9IJ;Mk z@>I^+1F0y))P-FUb0M9+jlTqz}y?CmSrEpNSt&= ztmBlE7^5dKI(*@1J5K_*5Y2F>W}5A2H~M6`I?!tl*pT;_u!Z${I&O_PF?N8SrJurB z2bX`o8*QLJ#4B$|xdp(5>!qobFq{b1hEfww`>?=9Q$d|JKIL|`Mrs0DU64aD%Q}%6 z=l)*7zvAa~$c)3wgM|JBFmnI$zbm1y{TUKE$tpm-N6+s;Rr0y^{B!mot6SfD=QklE zy9=CAAftHtL9bCyTao_e875JRZPa!P7MHo9Ug%--8#QKD>eFE=eNb92Ih{bPH*iWK zuG1-hwql*74?ge!KOH&uAn1iBRs%561PNURhlRJh)_%|Ou z@bDw_9MWJ{ASP$#ujyZVt^C7uJDty+LhcBEtWUIPl;+&Ln+okXs}XSa`D;Aa^de~1 zNaBcpqD{dv$NJNg&>LKS_~BOmmDj`ps=5su>E3)MlR}i6&)h6q2Rg?0Lh+cp%U!)0 zLs_}u%7@I99t)zYwkt5mu5cjl7aea9$0oYIKNzJqRG8PH16M|7i+fP3?uGbVTJ&^m7te#SW&g=+sojgj>gAO{GpQ!UE z8h9S2@NQsjISqaG+!{d0WHPy*&d%n(p26W<{-o?6xVe#A;wMPz`4MyT)1x!zwz9qF z?nh6a+2Ut;JhLUK{sQ+Bf zLtuB`Gdf1~4rfRCb+=q;rPGC3IUjj+QLJ#yk@r5;XifFwc-V|6Zrv6~T8!MY)8c|w})R6x6R+&swmq(H^`NNrh>0xH56Rv$u+ay61a_T@sw9~_F~0WLM9 zS2GK4oM8qLj^V|jrm4O6-?wO{OM<`bng*w{<#WOkvz2CWm}1>-DLt;!YQpwGGpnh& z+#i%mJel~nj~Odx5}8t&Hnieom(@&fP6g2dPFi!y!t@A_G|N`tbiCp6h{6%40Y6<#N-hr5bC{qNf!W zhv3o21uC*KJCnaHFPUa8Gcbu6E0{=yctR-EBT=N)wbVaD|B%yK&AyJ>(Yt*nJW49J zx8~jm&;tjU<@yEVmHH+bH>H}uN_ScFsF}+d6g_(seC`IsZtiCkbX?(l2<+yTlY^aq zriYUeyA}I4pSc0JXyTahXRG)t5$`Sg@V@tM@1dH?a9A-hJ&QQU&uXeH`Ubt>$lTOH znHo^FRB6tRJ0r|!Qo?DymKAT^v#W2;C`IN*MvMK}i!-LKxvHYQ;kwY+@?4*23e|=8 z7FEr4nPz~kzj*XSm&Xy{INUei0lq z0Dpb{NkE7(LOs1~*gdxR^6cOcX8bB(MS(45lzz1FL}UHcix%^~qN z@lo+Rl3lt(dS3R)EAk`qGxB$Jc3ni*rrWK%SNBofPZdd-Ro<q^&CZi{=r`$ zox=SNK|wpex0UEo&f^~MAH;hS@4CXf6s7Ni>yTRK{V`UZ^mgGrpXLz!TUqF{wkS4|5^Hd5`wH|SUH&$E+^Y@Kf_+d_?rsl?I^<}%sxq~VC7~p z)+A(!iI;e5*fL=Ek)3$E0LLiaguX@sOiPB~msg_np)93Q;z3&}t_R4!k~Gz?eU1JK zIkkT!gF*=z;P(sdL+Y3r(B&qK+fQt2+qbaZr-=#KW`ehgozw5C zsdMLH89`ew-rwMT@gCqf1MZ&`u6L_=cab_yH{inQRmW)qdZlnLbwL@%7{Vn$o)#w zCgfi&Zd2)h3y-xrGAW)?b_uz>mo1m5& z@^2`c(XPR+-h{K{ZDbd@mfT1lA&-$Pd5Si%6#EAICi@|KMfgkMgTjY|hlEFjj|r!Q zPkJ5RVsF{n8fNffWCya`i!hWCM7s(1?@5&j$;UwMZtUc{rSm<75j&%2G zwUExT^wbG&*5F4ay||LqjGZ`*{0yea`gWK4_}$YcC+#lvqU!HHZKrm$`Lkp!vwQBe zi}Ie4tR|clLRn`z!`I8Y(&<76k9WnJ{mNKY6PQ0;LyhU)<=(8=oAG6Z>bZ$+8FcoX z%y_e7W4P5h=kaEnd98VF&bylL4Tx%Rt8nGbHuCmH-t#MC884`Da?zVr#xe`I2=Uo9l{_eR*RvY&Adb679Mc^c*$1+*T-<_5H-QWO*EJU)RN^VfXyRs@Rb$fXu zN7s`FpMPfALho``TjxV#+I!M_5^JqCYO6t^@yx=QXK`XK4^3rOH7h-HRaxV1 z|A|P}9v&Lc3{B>5dVIKVSMNK*tHhR`&aB#O=`3CB&RRo!%R#idSIzvxf{!e9ffqvc zSZ0;)Ly)WcBsh#^EpLV{lSM@oNm@JU?(XIkaG;GYt~%sU_O6hp z65{Owj?Pdd>kh9{UKWAgyetl{3cM@{uWESd39o8-SsGpyd07@-m3UbmUX^)S5nk2t zG86_i^7PM&3!t>$Tc4#n_-=`0!xuEVHX4uS8zUDq1~wY6$Txb!Bx?@6EuKK?@jR*= z&kOPM0Y5L`ssw(#^aDR$Rsla=Rs%m?27n(ggTRlMHNcOTwZM;;b-<68^{f?zTv_`M>H4!Cpr97O;r8s=f8zey$Qg+JTcN z`~Ce;K^Yi6XkA#OW=fq7P`DMk%awJbn+EE%TJ5%KAl+GgI<)&_z2EC?JBc|rUEIxE zpPw%)`n%VAd$S8%r*w{I&S<<^ujh;=pe>o}=9*T4(#HCLz~8r!6~XO`w<~rQ4dtzp zCcUuY&uU>*q3ks2MGxu=bI=c$j#&g~(Et9v#b%EmEA#EeK27IxW0_KpQB~!rulmZQf|gDo`d~Z=b)PFUq;t zzTT!Hlc#i+Ol9i5Z7}E@dX~S5NjF%L6{~SIfTj)KCC|jSO5TFMz%6M0NVa2rHI@1W zb}euR=Tel{S=-yq{Xz!TYJToxGn~+r`)HMYjdMCa)~= zHF;%;ugNRRyw4U?R(Ky?+0Fa#${yZ_SN5uK^`N#-g^Snrt8nq!Whz{}cDV`{uN_d~ z;)b-l<-x^WC1W^6u}-S9$k4FtQ^*-<|m? z?{G3-gY&cKLd>h%e6bx~}^fNqtzA=y9d*eui}7#c=gB;%d^fT1D>| zM?i2#hF`Drtk&@Br(}}9L3-vqt3iJ23-ZnQEtJkXmZ#L7XyAX3m&sNQGu1ss*WQ`c z+yf)sb4I%&lAa#bD|ow)BE;`_;hccrS4jx+xN3=C`q+u@o^9n>06bcbyuw<$+Ws7# zsD6&Vxc0lX7{6BkbmR)28PMo(^-;X@b&4k^K3b?VJWcSGLR}yuevIe04wEC~8mzjX>?QliapVzd$TBkgUgXCb@oFIvwbq2X z7r$Szn;cX79>UcmdhW-aLnwD6d+kNuh}Y}!?V$f^<|dp-t z`f$j2-$_XEFv?Nv4Bq!b*oH5ffph3mzBhs1{Cy#07q9CDR9E4>UzOS=eDYP#(`Hd! zv5SnOxND&#uFd>Vv|3`4t)0Ov7KYy#YyBFLfR1U^IN@cqLR0qR8LgOWr~LfxJuw z@_q6ezKVh`V~`(_ACp(e50Gn?s7!TuVoHyvyp7a^UpTN(D}HC{40(b)Nj^^=m##dt zzp=5aQ7!RB^?aFbDU@A>vRm7~c<|t&dKGJlYp3?@KE5apFCJW4S!9|0Y;3=Fa{pd* hm_BlB|AE7Ygt2}5g|TD%^8>o@n?anu6gge<{|BqRG{67= literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e43b4a22db58e48a8d228fa45c611a3e5e3f6154 GIT binary patch literal 12296 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..51037b4d4722c2b16e7f226fcebc7244f2c390ab GIT binary patch literal 10368 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Script-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1753e88769864b3420df1b5265dada03d7ccd6c6 GIT binary patch literal 16620 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..31f438bcbb1bbc27dfcfb09de2bf913aab6fa896 GIT binary patch literal 12200 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..b0a7bb22b0f72f0b5f8269e65a3421f3145f1937 GIT binary patch literal 6484 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f10ebd26baca31caa417953c9cc2b49f89b7b0b2 GIT binary patch literal 5420 zcmV+{71Qc>Pew8T0RR9102M3%4gdfE058}802I{#0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size2-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4cddb8bab5124a001ce9c96cd5c51f18f30d7017 GIT binary patch literal 5192 zcmV-O6u0YlPew8T0RR9102D|74gdfE04(?b02A>50RR9100000000000000000000 z00006U;u$c2o4FH3=s$lsxYAz0X7081A!h3QUC-X1&Cq?f+P%q92*rUvk?_+9B9ly zk5c^C3EUWh*3kYwNeSJdgytx#Cz=>z@nGwz5a+(TSHHlLa%o1KA0f%?5pCM+-f^ge zD2F6m{D72@DiBqOc|XvI*CbLCjn?c{JcGJYDPid@B|(T`YHJAN7WN{wEH|A5clSjA zTMFW^JrDrby#HT|O(#5&#&J@HX_Ti)RR05v!#2&9c7Sjt$M>*PQ~{db0N~w&`lKn- zRR~Y7E#;z0Sb3_PaW;oFOd0=5?7P@DN=T8v1{{#pXt35s^8jlB(BuwNc zmYt4^5H3<@IUN1y6*j-W*Lt(9x?&|J2or|bdZm5dqX10wpe?`w!0YfW0N5a1GWrlK z0S2+<6#zfT;M?!u`4rSro4|?AQ3O5ZfQonlQ9}c4t|36|PP@5?7O8?7Ek}}Y#b?m< zyT}7tq(^!ck-tH8m9gjS;UBKN1_HTZ}f`GxE$| zM!`4t?yTSqn{CqiU;2O6|HSX(_x^tG>-WmvQ@^S8lf2OzydF%8_=ouh1mHFeP2|fB z3|)SKy8f9+n1^}Hr_y>Jz+V67NslxpdhEOh9s%m00~O{NK!DCq0~qSn2M9=WPE6dH zihY!noMXWg{aC`=3FiKpATlufbpv^E*5S4`=7_%a$hU<%$>j9zBMBjmol?gYx2M2G zI_N<2$hnDaNGTrEMeD{1qv=2(z$1G z$kQB;CI#|!0}~w;S20$xc)AymQ)$-~3<+eG6^&2=nc2ziWivw)up{CGxJtnBQhL#K zk%iTU9oIK9nc(i@h9h;erZ!MCi-YW?Ktqid;6R1~>2)J;xt-uzglExtZ!G2kD(O5? ztQ2lNijEj`+zmp!^niTL!>Rg_r%q|kbPq#Qd=Kz9`2 z0zP{kv}K!kee*4<0Jd9$>!+Z`u@Ky9fDfU(kc5*PQtINSfHODETpmpBPJoU-Bpk*C zKYmEK;&_UST-`T{3J}t>3|nI%P0F({pO=}?^ElJyLAWkH=;?rntzZFSI)a*PbL^y=iSkxbrW0U5Ueh`{DA zQr*66YD^VqOZy3hMHwQoh}eKUO1{?4Ov|X;k{BZoq*M@03usVaG6n(& zL!@Px0vSO;jHF=3p%6wyP}~*xJ{`1%YIU+K(Cj~F#|C={Wa#tR%81| zn4eb|jVYut+7hU^TnktsO6U<_K!6beCIo~dAOZnq1TYAQL_icmF%GgiZYe&T(dN=u zR`)Z@NtU?Eoyvmv__<-K0SiRNQqqFfi+X);9H$%yWR0x~Mbee(?)I=$3r8o1>7~UQ zwj^MNfHW{DVIvdfL$_EKeg-j?S0C%q+{m|WU+IoPTpP!Ob0Oa9bggCv#lLn zM6!#Jy^}W1L{?je+lCoAsg^SY%A!e|PHVsV!Wlc1h*iU0p-JR+;G|(^0+X6ahzIN4BrS%`#I8Qu{KK zJRGk8{(}f475%%`R{&BLrhpl-rFT(jN3eBt;Ho?;*f~ng z!BmyTGybR5h%6>Rj8j*Qlcdr`FX1#4L5D}bmyhgKVqD82GI29I=c+C`Up2dVBTMOB zuo}6M84}-j^EwwXt&j+0#wXAIYzLRQd#gLZUfnKPQ?pS(xeSRZp97K*<=z!cC6!7> zt+C)Nn}>0oA(si|qXXG1C}2v3gOH$zsVYWdpOpw8&mbi5G7XpF97LE=W+;^pMuG}M zRVA7!t76KknX($Ds@5|St3zV-NUQ-#H6n4qns9(-TTOEfq#q%Nn$aR;@(o4;zoB{_ z2tcc$)HWCi+6|rAfdcD!)SapfPR8tlOLeE-p1|$)wBralfL;q3eHNnrJ-|d){y9>2o( zw*jd6j%=g%pVT{V7JKko5G&hf_w3sUH2?vcno0^{5Mw}rJD3KjO91>t5QBIy1jBxz z`OX8Nkr;?=Ln8^`L}5TA85k_#NqGg?O4d~)nCYQ&U{mF4Raj`eg_=J|8>W+liDZ&{ z z{RT6vW+|ZA`s0)Z^$q}hQT3$6tk_&I-FC}k^vt>5NC%7Qp_ifr;>yQ$o1s(*BO=S zyfxzPFINZ)c%erF(H*vZvRntv)%n)<$lO(bSUm!Kq`+I!S@N4hi zkW~S)3|5b!Oeo-E7`%MRDlmoX&ZJE^Hw07^DO*hmcw=HIZ77zkG9a!&}{Aks3@P3k*uVm>?14XF`DTbmDi*|M7?a0{IQhfK$phaHtW@YUA$tkR*SW(O%B*9xLx(#$KIq=- z0X&0B;TG|h0H_Vtm8~!JgwhZ4(hdGCf)lBw+a^qWcOuyG_HpkWiEABhCVh61tNDTL zRBsH5XH_^DGHAd56IufI(Sz88wh4KwoqBC~B@O#VLx zhKWZk9vht<*2D7QdH5+PyPy-)g5XC}66~9Wkt(Osapq)~P~wq@ zP2Dx0r&%Ovf$(G09M~8ONK@)}F-6-Z_RR|ILlA4@oGADqNRpOj`MjpvBnED;Uz#En zKlW^PhRC3z6^Z}DdY#R7~yVofwr@s0zRgqC(fB&^d#S)K%@34+p?D+-T zMDS+tNUZbH#*dE=bg?mM(VJO5JO@8f+wu$SmNBaXez}gm7$op90>6?5-pntjoy0MW z9-a1AGQ>aROp0LMol5$*k%+wfkVpTZi)1o$#&U}{YB(l0UNq^hra#lT!1?Aer^@w? zboC=~XA>1A!vgz{cEQrXZ0723RZwv{(0G31x|+m78@mV8#hvzJBgXvkG%Cx#T~q(- zARdnED=LzPpVwu7WMbNw!ZKS&@-reF2d2*R3)F~^mZMkB%GXet@@>YV`mC8u_>AL8 z`^umqTgb)Ah=8Fz&J2DWLawqck2`Yttr9iNYWF6I6naws`M74TT%<})xOpV{Bh~M# zt!X*ZEmONq9oL_C#?DUGg}gZNGj#nM zPRaxR1^mOpEo6(mww&;+Sal`;nu->yga&^oOtE-WrdA&WXfNuTMiF>oj z?C|o~)WYIe_lIpxD-#QSG5hwJ?ENK`4P0msT&}24aZD4hIrB%nPOs9NYpp_|w00mi zYIs??nhL!o&WUXcT&aC`k)l4gw5nN@t^?P1tMZ~c>}|zUsZVF3z>=-Tr^8gws<;Fb zGEJkrrVDvP5#kBfU?6%1m6z1IrxLZVE^G?y-GROeRbNzcv1TZscp@b9D~0X*MjeTP zo=#{Iu56KZlw{iL4vNcipvdw&K~EY^vc#>seEybCUOkbS8rWuDH^%MY-@Qe!Ck>M{ z@dP{}2zao$e|ZZK1DkcH6!M7~Wo^B6P(1l41?3UhS(~6dkJdsfPW= z9tk6Kwr};TSAXb~?UZP?S_{USUP5;3|$6qpXX@5^p%79e-eIR%Ain+e#6OU)~ z30~$3-WN)b_qiqr9V@{UzjK4H4+f2#A05;1Ulht(Ve;DexMX|+y?)Rt@_gmhxEV)Q ziG7xL=C;0-x&35sc*mUU+ZP>J^+aGor)e}m^L+Ns?VG)0(V;JeLf@fFQb*JA(l zjBBb16l#>N!r4nJpB}7XWzuAzrqDH=BZ^QhJS%Zz|WgAT> z&t@+0^Q)qRJ3BTB({f{Pq7-$W5)Ia_C%vV9|9#Qd19JV!%CNK*D>0@P|Kh&-K9sj% z+xBj9$S~Y<1w7(YQ>=IiXmYw27Ie&%M)XV;` zHvW`hg2k;qUn~8yU#`3GxQrJN@xDYlM-J} zCco!txFg-qzsi4)ac^-70DuSBl#9IA0~HB}X2AbTgnC6$G5Z^=Fc9U^-+AnT@q0mI z6b+8xP56+&UXg|SVLk|CiTHA=jYQ^OWmrv1{tu3P`~)O+gB@WEB*td?0SSk#*pE_} z7|P(oluYs)q0_JBiGKkOf#%gFy&B^-aGcm^<1_$?2*iSX=tck{`JRqBiZu~v99t8E z1g@<~K$^$bBq1UYt;qpXVBIIxx~3S{rfQldhH{p zX$Ex_jUHF-DLVLbWgB9HGJI4)T>K1*ZMO-|NUhm$^w0iws`|4(7gVuf0%;Ah>?}O$I0~s&uCMy>@}%kV0aVWLIfgVAL77XI0*+3g}8`^_(*_+NQA^lf}}`>3s zYgsI-m2hu%$Uec7MP(xhZ7RQlet2BGJ_20#2tX8UU2x9p03cj)*n|K`S)0(B!m=yQ zHDyX_VocjL9?XSap%6S`UIuRPRsbT^yEm3J3vtUMAc?w$riMmt9KoI1EvJcslso{I C82MQM literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..14fe2db1236d0cc1baae4e37f2d503abf39edc10 GIT binary patch literal 7560 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 sO&soK#J$8s8sWkQ{>&#)Glp>N=TAhs) literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e89276f6fa4e03d62d33516d2a3a4623aab6cd09 GIT binary patch literal 3612 zcmV+%4&(86Pew8T0RR9101g}g4gdfE03DbB01d|g0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f88f27bb54764c5ff025d5464b8a4e10a52f6c7e GIT binary patch literal 10336 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d4223a31383c5adafb1b0762025b8fa83625d17f GIT binary patch literal 5972 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 Krjvz=761T}jb?iQ literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf b/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..15b7a743fca2a2eec95cc64c6ace6f4a8adb6499 GIT binary patch literal 27528 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 literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff b/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d78682634b275070a55b04d4739b068b48064d78 GIT binary patch literal 16016 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 SF#zx-a{3)pfP8%c5dQ~^tyMn& literal 0 HcmV?d00001 diff --git a/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2 b/core/bikeshed/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e2ca86a2a562bf6d2d81ae30c4f18a4e2ed6901a GIT binary patch literal 13552 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 qW0xf_U~>RMnuoe-E .newline { + display: block; +} +.katex .base { + position: relative; + display: inline-block; + white-space: nowrap; + width: -webkit-min-content; + width: -moz-min-content; + width: min-content; +} +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: bold; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.katex .vbox { + display: inline-flex; + flex-direction: column; + align-items: baseline; +} +.katex .hbox { + display: inline-flex; + flex-direction: row; + width: 100%; +} +.katex .thinbox { + display: inline-flex; + flex-direction: row; + width: 0; + max-width: 0; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .mfrac .frac-line, +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline, +.katex .hdashline, +.katex .rule { + min-height: 1px; +} +.katex .mspace { + display: inline-block; +} +.katex .llap, +.katex .rlap, +.katex .clap { + width: 0; + position: relative; +} +.katex .llap > .inner, +.katex .rlap > .inner, +.katex .clap > .inner { + position: absolute; +} +.katex .llap > .fix, +.katex .rlap > .fix, +.katex .clap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .rlap > .inner, +.katex .clap > .inner { + left: 0; +} +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} +.katex .rule { + display: inline-block; + border: solid 0; + position: relative; +} +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline { + display: inline-block; + width: 100%; + border-bottom-style: dashed; +} +.katex .sqrt > .root { + /* These values are taken from the definition of `\r@@t`, + `\mkern 5mu` and `\mkern -10mu`. */ + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .sizing.reset-size1.size1, +.katex .fontsize-ensurer.reset-size1.size1 { + font-size: 1em; +} +.katex .sizing.reset-size1.size2, +.katex .fontsize-ensurer.reset-size1.size2 { + font-size: 1.2em; +} +.katex .sizing.reset-size1.size3, +.katex .fontsize-ensurer.reset-size1.size3 { + font-size: 1.4em; +} +.katex .sizing.reset-size1.size4, +.katex .fontsize-ensurer.reset-size1.size4 { + font-size: 1.6em; +} +.katex .sizing.reset-size1.size5, +.katex .fontsize-ensurer.reset-size1.size5 { + font-size: 1.8em; +} +.katex .sizing.reset-size1.size6, +.katex .fontsize-ensurer.reset-size1.size6 { + font-size: 2em; +} +.katex .sizing.reset-size1.size7, +.katex .fontsize-ensurer.reset-size1.size7 { + font-size: 2.4em; +} +.katex .sizing.reset-size1.size8, +.katex .fontsize-ensurer.reset-size1.size8 { + font-size: 2.88em; +} +.katex .sizing.reset-size1.size9, +.katex .fontsize-ensurer.reset-size1.size9 { + font-size: 3.456em; +} +.katex .sizing.reset-size1.size10, +.katex .fontsize-ensurer.reset-size1.size10 { + font-size: 4.148em; +} +.katex .sizing.reset-size1.size11, +.katex .fontsize-ensurer.reset-size1.size11 { + font-size: 4.976em; +} +.katex .sizing.reset-size2.size1, +.katex .fontsize-ensurer.reset-size2.size1 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size2.size2, +.katex .fontsize-ensurer.reset-size2.size2 { + font-size: 1em; +} +.katex .sizing.reset-size2.size3, +.katex .fontsize-ensurer.reset-size2.size3 { + font-size: 1.16666667em; +} +.katex .sizing.reset-size2.size4, +.katex .fontsize-ensurer.reset-size2.size4 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size2.size5, +.katex .fontsize-ensurer.reset-size2.size5 { + font-size: 1.5em; +} +.katex .sizing.reset-size2.size6, +.katex .fontsize-ensurer.reset-size2.size6 { + font-size: 1.66666667em; +} +.katex .sizing.reset-size2.size7, +.katex .fontsize-ensurer.reset-size2.size7 { + font-size: 2em; +} +.katex .sizing.reset-size2.size8, +.katex .fontsize-ensurer.reset-size2.size8 { + font-size: 2.4em; +} +.katex .sizing.reset-size2.size9, +.katex .fontsize-ensurer.reset-size2.size9 { + font-size: 2.88em; +} +.katex .sizing.reset-size2.size10, +.katex .fontsize-ensurer.reset-size2.size10 { + font-size: 3.45666667em; +} +.katex .sizing.reset-size2.size11, +.katex .fontsize-ensurer.reset-size2.size11 { + font-size: 4.14666667em; +} +.katex .sizing.reset-size3.size1, +.katex .fontsize-ensurer.reset-size3.size1 { + font-size: 0.71428571em; +} +.katex .sizing.reset-size3.size2, +.katex .fontsize-ensurer.reset-size3.size2 { + font-size: 0.85714286em; +} +.katex .sizing.reset-size3.size3, +.katex .fontsize-ensurer.reset-size3.size3 { + font-size: 1em; +} +.katex .sizing.reset-size3.size4, +.katex .fontsize-ensurer.reset-size3.size4 { + font-size: 1.14285714em; +} +.katex .sizing.reset-size3.size5, +.katex .fontsize-ensurer.reset-size3.size5 { + font-size: 1.28571429em; +} +.katex .sizing.reset-size3.size6, +.katex .fontsize-ensurer.reset-size3.size6 { + font-size: 1.42857143em; +} +.katex .sizing.reset-size3.size7, +.katex .fontsize-ensurer.reset-size3.size7 { + font-size: 1.71428571em; +} +.katex .sizing.reset-size3.size8, +.katex .fontsize-ensurer.reset-size3.size8 { + font-size: 2.05714286em; +} +.katex .sizing.reset-size3.size9, +.katex .fontsize-ensurer.reset-size3.size9 { + font-size: 2.46857143em; +} +.katex .sizing.reset-size3.size10, +.katex .fontsize-ensurer.reset-size3.size10 { + font-size: 2.96285714em; +} +.katex .sizing.reset-size3.size11, +.katex .fontsize-ensurer.reset-size3.size11 { + font-size: 3.55428571em; +} +.katex .sizing.reset-size4.size1, +.katex .fontsize-ensurer.reset-size4.size1 { + font-size: 0.625em; +} +.katex .sizing.reset-size4.size2, +.katex .fontsize-ensurer.reset-size4.size2 { + font-size: 0.75em; +} +.katex .sizing.reset-size4.size3, +.katex .fontsize-ensurer.reset-size4.size3 { + font-size: 0.875em; +} +.katex .sizing.reset-size4.size4, +.katex .fontsize-ensurer.reset-size4.size4 { + font-size: 1em; +} +.katex .sizing.reset-size4.size5, +.katex .fontsize-ensurer.reset-size4.size5 { + font-size: 1.125em; +} +.katex .sizing.reset-size4.size6, +.katex .fontsize-ensurer.reset-size4.size6 { + font-size: 1.25em; +} +.katex .sizing.reset-size4.size7, +.katex .fontsize-ensurer.reset-size4.size7 { + font-size: 1.5em; +} +.katex .sizing.reset-size4.size8, +.katex .fontsize-ensurer.reset-size4.size8 { + font-size: 1.8em; +} +.katex .sizing.reset-size4.size9, +.katex .fontsize-ensurer.reset-size4.size9 { + font-size: 2.16em; +} +.katex .sizing.reset-size4.size10, +.katex .fontsize-ensurer.reset-size4.size10 { + font-size: 2.5925em; +} +.katex .sizing.reset-size4.size11, +.katex .fontsize-ensurer.reset-size4.size11 { + font-size: 3.11em; +} +.katex .sizing.reset-size5.size1, +.katex .fontsize-ensurer.reset-size5.size1 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size5.size2, +.katex .fontsize-ensurer.reset-size5.size2 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size5.size3, +.katex .fontsize-ensurer.reset-size5.size3 { + font-size: 0.77777778em; +} +.katex .sizing.reset-size5.size4, +.katex .fontsize-ensurer.reset-size5.size4 { + font-size: 0.88888889em; +} +.katex .sizing.reset-size5.size5, +.katex .fontsize-ensurer.reset-size5.size5 { + font-size: 1em; +} +.katex .sizing.reset-size5.size6, +.katex .fontsize-ensurer.reset-size5.size6 { + font-size: 1.11111111em; +} +.katex .sizing.reset-size5.size7, +.katex .fontsize-ensurer.reset-size5.size7 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size5.size8, +.katex .fontsize-ensurer.reset-size5.size8 { + font-size: 1.6em; +} +.katex .sizing.reset-size5.size9, +.katex .fontsize-ensurer.reset-size5.size9 { + font-size: 1.92em; +} +.katex .sizing.reset-size5.size10, +.katex .fontsize-ensurer.reset-size5.size10 { + font-size: 2.30444444em; +} +.katex .sizing.reset-size5.size11, +.katex .fontsize-ensurer.reset-size5.size11 { + font-size: 2.76444444em; +} +.katex .sizing.reset-size6.size1, +.katex .fontsize-ensurer.reset-size6.size1 { + font-size: 0.5em; +} +.katex .sizing.reset-size6.size2, +.katex .fontsize-ensurer.reset-size6.size2 { + font-size: 0.6em; +} +.katex .sizing.reset-size6.size3, +.katex .fontsize-ensurer.reset-size6.size3 { + font-size: 0.7em; +} +.katex .sizing.reset-size6.size4, +.katex .fontsize-ensurer.reset-size6.size4 { + font-size: 0.8em; +} +.katex .sizing.reset-size6.size5, +.katex .fontsize-ensurer.reset-size6.size5 { + font-size: 0.9em; +} +.katex .sizing.reset-size6.size6, +.katex .fontsize-ensurer.reset-size6.size6 { + font-size: 1em; +} +.katex .sizing.reset-size6.size7, +.katex .fontsize-ensurer.reset-size6.size7 { + font-size: 1.2em; +} +.katex .sizing.reset-size6.size8, +.katex .fontsize-ensurer.reset-size6.size8 { + font-size: 1.44em; +} +.katex .sizing.reset-size6.size9, +.katex .fontsize-ensurer.reset-size6.size9 { + font-size: 1.728em; +} +.katex .sizing.reset-size6.size10, +.katex .fontsize-ensurer.reset-size6.size10 { + font-size: 2.074em; +} +.katex .sizing.reset-size6.size11, +.katex .fontsize-ensurer.reset-size6.size11 { + font-size: 2.488em; +} +.katex .sizing.reset-size7.size1, +.katex .fontsize-ensurer.reset-size7.size1 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size7.size2, +.katex .fontsize-ensurer.reset-size7.size2 { + font-size: 0.5em; +} +.katex .sizing.reset-size7.size3, +.katex .fontsize-ensurer.reset-size7.size3 { + font-size: 0.58333333em; +} +.katex .sizing.reset-size7.size4, +.katex .fontsize-ensurer.reset-size7.size4 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size7.size5, +.katex .fontsize-ensurer.reset-size7.size5 { + font-size: 0.75em; +} +.katex .sizing.reset-size7.size6, +.katex .fontsize-ensurer.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size7.size7, +.katex .fontsize-ensurer.reset-size7.size7 { + font-size: 1em; +} +.katex .sizing.reset-size7.size8, +.katex .fontsize-ensurer.reset-size7.size8 { + font-size: 1.2em; +} +.katex .sizing.reset-size7.size9, +.katex .fontsize-ensurer.reset-size7.size9 { + font-size: 1.44em; +} +.katex .sizing.reset-size7.size10, +.katex .fontsize-ensurer.reset-size7.size10 { + font-size: 1.72833333em; +} +.katex .sizing.reset-size7.size11, +.katex .fontsize-ensurer.reset-size7.size11 { + font-size: 2.07333333em; +} +.katex .sizing.reset-size8.size1, +.katex .fontsize-ensurer.reset-size8.size1 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size8.size2, +.katex .fontsize-ensurer.reset-size8.size2 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size8.size3, +.katex .fontsize-ensurer.reset-size8.size3 { + font-size: 0.48611111em; +} +.katex .sizing.reset-size8.size4, +.katex .fontsize-ensurer.reset-size8.size4 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size8.size5, +.katex .fontsize-ensurer.reset-size8.size5 { + font-size: 0.625em; +} +.katex .sizing.reset-size8.size6, +.katex .fontsize-ensurer.reset-size8.size6 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size8.size7, +.katex .fontsize-ensurer.reset-size8.size7 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size8.size8, +.katex .fontsize-ensurer.reset-size8.size8 { + font-size: 1em; +} +.katex .sizing.reset-size8.size9, +.katex .fontsize-ensurer.reset-size8.size9 { + font-size: 1.2em; +} +.katex .sizing.reset-size8.size10, +.katex .fontsize-ensurer.reset-size8.size10 { + font-size: 1.44027778em; +} +.katex .sizing.reset-size8.size11, +.katex .fontsize-ensurer.reset-size8.size11 { + font-size: 1.72777778em; +} +.katex .sizing.reset-size9.size1, +.katex .fontsize-ensurer.reset-size9.size1 { + font-size: 0.28935185em; +} +.katex .sizing.reset-size9.size2, +.katex .fontsize-ensurer.reset-size9.size2 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size9.size3, +.katex .fontsize-ensurer.reset-size9.size3 { + font-size: 0.40509259em; +} +.katex .sizing.reset-size9.size4, +.katex .fontsize-ensurer.reset-size9.size4 { + font-size: 0.46296296em; +} +.katex .sizing.reset-size9.size5, +.katex .fontsize-ensurer.reset-size9.size5 { + font-size: 0.52083333em; +} +.katex .sizing.reset-size9.size6, +.katex .fontsize-ensurer.reset-size9.size6 { + font-size: 0.5787037em; +} +.katex .sizing.reset-size9.size7, +.katex .fontsize-ensurer.reset-size9.size7 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size9.size8, +.katex .fontsize-ensurer.reset-size9.size8 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size9.size9, +.katex .fontsize-ensurer.reset-size9.size9 { + font-size: 1em; +} +.katex .sizing.reset-size9.size10, +.katex .fontsize-ensurer.reset-size9.size10 { + font-size: 1.20023148em; +} +.katex .sizing.reset-size9.size11, +.katex .fontsize-ensurer.reset-size9.size11 { + font-size: 1.43981481em; +} +.katex .sizing.reset-size10.size1, +.katex .fontsize-ensurer.reset-size10.size1 { + font-size: 0.24108004em; +} +.katex .sizing.reset-size10.size2, +.katex .fontsize-ensurer.reset-size10.size2 { + font-size: 0.28929605em; +} +.katex .sizing.reset-size10.size3, +.katex .fontsize-ensurer.reset-size10.size3 { + font-size: 0.33751205em; +} +.katex .sizing.reset-size10.size4, +.katex .fontsize-ensurer.reset-size10.size4 { + font-size: 0.38572806em; +} +.katex .sizing.reset-size10.size5, +.katex .fontsize-ensurer.reset-size10.size5 { + font-size: 0.43394407em; +} +.katex .sizing.reset-size10.size6, +.katex .fontsize-ensurer.reset-size10.size6 { + font-size: 0.48216008em; +} +.katex .sizing.reset-size10.size7, +.katex .fontsize-ensurer.reset-size10.size7 { + font-size: 0.57859209em; +} +.katex .sizing.reset-size10.size8, +.katex .fontsize-ensurer.reset-size10.size8 { + font-size: 0.69431051em; +} +.katex .sizing.reset-size10.size9, +.katex .fontsize-ensurer.reset-size10.size9 { + font-size: 0.83317261em; +} +.katex .sizing.reset-size10.size10, +.katex .fontsize-ensurer.reset-size10.size10 { + font-size: 1em; +} +.katex .sizing.reset-size10.size11, +.katex .fontsize-ensurer.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .sizing.reset-size11.size1, +.katex .fontsize-ensurer.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .sizing.reset-size11.size2, +.katex .fontsize-ensurer.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .sizing.reset-size11.size3, +.katex .fontsize-ensurer.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .sizing.reset-size11.size4, +.katex .fontsize-ensurer.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .sizing.reset-size11.size5, +.katex .fontsize-ensurer.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .sizing.reset-size11.size6, +.katex .fontsize-ensurer.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .sizing.reset-size11.size7, +.katex .fontsize-ensurer.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .sizing.reset-size11.size8, +.katex .fontsize-ensurer.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .sizing.reset-size11.size9, +.katex .fontsize-ensurer.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .sizing.reset-size11.size10, +.katex .fontsize-ensurer.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .sizing.reset-size11.size11, +.katex .fontsize-ensurer.reset-size11.size11 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .delimcenter { + position: relative; +} +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .op-limits > .vlist-t { + text-align: center; +} +.katex .accent > .vlist-t { + text-align: center; +} +.katex .accent .accent-body { + position: relative; +} +.katex .accent .accent-body:not(.accent-full) { + width: 0; +} +.katex .overlay { + display: block; +} +.katex .mtable .vertical-separator { + display: inline-block; + min-width: 1px; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist-t { + text-align: center; +} +.katex .mtable .col-align-l > .vlist-t { + text-align: left; +} +.katex .mtable .col-align-r > .vlist-t { + text-align: right; +} +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.katex svg path { + stroke: none; +} +.katex img { + border-style: none; + min-width: 0; + min-height: 0; + max-width: none; + max-height: none; +} +.katex .stretchy { + width: 100%; + display: block; + position: relative; + overflow: hidden; +} +.katex .stretchy::before, +.katex .stretchy::after { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .cd-arrow-pad { + padding: 0 0.55556em 0 0.27778em; +} +.katex .x-arrow, +.katex .mover, +.katex .munder { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em 0 0.3em; +} +.katex .fbox, +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em 0 0.2em; +} +.katex .cancel-lap { + margin-left: -0.2em; + margin-right: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} +.katex .angl { + box-sizing: border-box; + border-top: 0.049em solid; + border-right: 0.049em solid; + margin-right: 0.03889em; +} +.katex .anglpad { + padding: 0 0.03889em 0 0.03889em; +} +.katex .eqn-num::before { + counter-increment: katexEqnNo; + content: "(" counter(katexEqnNo) ")"; +} +.katex .mml-eqn-num::before { + counter-increment: mmlEqnNo; + content: "(" counter(mmlEqnNo) ")"; +} +.katex .mtr-glue { + width: 50%; +} +.katex .cd-vert-arrow { + display: inline-block; + position: relative; +} +.katex .cd-label-left { + display: inline-block; + position: absolute; + right: calc(50% + 0.3em); + text-align: left; +} +.katex .cd-label-right { + display: inline-block; + position: absolute; + left: calc(50% + 0.3em); + text-align: right; +} +div > .katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +div > .katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} +div > .katex-display > .katex > .katex-html { + display: block; + position: relative; +} +div > .katex-display > .katex > .katex-html > .tag { + position: absolute; + right: 0; +} +.katex-display.leqno > .katex > .katex-html > .tag { + left: 0; + right: auto; +} +.katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} +body { + counter-reset: katexEqnNo mmlEqnNo; +} +/* Force borders on tables */ +table { + border-collapse: collapse; +} +.docutils th, td { + border: 1px solid; + padding: .4em; +} +.footnote td { + border: 0; +} +.codepre { + white-space: pre; +} diff --git a/core/bikeshed/katex/dist/katex.css.orig b/core/bikeshed/katex/dist/katex.css.orig new file mode 100644 index 00000000..858c48a1 --- /dev/null +++ b/core/bikeshed/katex/dist/katex.css.orig @@ -0,0 +1,1079 @@ +/* stylelint-disable font-family-no-missing-generic-family-keyword */ +@font-face { + font-family: 'KaTeX_AMS'; + src: url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'), url(fonts/KaTeX_AMS-Regular.woff) format('woff'), url(fonts/KaTeX_AMS-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'), url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'), url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url(fonts/KaTeX_Main-Bold.woff2) format('woff2'), url(fonts/KaTeX_Main-Bold.woff) format('woff'), url(fonts/KaTeX_Main-Bold.ttf) format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url(fonts/KaTeX_Main-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Main-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Main-BoldItalic.ttf) format('truetype'); + font-weight: bold; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url(fonts/KaTeX_Main-Italic.woff2) format('woff2'), url(fonts/KaTeX_Main-Italic.woff) format('woff'), url(fonts/KaTeX_Main-Italic.ttf) format('truetype'); + font-weight: normal; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url(fonts/KaTeX_Main-Regular.woff2) format('woff2'), url(fonts/KaTeX_Main-Regular.woff) format('woff'), url(fonts/KaTeX_Main-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url(fonts/KaTeX_Math-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Math-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Math-BoldItalic.ttf) format('truetype'); + font-weight: bold; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url(fonts/KaTeX_Math-Italic.woff2) format('woff2'), url(fonts/KaTeX_Math-Italic.woff) format('woff'), url(fonts/KaTeX_Math-Italic.ttf) format('truetype'); + font-weight: normal; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url(fonts/KaTeX_SansSerif-Bold.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Bold.woff) format('woff'), url(fonts/KaTeX_SansSerif-Bold.ttf) format('truetype'); + font-weight: bold; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url(fonts/KaTeX_SansSerif-Italic.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Italic.woff) format('woff'), url(fonts/KaTeX_SansSerif-Italic.ttf) format('truetype'); + font-weight: normal; + font-style: italic; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'), url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Script'; + src: url(fonts/KaTeX_Script-Regular.woff2) format('woff2'), url(fonts/KaTeX_Script-Regular.woff) format('woff'), url(fonts/KaTeX_Script-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size1'; + src: url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size1-Regular.woff) format('woff'), url(fonts/KaTeX_Size1-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size2'; + src: url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size2-Regular.woff) format('woff'), url(fonts/KaTeX_Size2-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size3'; + src: url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size3-Regular.woff) format('woff'), url(fonts/KaTeX_Size3-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Size4'; + src: url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size4-Regular.woff) format('woff'), url(fonts/KaTeX_Size4-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'KaTeX_Typewriter'; + src: url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'), url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'), url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype'); + font-weight: normal; + font-style: normal; +} +.katex { + font: normal 1.21em KaTeX_Main, Times New Roman, serif; + line-height: 1.2; + text-indent: 0; + text-rendering: auto; +} +.katex * { + -ms-high-contrast-adjust: none !important; + border-color: currentColor; +} +.katex .katex-version::after { + content: "0.13.19"; +} +.katex .katex-mathml { + /* Accessibility hack to only show to screen readers + Found at: http://a11yproject.com/posts/how-to-hide-content/ */ + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} +.katex .katex-html { + /* \newline is an empty block at top level, between .base elements */ +} +.katex .katex-html > .newline { + display: block; +} +.katex .base { + position: relative; + display: inline-block; + white-space: nowrap; + width: -webkit-min-content; + width: -moz-min-content; + width: min-content; +} +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: bold; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.katex .vbox { + display: inline-flex; + flex-direction: column; + align-items: baseline; +} +.katex .hbox { + display: inline-flex; + flex-direction: row; + width: 100%; +} +.katex .thinbox { + display: inline-flex; + flex-direction: row; + width: 0; + max-width: 0; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .mfrac .frac-line, +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline, +.katex .hdashline, +.katex .rule { + min-height: 1px; +} +.katex .mspace { + display: inline-block; +} +.katex .llap, +.katex .rlap, +.katex .clap { + width: 0; + position: relative; +} +.katex .llap > .inner, +.katex .rlap > .inner, +.katex .clap > .inner { + position: absolute; +} +.katex .llap > .fix, +.katex .rlap > .fix, +.katex .clap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .rlap > .inner, +.katex .clap > .inner { + left: 0; +} +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} +.katex .rule { + display: inline-block; + border: solid 0; + position: relative; +} +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline { + display: inline-block; + width: 100%; + border-bottom-style: dashed; +} +.katex .sqrt > .root { + /* These values are taken from the definition of `\r@@t`, + `\mkern 5mu` and `\mkern -10mu`. */ + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .sizing.reset-size1.size1, +.katex .fontsize-ensurer.reset-size1.size1 { + font-size: 1em; +} +.katex .sizing.reset-size1.size2, +.katex .fontsize-ensurer.reset-size1.size2 { + font-size: 1.2em; +} +.katex .sizing.reset-size1.size3, +.katex .fontsize-ensurer.reset-size1.size3 { + font-size: 1.4em; +} +.katex .sizing.reset-size1.size4, +.katex .fontsize-ensurer.reset-size1.size4 { + font-size: 1.6em; +} +.katex .sizing.reset-size1.size5, +.katex .fontsize-ensurer.reset-size1.size5 { + font-size: 1.8em; +} +.katex .sizing.reset-size1.size6, +.katex .fontsize-ensurer.reset-size1.size6 { + font-size: 2em; +} +.katex .sizing.reset-size1.size7, +.katex .fontsize-ensurer.reset-size1.size7 { + font-size: 2.4em; +} +.katex .sizing.reset-size1.size8, +.katex .fontsize-ensurer.reset-size1.size8 { + font-size: 2.88em; +} +.katex .sizing.reset-size1.size9, +.katex .fontsize-ensurer.reset-size1.size9 { + font-size: 3.456em; +} +.katex .sizing.reset-size1.size10, +.katex .fontsize-ensurer.reset-size1.size10 { + font-size: 4.148em; +} +.katex .sizing.reset-size1.size11, +.katex .fontsize-ensurer.reset-size1.size11 { + font-size: 4.976em; +} +.katex .sizing.reset-size2.size1, +.katex .fontsize-ensurer.reset-size2.size1 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size2.size2, +.katex .fontsize-ensurer.reset-size2.size2 { + font-size: 1em; +} +.katex .sizing.reset-size2.size3, +.katex .fontsize-ensurer.reset-size2.size3 { + font-size: 1.16666667em; +} +.katex .sizing.reset-size2.size4, +.katex .fontsize-ensurer.reset-size2.size4 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size2.size5, +.katex .fontsize-ensurer.reset-size2.size5 { + font-size: 1.5em; +} +.katex .sizing.reset-size2.size6, +.katex .fontsize-ensurer.reset-size2.size6 { + font-size: 1.66666667em; +} +.katex .sizing.reset-size2.size7, +.katex .fontsize-ensurer.reset-size2.size7 { + font-size: 2em; +} +.katex .sizing.reset-size2.size8, +.katex .fontsize-ensurer.reset-size2.size8 { + font-size: 2.4em; +} +.katex .sizing.reset-size2.size9, +.katex .fontsize-ensurer.reset-size2.size9 { + font-size: 2.88em; +} +.katex .sizing.reset-size2.size10, +.katex .fontsize-ensurer.reset-size2.size10 { + font-size: 3.45666667em; +} +.katex .sizing.reset-size2.size11, +.katex .fontsize-ensurer.reset-size2.size11 { + font-size: 4.14666667em; +} +.katex .sizing.reset-size3.size1, +.katex .fontsize-ensurer.reset-size3.size1 { + font-size: 0.71428571em; +} +.katex .sizing.reset-size3.size2, +.katex .fontsize-ensurer.reset-size3.size2 { + font-size: 0.85714286em; +} +.katex .sizing.reset-size3.size3, +.katex .fontsize-ensurer.reset-size3.size3 { + font-size: 1em; +} +.katex .sizing.reset-size3.size4, +.katex .fontsize-ensurer.reset-size3.size4 { + font-size: 1.14285714em; +} +.katex .sizing.reset-size3.size5, +.katex .fontsize-ensurer.reset-size3.size5 { + font-size: 1.28571429em; +} +.katex .sizing.reset-size3.size6, +.katex .fontsize-ensurer.reset-size3.size6 { + font-size: 1.42857143em; +} +.katex .sizing.reset-size3.size7, +.katex .fontsize-ensurer.reset-size3.size7 { + font-size: 1.71428571em; +} +.katex .sizing.reset-size3.size8, +.katex .fontsize-ensurer.reset-size3.size8 { + font-size: 2.05714286em; +} +.katex .sizing.reset-size3.size9, +.katex .fontsize-ensurer.reset-size3.size9 { + font-size: 2.46857143em; +} +.katex .sizing.reset-size3.size10, +.katex .fontsize-ensurer.reset-size3.size10 { + font-size: 2.96285714em; +} +.katex .sizing.reset-size3.size11, +.katex .fontsize-ensurer.reset-size3.size11 { + font-size: 3.55428571em; +} +.katex .sizing.reset-size4.size1, +.katex .fontsize-ensurer.reset-size4.size1 { + font-size: 0.625em; +} +.katex .sizing.reset-size4.size2, +.katex .fontsize-ensurer.reset-size4.size2 { + font-size: 0.75em; +} +.katex .sizing.reset-size4.size3, +.katex .fontsize-ensurer.reset-size4.size3 { + font-size: 0.875em; +} +.katex .sizing.reset-size4.size4, +.katex .fontsize-ensurer.reset-size4.size4 { + font-size: 1em; +} +.katex .sizing.reset-size4.size5, +.katex .fontsize-ensurer.reset-size4.size5 { + font-size: 1.125em; +} +.katex .sizing.reset-size4.size6, +.katex .fontsize-ensurer.reset-size4.size6 { + font-size: 1.25em; +} +.katex .sizing.reset-size4.size7, +.katex .fontsize-ensurer.reset-size4.size7 { + font-size: 1.5em; +} +.katex .sizing.reset-size4.size8, +.katex .fontsize-ensurer.reset-size4.size8 { + font-size: 1.8em; +} +.katex .sizing.reset-size4.size9, +.katex .fontsize-ensurer.reset-size4.size9 { + font-size: 2.16em; +} +.katex .sizing.reset-size4.size10, +.katex .fontsize-ensurer.reset-size4.size10 { + font-size: 2.5925em; +} +.katex .sizing.reset-size4.size11, +.katex .fontsize-ensurer.reset-size4.size11 { + font-size: 3.11em; +} +.katex .sizing.reset-size5.size1, +.katex .fontsize-ensurer.reset-size5.size1 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size5.size2, +.katex .fontsize-ensurer.reset-size5.size2 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size5.size3, +.katex .fontsize-ensurer.reset-size5.size3 { + font-size: 0.77777778em; +} +.katex .sizing.reset-size5.size4, +.katex .fontsize-ensurer.reset-size5.size4 { + font-size: 0.88888889em; +} +.katex .sizing.reset-size5.size5, +.katex .fontsize-ensurer.reset-size5.size5 { + font-size: 1em; +} +.katex .sizing.reset-size5.size6, +.katex .fontsize-ensurer.reset-size5.size6 { + font-size: 1.11111111em; +} +.katex .sizing.reset-size5.size7, +.katex .fontsize-ensurer.reset-size5.size7 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size5.size8, +.katex .fontsize-ensurer.reset-size5.size8 { + font-size: 1.6em; +} +.katex .sizing.reset-size5.size9, +.katex .fontsize-ensurer.reset-size5.size9 { + font-size: 1.92em; +} +.katex .sizing.reset-size5.size10, +.katex .fontsize-ensurer.reset-size5.size10 { + font-size: 2.30444444em; +} +.katex .sizing.reset-size5.size11, +.katex .fontsize-ensurer.reset-size5.size11 { + font-size: 2.76444444em; +} +.katex .sizing.reset-size6.size1, +.katex .fontsize-ensurer.reset-size6.size1 { + font-size: 0.5em; +} +.katex .sizing.reset-size6.size2, +.katex .fontsize-ensurer.reset-size6.size2 { + font-size: 0.6em; +} +.katex .sizing.reset-size6.size3, +.katex .fontsize-ensurer.reset-size6.size3 { + font-size: 0.7em; +} +.katex .sizing.reset-size6.size4, +.katex .fontsize-ensurer.reset-size6.size4 { + font-size: 0.8em; +} +.katex .sizing.reset-size6.size5, +.katex .fontsize-ensurer.reset-size6.size5 { + font-size: 0.9em; +} +.katex .sizing.reset-size6.size6, +.katex .fontsize-ensurer.reset-size6.size6 { + font-size: 1em; +} +.katex .sizing.reset-size6.size7, +.katex .fontsize-ensurer.reset-size6.size7 { + font-size: 1.2em; +} +.katex .sizing.reset-size6.size8, +.katex .fontsize-ensurer.reset-size6.size8 { + font-size: 1.44em; +} +.katex .sizing.reset-size6.size9, +.katex .fontsize-ensurer.reset-size6.size9 { + font-size: 1.728em; +} +.katex .sizing.reset-size6.size10, +.katex .fontsize-ensurer.reset-size6.size10 { + font-size: 2.074em; +} +.katex .sizing.reset-size6.size11, +.katex .fontsize-ensurer.reset-size6.size11 { + font-size: 2.488em; +} +.katex .sizing.reset-size7.size1, +.katex .fontsize-ensurer.reset-size7.size1 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size7.size2, +.katex .fontsize-ensurer.reset-size7.size2 { + font-size: 0.5em; +} +.katex .sizing.reset-size7.size3, +.katex .fontsize-ensurer.reset-size7.size3 { + font-size: 0.58333333em; +} +.katex .sizing.reset-size7.size4, +.katex .fontsize-ensurer.reset-size7.size4 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size7.size5, +.katex .fontsize-ensurer.reset-size7.size5 { + font-size: 0.75em; +} +.katex .sizing.reset-size7.size6, +.katex .fontsize-ensurer.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size7.size7, +.katex .fontsize-ensurer.reset-size7.size7 { + font-size: 1em; +} +.katex .sizing.reset-size7.size8, +.katex .fontsize-ensurer.reset-size7.size8 { + font-size: 1.2em; +} +.katex .sizing.reset-size7.size9, +.katex .fontsize-ensurer.reset-size7.size9 { + font-size: 1.44em; +} +.katex .sizing.reset-size7.size10, +.katex .fontsize-ensurer.reset-size7.size10 { + font-size: 1.72833333em; +} +.katex .sizing.reset-size7.size11, +.katex .fontsize-ensurer.reset-size7.size11 { + font-size: 2.07333333em; +} +.katex .sizing.reset-size8.size1, +.katex .fontsize-ensurer.reset-size8.size1 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size8.size2, +.katex .fontsize-ensurer.reset-size8.size2 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size8.size3, +.katex .fontsize-ensurer.reset-size8.size3 { + font-size: 0.48611111em; +} +.katex .sizing.reset-size8.size4, +.katex .fontsize-ensurer.reset-size8.size4 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size8.size5, +.katex .fontsize-ensurer.reset-size8.size5 { + font-size: 0.625em; +} +.katex .sizing.reset-size8.size6, +.katex .fontsize-ensurer.reset-size8.size6 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size8.size7, +.katex .fontsize-ensurer.reset-size8.size7 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size8.size8, +.katex .fontsize-ensurer.reset-size8.size8 { + font-size: 1em; +} +.katex .sizing.reset-size8.size9, +.katex .fontsize-ensurer.reset-size8.size9 { + font-size: 1.2em; +} +.katex .sizing.reset-size8.size10, +.katex .fontsize-ensurer.reset-size8.size10 { + font-size: 1.44027778em; +} +.katex .sizing.reset-size8.size11, +.katex .fontsize-ensurer.reset-size8.size11 { + font-size: 1.72777778em; +} +.katex .sizing.reset-size9.size1, +.katex .fontsize-ensurer.reset-size9.size1 { + font-size: 0.28935185em; +} +.katex .sizing.reset-size9.size2, +.katex .fontsize-ensurer.reset-size9.size2 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size9.size3, +.katex .fontsize-ensurer.reset-size9.size3 { + font-size: 0.40509259em; +} +.katex .sizing.reset-size9.size4, +.katex .fontsize-ensurer.reset-size9.size4 { + font-size: 0.46296296em; +} +.katex .sizing.reset-size9.size5, +.katex .fontsize-ensurer.reset-size9.size5 { + font-size: 0.52083333em; +} +.katex .sizing.reset-size9.size6, +.katex .fontsize-ensurer.reset-size9.size6 { + font-size: 0.5787037em; +} +.katex .sizing.reset-size9.size7, +.katex .fontsize-ensurer.reset-size9.size7 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size9.size8, +.katex .fontsize-ensurer.reset-size9.size8 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size9.size9, +.katex .fontsize-ensurer.reset-size9.size9 { + font-size: 1em; +} +.katex .sizing.reset-size9.size10, +.katex .fontsize-ensurer.reset-size9.size10 { + font-size: 1.20023148em; +} +.katex .sizing.reset-size9.size11, +.katex .fontsize-ensurer.reset-size9.size11 { + font-size: 1.43981481em; +} +.katex .sizing.reset-size10.size1, +.katex .fontsize-ensurer.reset-size10.size1 { + font-size: 0.24108004em; +} +.katex .sizing.reset-size10.size2, +.katex .fontsize-ensurer.reset-size10.size2 { + font-size: 0.28929605em; +} +.katex .sizing.reset-size10.size3, +.katex .fontsize-ensurer.reset-size10.size3 { + font-size: 0.33751205em; +} +.katex .sizing.reset-size10.size4, +.katex .fontsize-ensurer.reset-size10.size4 { + font-size: 0.38572806em; +} +.katex .sizing.reset-size10.size5, +.katex .fontsize-ensurer.reset-size10.size5 { + font-size: 0.43394407em; +} +.katex .sizing.reset-size10.size6, +.katex .fontsize-ensurer.reset-size10.size6 { + font-size: 0.48216008em; +} +.katex .sizing.reset-size10.size7, +.katex .fontsize-ensurer.reset-size10.size7 { + font-size: 0.57859209em; +} +.katex .sizing.reset-size10.size8, +.katex .fontsize-ensurer.reset-size10.size8 { + font-size: 0.69431051em; +} +.katex .sizing.reset-size10.size9, +.katex .fontsize-ensurer.reset-size10.size9 { + font-size: 0.83317261em; +} +.katex .sizing.reset-size10.size10, +.katex .fontsize-ensurer.reset-size10.size10 { + font-size: 1em; +} +.katex .sizing.reset-size10.size11, +.katex .fontsize-ensurer.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .sizing.reset-size11.size1, +.katex .fontsize-ensurer.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .sizing.reset-size11.size2, +.katex .fontsize-ensurer.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .sizing.reset-size11.size3, +.katex .fontsize-ensurer.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .sizing.reset-size11.size4, +.katex .fontsize-ensurer.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .sizing.reset-size11.size5, +.katex .fontsize-ensurer.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .sizing.reset-size11.size6, +.katex .fontsize-ensurer.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .sizing.reset-size11.size7, +.katex .fontsize-ensurer.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .sizing.reset-size11.size8, +.katex .fontsize-ensurer.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .sizing.reset-size11.size9, +.katex .fontsize-ensurer.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .sizing.reset-size11.size10, +.katex .fontsize-ensurer.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .sizing.reset-size11.size11, +.katex .fontsize-ensurer.reset-size11.size11 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .delimcenter { + position: relative; +} +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .op-limits > .vlist-t { + text-align: center; +} +.katex .accent > .vlist-t { + text-align: center; +} +.katex .accent .accent-body { + position: relative; +} +.katex .accent .accent-body:not(.accent-full) { + width: 0; +} +.katex .overlay { + display: block; +} +.katex .mtable .vertical-separator { + display: inline-block; + min-width: 1px; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist-t { + text-align: center; +} +.katex .mtable .col-align-l > .vlist-t { + text-align: left; +} +.katex .mtable .col-align-r > .vlist-t { + text-align: right; +} +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.katex svg path { + stroke: none; +} +.katex img { + border-style: none; + min-width: 0; + min-height: 0; + max-width: none; + max-height: none; +} +.katex .stretchy { + width: 100%; + display: block; + position: relative; + overflow: hidden; +} +.katex .stretchy::before, +.katex .stretchy::after { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .cd-arrow-pad { + padding: 0 0.55556em 0 0.27778em; +} +.katex .x-arrow, +.katex .mover, +.katex .munder { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em 0 0.3em; +} +.katex .fbox, +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em 0 0.2em; +} +.katex .cancel-lap { + margin-left: -0.2em; + margin-right: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} +.katex .angl { + box-sizing: border-box; + border-top: 0.049em solid; + border-right: 0.049em solid; + margin-right: 0.03889em; +} +.katex .anglpad { + padding: 0 0.03889em 0 0.03889em; +} +.katex .eqn-num::before { + counter-increment: katexEqnNo; + content: "(" counter(katexEqnNo) ")"; +} +.katex .mml-eqn-num::before { + counter-increment: mmlEqnNo; + content: "(" counter(mmlEqnNo) ")"; +} +.katex .mtr-glue { + width: 50%; +} +.katex .cd-vert-arrow { + display: inline-block; + position: relative; +} +.katex .cd-label-left { + display: inline-block; + position: absolute; + right: calc(50% + 0.3em); + text-align: left; +} +.katex .cd-label-right { + display: inline-block; + position: absolute; + left: calc(50% + 0.3em); + text-align: right; +} +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} +.katex-display > .katex > .katex-html { + display: block; + position: relative; +} +.katex-display > .katex > .katex-html > .tag { + position: absolute; + right: 0; +} +.katex-display.leqno > .katex > .katex-html > .tag { + left: 0; + right: auto; +} +.katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} +body { + counter-reset: katexEqnNo mmlEqnNo; +} + diff --git a/core/bikeshed/katex/dist/katex.js b/core/bikeshed/katex/dist/katex.js new file mode 100644 index 00000000..30e5b6b7 --- /dev/null +++ b/core/bikeshed/katex/dist/katex.js @@ -0,0 +1,18185 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["katex"] = factory(); + else + root["katex"] = factory(); +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ katex_webpack; } +}); + +;// CONCATENATED MODULE: ./src/ParseError.js + + +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + */ +var ParseError = // Error position based on passed-in Token or ParseNode. +function ParseError(message, // The error message +token // An object providing position information +) { + this.position = void 0; + var error = "KaTeX parse error: " + message; + var start; + var loc = token && token.loc; + + if (loc && loc.start <= loc.end) { + // If we have the input and a position, make the error a bit fancier + // Get the input + var input = loc.lexer.input; // Prepend some information + + start = loc.start; + var end = loc.end; + + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } // Underline token in question using combining underscores + + + var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error + + var left; + + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; // $FlowFixMe + + self.position = start; + return self; +}; // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; +/* harmony default export */ var src_ParseError = (ParseError); +;// CONCATENATED MODULE: ./src/utils.js +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function utils_escape(text) { + return String(text).replace(ESCAPE_REGEX, function (match) { + return ESCAPE_LOOKUP[match]; + }); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +/* harmony default export */ var utils = ({ + contains: contains, + deflt: deflt, + escape: utils_escape, + hyphenate: hyphenate, + getBaseElem: getBaseElem, + isCharacterBox: isCharacterBox, + protocolFromUrl: protocolFromUrl +}); +;// CONCATENATED MODULE: ./src/Settings.js +/* eslint no-console:0 */ + +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ + + + + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ +var Settings = /*#__PURE__*/function () { + function Settings(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + this.displayMode = utils.deflt(options.displayMode, false); + this.output = utils.deflt(options.output, "htmlAndMathml"); + this.leqno = utils.deflt(options.leqno, false); + this.fleqn = utils.deflt(options.fleqn, false); + this.throwOnError = utils.deflt(options.throwOnError, true); + this.errorColor = utils.deflt(options.errorColor, "#cc0000"); + this.macros = options.macros || {}; + this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0)); + this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); + this.strict = utils.deflt(options.strict, "warn"); + this.trust = utils.deflt(options.trust, false); + this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity)); + this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); + this.globalGroup = utils.deflt(options.globalGroup, false); + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + var _proto = Settings.prototype; + + _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + ; + + _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + ; + + _proto.isTrusted = function isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + }; + + return Settings; +}(); + + +;// CONCATENATED MODULE: ./src/Style.js +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +var Style = /*#__PURE__*/function () { + function Style(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + var _proto = Style.prototype; + + _proto.sup = function sup() { + return styles[_sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + ; + + _proto.sub = function sub() { + return styles[_sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + ; + + _proto.fracNum = function fracNum() { + return styles[_fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + ; + + _proto.fracDen = function fracDen() { + return styles[_fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + ; + + _proto.cramp = function cramp() { + return styles[_cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + ; + + _proto.text = function text() { + return styles[_text[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + ; + + _proto.isTight = function isTight() { + return this.size >= 2; + }; + + return Style; +}(); // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +/* harmony default export */ var src_Style = ({ + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}); +;// CONCATENATED MODULE: ./src/unicodeScripts.js +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(function (s) { + return s.blocks.forEach(function (b) { + return allBlocks.push.apply(allBlocks, b); + }); +}); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} +;// CONCATENATED MODULE: ./src/svgGeometry.js +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping. +// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraViniculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraViniculum below. +// The detour proceeds one extraViniculum distance up and slightly to the right, +// displacing the radiused corner between surd and viniculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long viniculumn, then down one extraViniculum distance, +// after which it resumes regular path geometry for the radical. + +/* viniculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum + / █████████████████████←0.04em (40 unit) std viniculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraViniculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z"; +}; + +var phasePath = function phasePath(y) { + var x = y / 2; // x coordinate at top of angle + + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; + +var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the viniculumn + // to a point near (14 units) the bottom of the surd. The viniculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum; + return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) { + extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraViniculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraViniculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraViniculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraViniculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraViniculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var innerPath = function innerPath(name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239C": + return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; + + case "\u2223": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; + + case "\u2225": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); + + case "\u239F": + return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; + + case "\u23A2": + return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; + + case "\u23A5": + return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; + + case "\u23AA": + return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; + + case "\u23D0": + return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; + + case "\u2016": + return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); + + default: + return ""; + } +}; +var path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +;// CONCATENATED MODULE: ./src/tree.js + + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +var DocumentFragment = /*#__PURE__*/function () { + // HtmlDomNode + // Never used; needed for satisfying interface. + function DocumentFragment(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + var _proto = DocumentFragment.prototype; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + ; + + _proto.toNode = function toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + ; + + _proto.toText = function toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = function toText(child) { + return child.toText(); + }; + + return this.children.map(toText).join(""); + }; + + return DocumentFragment; +}(); +;// CONCATENATED MODULE: ./src/domTree.js +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + + + + + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(function (cls) { + return cls; + }).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var _toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var _toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +var Span = /*#__PURE__*/function () { + function Span(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + var _proto = Span.prototype; + + _proto.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto.toNode = function toNode() { + return _toNode.call(this, "span"); + }; + + _proto.toMarkup = function toMarkup() { + return _toMarkup.call(this, "span"); + }; + + return Span; +}(); +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +var Anchor = /*#__PURE__*/function () { + function Anchor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + var _proto2 = Anchor.prototype; + + _proto2.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto2.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto2.toNode = function toNode() { + return _toNode.call(this, "a"); + }; + + _proto2.toMarkup = function toMarkup() { + return _toMarkup.call(this, "a"); + }; + + return Anchor; +}(); +/** + * This node represents an image embed () element. + */ + +var Img = /*#__PURE__*/function () { + function Img(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + var _proto3 = Img.prototype; + + _proto3.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto3.toNode = function toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + }; + + _proto3.toMarkup = function toMarkup() { + var markup = "" + this.alt + " 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + ; + + _proto4.toMarkup = function toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + }; + + return SymbolNode; +}(); +/** + * SVG nodes are used to render stretchy wide elements. + */ + +var SvgNode = /*#__PURE__*/function () { + function SvgNode(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + var _proto5 = SvgNode.prototype; + + _proto5.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + }; + + _proto5.toMarkup = function toMarkup() { + var markup = ""; + } else { + return ""; + } + }; + + return PathNode; +}(); +var LineNode = /*#__PURE__*/function () { + function LineNode(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + var _proto7 = LineNode.prototype; + + _proto7.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + }; + + _proto7.toMarkup = function toMarkup() { + var markup = " but got " + String(group) + "."); + } +} +;// CONCATENATED MODULE: ./src/fontMetricsData.js +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +/* harmony default export */ var fontMetricsData = ({ + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 1.0], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}); +;// CONCATENATED MODULE: ./src/fontMetrics.js + + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// metrics, including height, depth, italic correction, and skew (kern from the +// character to the corresponding \skewchar) +// This map is generated via `make metrics`. It should not be changed manually. + + // These are very rough approximations. We default to Times New Roman which +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glpyh + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} +;// CONCATENATED MODULE: ./src/symbols.js +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/* harmony default export */ var src_symbols = (symbols); +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font: font, + group: group, + replace: replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var math = "math"; +var symbols_text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var accent = "accent-token"; +var bin = "bin"; +var symbols_close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var symbols_open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227A", "\\prec", true); +defineSymbol(math, main, rel, "\u227B", "\\succ", true); +defineSymbol(math, main, rel, "\u223C", "\\sim", true); +defineSymbol(math, main, rel, "\u22A5", "\\perp"); +defineSymbol(math, main, rel, "\u2AAF", "\\preceq", true); +defineSymbol(math, main, rel, "\u2AB0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226A", "\\ll", true); +defineSymbol(math, main, rel, "\u226B", "\\gg", true); +defineSymbol(math, main, rel, "\u224D", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22C8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220B", "\\ni", true); +defineSymbol(math, main, rel, "\u221D", "\\propto", true); +defineSymbol(math, main, rel, "\u22A2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22A3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220B", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, ".", "\\ldotp"); +defineSymbol(math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "#", "\\#"); +defineSymbol(symbols_text, main, textord, "#", "\\#"); +defineSymbol(math, main, textord, "&", "\\&"); +defineSymbol(symbols_text, main, textord, "&", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210F", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266D", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266E", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266F", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211C", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\xA7", "\\S", true); +defineSymbol(symbols_text, main, textord, "\xA7", "\\S"); +defineSymbol(math, main, textord, "\xB6", "\\P", true); +defineSymbol(symbols_text, main, textord, "\xB6", "\\P"); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, symbols_close, "\u23B1", "\\rmoustache", true); +defineSymbol(math, main, symbols_open, "\u23B0", "\\lmoustache", true); +defineSymbol(math, main, symbols_close, "\u27EF", "\\rgroup", true); +defineSymbol(math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228E", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25EF", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet"); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2A3F", "\\amalg"); +defineSymbol(math, main, bin, "&", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21A6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27FC", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\uE010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\uE011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2A87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\uE00C", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22E6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22E0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22E8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\uE006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22AC", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22AD", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228A", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\uE01A", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\uE017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226F", "\\ngtr", true); +defineSymbol(math, ams, rel, "\uE00F", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\uE00E", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2A88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\uE00D", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22E7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22E9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\uE007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22AF", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\uE018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228B", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\uE01B", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\uE019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22AE", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\uE016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22B4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210F", "\\hslash"); +defineSymbol(math, ams, textord, "\u25BD", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25CA", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24C8", "\\circledS"); +defineSymbol(math, ams, textord, "\xAE", "\\circledR"); +defineSymbol(symbols_text, ams, textord, "\xAE", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\xF0", "\\eth", true); +defineSymbol(symbols_text, main, textord, "\xF0", "\xF0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25A1", "\\square"); +defineSymbol(math, ams, textord, "\u25A1", "\\Box"); +defineSymbol(math, ams, textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\xA5", "\\yen", true); +defineSymbol(symbols_text, ams, textord, "\xA5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(symbols_text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03DD", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03F0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, symbols_open, "\u250C", "\\@ulcorner", true); +defineSymbol(math, ams, symbols_close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, symbols_open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, symbols_close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224A", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22D6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22D8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223D", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22D0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228F", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227E", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22A8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224F", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22D9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225C", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223C", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22D1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227F", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22A9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226C", "\\between", true); +defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221D", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220D", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22D8", "\\llless"); +defineSymbol(math, ams, rel, "\u22D9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22B2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22B3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22C8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22D2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22D3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229F", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229E", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22C9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22CA", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229D", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229B", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22C5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22BA", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22D2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22D3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21B0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22B6", "\\origof", true); // not in font + +defineSymbol(math, main, rel, "\u22B7", "\\imageof", true); // not in font + +defineSymbol(math, ams, rel, "\u22B8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21B1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21DD", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21BE", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(symbols_text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221E", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25B3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039B", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039E", "\\Xi", true); +defineSymbol(math, main, textord, "\u03A0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03A6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03A8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03A9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\xAC", "\\neg", true); +defineSymbol(math, main, textord, "\xAC", "\\lnot"); +defineSymbol(math, main, textord, "\u22A4", "\\top"); +defineSymbol(math, main, textord, "\u22A5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03B2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03B4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03B7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03B8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03B9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03BC", "\\mu", true); +defineSymbol(math, main, mathord, "\u03BD", "\\nu", true); +defineSymbol(math, main, mathord, "\u03BE", "\\xi", true); +defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03C0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03C1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03C4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03D5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03C7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03C8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03C9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22C5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ"); +defineSymbol(math, main, bin, "\xF7", "\\div", true); +defineSymbol(math, main, bin, "\xB1", "\\pm", true); +defineSymbol(math, main, bin, "\xD7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222A", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus"); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221A", "\\surd"); +defineSymbol(math, main, symbols_open, "\u27E8", "\\langle", true); +defineSymbol(math, main, symbols_open, "\u2223", "\\lvert"); +defineSymbol(math, main, symbols_open, "\u2225", "\\lVert"); +defineSymbol(math, main, symbols_close, "?", "?"); +defineSymbol(math, main, symbols_close, "!", "!"); +defineSymbol(math, main, symbols_close, "\u27E9", "\\rangle", true); +defineSymbol(math, main, symbols_close, "\u2223", "\\rvert"); +defineSymbol(math, main, symbols_close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\uE020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22A8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\xA0", "\\ "); +defineSymbol(math, main, spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\xA0", "\\nobreakspace"); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\ "); +defineSymbol(symbols_text, main, spacing, "\xA0", " "); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\space"); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22BC", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22BB", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229A", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22A1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22C4", "\\diamond"); +defineSymbol(math, main, bin, "\u22C6", "\\star"); +defineSymbol(math, main, bin, "\u25C3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25B9", "\\triangleright"); +defineSymbol(math, main, symbols_open, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, symbols_close, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, symbols_open, "{", "\\lbrace"); +defineSymbol(math, main, symbols_close, "}", "\\rbrace"); +defineSymbol(math, main, symbols_open, "[", "\\lbrack", true); +defineSymbol(symbols_text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, symbols_close, "]", "\\rbrack", true); +defineSymbol(symbols_text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, symbols_open, "(", "\\lparen", true); +defineSymbol(math, main, symbols_close, ")", "\\rparen", true); +defineSymbol(symbols_text, main, textord, "<", "\\textless", true); // in T1 fontenc + +defineSymbol(symbols_text, main, textord, ">", "\\textgreater", true); // in T1 fontenc + +defineSymbol(math, main, symbols_open, "\u230A", "\\lfloor", true); +defineSymbol(math, main, symbols_close, "\u230B", "\\rfloor", true); +defineSymbol(math, main, symbols_open, "\u2308", "\\lceil", true); +defineSymbol(math, main, symbols_close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(symbols_text, main, textord, "|", "\\textbar", true); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(symbols_text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(symbols_text, main, textord, "~", "\\textasciitilde"); +defineSymbol(symbols_text, main, textord, "\\", "\\textbackslash"); +defineSymbol(symbols_text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21D1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21D3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22C1", "\\bigvee"); +defineSymbol(math, main, op, "\u22C0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2A04", "\\biguplus"); +defineSymbol(math, main, op, "\u22C2", "\\bigcap"); +defineSymbol(math, main, op, "\u22C3", "\\bigcup"); +defineSymbol(math, main, op, "\u222B", "\\int"); +defineSymbol(math, main, op, "\u222B", "\\intop"); +defineSymbol(math, main, op, "\u222C", "\\iint"); +defineSymbol(math, main, op, "\u222D", "\\iiint"); +defineSymbol(math, main, op, "\u220F", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2A02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2A01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2A00", "\\bigodot"); +defineSymbol(math, main, op, "\u222E", "\\oint"); +defineSymbol(math, main, op, "\u222F", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2A06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222B", "\\smallint"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22EF", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22F1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22EE", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02CA", "\\acute"); +defineSymbol(math, main, accent, "\u02CB", "\\grave"); +defineSymbol(math, main, accent, "\xA8", "\\ddot"); +defineSymbol(math, main, accent, "~", "\\tilde"); +defineSymbol(math, main, accent, "\u02C9", "\\bar"); +defineSymbol(math, main, accent, "\u02D8", "\\breve"); +defineSymbol(math, main, accent, "\u02C7", "\\check"); +defineSymbol(math, main, accent, "^", "\\hat"); +defineSymbol(math, main, accent, "\u20D7", "\\vec"); +defineSymbol(math, main, accent, "\u02D9", "\\dot"); +defineSymbol(math, main, accent, "\u02DA", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA + +defineSymbol(math, main, mathord, "\uE131", "\\@imath"); +defineSymbol(math, main, mathord, "\uE237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(symbols_text, main, textord, "\u0131", "\\i", true); +defineSymbol(symbols_text, main, textord, "\u0237", "\\j", true); +defineSymbol(symbols_text, main, textord, "\xDF", "\\ss", true); +defineSymbol(symbols_text, main, textord, "\xE6", "\\ae", true); +defineSymbol(symbols_text, main, textord, "\u0153", "\\oe", true); +defineSymbol(symbols_text, main, textord, "\xF8", "\\o", true); +defineSymbol(symbols_text, main, textord, "\xC6", "\\AE", true); +defineSymbol(symbols_text, main, textord, "\u0152", "\\OE", true); +defineSymbol(symbols_text, main, textord, "\xD8", "\\O", true); +defineSymbol(symbols_text, main, accent, "\u02CA", "\\'"); // acute + +defineSymbol(symbols_text, main, accent, "\u02CB", "\\`"); // grave + +defineSymbol(symbols_text, main, accent, "\u02C6", "\\^"); // circumflex + +defineSymbol(symbols_text, main, accent, "\u02DC", "\\~"); // tilde + +defineSymbol(symbols_text, main, accent, "\u02C9", "\\="); // macron + +defineSymbol(symbols_text, main, accent, "\u02D8", "\\u"); // breve + +defineSymbol(symbols_text, main, accent, "\u02D9", "\\."); // dot above + +defineSymbol(symbols_text, main, accent, "\xB8", "\\c"); // cedilla + +defineSymbol(symbols_text, main, accent, "\u02DA", "\\r"); // ring above + +defineSymbol(symbols_text, main, accent, "\u02C7", "\\v"); // caron + +defineSymbol(symbols_text, main, accent, "\xA8", '\\"'); // diaresis + +defineSymbol(symbols_text, main, accent, "\u02DD", "\\H"); // double acute + +defineSymbol(symbols_text, main, accent, "\u25EF", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(symbols_text, main, textord, "\u2013", "--", true); +defineSymbol(symbols_text, main, textord, "\u2013", "\\textendash"); +defineSymbol(symbols_text, main, textord, "\u2014", "---", true); +defineSymbol(symbols_text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(symbols_text, main, textord, "\u2018", "`", true); +defineSymbol(symbols_text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(symbols_text, main, textord, "\u2019", "'", true); +defineSymbol(symbols_text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(symbols_text, main, textord, "\u201C", "``", true); +defineSymbol(symbols_text, main, textord, "\u201C", "\\textquotedblleft"); +defineSymbol(symbols_text, main, textord, "\u201D", "''", true); +defineSymbol(symbols_text, main, textord, "\u201D", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\xB0", "\\degree", true); +defineSymbol(symbols_text, main, textord, "\xB0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(symbols_text, main, textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". + +defineSymbol(math, main, textord, "\xA3", "\\pounds"); +defineSymbol(math, main, textord, "\xA3", "\\mathsterling", true); +defineSymbol(symbols_text, main, textord, "\xA3", "\\pounds"); +defineSymbol(symbols_text, main, textord, "\xA3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(symbols_text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+\";:?/.,"; + +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + + defineSymbol(symbols_text, main, textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(symbols_text, main, textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(symbols_text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(symbols_text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(symbols_text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(symbols_text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(symbols_text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(symbols_text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(symbols_text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var wideChar = ""; + +for (var _i3 = 0; _i3 < letters.length; _i3++) { + var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + + if (_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(symbols_text, main, textord, "k", wideChar); // Next, some wide character numerals + +for (var _i4 = 0; _i4 < 10; _i4++) { + var _ch4 = _i4.toString(); + + wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "\xD0\xDE\xFE"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(symbols_text, main, textord, _ch5, _ch5); +} +;// CONCATENATED MODULE: ./src/wide-character.js +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ + +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathnormal", "textit", "Math-Italic"], // A-Z italic +["mathnormal", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace +]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace +]; +var wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new src_ParseError("Unsupported character: " + wideChar); + } +}; +;// CONCATENATED MODULE: ./src/Options.js +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +var Options = /*#__PURE__*/function () { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + function Options(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + var _proto = Options.prototype; + + _proto.extend = function extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + ; + + _proto.havingStyle = function havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + ; + + _proto.havingCrampedStyle = function havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + ; + + _proto.havingSize = function havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + ; + + _proto.havingBaseStyle = function havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + ; + + _proto.havingBaseSizing = function havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + ; + + _proto.withColor = function withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + ; + + _proto.withPhantom = function withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + ; + + _proto.withFont = function withFont(font) { + return this.extend({ + font: font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + ; + + _proto.withTextFontFamily = function withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily: fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontWeight = function withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight: fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontShape = function withTextFontShape(fontShape) { + return this.extend({ + fontShape: fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + ; + + _proto.sizingClasses = function sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + ; + + _proto.baseSizingClasses = function baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + ; + + _proto.fontMetrics = function fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + ; + + _proto.getColor = function getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + }; + + return Options; +}(); + +Options.BASESIZE = 6; +/* harmony default export */ var src_Options = (Options); +;// CONCATENATED MODULE: ./src/units.js +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + + // This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +;// CONCATENATED MODULE: ./src/buildCommon.js +/* eslint no-console:0 */ + +/** + * This module contains general functions that can be used for building + * different kinds of domTree nodes in a consistent manner. + */ + + + + + + + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (src_symbols[mode][value] && src_symbols[mode][value].replace) { + value = src_symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || src_symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + var _wideCharacterFont = wideCharacterFont(text, mode), + wideFontName = _wideCharacterFont[0], + wideFontClass = _wideCharacterFont[1]; + + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol") { + var fontData = boldsymbol(text, mode, options, classes, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + var font = src_symbols[mode][text] && src_symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var canCombine = function canCombine(prev, next) { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + + + if (prev.classes.length === 1) { + var cls = prev.classes[0]; + + if (cls === "mbin" || cls === "mord") { + return false; + } + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var tryCombineChars = function tryCombineChars(chars) { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var makeSpan = function makeSpan(classes, children, options, style) { + var span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var makeSvgSpan = function makeSvgSpan(classes, children, options, style) { + return new Span(classes, children, options, style); +}; + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = makeSpan([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = line.height + "em"; + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var makeFragment = function makeFragment(children) { + var fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size: size + }); + children.push(oldChildren[i]); + } + + return { + children: children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth: depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var makeVList = function makeVList(params, options) { + var _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = makeSpan(["pstrut"], []); + pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = makeSpan(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em"; + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = makeSpan(["vlist"], realChildren); + vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = makeSpan([], []); + var depthStrut = makeSpan(["vlist"], [emptySpan]); + depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200B")]); + rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var makeGlue = function makeGlue(measurement, options) { + // Make an empty span for the space + var rule = makeSpan(["mspace"], [], options); + var size = calculateSize(measurement, options); + rule.style.marginRight = size + "em"; + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var _svgData$value = svgData[value], + pathName = _svgData$value[0], + width = _svgData$value[1], + height = _svgData$value[2]; + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return span; +}; + +/* harmony default export */ var buildCommon = ({ + fontMap: fontMap, + makeSymbol: makeSymbol, + mathsym: mathsym, + makeSpan: makeSpan, + makeSvgSpan: makeSvgSpan, + makeLineSpan: makeLineSpan, + makeAnchor: makeAnchor, + makeFragment: makeFragment, + wrapFragment: wrapFragment, + makeVList: makeVList, + makeOrd: makeOrd, + makeGlue: makeGlue, + staticSvg: staticSvg, + svgData: svgData, + tryCombineChars: tryCombineChars +}); +;// CONCATENATED MODULE: ./src/spacingData.js +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; +;// CONCATENATED MODULE: ./src/defineFunction.js +/** Context provided to function handlers for error messages. */ +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of functions + var data = { + type: type, + numArgs: props.numArgs, + argTypes: props.argTypes, + allowedInArgument: !!props.allowedInArgument, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + primitive: !!props.primitive, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var type = _ref2.type, + htmlBuilder = _ref2.htmlBuilder, + mathmlBuilder = _ref2.mathmlBuilder; + defineFunction({ + type: type, + names: [], + props: { + numArgs: 0 + }, + handler: function handler() { + throw new Error('Should never be called.'); + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder + }); +} +var normalizeArgument = function normalizeArgument(arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var ordargument = function ordargument(arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; +;// CONCATENATED MODULE: ./src/buildHTML.js +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ + + + + + + + + +var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildGroup(expression[i], options); + + if (output instanceof DocumentFragment) { + var children = output.children; + groups.push.apply(groups, children); + } else { + groups.push(output); + } + } // Combine consecutive domTree.symbolNodes into a single symbolNode. + + + buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = expression[0]; + + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options); + var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + var isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + var nonspace = !node.hasClass("mspace"); + + if (nonspace) { + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("newline")) { + prev.node = buildHTML_makeSpan(["leftmost"]); // treat like beginning of line + } + + prev.insertAfter = function (index) { + return function (n) { + nodes.splice(index + 1, 0, n); + i++; + }; + }(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return buildHTML_makeSpan(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildGroup = function buildGroup(group, options, baseOptions) { + if (!group) { + return buildHTML_makeSpan(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + + var strut = buildHTML_makeSpan(["strut"]); + strut.style.height = body.height + body.depth + "em"; + strut.style.verticalAlign = -body.depth + "em"; + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildExpression(tree, options, "root"); + var eqnNum; + + if (expression.length === 2 && expression[1].hasClass("tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + + var htmlNode = buildHTML_makeSpan(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = htmlNode.height + htmlNode.depth + "em"; + strut.style.verticalAlign = -htmlNode.depth + "em"; + } + + return htmlNode; +} +;// CONCATENATED MODULE: ./src/mathMLTree.js +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work simlarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ + + + +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +var MathNode = /*#__PURE__*/function () { + function MathNode(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + var _proto = MathNode.prototype; + + _proto.setAttribute = function setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + ; + + _proto.getAttribute = function getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + ; + + _proto.toNode = function toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + if (this.classes.length > 0) { + markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + ; + + _proto.toText = function toText() { + return this.children.map(function (child) { + return child.toText(); + }).join(""); + }; + + return MathNode; +}(); +/** + * This node represents a piece of text. + */ + +var TextNode = /*#__PURE__*/function () { + function TextNode(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + var _proto2 = TextNode.prototype; + + _proto2.toNode = function toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + ; + + _proto2.toMarkup = function toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text iteself). + */ + ; + + _proto2.toText = function toText() { + return this.text; + }; + + return TextNode; +}(); +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +var SpaceNode = /*#__PURE__*/function () { + /** + * Create a Space node with width given in CSS ems. + */ + function SpaceNode(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200A"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200A"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200A\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205F\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + var _proto3 = SpaceNode.prototype; + + _proto3.toNode = function toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", this.width + "em"); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto3.toMarkup = function toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + ; + + _proto3.toText = function toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + }; + + return SpaceNode; +}(); + +/* harmony default export */ var mathMLTree = ({ + MathNode: MathNode, + TextNode: TextNode, + SpaceNode: SpaceNode, + newDocumentFragment: newDocumentFragment +}); +;// CONCATENATED MODULE: ./src/buildMathML.js +/** + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + + + + + + + + + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function makeText(text, mode, options) { + if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) { + text = src_symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return group.type === "textord" ? "bold" : "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and caligrahpic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (src_symbols[mode][text] && src_symbols[mode][text].replace) { + text = src_symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildMathML_buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildMathML_buildGroup(expression[i], options); + + if (_group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + var _lastGroup$children; + + (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children); + + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + var _lastGroup$children2; + + (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children); + + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + var _lastGroup$children3; + + (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children); + + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildMathML_buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildMathML_buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe + + return result; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + var expression = buildMathML_buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + + if (isDisplayMode) { + math.setAttribute("display", "block"); + } // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} +;// CONCATENATED MODULE: ./src/buildTree.js + + + + + + + +var optionsFromSettings = function optionsFromSettings(settings) { + return new src_Options({ + style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree = function buildTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; +/* harmony default export */ var src_buildTree = ((/* unused pure expression or super */ null && (buildTree))); +;// CONCATENATED MODULE: ./src/stretchy.js +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ + + + + +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23DF", + overbrace: "\u23DE", + overgroup: "\u23E0", + undergroup: "\u23E1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21D2", + xRightarrow: "\u21D2", + overleftharpoon: "\u21BC", + xleftharpoonup: "\u21BC", + overrightharpoon: "\u21C0", + xrightharpoonup: "\u21C0", + xLeftarrow: "\u21D0", + xLeftrightarrow: "\u21D4", + xhookleftarrow: "\u21A9", + xhookrightarrow: "\u21AA", + xmapsto: "\u21A6", + xrightharpoondown: "\u21C1", + xleftharpoondown: "\u21BD", + xrightleftharpoons: "\u21CC", + xleftrightharpoons: "\u21CB", + xtwoheadleftarrow: "\u219E", + xtwoheadrightarrow: "\u21A0", + xlongequal: "=", + xtofrom: "\u21C4", + xrightleftarrows: "\u21C4", + xrightequilibrium: "\u21CC", + // Not a perfect match. + xleftequilibrium: "\u21CB", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; + +var mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.substr(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + // $FlowFixMe + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": _height + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var paths = data[0], + _minWidth = data[1], + _viewBoxHeight = data[2]; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": _height2 + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = _height2 + "em"; + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + + span.height = height; + span.style.height = height + "em"; + + if (minWidth > 0) { + span.style.minWidth = minWidth + "em"; + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + var img; + var totalHeight = inner.height + inner.depth + topPad + bottomPad; + + if (/fbox|color|angl/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": totalHeight + "em" + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = totalHeight + "em"; + return img; +}; + +/* harmony default export */ var stretchy = ({ + encloseSpan: encloseSpan, + mathMLnode: mathMLnode, + svgSpan: svgSpan +}); +;// CONCATENATED MODULE: ./src/parseNode.js + + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe, >=0.125 + + + return node; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} +;// CONCATENATED MODULE: ./src/functions/accent.js + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +var htmlBuilder = function htmlBuilder(grp, options) { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSubGroup; + + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + grp.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup(grp, options)); // reset original base + + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } + + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent + + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + 2 * skew + "em)", + marginLeft: 2 * skew + "em" + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(function (accent) { + return "\\" + accent; +}).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var base = normalizeArgument(args[0]); + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: function handler(context, args) { + var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/accentunder.js +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Treat under accents much like underlines. + var innerGroup = buildGroup(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/arrow.js + + + + + + + +// Helper function +var paddedNode = function paddedNode(group) { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + // Flow is unable to correctly infer the type of `group`, even though it's + // unamibiguously determined from the passed-in `type` above. + htmlBuilder: function htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options); + var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var node; + + if (group.body) { + var upperNode = paddedNode(buildMathML_buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/environments/cd.js + + + + + + + +var cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; + +var newCell = function newCell() { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + // So these values are fixed and flow can do implicit typing. + return { + type: "styling", + body: [], + mode: "math", + style: "display" + }; +}; + +var isStartOfArrow = function isStartOfArrow(node) { + return node.type === "textord" && node.text === "@"; +}; + +var isLabelEnd = function isLabelEnd(node, endChar) { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; + +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + var funcName = cdArrowFunctionName[arrowChar]; + + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + + case "\\uparrow": + case "\\downarrow": + { + var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + var bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + var arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + + case "\\Vert": + { + var arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} + +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + var parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + + while (true) { + // eslint-disable-line no-constant-condition + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + var next = parser.fetch().text; + + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + + break; + } else { + throw new src_ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + + var row = []; + var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. + + for (var i = 0; i < parsedRows.length; i++) { + // Start a new row. + var rowNodes = parsedRows[i]; // Create the first cell. + + var cell = newCell(); + + for (var j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + + j += 1; + var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. + + var labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; // Process the arrow. + + if ("=|.".indexOf(arrowChar) > -1) {// Three "arrows", ``@=`, `@|`, and `@.`, do not take labels. + // Do nothing here. + } else if ("<>AV".indexOf(arrowChar) > -1) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (var labelNum = 0; labelNum < 2; labelNum++) { + var inLabel = true; + + for (var k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + + if (isStartOfArrow(rowNodes[k])) { + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + + labels[labelNum].body.push(rowNodes[k]); + } + + if (inLabel) { + // isLabelEnd never returned a true. + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new src_ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } // Now join the arrow to its labels. + + + var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + + var wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display" // CD is always displaystyle. + + }; + row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + + cell = newCell(); + } + } + + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + + row = []; + body.push(row); + } // End row group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); // define column separation. + + var cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + + }); + return { + type: "array", + mode: "math", + body: body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols: cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} // The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = options.havingStyle(options.style.sup()); + var label = buildCommon.wrapFragment(buildGroup(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = 0.8 - label.depth + "em"; // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + + label.height = 0; + label.depth = 0; + return label; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var label = new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.label, options)]); + label = new mathMLTree.MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + + + label.setAttribute("voffset", "0.7em"); + label = new mathMLTree.MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + var parent = buildCommon.wrapFragment(buildGroup(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.fragment, options)]); + } +}); +;// CONCATENATED MODULE: ./src/functions/char.js + + + // \@char is an internal function that takes a grouped decimal argument like +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + var text; + + if (isNaN(code)) { + throw new src_ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new src_ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + + return { + type: "textord", + mode: parser.mode, + text: text + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/color.js + + + + + + + +var color_htmlBuilder = function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var color_mathmlBuilder = function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color: color, + body: ordargument(body) + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + argTypes: ["color"] + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser, + breakOnTokenText = _ref2.breakOnTokenText; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color: color, + body: body + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/cr.js +// Row breaks within tabular environments, and line breaks at top level + + + + + // \DeclareRobustCommand\\{...\@xnewline} + +defineFunction({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var size = optArgs[0]; + var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); + return { + type: "cr", + mode: parser.mode, + newLine: newLine, + size: size && assertNodeType(size, "size").value + }; + }, + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder: function htmlBuilder(group, options) { + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = calculateSize(group.size, options) + "em"; + } + } + + return span; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", calculateSize(group.size, options) + "em"); + } + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/def.js + + + +var globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; + +var checkControlSequence = function checkControlSequence(tok) { + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + + return name; +}; + +var getRHS = function getRHS(parser) { + var tok = parser.gullet.popToken(); + + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + + return tok; +}; + +var letCommand = function letCommand(parser, name, tok, global) { + var macro = parser.gullet.macros.get(tok.text); + + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + + parser.gullet.macros.set(name, macro, global); +}; // -> | +// -> |\global +// -> | +// -> \global|\long|\outer + + +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref) { + var parser = _ref.parser, + funcName = _ref.funcName; + parser.consumeSpaces(); + var token = parser.fetch(); + + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + + return assertNodeType(parser.parseFunction(), "internal"); + } + + throw new src_ParseError("Invalid token after macro prefix", token); + } +}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> + +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref2) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var tok = parser.gullet.popToken(); + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + + var numArgs = 0; + var insert; + var delimiters = [[]]; // contains no braces + + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + + + tok = parser.gullet.popToken(); + + if (!/^[1-9]$/.test(tok.text)) { + throw new src_ParseError("Invalid argument number \"" + tok.text + "\""); + } + + if (parseInt(tok.text) !== numArgs + 1) { + throw new src_ParseError("Argument number \"" + tok.text + "\" out of order"); + } + + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new src_ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } // replacement text, enclosed in '{' and '}' and properly nested + + + var _parser$gullet$consum = parser.gullet.consumeArg(), + tokens = _parser$gullet$consum.tokens; + + if (insert) { + tokens.unshift(insert); + } + + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } // Final arg is the expansion of the macro + + + parser.gullet.macros.set(name, { + tokens: tokens, + numArgs: numArgs, + delimiters: delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } +}); // -> +// -> \futurelet +// | \let +// -> |= + +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + var name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + var tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } +}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf + +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref4) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + var name = checkControlSequence(parser.gullet.popToken()); + var middle = parser.gullet.popToken(); + var tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } +}); +;// CONCATENATED MODULE: ./src/delimiter.js +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + + + + + + + + + + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font, mode) { + var replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes); + + if (center) { + centerSpan(span, options, src_Style.TEXT); + } + + return span; +}; +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ + + +var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: corner + }; +}; + +var makeInner = function makeInner(ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + var width = fontMetricsData["Size4-Regular"][ch.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch.charCodeAt(0)][4].toFixed(3) : fontMetricsData["Size1-Regular"][ch.charCodeAt(0)][4].toFixed(3); + var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + var svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon.makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return { + type: "elem", + elem: span + }; +}; // Helpers for makeStackedDelim + + +var lapInEms = 0.008; +var lap = { + type: "kern", + size: -1 * lapInEms +}; +var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; +var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23D0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23D0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23D0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (utils.contains(verts, delim)) { + repeat = "\u2223"; + } else if (utils.contains(doubleVerts, delim)) { + repeat = "\u2225"; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23A1"; + repeat = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23A4"; + repeat = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + } else if (delim === "\\lfloor" || delim === "\u230A") { + repeat = top = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23A1"; + repeat = bottom = "\u23A2"; + font = "Size4-Regular"; + } else if (delim === "\\rfloor" || delim === "\u230B") { + repeat = top = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23A4"; + repeat = bottom = "\u23A5"; + font = "Size4-Regular"; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239B"; + repeat = "\u239C"; + bottom = "\u239D"; + font = "Size4-Regular"; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239E"; + repeat = "\u239F"; + bottom = "\u23A0"; + font = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23A7"; + middle = "\u23A8"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23AB"; + middle = "\u23AC"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27EE") { + top = "\u23A7"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27EF") { + top = "\u23AB"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23B0") { + top = "\u23A7"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23B1") { + top = "\u23AB"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calcuate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + + var stack = []; // Add the bottom symbol + + stack.push(makeGlyphSpan(bottom, font, mode)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + + stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. + + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode)); + stack.push(lap); + stack.push(makeInner(repeat, _innerHeight, options)); + } // Add the top symbol + + + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode)); // Finally, build the vlist + + var newOptions = options.havingBaseStyle(src_Style.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes); +}; // All surds have 0.08em padding above the viniculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) { + var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight); + var pathNode = new PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": height + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick viniculum. + // If Settings.minRuleThickness is larger than that, we add extraViniculum. + + var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the viniculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraViniculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraViniculum + emPad; + texHeight = height + extraViniculum; + viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = spanHeight + "em"; + return { + span: span, + advanceWidth: advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new src_ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +/* harmony default export */ var delimiter = ({ + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + sizeToMaxHeight: sizeToMaxHeight, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}); +;// CONCATENATED MODULE: ./src/functions/delimsizing.js + + + + + + + + + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new src_ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new src_ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: function mathmlBuilder(group) { + var children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + node.setAttribute("stretchy", "true"); + node.setAttribute("minsize", delimiter.sizeToMaxHeight[group.size] + "em"); + node.setAttribute("maxsize", delimiter.sizeToMaxHeight[group.size] + "em"); + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new src_ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color: color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body: body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + assertParsed(group); // Build the inner expression + + var inner = buildExpression(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + assertParsed(group); + var inner = buildMathML_buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new src_ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options: options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // A Firefox \middle will strech a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); +;// CONCATENATED MODULE: ./src/functions/enclose.js + + + + + + + + + + + + +var enclose_htmlBuilder = function htmlBuilder(group, options) { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildGroup(group.body, options), options); + var label = group.label.substr(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + var lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + var clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); // Prevent size changes like \Huge from affecting line thickness + + var newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. + + inner.style.paddingLeft = angleHeight / 2 + lineWeight + "em"; // Create an SVG + + var viewBoxHeight = Math.floor(1000 * angleHeight * scale); + var path = phasePath(viewBoxHeight); + var svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": viewBoxHeight / 1000 + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); // Wrap it in a span with overflow: hidden. + + img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = angleHeight + "em"; + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var topPad = 0; + var bottomPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + + img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = ruleThickness + "em"; + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = ruleThickness + "em"; + img.style.borderRightWidth = ruleThickness + "em"; + } + + imgShift = inner.depth + bottomPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var enclose_mathmlBuilder = function mathmlBuilder(group, options) { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "text"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "text"] + }, + handler: function handler(_ref2, args, optArgs) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: backgroundColor, + borderColor: borderColor, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + handler: function handler(_ref4, args) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false + }, + handler: function handler(_ref5, args) { + var parser = _ref5.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } +}); +;// CONCATENATED MODULE: ./src/defineEnvironment.js + + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of environments. + var data = { + type: type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} +;// CONCATENATED MODULE: ./src/environments/array.js + + + + + + + + + + + + + + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} + +var validateAmsEnvironmentContext = function validateAmsEnvironmentContext(context) { + var settings = context.parser.settings; + + if (!settings.displayMode) { + throw new src_ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter, + addJot = _ref.addJot, + cols = _ref.cols, + arraystretch = _ref.arraystretch, + colSeparationType = _ref.colSeparationType, + addEqnNum = _ref.addEqnNum, + singleRow = _ref.singleRow, + emptySingleRow = _ref.emptySingleRow, + maxNumCols = _ref.maxNumCols, + leqno = _ref.leqno; + parser.gullet.beginGroup(); + + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } // Get current arraystretch if it's not set by the environment + + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new src_ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style: style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new src_ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); + } + } + + parser.consume(); + } else if (next === "\\end") { + // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. + // NOTE: Currently, `cell` is the last item added into `row`. + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\\\") { + parser.consume(); + var size = void 0; // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + + rowGaps.push(size ? size.value : null); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + } else { + throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \cr + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot: addJot, + arraystretch: arraystretch, + body: body, + cols: cols, + rowGaps: rowGaps, + hskipBeforeAndAfter: hskipBeforeAndAfter, + hLinesBeforeRow: hLinesBeforeRow, + colSeparationType: colSeparationType, + addEqnNum: addEqnNum, + leqno: leqno + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.substr(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var array_htmlBuilder = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + var eqnNumSpans = []; + + if (group.addEqnNum) { + // An environment with automatic equation numbers. + // Create node(s) that will trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + var rw = body[r]; + var shift = rw.pos - offset; + var eqnTag = buildCommon.makeSpan(["eqn-num"], [], options); + eqnTag.depth = rw.depth; + eqnTag.height = rw.height; + eqnNumSpans.push({ + type: "elem", + elem: eqnTag, + shift: shift + }); + } + } + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = totalHeight + "em"; + separator.style.borderRightWidth = ruleThickness + "em"; + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 -" + ruleThickness / 2 + "em"; + separator.style.verticalAlign = -(totalHeight - offset) + "em"; + cols.push(separator); + } else { + throw new src_ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var _shift = row.pos - offset; + + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: _shift + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + if (!group.addEqnNum) { + return buildCommon.makeSpan(["mord"], [body], options); + } else { + var eqnNumCol = buildCommon.makeVList({ + positionType: "individualShift", + children: eqnNumSpans + }, options); + eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); + return buildCommon.makeFragment([body, eqnNumCol]); + } +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var array_mathmlBuilder = function mathmlBuilder(group, options) { + var tbl = []; + var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); + var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); + + for (var i = 0; i < group.body.length; i++) { + var rw = group.body[i]; + var row = []; + + for (var j = 0; j < rw.length; j++) { + row.push(new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(rw[j], options)])); + } + + if (group.addEqnNum) { + row.unshift(glue); + row.push(glue); + + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + + tbl.push(new mathMLTree.MathNode("mtr", row)); + } + + var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found emprically. They produce an array + // similar to LaTeX and in which content does not interfere with \hines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", gap.toFixed(4) + "em"); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var _i = iStart; _i < iEnd; _i++) { + if (cols[_i].type === "align") { + align += alignMap[cols[_i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[_i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i2 = 1; _i2 < _cols.length; _i2++) { + spacing += _i2 % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { + rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i3][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. + + +var alignedHandler = function alignedHandler(context, args) { + if (context.envName.indexOf("ed") === -1) { + validateAmsEnvironmentContext(context); + } + + var cols = []; + var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var res = parseArray(context.parser, { + cols: cols, + addJot: true, + addEqnNum: context.envName === "align" || context.envName === "alignat", + emptySingleRow: true, + colSeparationType: separationType, + maxNumCols: context.envName === "split" ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + + if (args[0] && args[0].type === "ordgroup") { + var arg0 = ""; + + for (var i = 0; i < args[0].body.length; i++) { + var textord = assertNodeType(args[0].body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i4 = 1; _i4 < row.length; _i4 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i4], "styling"); + var ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i5 = 0; _i5 < numCols; ++_i5) { + var align = "r"; + var pregap = 0; + + if (_i5 % 2 === 1) { + align = "l"; + } else if (_i5 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i5] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols: cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath + + var colAlign = "c"; + var payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + var parser = context.parser; + parser.consumeSpaces(); + + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + + if ("lcr".indexOf(colAlign) === -1) { + throw new src_ParseError("Expected l or c or r", parser.nextToken); + } + + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. + + var numCols = Math.max.apply(Math, [0].concat(res.body.map(function (row) { + return row.length; + }))); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + var res = { + cols: cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body.length > 0 && res.body[0].length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.indexOf("r") > -1 ? "." : "\\{", + right: context.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: undefined + }; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + if (utils.contains(["gather", "gather*"], context.envName)) { + validateAmsEnvironmentContext(context); + } + + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + addEqnNum: context.envName === "gather", + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + validateAmsEnvironmentContext(context); + var res = { + addEqnNum: context.envName === "equation", + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + handler: function handler(context, args) { + throw new src_ParseError(context.funcName + " valid only within array environment"); + } +}); +;// CONCATENATED MODULE: ./src/environments.js + +var environments = _environments; +/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below + + +;// CONCATENATED MODULE: ./src/functions/environment.js + + + + // Environment delimiters. HTML/MathML rendering is defined in the corresponding +// defineEnvironment definitions. + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new src_ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!src_environments.hasOwnProperty(envName)) { + throw new src_ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = src_environments[envName]; + + var _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env), + _args = _parser$parseArgument.args, + optArgs = _parser$parseArgument.optArgs; + + var context = { + mode: parser.mode, + envName: envName, + parser: parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } // $FlowFixMe, "environment" handler returns an environment ParseNode + + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup: nameGroup + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/mclass.js + + + + + + +var mclass_makeSpan = buildCommon.makeSpan; + +function mclass_htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, true); + return mclass_makeSpan([group.mclass], elements, options); +} + +function mclass_mathmlBuilder(group, options) { + var node; + var inner = buildMathML_buildExpression(group.body, options); + + if (group.mclass === "minner") { + return mathMLTree.newDocumentFragment(inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.substr(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +var binrelClass = function binrelClass(arg) { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass: mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/font.js +// TODO(kevinb): implement \\sl and \\sc + + + + + + +var font_htmlBuilder = function htmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +var font_mathmlBuilder = function mathmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildMathML_buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + allowedInArgument: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = normalizeArgument(args[0]); + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body: body + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body: body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName, + breakOnTokenText = _ref3.breakOnTokenText; + var mode = parser.mode; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body: body + } + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/genfrac.js + + + + + + + + + + + +var adjustStyle = function adjustStyle(size, originalStyle) { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY; + } else if (size === "text" && style.size === src_Style.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = src_Style.TEXT; + } else if (size === "script") { + style = src_Style.SCRIPT; + } else if (size === "scriptscript") { + style = src_Style.SCRIPTSCRIPT; + } + + return style; +}; + +var genfrac_htmlBuilder = function htmlBuilder(group, options) { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildGroup(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildGroup(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === src_Style.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === src_Style.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === src_Style.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(src_Style.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var genfrac_mathmlBuilder = function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", ruleWidth + "em"); + } + + var style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + props: { + numArgs: 2, + allowedInArgument: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: false, + numer: numer, + denom: denom, + hasBarLine: hasBarLine, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size, + barSize: null + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); +defineFunction({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var numer = args[0]; + var denom = args[1]; + return { + type: "genfrac", + mode: parser.mode, + continued: true, + numer: numer, + denom: denom, + hasBarLine: true, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName, + token = _ref3.token; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith: replaceWith, + token: token + }; + } +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + handler: function handler(_ref4, args) { + var parser = _ref4.parser; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = normalizeArgument(args[0]); + var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + var rightNode = normalizeArgument(args[1]); + var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = args[3]; + + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + handler: function handler(_ref5, args) { + var parser = _ref5.parser, + funcName = _ref5.funcName, + token = _ref5.token; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token: token + }; + } +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: function handler(_ref6, args) { + var parser = _ref6.parser, + funcName = _ref6.funcName; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/horizBrace.js + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +var horizBrace_htmlBuilder = function htmlBuilder(grp, options) { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup(grp.sup, options.havingStyle(style.sup()), options) : buildGroup(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var horizBrace_mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + htmlBuilder: horizBrace_htmlBuilder, + mathmlBuilder: horizBrace_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/href.js + + + + + + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href: href, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href: href, + body: ordargument(body) + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/hbox.js + + + + + // \hbox is provided for compatibility with LaTeX \vcenter. +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", buildMathML_buildExpression(group.body, options)); + } +}); +;// CONCATENATED MODULE: ./src/functions/html.js + + + + + + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName, + token = _ref.token; + var value = assertNodeType(args[0], "raw").string; + var body = args[1]; + + if (parser.settings.strict) { + parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + } + + var trustContext; + var attributes = {}; + + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + + case "\\htmlData": + { + var data = value.split(","); + + for (var i = 0; i < data.length; i++) { + var keyVal = data[i].split("="); + + if (keyVal.length !== 2) { + throw new src_ParseError("Error parsing key-value for \\htmlData"); + } + + attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); + } + + trustContext = { + command: "\\htmlData", + attributes: attributes + }; + break; + } + + default: + throw new Error("Unrecognized html command"); + } + + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + + return { + type: "html", + mode: parser.mode, + attributes: attributes, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + var classes = ["enclosing"]; + + if (group.attributes.class) { + classes.push.apply(classes, group.attributes.class.trim().split(/\s+/)); + } + + var span = buildCommon.makeSpan(classes, elements, options); + + for (var attr in group.attributes) { + if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { + span.setAttribute(attr, group.attributes[attr]); + } + } + + return span; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/htmlmathml.js + + + + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.mathml, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/includegraphics.js + + + + + + + +var sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = Number(depth.toFixed(2)); + } + + var width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + var style = { + height: height + depth + "em" + }; + + if (width > 0) { + style.width = width + "em"; + } + + if (depth > 0) { + style.verticalAlign = -depth + "em"; + } + + var node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = depth.toFixed(2); + node.setAttribute("valign", "-" + depth + "em"); + } + + node.setAttribute("height", height + depth + "em"); + + if (group.width.number > 0) { + var width = calculateSize(group.width, options); + node.setAttribute("width", width + "em"); + } + + node.setAttribute("src", group.src); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/kern.js +// Horizontal spacing commands + + + + + // TODO: \hskip and \mskip should support plus and minus in lengths + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } +}); +;// CONCATENATED MODULE: ./src/functions/lap.js +// Horizontal overlap functions + + + + + +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = node.height + node.depth + "em"; + strut.style.verticalAlign = -node.depth + "em"; + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + + node = buildCommon.makeSpan(["thinbox"], [node], options); + return buildCommon.makeSpan(["mord", "vbox"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/math.js + + // Switching from text mode back to math mode + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(_ref, args) { + var funcName = _ref.funcName, + parser = _ref.parser; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body: body + }; + } +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(context, args) { + throw new src_ParseError("Mismatched " + context.funcName); + } +}); +;// CONCATENATED MODULE: ./src/functions/mathchoice.js + + + + + + +var chooseMathStyle = function chooseMathStyle(group, options) { + switch (options.style.size) { + case src_Style.DISPLAY.size: + return group.display; + + case src_Style.TEXT.size: + return group.text; + + case src_Style.SCRIPT.size: + return group.script; + + case src_Style.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + var elements = buildExpression(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js + + + +// For an operator with limits, assemble the base, sup, and sub into a span. +var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) { + base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildGroup(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem: elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildGroup(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = slant + "em"; + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); +}; +;// CONCATENATED MODULE: ./src/functions/op.js +// Limits, symbols + + + + + + + + + + +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var op_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.substr(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildExpression(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +var op_mathmlBuilder = function mathmlBuilder(group, options) { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildMathML_buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22C0": "\\bigwedge", + "\u22C1": "\\bigvee", + "\u22C2": "\\bigcap", + "\u22C3": "\\bigcup", + "\u2A00": "\\bigodot", + "\u2A01": "\\bigoplus", + "\u2A02": "\\bigotimes", + "\u2A04": "\\biguplus", + "\u2A06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"], + props: { + numArgs: 0 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222B": "\\int", + "\u222C": "\\iint", + "\u222D": "\\iiint", + "\u222E": "\\oint", + "\u222F": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + handler: function handler(_ref4) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"], + props: { + numArgs: 0 + }, + handler: function handler(_ref5) { + var parser = _ref5.parser, + funcName = _ref5.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/defineMacro.js + + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} +;// CONCATENATED MODULE: ./src/functions/operatorname.js + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +var operatorname_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(function (child) { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildExpression(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var operatorname_mathmlBuilder = function mathmlBuilder(group, options) { + // The steps taken here are similar to the html version. + var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) {// Do nothing + } else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(function (node) { + return node.toText(); + }).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mrow", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: operatorname_htmlBuilder, + mathmlBuilder: operatorname_mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); +;// CONCATENATED MODULE: ./src/functions/ordgroup.js + + + + +defineFunctionBuilders({ + type: "ordgroup", + htmlBuilder: function htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } +}); +;// CONCATENATED MODULE: ./src/functions/overline.js + + + + + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/phantom.js + + + + + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/raisebox.js + + + + + + + // Box manipulation + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = buildGroup(group.body, options); + var dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/rule.js + + + + + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", width + "em"); + rule.setAttribute("height", height + "em"); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", "+" + shift + "em"); + } else { + wrapper.setAttribute("height", shift + "em"); + wrapper.setAttribute("depth", "+" + -shift + "em"); + } + + wrapper.setAttribute("voffset", shift + "em"); + return wrapper; + } +}); +;// CONCATENATED MODULE: ./src/functions/sizing.js + + + + + +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var sizing_htmlBuilder = function htmlBuilder(group, options) { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body: body + }; + }, + htmlBuilder: sizing_htmlBuilder, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = options.havingSize(group.size); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/smash.js +// smash, with optional [tb], as in AMS + + + + + + +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body: body, + smashHeight: smashHeight, + smashDepth: smashDepth + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildGroup(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/sqrt.js + + + + + + + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body: body, + index: index + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < src_Style.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options), + img = _delimiter$sqrtImage.span, + ruleWidth = _delimiter$sqrtImage.ruleWidth, + advanceWidth = _delimiter$sqrtImage.advanceWidth; + + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT); + var rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = group.body, + index = group.index; + return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]); + } +}); +;// CONCATENATED MODULE: ./src/functions/styling.js + + + + + +var styling_styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style: style, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/supsub.js + + + + + + + + + + + + + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? op_htmlBuilder : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits); + + return _delegate ? operatorname_htmlBuilder : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? horizBrace_htmlBuilder : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + htmlBuilder: function htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var valueBase = group.base, + valueSup = group.sup, + valueSub = group.sub; + var base = buildGroup(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildGroup(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === src_Style.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em"; + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = -base.italic + "em"; + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight: marginRight, + marginLeft: marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft: marginLeft, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight: marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildMathML_buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildMathML_buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildMathML_buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + return new mathMLTree.MathNode(nodeType, children); + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsOp.js + + + + // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js. + +defineFunctionBuilders({ + type: "atom", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsOrd.js + + + + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + var variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +defineFunctionBuilders({ + type: "textord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = makeText(group.text, group.mode, options); + var variant = getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js + + + + // A map of CSS-based spacing functions to their CSS class. + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + htmlBuilder: function htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/tag.js + + + + +var pad = function pad() { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + mathmlBuilder: function mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } +}); +;// CONCATENATED MODULE: ./src/functions/text.js + + + + // Non-mathy text, possibly in a font + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = function optionsWithFont(group, options) { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildExpression(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], inner, newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } +}); +;// CONCATENATED MODULE: ./src/functions/underline.js + + + + + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildGroup(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/vcenter.js + + + + + // \vcenter: Vertically center the argument group on the math axis. + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = buildGroup(group.body, options); + var axisHeight = options.fontMetrics().axisHeight; + var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return buildCommon.makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + return new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)], ["vcenter"]); + } +}); +;// CONCATENATED MODULE: ./src/functions/verb.js + + + + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new src_ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + htmlBuilder: function htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = function makeVerb(group) { + return group.body.replace(/ /g, group.star ? "\u2423" : '\xA0'); +}; +;// CONCATENATED MODULE: ./src/functions.js +/** Include this to ensure that all functions are defined. */ + +var functions = _functions; +/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with +// that object in this file instead of relying on side-effects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./src/SourceLocation.js +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +var SourceLocation = /*#__PURE__*/function () { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + function SourceLocation(lexer, start, end) { + this.lexer = void 0; + this.start = void 0; + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + + + SourceLocation.range = function range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + }; + + return SourceLocation; +}(); + + +;// CONCATENATED MODULE: ./src/Token.js + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +var Token = /*#__PURE__*/function () { + // don't expand the token + // used in \noexpand + function Token(text, // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.noexpand = void 0; + this.treatAsRelax = void 0; + this.text = text; + this.loc = loc; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + var _proto = Token.prototype; + + _proto.range = function range(endToken, // last token of the range, inclusive + text // the text of the newly constructed token + ) { + return new Token(text, SourceLocation.range(this, endToken)); + }; + + return Token; +}(); +;// CONCATENATED MODULE: ./src/Lexer.js +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + + + + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +var combiningDiacriticalMarkString = "[\u0300-\u036F]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +var Lexer = /*#__PURE__*/function () { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + function Lexer(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + + }; + } + + var _proto = Lexer.prototype; + + _proto.setCatcode = function setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + ; + + _proto.lex = function lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + }; + + return Lexer; +}(); + + +;// CONCATENATED MODULE: ./src/Namespace.js +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ + + +var Namespace = /*#__PURE__*/function () { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + function Namespace(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + var _proto = Namespace.prototype; + + _proto.beginGroup = function beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + ; + + _proto.endGroup = function endGroup() { + if (this.undefStack.length === 0) { + throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] === undefined) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + ; + + _proto.has = function has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + ; + + _proto.get = function get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + */ + ; + + _proto.set = function set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + this.current[name] = value; + }; + + return Namespace; +}(); + + +;// CONCATENATED MODULE: ./src/macros.js +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +// Export global macros object from defineMacro + +var macros = _macros; +/* harmony default export */ var src_macros = (macros); + + + + + ////////////////////////////////////////////////////////////////////// +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + var t = context.popToken(); + + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + var t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + + return { + tokens: [t], + numArgs: 0 + }; +}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + context.consumeSpaces(); + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new src_ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new src_ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var newcommand = function newcommand(context, existsOK, nonexistsOK) { + var arg = context.consumeArg().tokens; + + if (arg.length !== 1) { + throw new src_ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArg().tokens; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new src_ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs: numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", function (context) { + return newcommand(context, false, true); +}); +defineMacro("\\renewcommand", function (context) { + return newcommand(context, true, false); +}); +defineMacro("\\providecommand", function (context) { + return newcommand(context, true, true); +}); // terminal (console) tools + +defineMacro("\\message", function (context) { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.log(arg.reverse().map(function (token) { + return token.text; + }).join("")); + return ''; +}); +defineMacro("\\errmessage", function (context) { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.error(arg.reverse().map(function (token) { + return token.text; + }).join("")); + return ''; +}); +defineMacro("\\show", function (context) { + var tok = context.popToken(); + var name = tok.text; // eslint-disable-next-line no-console + + console.log(tok, context.macros.get(name), src_functions[name], src_symbols.math[name], src_symbols.text[name]); + return ''; +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\xB7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 + +defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 + +defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\xA9", "\\copyright"); +defineMacro("\xAE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. + +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22EE", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.substr(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in src_symbols.math) { + if (utils.contains(['bin', 'rel'], src_symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", function (context) { + if (context.macros.get("\\df@tag")) { + throw new src_ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb -- A simulation of bold. +// The version in ambsy.sty works by typesetting three copies of the argument +// with small offsets. We use two copies. We omit the vertical offset because +// of rendering problems that makeVList encounters in Safari. + +defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} + +defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = fontMetricsData["Main-Regular"]["T".charCodeAt(0)][1] - 0.7 * fontMetricsData["Main-Regular"]["A".charCodeAt(0)][1] + "em"; +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// From amsopn.sty + +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}"); +defineMacro("\u27E6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. + +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); ////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx + +defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); +;// CONCATENATED MODULE: ./src/MacroExpander.js +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ + + + + + + + +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "\\relax": true, + // MacroExpander.js + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; + +var MacroExpander = /*#__PURE__*/function () { + function MacroExpander(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(src_macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + var _proto = MacroExpander.prototype; + + _proto.feed = function feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + ; + + _proto.beginGroup = function beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + ; + + _proto.endGroup = function endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + ; + + _proto.future = function future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + ; + + _proto.popToken = function popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + ; + + _proto.pushToken = function pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + ; + + _proto.pushTokens = function pushTokens(tokens) { + var _this$stack; + + (_this$stack = this.stack).push.apply(_this$stack, tokens); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + ; + + _proto.scanArgument = function scanArgument(isOptional) { + var start; + var end; + var tokens; + + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + + if (this.future().text !== "[") { + return null; + } + + start = this.popToken(); // don't include [ in tokens + + var _this$consumeArg = this.consumeArg(["]"]); + + tokens = _this$consumeArg.tokens; + end = _this$consumeArg.end; + } else { + var _this$consumeArg2 = this.consumeArg(); + + tokens = _this$consumeArg2.tokens; + start = _this$consumeArg2.start; + end = _this$consumeArg2.end; + } // indicate the end of an argument + + + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return start.range(end, ""); + } + /** + * Consume all following space tokens, without expansion. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + ; + + _proto.consumeArg = function consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + var tokens = []; + var isDelimited = delims && delims.length > 0; + + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + + var start = this.future(); + var tok; + var depth = 0; + var match = 0; + + do { + tok = this.popToken(); + tokens.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + + if (depth === -1) { + throw new src_ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new src_ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + + + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + + tokens.reverse(); // to fit in with stack order + + return { + tokens: tokens, + start: start, + end: tok + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + ; + + _proto.consumeArgs = function consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new src_ParseError("The length of delimiters doesn't match the number of args!"); + } + + var delims = delimiters[0]; + + for (var i = 0; i < delims.length; i++) { + var tok = this.popToken(); + + if (delims[i] !== tok.text) { + throw new src_ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + + var args = []; + + for (var _i = 0; _i < numArgs; _i++) { + args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order and will be returned as an array, + * also in reverse order. + * + * If not, the next token will be returned without removing it + * from the stack. This case can be detected by a `Token` return value + * instead of an `Array` return value. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty. + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + ; + + _proto.expandOnce = function expandOnce(expandableOnly) { + var topToken = this.popToken(); + var name = topToken.text; + var expansion = !topToken.noexpand ? this._getExpansion(name) : null; + + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new src_ParseError("Undefined control sequence: " + name); + } + + this.pushToken(topToken); + return topToken; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + var tokens = expansion.tokens; + var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new src_ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + var _tokens; + + // replace the placeholder with the indicated argument + (_tokens = tokens).splice.apply(_tokens, [i, 2].concat(args[+tok.text - 1])); + } else { + throw new src_ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + ; + + _proto.expandAfterFuture = function expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + ; + + _proto.expandNextToken = function expandNextToken() { + for (;;) { + var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + // \relax stops the expansion, but shouldn't get returned (a + // null return value couldn't get implemented as a function). + // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + if (expanded.text === "\\relax" || expanded.treatAsRelax) { + this.stack.pop(); + } else { + return this.stack.pop(); // === expanded + } + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacro = function expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + /** + * Fully expand the given token stream and return the resulting list of tokens + */ + ; + + _proto.expandTokens = function expandTokens(tokens) { + var output = []; + var oldStackLength = this.stack.length; + this.pushTokens(tokens); + + while (this.stack.length > oldStackLength) { + var expanded = this.expandOnce(true); // expand only expandable tokens + // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + if (expanded.treatAsRelax) { + // the expansion of \noexpand is the token itself + expanded.noexpand = false; + expanded.treatAsRelax = false; + } + + output.push(this.stack.pop()); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacroAsText = function expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(function (token) { + return token.text; + }).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + ; + + _proto._getExpansion = function _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens: tokens, + numArgs: numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + ; + + _proto.isDefined = function isDefined(name) { + return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + /** + * Determine whether a command is expandable. + */ + ; + + _proto.isExpandable = function isExpandable(name) { + var macro = this.macros.get(name); + return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : src_functions.hasOwnProperty(name) && !src_functions[name].primitive; + }; + + return MacroExpander; +}(); + + +;// CONCATENATED MODULE: ./src/Parser.js +/* eslint no-constant-condition:0 */ + + + + + + + + + + // Pre-evaluate both modules as unicodeSymbols require String.normalize() + +var unicodeAccents = { + "́": { + "text": "\\'", + "math": "\\acute" + }, + "̀": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "̄": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "̌": { + "text": "\\v", + "math": "\\check" + }, + "̂": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "̊": { + "text": "\\r", + "math": "\\mathring" + }, + "̋": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +var unicodeSymbols = { + "á": "á", + "à": "à", + "ä": "ä", + "ǟ": "ǟ", + "ã": "ã", + "ā": "ā", + "ă": "ă", + "ắ": "ắ", + "ằ": "ằ", + "ẵ": "ẵ", + "ǎ": "ǎ", + "â": "â", + "ấ": "ấ", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "ǡ": "ǡ", + "å": "å", + "ǻ": "ǻ", + "ḃ": "ḃ", + "ć": "ć", + "ḉ": "ḉ", + "č": "č", + "ĉ": "ĉ", + "ċ": "ċ", + "ç": "ç", + "ď": "ď", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "é", + "è": "è", + "ë": "ë", + "ẽ": "ẽ", + "ē": "ē", + "ḗ": "ḗ", + "ḕ": "ḕ", + "ĕ": "ĕ", + "ḝ": "ḝ", + "ě": "ě", + "ê": "ê", + "ế": "ế", + "ề": "ề", + "ễ": "ễ", + "ė": "ė", + "ȩ": "ȩ", + "ḟ": "ḟ", + "ǵ": "ǵ", + "ḡ": "ḡ", + "ğ": "ğ", + "ǧ": "ǧ", + "ĝ": "ĝ", + "ġ": "ġ", + "ģ": "ģ", + "ḧ": "ḧ", + "ȟ": "ȟ", + "ĥ": "ĥ", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "í", + "ì": "ì", + "ï": "ï", + "ḯ": "ḯ", + "ĩ": "ĩ", + "ī": "ī", + "ĭ": "ĭ", + "ǐ": "ǐ", + "î": "î", + "ǰ": "ǰ", + "ĵ": "ĵ", + "ḱ": "ḱ", + "ǩ": "ǩ", + "ķ": "ķ", + "ĺ": "ĺ", + "ľ": "ľ", + "ļ": "ļ", + "ḿ": "ḿ", + "ṁ": "ṁ", + "ń": "ń", + "ǹ": "ǹ", + "ñ": "ñ", + "ň": "ň", + "ṅ": "ṅ", + "ņ": "ņ", + "ó": "ó", + "ò": "ò", + "ö": "ö", + "ȫ": "ȫ", + "õ": "õ", + "ṍ": "ṍ", + "ṏ": "ṏ", + "ȭ": "ȭ", + "ō": "ō", + "ṓ": "ṓ", + "ṑ": "ṑ", + "ŏ": "ŏ", + "ǒ": "ǒ", + "ô": "ô", + "ố": "ố", + "ồ": "ồ", + "ỗ": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "ő": "ő", + "ṕ": "ṕ", + "ṗ": "ṗ", + "ŕ": "ŕ", + "ř": "ř", + "ṙ": "ṙ", + "ŗ": "ŗ", + "ś": "ś", + "ṥ": "ṥ", + "š": "š", + "ṧ": "ṧ", + "ŝ": "ŝ", + "ṡ": "ṡ", + "ş": "ş", + "ẗ": "ẗ", + "ť": "ť", + "ṫ": "ṫ", + "ţ": "ţ", + "ú": "ú", + "ù": "ù", + "ü": "ü", + "ǘ": "ǘ", + "ǜ": "ǜ", + "ǖ": "ǖ", + "ǚ": "ǚ", + "ũ": "ũ", + "ṹ": "ṹ", + "ū": "ū", + "ṻ": "ṻ", + "ŭ": "ŭ", + "ǔ": "ǔ", + "û": "û", + "ů": "ů", + "ű": "ű", + "ṽ": "ṽ", + "ẃ": "ẃ", + "ẁ": "ẁ", + "ẅ": "ẅ", + "ŵ": "ŵ", + "ẇ": "ẇ", + "ẘ": "ẘ", + "ẍ": "ẍ", + "ẋ": "ẋ", + "ý": "ý", + "ỳ": "ỳ", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "ȳ", + "ŷ": "ŷ", + "ẏ": "ẏ", + "ẙ": "ẙ", + "ź": "ź", + "ž": "ž", + "ẑ": "ẑ", + "ż": "ż", + "Á": "Á", + "À": "À", + "Ä": "Ä", + "Ǟ": "Ǟ", + "Ã": "Ã", + "Ā": "Ā", + "Ă": "Ă", + "Ắ": "Ắ", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ǎ": "Ǎ", + "Â": "Â", + "Ấ": "Ấ", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ǡ": "Ǡ", + "Å": "Å", + "Ǻ": "Ǻ", + "Ḃ": "Ḃ", + "Ć": "Ć", + "Ḉ": "Ḉ", + "Č": "Č", + "Ĉ": "Ĉ", + "Ċ": "Ċ", + "Ç": "Ç", + "Ď": "Ď", + "Ḋ": "Ḋ", + "Ḑ": "Ḑ", + "É": "É", + "È": "È", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ē": "Ē", + "Ḗ": "Ḗ", + "Ḕ": "Ḕ", + "Ĕ": "Ĕ", + "Ḝ": "Ḝ", + "Ě": "Ě", + "Ê": "Ê", + "Ế": "Ế", + "Ề": "Ề", + "Ễ": "Ễ", + "Ė": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ǵ": "Ǵ", + "Ḡ": "Ḡ", + "Ğ": "Ğ", + "Ǧ": "Ǧ", + "Ĝ": "Ĝ", + "Ġ": "Ġ", + "Ģ": "Ģ", + "Ḧ": "Ḧ", + "Ȟ": "Ȟ", + "Ĥ": "Ĥ", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Í": "Í", + "Ì": "Ì", + "Ï": "Ï", + "Ḯ": "Ḯ", + "Ĩ": "Ĩ", + "Ī": "Ī", + "Ĭ": "Ĭ", + "Ǐ": "Ǐ", + "Î": "Î", + "İ": "İ", + "Ĵ": "Ĵ", + "Ḱ": "Ḱ", + "Ǩ": "Ǩ", + "Ķ": "Ķ", + "Ĺ": "Ĺ", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Ḿ": "Ḿ", + "Ṁ": "Ṁ", + "Ń": "Ń", + "Ǹ": "Ǹ", + "Ñ": "Ñ", + "Ň": "Ň", + "Ṅ": "Ṅ", + "Ņ": "Ņ", + "Ó": "Ó", + "Ò": "Ò", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "Ṍ", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "Ō": "Ō", + "Ṓ": "Ṓ", + "Ṑ": "Ṑ", + "Ŏ": "Ŏ", + "Ǒ": "Ǒ", + "Ô": "Ô", + "Ố": "Ố", + "Ồ": "Ồ", + "Ỗ": "Ỗ", + "Ȯ": "Ȯ", + "Ȱ": "Ȱ", + "Ő": "Ő", + "Ṕ": "Ṕ", + "Ṗ": "Ṗ", + "Ŕ": "Ŕ", + "Ř": "Ř", + "Ṙ": "Ṙ", + "Ŗ": "Ŗ", + "Ś": "Ś", + "Ṥ": "Ṥ", + "Š": "Š", + "Ṧ": "Ṧ", + "Ŝ": "Ŝ", + "Ṡ": "Ṡ", + "Ş": "Ş", + "Ť": "Ť", + "Ṫ": "Ṫ", + "Ţ": "Ţ", + "Ú": "Ú", + "Ù": "Ù", + "Ü": "Ü", + "Ǘ": "Ǘ", + "Ǜ": "Ǜ", + "Ǖ": "Ǖ", + "Ǚ": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "Ṹ", + "Ū": "Ū", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ǔ": "Ǔ", + "Û": "Û", + "Ů": "Ů", + "Ű": "Ű", + "Ṽ": "Ṽ", + "Ẃ": "Ẃ", + "Ẁ": "Ẁ", + "Ẅ": "Ẅ", + "Ŵ": "Ŵ", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ý": "Ý", + "Ỳ": "Ỳ", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "Ȳ", + "Ŷ": "Ŷ", + "Ẏ": "Ẏ", + "Ź": "Ź", + "Ž": "Ž", + "Ẑ": "Ẑ", + "Ż": "Ż", + "ά": "ά", + "ὰ": "ὰ", + "ᾱ": "ᾱ", + "ᾰ": "ᾰ", + "έ": "έ", + "ὲ": "ὲ", + "ή": "ή", + "ὴ": "ὴ", + "ί": "ί", + "ὶ": "ὶ", + "ϊ": "ϊ", + "ΐ": "ΐ", + "ῒ": "ῒ", + "ῑ": "ῑ", + "ῐ": "ῐ", + "ό": "ό", + "ὸ": "ὸ", + "ύ": "ύ", + "ὺ": "ὺ", + "ϋ": "ϋ", + "ΰ": "ΰ", + "ῢ": "ῢ", + "ῡ": "ῡ", + "ῠ": "ῠ", + "ώ": "ώ", + "ὼ": "ὼ", + "Ύ": "Ύ", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "Ῡ": "Ῡ", + "Ῠ": "Ῠ", + "Ώ": "Ώ", + "Ὼ": "Ὼ" +}; + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +var Parser = /*#__PURE__*/function () { + function Parser(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + var _proto = Parser.prototype; + + _proto.expect = function expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + ; + + _proto.consume = function consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + ; + + _proto.fetch = function fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + ; + + _proto.parse = function parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + }; + + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precendence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + _proto.parseExpression = function parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } else if (atom.type === "internal") { + continue; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + ; + + _proto.handleInfixNodes = function handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + if (body[i].type === "infix") { + if (overIndex !== -1) { + throw new src_ParseError("only one infix operator per group", body[i].token); + } + + overIndex = i; + funcName = body[i].replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } + /** + * Handle a subscript or superscript with nice errors. + */ + ; + + _proto.handleSupSubscript = function handleSupSubscript(name // For error reporting. + ) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + var group = this.parseGroup(name); + + if (!group) { + throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + ; + + _proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + ; + + _proto.parseAtom = function parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + var limits = lex.text === "\\limits"; + base.limits = limits; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new src_ParseError("Limit controls must follow a math operator", lex); + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new src_ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + ; + + _proto.parseFunction = function parseFunction(breakOnTokenText, name // For determining its context + ) { + var token = this.fetch(); + var func = token.text; + var funcData = src_functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new src_ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new src_ParseError("Can't use function '" + func + "' in math mode", token); + } + + var _this$parseArguments = this.parseArguments(func, funcData), + args = _this$parseArguments.args, + optArgs = _this$parseArguments.optArgs; + + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + ; + + _proto.callFunction = function callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token: token, + breakOnTokenText: breakOnTokenText + }; + var func = src_functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new src_ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + ; + + _proto.parseArguments = function parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + + if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new src_ParseError("Null argument, please report this as a bug"); + } + } + + return { + args: args, + optArgs: optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + ; + + _proto.parseGroupOfType = function parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + + case "size": + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional); + + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + } : null; + } + + case "raw": + { + var token = this.parseStringGroup("raw", optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + + case "primitive": + { + if (optional) { + throw new src_ParseError("A primitive argument cannot be optional"); + } + + var _group = this.parseGroup(name); + + if (_group == null) { + throw new src_ParseError("Expected group as " + name, this.fetch()); + } + + return _group; + } + + case "original": + case null: + case undefined: + return this.parseArgumentGroup(optional); + + default: + throw new src_ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + ; + + _proto.parseStringGroup = function parseStringGroup(modeName, // Used to describe the mode in error messages. + optional) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + + this.consume(); // consume the end of the argument + + argToken.text = str; + return argToken; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + ; + + _proto.parseRegexGroup = function parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + ; + + _proto.parseColorGroup = function parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (res == null) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color: color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + ; + + _proto.parseSizeGroup = function parseSizeGroup(optional) { + var res; + var isBlank = false; // don't expand before parseStringGroup + + this.gullet.consumeSpaces(); + + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank: isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + ; + + _proto.parseUrlGroup = function parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + + this.gullet.lexer.setCatcode("~", 12); // other character + + var res = this.parseStringGroup("url", optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + + this.gullet.lexer.setCatcode("~", 13); // active character + + if (res == null) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url: url + }; + } + /** + * Parses an argument with the mode specified. + */ + ; + + _proto.parseArgumentGroup = function parseArgumentGroup(optional, mode) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var outerMode = this.mode; + + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + + this.gullet.beginGroup(); + var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end + + this.expect("EOF"); // expect the end of the argument + + this.gullet.endGroup(); + var result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + + return result; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + ; + + _proto.parseGroup = function parseGroup(name, // For error reporting. + breakOnTokenText) { + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new src_ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + ; + + _proto.formLigatures = function formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + ; + + _proto.parseSymbol = function parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new src_ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star: star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.substr(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = "\u0131"; // dotless i, in math and text mode + } else if (text === 'j') { + text = "\u0237"; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (src_symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = src_symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family: family, + loc: loc, + text: text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc: loc, + text: text + }; + } // $FlowFixMe + + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text: text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + + if (!command) { + throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + // $FlowFixMe + base: symbol + }; + } + } // $FlowFixMe + + + return symbol; + }; + + return Parser; +}(); + +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + +;// CONCATENATED MODULE: ./src/parseTree.js +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + + + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). + + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new src_ParseError("\\tag works only in display equations"); + } + + parser.gullet.feed("\\df@tag"); + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.parse() + }]; + } + + return tree; +}; + +/* harmony default export */ var src_parseTree = (parseTree); +;// CONCATENATED MODULE: ./katex.js +/* eslint no-console:0 */ + +/** + * This is the main entry point for KaTeX. Here, we expose functions for + * rendering expressions either to DOM nodes or to markup strings. + * + * We also expose the ParseError class to check if errors thrown from KaTeX are + * errors in the expression, or errors in javascript handling. + */ + + + + + + + + + + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new src_ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings(options); + return src_parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof src_ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +/* harmony default export */ var katex = ({ + /** + * Current KaTeX version + */ + version: "0.13.19", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render: render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString: renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError: src_ParseError, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span: Span, + Anchor: Anchor, + SymbolNode: SymbolNode, + SvgNode: SvgNode, + PathNode: PathNode, + LineNode: LineNode + } +}); +;// CONCATENATED MODULE: ./katex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2] + * doesn't support CSS modules natively, a separate entry point is used and + * it is not flowtyped. + * + * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef + * [2] https://facebook.github.io/jest/docs/en/webpack.html + */ + + +/* harmony default export */ var katex_webpack = (katex); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/core/bikeshed/katex/dist/katex.min.css b/core/bikeshed/katex/dist/katex.min.css new file mode 100644 index 00000000..e0c115d5 --- /dev/null +++ b/core/bikeshed/katex/dist/katex.min.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.13.19"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/core/bikeshed/katex/dist/katex.min.js b/core/bikeshed/katex/dist/katex.min.js new file mode 100644 index 00000000..8e56e019 --- /dev/null +++ b/core/bikeshed/katex/dist/katex.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Zn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h=function(){function e(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},this.displayMode=l.deflt(e.displayMode,!1),this.output=l.deflt(e.output,"htmlAndMathml"),this.leqno=l.deflt(e.leqno,!1),this.fleqn=l.deflt(e.fleqn,!1),this.throwOnError=l.deflt(e.throwOnError,!0),this.errorColor=l.deflt(e.errorColor,"#cc0000"),this.macros=e.macros||{},this.minRuleThickness=Math.max(0,l.deflt(e.minRuleThickness,0)),this.colorIsTextColor=l.deflt(e.colorIsTextColor,!1),this.strict=l.deflt(e.strict,"warn"),this.trust=l.deflt(e.trust,!1),this.maxSize=Math.max(0,l.deflt(e.maxSize,1/0)),this.maxExpand=Math.max(0,l.deflt(e.maxExpand,1e3)),this.globalGroup=l.deflt(e.globalGroup,!1)}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),m=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return c[u[this.id]]},t.sub=function(){return c[p[this.id]]},t.fracNum=function(){return c[d[this.id]]},t.fracDen=function(){return c[f[this.id]]},t.cramp=function(){return c[g[this.id]]},t.text=function(){return c[v[this.id]]},t.isTight=function(){return this.size>=2},e}(),c=[new m(0,0,!1),new m(1,0,!0),new m(2,1,!1),new m(3,1,!0),new m(4,2,!1),new m(5,2,!0),new m(6,3,!1),new m(7,3,!0)],u=[4,5,4,5,6,7,6,7],p=[5,5,5,5,7,7,7,7],d=[2,3,4,5,6,7,6,7],f=[3,3,5,5,7,7,7,7],g=[1,1,3,3,5,5,7,7],v=[0,1,2,3,2,3,2,3],b={DISPLAY:c[0],TEXT:c[2],SCRIPT:c[4],SCRIPTSCRIPT:c[6]},y=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var x=[];function w(e){for(var t=0;t=x[t]&&e<=x[t+1])return!0;return!1}y.forEach((function(e){return e.blocks.forEach((function(e){return x.push.apply(x,e)}))}));var k=80,S={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},M=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t"},N=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,A.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return T.call(this,"span")},t.toMarkup=function(){return B.call(this,"span")},e}(),q=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,A.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return T.call(this,"a")},t.toMarkup=function(){return B.call(this,"a")},e}(),C=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=I[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((t=t||document.createElement("span")).className=z(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),O=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),H=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),_(j,Z,oe,"\u2208","\\in",!0),_(j,Z,oe,"\ue020","\\@not"),_(j,Z,oe,"\u2282","\\subset",!0),_(j,Z,oe,"\u2283","\\supset",!0),_(j,Z,oe,"\u2286","\\subseteq",!0),_(j,Z,oe,"\u2287","\\supseteq",!0),_(j,K,oe,"\u2288","\\nsubseteq",!0),_(j,K,oe,"\u2289","\\nsupseteq",!0),_(j,Z,oe,"\u22a8","\\models"),_(j,Z,oe,"\u2190","\\leftarrow",!0),_(j,Z,oe,"\u2264","\\le"),_(j,Z,oe,"\u2264","\\leq",!0),_(j,Z,oe,"<","\\lt",!0),_(j,Z,oe,"\u2192","\\rightarrow",!0),_(j,Z,oe,"\u2192","\\to"),_(j,K,oe,"\u2271","\\ngeq",!0),_(j,K,oe,"\u2270","\\nleq",!0),_(j,Z,se,"\xa0","\\ "),_(j,Z,se,"\xa0","\\space"),_(j,Z,se,"\xa0","\\nobreakspace"),_($,Z,se,"\xa0","\\ "),_($,Z,se,"\xa0"," "),_($,Z,se,"\xa0","\\space"),_($,Z,se,"\xa0","\\nobreakspace"),_(j,Z,se,null,"\\nobreak"),_(j,Z,se,null,"\\allowbreak"),_(j,Z,ie,",",","),_(j,Z,ie,";",";"),_(j,K,Q,"\u22bc","\\barwedge",!0),_(j,K,Q,"\u22bb","\\veebar",!0),_(j,Z,Q,"\u2299","\\odot",!0),_(j,Z,Q,"\u2295","\\oplus",!0),_(j,Z,Q,"\u2297","\\otimes",!0),_(j,Z,le,"\u2202","\\partial",!0),_(j,Z,Q,"\u2298","\\oslash",!0),_(j,K,Q,"\u229a","\\circledcirc",!0),_(j,K,Q,"\u22a1","\\boxdot",!0),_(j,Z,Q,"\u25b3","\\bigtriangleup"),_(j,Z,Q,"\u25bd","\\bigtriangledown"),_(j,Z,Q,"\u2020","\\dagger"),_(j,Z,Q,"\u22c4","\\diamond"),_(j,Z,Q,"\u22c6","\\star"),_(j,Z,Q,"\u25c3","\\triangleleft"),_(j,Z,Q,"\u25b9","\\triangleright"),_(j,Z,ae,"{","\\{"),_($,Z,le,"{","\\{"),_($,Z,le,"{","\\textbraceleft"),_(j,Z,ee,"}","\\}"),_($,Z,le,"}","\\}"),_($,Z,le,"}","\\textbraceright"),_(j,Z,ae,"{","\\lbrace"),_(j,Z,ee,"}","\\rbrace"),_(j,Z,ae,"[","\\lbrack",!0),_($,Z,le,"[","\\lbrack",!0),_(j,Z,ee,"]","\\rbrack",!0),_($,Z,le,"]","\\rbrack",!0),_(j,Z,ae,"(","\\lparen",!0),_(j,Z,ee,")","\\rparen",!0),_($,Z,le,"<","\\textless",!0),_($,Z,le,">","\\textgreater",!0),_(j,Z,ae,"\u230a","\\lfloor",!0),_(j,Z,ee,"\u230b","\\rfloor",!0),_(j,Z,ae,"\u2308","\\lceil",!0),_(j,Z,ee,"\u2309","\\rceil",!0),_(j,Z,le,"\\","\\backslash"),_(j,Z,le,"\u2223","|"),_(j,Z,le,"\u2223","\\vert"),_($,Z,le,"|","\\textbar",!0),_(j,Z,le,"\u2225","\\|"),_(j,Z,le,"\u2225","\\Vert"),_($,Z,le,"\u2225","\\textbardbl"),_($,Z,le,"~","\\textasciitilde"),_($,Z,le,"\\","\\textbackslash"),_($,Z,le,"^","\\textasciicircum"),_(j,Z,oe,"\u2191","\\uparrow",!0),_(j,Z,oe,"\u21d1","\\Uparrow",!0),_(j,Z,oe,"\u2193","\\downarrow",!0),_(j,Z,oe,"\u21d3","\\Downarrow",!0),_(j,Z,oe,"\u2195","\\updownarrow",!0),_(j,Z,oe,"\u21d5","\\Updownarrow",!0),_(j,Z,ne,"\u2210","\\coprod"),_(j,Z,ne,"\u22c1","\\bigvee"),_(j,Z,ne,"\u22c0","\\bigwedge"),_(j,Z,ne,"\u2a04","\\biguplus"),_(j,Z,ne,"\u22c2","\\bigcap"),_(j,Z,ne,"\u22c3","\\bigcup"),_(j,Z,ne,"\u222b","\\int"),_(j,Z,ne,"\u222b","\\intop"),_(j,Z,ne,"\u222c","\\iint"),_(j,Z,ne,"\u222d","\\iiint"),_(j,Z,ne,"\u220f","\\prod"),_(j,Z,ne,"\u2211","\\sum"),_(j,Z,ne,"\u2a02","\\bigotimes"),_(j,Z,ne,"\u2a01","\\bigoplus"),_(j,Z,ne,"\u2a00","\\bigodot"),_(j,Z,ne,"\u222e","\\oint"),_(j,Z,ne,"\u222f","\\oiint"),_(j,Z,ne,"\u2230","\\oiiint"),_(j,Z,ne,"\u2a06","\\bigsqcup"),_(j,Z,ne,"\u222b","\\smallint"),_($,Z,te,"\u2026","\\textellipsis"),_(j,Z,te,"\u2026","\\mathellipsis"),_($,Z,te,"\u2026","\\ldots",!0),_(j,Z,te,"\u2026","\\ldots",!0),_(j,Z,te,"\u22ef","\\@cdots",!0),_(j,Z,te,"\u22f1","\\ddots",!0),_(j,Z,le,"\u22ee","\\varvdots"),_(j,Z,J,"\u02ca","\\acute"),_(j,Z,J,"\u02cb","\\grave"),_(j,Z,J,"\xa8","\\ddot"),_(j,Z,J,"~","\\tilde"),_(j,Z,J,"\u02c9","\\bar"),_(j,Z,J,"\u02d8","\\breve"),_(j,Z,J,"\u02c7","\\check"),_(j,Z,J,"^","\\hat"),_(j,Z,J,"\u20d7","\\vec"),_(j,Z,J,"\u02d9","\\dot"),_(j,Z,J,"\u02da","\\mathring"),_(j,Z,re,"\ue131","\\@imath"),_(j,Z,re,"\ue237","\\@jmath"),_(j,Z,le,"\u0131","\u0131"),_(j,Z,le,"\u0237","\u0237"),_($,Z,le,"\u0131","\\i",!0),_($,Z,le,"\u0237","\\j",!0),_($,Z,le,"\xdf","\\ss",!0),_($,Z,le,"\xe6","\\ae",!0),_($,Z,le,"\u0153","\\oe",!0),_($,Z,le,"\xf8","\\o",!0),_($,Z,le,"\xc6","\\AE",!0),_($,Z,le,"\u0152","\\OE",!0),_($,Z,le,"\xd8","\\O",!0),_($,Z,J,"\u02ca","\\'"),_($,Z,J,"\u02cb","\\`"),_($,Z,J,"\u02c6","\\^"),_($,Z,J,"\u02dc","\\~"),_($,Z,J,"\u02c9","\\="),_($,Z,J,"\u02d8","\\u"),_($,Z,J,"\u02d9","\\."),_($,Z,J,"\xb8","\\c"),_($,Z,J,"\u02da","\\r"),_($,Z,J,"\u02c7","\\v"),_($,Z,J,"\xa8",'\\"'),_($,Z,J,"\u02dd","\\H"),_($,Z,J,"\u25ef","\\textcircled");var he={"--":!0,"---":!0,"``":!0,"''":!0};_($,Z,le,"\u2013","--",!0),_($,Z,le,"\u2013","\\textendash"),_($,Z,le,"\u2014","---",!0),_($,Z,le,"\u2014","\\textemdash"),_($,Z,le,"\u2018","`",!0),_($,Z,le,"\u2018","\\textquoteleft"),_($,Z,le,"\u2019","'",!0),_($,Z,le,"\u2019","\\textquoteright"),_($,Z,le,"\u201c","``",!0),_($,Z,le,"\u201c","\\textquotedblleft"),_($,Z,le,"\u201d","''",!0),_($,Z,le,"\u201d","\\textquotedblright"),_(j,Z,le,"\xb0","\\degree",!0),_($,Z,le,"\xb0","\\degree"),_($,Z,le,"\xb0","\\textdegree",!0),_(j,Z,le,"\xa3","\\pounds"),_(j,Z,le,"\xa3","\\mathsterling",!0),_($,Z,le,"\xa3","\\pounds"),_($,Z,le,"\xa3","\\textsterling",!0),_(j,K,le,"\u2720","\\maltese"),_($,K,le,"\u2720","\\maltese");for(var me='0123456789/@."',ce=0;ce=5?0:e>=3?1:2]){var r=G[t]={cssEmPerMu:P.quad[t]/18};for(var n in P)P.hasOwnProperty(n)&&(r[n]=P[n][t])}return G[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();Ie.BASESIZE=6;var Re=Ie,Oe={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},Ee={ex:!0,em:!0,mu:!0},He=function(e){return"string"!=typeof e&&(e=e.unit),e in Oe||e in Ee||"ex"===e},Le=function(e,t){var r;if(e.unit in Oe)r=Oe[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},De=function(e,t,r){return X[r][e]&&X[r][e].replace&&(e=X[r][e].replace),{value:e,metrics:V(e,t,r)}},Pe=function(e,t,r,n,a){var i,o=De(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||n&&"mathit"===n.font)&&(l=0),i=new R(e,s.height,s.depth,l,s.skew,s.width,a)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new R(e,0,0,0,0,0,a);if(n){i.maxFontSize=n.sizeMultiplier,n.style.isTight()&&i.classes.push("mtight");var h=n.getColor();h&&(i.style.color=h)}return i},Fe=function(e,t){if(z(e.classes)!==z(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var n in e.style)if(e.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;for(var a in t.style)if(t.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;return!0},Ve=function(e){for(var t=0,r=0,n=0,a=0;at&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Ge=function(e,t,r,n){var a=new N(e,t,r,n);return Ve(a),a},Ue=function(e,t,r,n){return new N(e,t,r,n)},Ye=function(e){var t=new M(e);return Ve(t),t},We=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},Xe={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},_e={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},je={fontMap:Xe,makeSymbol:Pe,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&De(e,"Main-Bold",t).metrics?Pe(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===X[t][e].font?Pe(e,"Main-Regular",t,r,n):Pe(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Ge,makeSvgSpan:Ue,makeLineSpan:function(e,t,r){var n=Ge([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=n.height+"em",n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new q(e,t,r,n);return Ve(a),a},makeFragment:Ye,wrapFragment:function(e,t){return e instanceof M?Ge([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(yt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(yt(s,t)),r?((i=yt(ut(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=st(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=m.height+m.depth+"em",c.style.verticalAlign=-m.depth+"em"}return m}function wt(e){return new M(e)}var kt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=z(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(z(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),St=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Mt={MathNode:kt,TextNode:St,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",this.width+"em"),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:wt},zt=function(e,t,r){return!X[t][e]||!X[t][e].replace||55349===e.charCodeAt(0)||he.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=X[t][e].replace),new Mt.TextNode(e)},At=function(e){return 1===e.length?e[0]:new Mt.MathNode("mrow",e)},Tt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(X[n][a]&&X[n][a].replace&&(a=X[n][a].replace),V(a,je.fontMap[r].fontName,n)?je.fontMap[r].variant:null)},Bt=function(e,t,r){if(1===e.length){var n=qt(e[0],t);return r&&n instanceof kt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},Nt=function(e,t,r){return At(Bt(e,t,r))},qt=function(e,t){if(!e)return new Mt.MathNode("mrow");if(rt[e.type])return rt[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ct(e,t,r,n,a){var i,o=Bt(e,r);i=1===o.length&&o[0]instanceof kt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Mt.MathNode("mrow",o);var s=new Mt.MathNode("annotation",[new Mt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Mt.MathNode("semantics",[i,s]),m=new Mt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return je.makeSpan([c],[m])}var It=function(e){return new Re({style:e.displayMode?b.DISPLAY:b.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Rt=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=je.makeSpan(r,[e])}return e},Ot=function(e,t,r){var n,a=It(r);if("mathml"===r.output)return Ct(e,t,a,r.displayMode,!0);if("html"===r.output){var i=xt(e,a);n=je.makeSpan(["katex"],[i])}else{var o=Ct(e,t,a,r.displayMode,!1),s=xt(e,a);n=je.makeSpan(["katex"],[o,s])}return Rt(n,r)},Et={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Ht={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Lt=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=je.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new H({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new H({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new O(l,{width:"100%",height:o+"em"});i=je.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=o+"em",i},Dt=function(e){var t=new Mt.MathNode("mo",[new Mt.TextNode(Et[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Pt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new E(i),c=new O([m],{width:"100%",height:o+"em",viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:je.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Ht[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=a+"em"),n};function Ft(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Vt(e){var t=Gt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Gt(e){return e&&("atom"===e.type||Y.hasOwnProperty(e.type))?e:null}var Ut=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ft(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof N)return e;throw new Error("Expected span but got "+String(e)+".")}(bt(e,t)),e.base=n):r=(n=Ft(e,"accent")).base;var i=bt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=L(bt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Pt(n,t),h=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+2*o+"em)",marginLeft:2*o+"em"}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=je.staticSvg("vec",t),p=je.svgData.vec[1]):((u=L(u=je.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=je.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=f+"em","\\textcircled"===n.label&&(h.style.top=".2em"),h=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=je.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},Yt=function(e,t){var r=e.isStretchy?Dt(e.label):new Mt.MathNode("mo",[zt(e.label,e.mode)]),n=new Mt.MathNode("mover",[qt(e.base,t),r]);return n.setAttribute("accent","true"),n},Wt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=it(t[0]),n=!Wt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ut,mathmlBuilder:Yt}),nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ut,mathmlBuilder:Yt}),nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=bt(e.base,t),n=Pt(e,t),a="\\utilde"===e.label?.12:0,i=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return je.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Dt(e.label),n=new Mt.MathNode("munder",[qt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Xt=function(e){var t=new Mt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=je.wrapFragment(bt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=je.wrapFragment(bt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Pt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),je.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Dt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=Xt(qt(e.body,t));if(e.below){var i=Xt(qt(e.below,t));r=new Mt.MathNode("munderover",[n,i,a])}else r=new Mt.MathNode("mover",[n,a])}else if(e.below){var o=Xt(qt(e.below,t));r=new Mt.MathNode("munder",[n,o])}else r=Xt(),r=new Mt.MathNode("mover",[n,r]);return r}});var _t={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},jt=function(e){return"textord"===e.type&&"@"===e.text};function $t(e,t,r){var n=_t[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=je.wrapFragment(bt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=.8-n.depth+"em",n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mrow",[qt(e.label,t)]);return(r=new Mt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Mt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=je.wrapFragment(bt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Mt.MathNode("mrow",[qt(e.fragment,t)])}}),nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ft(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Zt=function(e,t){var r=ut(e.body,t.withColor(e.color),!1);return je.makeFragment(r)},Kt=function(e,t){var r=Bt(e.body,t.withColor(e.color)),n=new Mt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ft(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ot(a)}},htmlBuilder:Zt,mathmlBuilder:Kt}),nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ft(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Zt,mathmlBuilder:Kt}),nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ft(a,"size").value}},htmlBuilder:function(e,t){var r=je.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=Le(e.size,t)+"em")),r},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",Le(e.size,t)+"em")),r}});var Jt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Qt=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},er=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(Jt[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=Jt[a.text]),Ft(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===Jt[r]),{type:"internal",mode:t.mode}}}),nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=Qt(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return er(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=Qt(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return er(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tr=function(e,t,r){var n=V(X.math[e]&&X.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},rr=function(e,t,r,n){var a=r.havingBaseStyle(t),i=je.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},nr=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=a+"em",e.height-=a,e.depth+=a},ar=function(e,t,r,n,a,i){var o=function(e,t,r,n){return je.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=rr(je.makeSpan(["delimsizing","size"+t],[o],n),b.TEXT,n,i);return r&&nr(s,n,b.TEXT),s},ir=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:je.makeSpan(["delimsizinginner",n],[je.makeSpan([],[je.makeSymbol(e,t,r)])])}},or=function(e,t,r){var n=D["Size4-Regular"][e.charCodeAt(0)]?D["Size4-Regular"][e.charCodeAt(0)][4].toFixed(3):D["Size1-Regular"][e.charCodeAt(0)][4].toFixed(3),a=new E("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new O([a],{width:n+"em",height:t+"em",style:"width:"+n+"em",viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=je.makeSvgSpan([],[i],r);return o.height=t,o.style.height=t+"em",o.style.width=n+"em",{type:"elem",elem:o}},sr={type:"kern",size:-.008},lr=["|","\\lvert","\\rvert","\\vert"],hr=["\\|","\\lVert","\\rVert","\\Vert"],mr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(lr,e)?h="\u2223":l.contains(hr,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=tr(o,c,a),p=u.height+u.depth,d=tr(h,c,a),f=d.height+d.depth,g=tr(m,c,a),v=g.height+g.depth,y=0,x=1;if(null!==s){var w=tr(s,c,a);y=w.height+w.depth,x=2}var k=p+v+y,S=k+Math.max(0,Math.ceil((t-k)/(x*f)))*x*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(ir(m,c,a)),A.push(sr),null===s){var T=S-p-v+.016;A.push(or(h,T,n))}else{var B=(S-p-v-y)/2+.016;A.push(or(h,B,n)),A.push(sr),A.push(ir(s,c,a)),A.push(sr),A.push(or(h,B,n))}A.push(sr),A.push(ir(o,c,a));var N=n.havingBaseStyle(b.TEXT),q=je.makeVList({positionType:"bottom",positionData:z,children:A},N);return rr(je.makeSpan(["delimsizing","mult"],[q],N),b.TEXT,n,i)},cr=.08,ur=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,k);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,k,r)}return n}(e,n,r),o=new E(e,i),s=new O([o],{width:"400em",height:t+"em",viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return je.makeSvgSpan(["hide-tail"],[s],a)},pr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],dr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],fr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],gr=[0,1.2,1.8,2.4,3],vr=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],br=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"stack"}],yr=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],xr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},wr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},kr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(fr,e)?vr:l.contains(pr,e)?yr:br;var s=wr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=je.makeSymbol(e,"Main-Regular",a,n),s=rr(o,t,n,i);return r&&nr(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?ar(e,s.size,r,n,a,i):mr(e,t,r,n,a,i)},Sr=function(e,t){var r,n,a=t.havingBaseSizing(),i=wr("\\surd",e*a.sizeMultiplier,yr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=ur("sqrtMain",l=(1+s+cr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*gr[i.size],h=(gr[i.size]+s)/o,l=(gr[i.size]+s+cr)/o,(r=ur("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+cr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=ur("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=l+"em",{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},Mr=function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(pr,e)||l.contains(fr,e))return ar(e,t,!1,r,a,i);if(l.contains(dr,e))return mr(e,gr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},zr=gr,Ar=kr,Tr=function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return kr(e,h,!0,n,a,i)},Br={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Nr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function qr(e,t){var r=Gt(e);if(r&&l.contains(Nr,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Cr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=qr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Br[e.funcName].size,mclass:Br[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?je.makeSpan([e.mclass]):Mr(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(zt(e.delim,e.mode));var r=new Mt.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true"),r.setAttribute("minsize",zr[e.size]+"em"),r.setAttribute("maxsize",zr[e.size]+"em"),r}}),nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:qr(t[0],e).text,color:r}}}),nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=qr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ft(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){Cr(e);for(var r,n,a=ut(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[qt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ft(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ft(t[0],"color-token").color,o=Ft(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Or={};function Er(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(x+=.25),m.push({pos:x,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=y)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,x+=S,z.pos=x,x+=M+B,h[r]=z,w(o[r+1])}var N,q,C=x/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.addEqnNum)for(r=0;r=s)){var G=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(G=l.deflt(D.pregap,p))&&((N=je.makeSpan(["arraycolsep"],[])).style.width=G+"em",R.push(N));var U=[];for(r=0;r0){for(var _=je.makeLineSpan("hline",t,c),j=je.makeLineSpan("hdashline",t,c),$=[{type:"elem",elem:h,shift:0}];m.length>0;){var Z=m.pop(),K=Z.pos-C;Z.isDashed?$.push({type:"elem",elem:j,shift:K}):$.push({type:"elem",elem:_,shift:K})}h=je.makeVList({positionType:"individualShift",children:$},t)}if(e.addEqnNum){var J=je.makeVList({positionType:"individualShift",children:O},t);return J=je.makeSpan(["tag"],[J],t),je.makeFragment([h,J])}return je.makeSpan(["mord"],[h],t)},Vr={c:"center ",l:"left ",r:"right "},Gr=function(e,t){for(var r=[],n=new Mt.MathNode("mtd",[],["mtr-glue"]),a=new Mt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o=Dr(e.parser,{cols:a,addJot:!0,addEqnNum:"align"===e.envName||"alignat"===e.envName,emptySingleRow:!0,colSeparationType:i,maxNumCols:"split"===e.envName?2:void 0,leqno:e.parser.settings.leqno},"display"),s=0,l={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var h="",m=0;m0&&c&&(d=1),a[u]={type:"align",align:p,pregap:d,postgap:0}}return o.colSeparationType=c?"align":"alignat",o};Er({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Gt(t[0])?[t[0]]:Ft(t[0],"ordgroup").body).map((function(e){var t=Vt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Dr(e.parser,a,Pr(e.envName))},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Dr(e.parser,a,Pr(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Dr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Gt(t[0])?[t[0]]:Ft(t[0],"ordgroup").body).map((function(e){var t=Vt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Dr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Dr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Pr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Ur,htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Lr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",addEqnNum:"gather"===e.envName,emptySingleRow:!0,leqno:e.parser.settings.leqno};return Dr(e.parser,t,"display")},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Ur,htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Lr(e);var t={addEqnNum:"equation"===e.envName,emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Dr(e.parser,t,"display")},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Lr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=b.SCRIPT.id?r.text():b.DISPLAY:"text"===e&&r.size===b.DISPLAY.size?r=b.TEXT:"script"===e?r=b.SCRIPT:"scriptscript"===e&&(r=b.SCRIPTSCRIPT),r},Qr=function(e,t){var r,n=Jr(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=bt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=it(t[0]),s="atom"===o.type&&"open"===o.family?rn(o.text):null,l=it(t[1]),h="atom"===l.type&&"close"===l.family?rn(l.text):null,m=Ft(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ft(p.body[0],"textord");u=tn[Number(d.text)]}}else p=Ft(p,"textord"),u=tn[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:Qr,mathmlBuilder:en}),nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ft(t[0],"size").value,token:n}}}),nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ft(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Qr,mathmlBuilder:en});var nn=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?bt(e.sup,t.havingStyle(a.sup()),t):bt(e.sub,t.havingStyle(a.sub()),t),n=Ft(e.base,"horizBrace")):n=Ft(e,"horizBrace");var i,o=bt(n.base,t.havingBaseStyle(b.DISPLAY)),s=Pt(n,t);if(n.isOver?(i=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=je.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=je.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):je.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return je.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:nn,mathmlBuilder:function(e,t){var r=Dt(e.label);return new Mt.MathNode(e.isOver?"mover":"munder",[qt(e.base,t),r])}}),nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ft(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ot(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ut(e.body,t,!1);return je.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=Nt(e.body,t);return r instanceof kt||(r=new kt("mrow",[r])),r.setAttribute("href",e.href),r}}),nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ft(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=Le(e.totalheight,t)-r,n=Number(n.toFixed(2)));var a=0;e.width.number>0&&(a=Le(e.width,t));var i={height:r+n+"em"};a>0&&(i.width=a+"em"),n>0&&(i.verticalAlign=-n+"em");var o=new C(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=Le(e.height,t),a=0;if(e.totalheight.number>0&&(a=(a=Le(e.totalheight,t)-n).toFixed(2),r.setAttribute("valign","-"+a+"em")),r.setAttribute("height",n+a+"em"),e.width.number>0){var i=Le(e.width,t);r.setAttribute("width",i+"em")}return r.setAttribute("src",e.src),r}}),nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ft(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return je.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=Le(e.dimension,t);return new Mt.SpaceNode(r)}}),nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=je.makeSpan([],[bt(e.body,t)]),r=je.makeSpan(["inner"],[r],t)):r=je.makeSpan(["inner"],[bt(e.body,t)]);var n=je.makeSpan(["fix"],[]),a=je.makeSpan([e.alignment],[r,n],t),i=je.makeSpan(["strut"]);return i.style.height=a.height+a.depth+"em",i.style.verticalAlign=-a.depth+"em",a.children.unshift(i),a=je.makeSpan(["thinbox"],[a],t),je.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mpadded",[qt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var on=function(e,t){switch(t.style.size){case b.DISPLAY.size:return e.display;case b.TEXT.size:return e.text;case b.SCRIPT.size:return e.script;case b.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ot(t[0]),text:ot(t[1]),script:ot(t[2]),scriptscript:ot(t[3])}},htmlBuilder:function(e,t){var r=on(e,t),n=ut(r,t,!1);return je.makeFragment(n)},mathmlBuilder:function(e,t){var r=on(e,t);return Nt(r,t)}});var sn=function(e,t,r,n,a,i,o){e=je.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=bt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=bt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=je.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=je.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=je.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=je.makeSpan(["mspace"],[],n);b.style.marginRight=i+"em",v.unshift(b)}return je.makeSpan(["mop","op-limits"],v,n)},ln=["\\smallint"],hn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ft(e.base,"op"),i=!0):a=Ft(e,"op");var o,s=t.style,h=!1;if(s.size===b.DISPLAY.size&&a.symbol&&!l.contains(ln,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=je.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=je.staticSvg(c+"Size"+(h?"2":"1"),t);o=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ut(a.body,t,!0);1===d.length&&d[0]instanceof R?(o=d[0]).classes[0]="mop":o=je.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ut(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height","+"+a+"em"):(s.setAttribute("height",a+"em"),s.setAttribute("depth","+"+-a+"em")),s.setAttribute("voffset",a+"em"),s}});var vn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];nt({type:"sizing",names:vn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:vn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return gn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Bt(e.body,r),a=new Mt.MathNode("mstyle",n);return a.setAttribute("mathsize",r.sizeMultiplier+"em"),a}}),nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ft(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=m+"em";var p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(b.SCRIPTSCRIPT),f=bt(e.index,d,t),g=.6*(p.height-p.depth),v=je.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),y=je.makeSpan(["root"],[v]);return je.makeSpan(["mord","sqrt"],[y,p],t)}return je.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Mt.MathNode("mroot",[qt(r,t),qt(n,t)]):new Mt.MathNode("msqrt",[qt(r,t)])}});var bn={display:b.DISPLAY,text:b.TEXT,script:b.SCRIPT,scriptscript:b.SCRIPTSCRIPT};nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=bn[e.style],n=t.havingStyle(r).withFont("");return gn(e.body,n,t)},mathmlBuilder:function(e,t){var r=bn[e.style],n=t.havingStyle(r),a=Bt(e.body,n),i=new Mt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var yn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===b.DISPLAY.size||r.alwaysHandleSupSub)?hn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===b.DISPLAY.size||r.limits)?fn:null:"accent"===r.type?l.isCharacterBox(r.base)?Ut:null:"horizBrace"===r.type&&!e.sub===r.isOver?nn:null:null};at({type:"supsub",htmlBuilder:function(e,t){var r=yn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=bt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=bt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=bt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===b.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,y=t.sizeMultiplier,x=.5/c.ptPerEm/y+"em",w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof R||k)&&(w=-m.italic+"em")}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:x,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:x}];v=je.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:x}];v=je.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=je.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:x}]},t)}var T=gt(m,"right")||"mord";return je.makeSpan([T],[m,je.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[qt(e.base,t)];if(e.sub&&i.push(qt(e.sub,t)),e.sup&&i.push(qt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===b.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===b.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===b.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===b.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===b.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===b.DISPLAY)?"mover":"msup"}return new Mt.MathNode(a,i)}}),at({type:"atom",htmlBuilder:function(e,t){return je.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mo",[zt(e.text,e.mode)]);if("bin"===e.family){var n=Tt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var xn={mi:"italic",mn:"normal",mtext:"normal"};at({type:"mathord",htmlBuilder:function(e,t){return je.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mi",[zt(e.text,e.mode,t)]),n=Tt(e,t)||"italic";return n!==xn[r.type]&&r.setAttribute("mathvariant",n),r}}),at({type:"textord",htmlBuilder:function(e,t){return je.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=zt(e.text,e.mode,t),a=Tt(e,t)||"normal";return r="text"===e.mode?new Mt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Mt.MathNode("mn",[n]):"\\prime"===e.text?new Mt.MathNode("mo",[n]):new Mt.MathNode("mi",[n]),a!==xn[r.type]&&r.setAttribute("mathvariant",a),r}});var wn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},kn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};at({type:"spacing",htmlBuilder:function(e,t){if(kn.hasOwnProperty(e.text)){var r=kn[e.text].className||"";if("text"===e.mode){var a=je.makeOrd(e,t,"textord");return a.classes.push(r),a}return je.makeSpan(["mspace",r],[je.mathsym(e.text,e.mode,t)],t)}if(wn.hasOwnProperty(e.text))return je.makeSpan(["mspace",wn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!kn.hasOwnProperty(e.text)){if(wn.hasOwnProperty(e.text))return new Mt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Mt.MathNode("mtext",[new Mt.TextNode("\xa0")])}});var Sn=function(){var e=new Mt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};at({type:"tag",mathmlBuilder:function(e,t){var r=new Mt.MathNode("mtable",[new Mt.MathNode("mtr",[Sn(),new Mt.MathNode("mtd",[Nt(e.body,t)]),Sn(),new Mt.MathNode("mtd",[Nt(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var Mn={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},zn={"\\textbf":"textbf","\\textmd":"textmd"},An={"\\textit":"textit","\\textup":"textup"},Tn=function(e,t){var r=e.font;return r?Mn[r]?t.withTextFontFamily(Mn[r]):zn[r]?t.withTextFontWeight(zn[r]):t.withTextFontShape(An[r]):t};nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ot(a),font:n}},htmlBuilder:function(e,t){var r=Tn(e,t),n=ut(e.body,r,!0);return je.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Tn(e,t);return Nt(e.body,r)}}),nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=bt(e.body,t),n=je.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return je.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mo",[new Mt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Mt.MathNode("munder",[qt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=bt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return je.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Mt.MathNode("mpadded",[qt(e.body,t)],["vcenter"])}}),nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=Bn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}this.current[e]=t},e}(),En=pn;dn("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),dn("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),dn("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),dn("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),dn("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),dn("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),dn("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Hn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};dn("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Hn[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=Hn[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};dn("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in X.math&&l.contains(["bin","rel"],X.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};dn("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),dn("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),dn("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),dn("\\dotsb","\\cdots"),dn("\\dotsm","\\cdots"),dn("\\dotsi","\\!\\cdots"),dn("\\dotsx","\\ldots\\,"),dn("\\DOTSI","\\relax"),dn("\\DOTSB","\\relax"),dn("\\DOTSX","\\relax"),dn("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),dn("\\,","\\tmspace+{3mu}{.1667em}"),dn("\\thinspace","\\,"),dn("\\>","\\mskip{4mu}"),dn("\\:","\\tmspace+{4mu}{.2222em}"),dn("\\medspace","\\:"),dn("\\;","\\tmspace+{5mu}{.2777em}"),dn("\\thickspace","\\;"),dn("\\!","\\tmspace-{3mu}{.1667em}"),dn("\\negthinspace","\\!"),dn("\\negmedspace","\\tmspace-{4mu}{.2222em}"),dn("\\negthickspace","\\tmspace-{5mu}{.277em}"),dn("\\enspace","\\kern.5em "),dn("\\enskip","\\hskip.5em\\relax"),dn("\\quad","\\hskip1em\\relax"),dn("\\qquad","\\hskip2em\\relax"),dn("\\tag","\\@ifstar\\tag@literal\\tag@paren"),dn("\\tag@paren","\\tag@literal{({#1})}"),dn("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),dn("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),dn("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),dn("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),dn("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),dn("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),dn("\\newline","\\\\\\relax"),dn("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=D["Main-Regular"]["T".charCodeAt(0)][1]-.7*D["Main-Regular"]["A".charCodeAt(0)][1]+"em";dn("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),dn("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),dn("\\hspace","\\@ifstar\\@hspacer\\@hspace"),dn("\\@hspace","\\hskip #1\\relax"),dn("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),dn("\\ordinarycolon",":"),dn("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),dn("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),dn("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),dn("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),dn("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),dn("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),dn("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),dn("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),dn("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),dn("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),dn("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),dn("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),dn("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),dn("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),dn("\u2237","\\dblcolon"),dn("\u2239","\\eqcolon"),dn("\u2254","\\coloneqq"),dn("\u2255","\\eqqcolon"),dn("\u2a74","\\Coloneqq"),dn("\\ratio","\\vcentcolon"),dn("\\coloncolon","\\dblcolon"),dn("\\colonequals","\\coloneqq"),dn("\\coloncolonequals","\\Coloneqq"),dn("\\equalscolon","\\eqqcolon"),dn("\\equalscoloncolon","\\Eqqcolon"),dn("\\colonminus","\\coloneq"),dn("\\coloncolonminus","\\Coloneq"),dn("\\minuscolon","\\eqcolon"),dn("\\minuscoloncolon","\\Eqcolon"),dn("\\coloncolonapprox","\\Colonapprox"),dn("\\coloncolonsim","\\Colonsim"),dn("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),dn("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),dn("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),dn("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),dn("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),dn("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),dn("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),dn("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),dn("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),dn("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),dn("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),dn("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),dn("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),dn("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),dn("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),dn("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),dn("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),dn("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),dn("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),dn("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),dn("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),dn("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),dn("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),dn("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),dn("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),dn("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),dn("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),dn("\\imath","\\html@mathml{\\@imath}{\u0131}"),dn("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),dn("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),dn("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),dn("\u27e6","\\llbracket"),dn("\u27e7","\\rrbracket"),dn("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),dn("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),dn("\u2983","\\lBrace"),dn("\u2984","\\rBrace"),dn("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),dn("\u29b5","\\minuso"),dn("\\darr","\\downarrow"),dn("\\dArr","\\Downarrow"),dn("\\Darr","\\Downarrow"),dn("\\lang","\\langle"),dn("\\rang","\\rangle"),dn("\\uarr","\\uparrow"),dn("\\uArr","\\Uparrow"),dn("\\Uarr","\\Uparrow"),dn("\\N","\\mathbb{N}"),dn("\\R","\\mathbb{R}"),dn("\\Z","\\mathbb{Z}"),dn("\\alef","\\aleph"),dn("\\alefsym","\\aleph"),dn("\\Alpha","\\mathrm{A}"),dn("\\Beta","\\mathrm{B}"),dn("\\bull","\\bullet"),dn("\\Chi","\\mathrm{X}"),dn("\\clubs","\\clubsuit"),dn("\\cnums","\\mathbb{C}"),dn("\\Complex","\\mathbb{C}"),dn("\\Dagger","\\ddagger"),dn("\\diamonds","\\diamondsuit"),dn("\\empty","\\emptyset"),dn("\\Epsilon","\\mathrm{E}"),dn("\\Eta","\\mathrm{H}"),dn("\\exist","\\exists"),dn("\\harr","\\leftrightarrow"),dn("\\hArr","\\Leftrightarrow"),dn("\\Harr","\\Leftrightarrow"),dn("\\hearts","\\heartsuit"),dn("\\image","\\Im"),dn("\\infin","\\infty"),dn("\\Iota","\\mathrm{I}"),dn("\\isin","\\in"),dn("\\Kappa","\\mathrm{K}"),dn("\\larr","\\leftarrow"),dn("\\lArr","\\Leftarrow"),dn("\\Larr","\\Leftarrow"),dn("\\lrarr","\\leftrightarrow"),dn("\\lrArr","\\Leftrightarrow"),dn("\\Lrarr","\\Leftrightarrow"),dn("\\Mu","\\mathrm{M}"),dn("\\natnums","\\mathbb{N}"),dn("\\Nu","\\mathrm{N}"),dn("\\Omicron","\\mathrm{O}"),dn("\\plusmn","\\pm"),dn("\\rarr","\\rightarrow"),dn("\\rArr","\\Rightarrow"),dn("\\Rarr","\\Rightarrow"),dn("\\real","\\Re"),dn("\\reals","\\mathbb{R}"),dn("\\Reals","\\mathbb{R}"),dn("\\Rho","\\mathrm{P}"),dn("\\sdot","\\cdot"),dn("\\sect","\\S"),dn("\\spades","\\spadesuit"),dn("\\sub","\\subset"),dn("\\sube","\\subseteq"),dn("\\supe","\\supseteq"),dn("\\Tau","\\mathrm{T}"),dn("\\thetasym","\\vartheta"),dn("\\weierp","\\wp"),dn("\\Zeta","\\mathrm{Z}"),dn("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),dn("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),dn("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),dn("\\bra","\\mathinner{\\langle{#1}|}"),dn("\\ket","\\mathinner{|{#1}\\rangle}"),dn("\\braket","\\mathinner{\\langle{#1}\\rangle}"),dn("\\Bra","\\left\\langle#1\\right|"),dn("\\Ket","\\left|#1\\right\\rangle"),dn("\\angln","{\\angl n}"),dn("\\blue","\\textcolor{##6495ed}{#1}"),dn("\\orange","\\textcolor{##ffa500}{#1}"),dn("\\pink","\\textcolor{##ff00af}{#1}"),dn("\\red","\\textcolor{##df0030}{#1}"),dn("\\green","\\textcolor{##28ae7b}{#1}"),dn("\\gray","\\textcolor{gray}{#1}"),dn("\\purple","\\textcolor{##9d38bd}{#1}"),dn("\\blueA","\\textcolor{##ccfaff}{#1}"),dn("\\blueB","\\textcolor{##80f6ff}{#1}"),dn("\\blueC","\\textcolor{##63d9ea}{#1}"),dn("\\blueD","\\textcolor{##11accd}{#1}"),dn("\\blueE","\\textcolor{##0c7f99}{#1}"),dn("\\tealA","\\textcolor{##94fff5}{#1}"),dn("\\tealB","\\textcolor{##26edd5}{#1}"),dn("\\tealC","\\textcolor{##01d1c1}{#1}"),dn("\\tealD","\\textcolor{##01a995}{#1}"),dn("\\tealE","\\textcolor{##208170}{#1}"),dn("\\greenA","\\textcolor{##b6ffb0}{#1}"),dn("\\greenB","\\textcolor{##8af281}{#1}"),dn("\\greenC","\\textcolor{##74cf70}{#1}"),dn("\\greenD","\\textcolor{##1fab54}{#1}"),dn("\\greenE","\\textcolor{##0d923f}{#1}"),dn("\\goldA","\\textcolor{##ffd0a9}{#1}"),dn("\\goldB","\\textcolor{##ffbb71}{#1}"),dn("\\goldC","\\textcolor{##ff9c39}{#1}"),dn("\\goldD","\\textcolor{##e07d10}{#1}"),dn("\\goldE","\\textcolor{##a75a05}{#1}"),dn("\\redA","\\textcolor{##fca9a9}{#1}"),dn("\\redB","\\textcolor{##ff8482}{#1}"),dn("\\redC","\\textcolor{##f9685d}{#1}"),dn("\\redD","\\textcolor{##e84d39}{#1}"),dn("\\redE","\\textcolor{##bc2612}{#1}"),dn("\\maroonA","\\textcolor{##ffbde0}{#1}"),dn("\\maroonB","\\textcolor{##ff92c6}{#1}"),dn("\\maroonC","\\textcolor{##ed5fa6}{#1}"),dn("\\maroonD","\\textcolor{##ca337c}{#1}"),dn("\\maroonE","\\textcolor{##9e034e}{#1}"),dn("\\purpleA","\\textcolor{##ddd7ff}{#1}"),dn("\\purpleB","\\textcolor{##c6b9fc}{#1}"),dn("\\purpleC","\\textcolor{##aa87ff}{#1}"),dn("\\purpleD","\\textcolor{##7854ab}{#1}"),dn("\\purpleE","\\textcolor{##543b78}{#1}"),dn("\\mintA","\\textcolor{##f5f9e8}{#1}"),dn("\\mintB","\\textcolor{##edf2df}{#1}"),dn("\\mintC","\\textcolor{##e0e5cc}{#1}"),dn("\\grayA","\\textcolor{##f6f7f7}{#1}"),dn("\\grayB","\\textcolor{##f0f1f2}{#1}"),dn("\\grayC","\\textcolor{##e3e5e6}{#1}"),dn("\\grayD","\\textcolor{##d6d8da}{#1}"),dn("\\grayE","\\textcolor{##babec2}{#1}"),dn("\\grayF","\\textcolor{##888d93}{#1}"),dn("\\grayG","\\textcolor{##626569}{#1}"),dn("\\grayH","\\textcolor{##3b3e40}{#1}"),dn("\\grayI","\\textcolor{##21242c}{#1}"),dn("\\kaBlue","\\textcolor{##314453}{#1}"),dn("\\kaGreen","\\textcolor{##71B307}{#1}");var Vn={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Gn=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(En,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Cn("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Cn){if("\\relax"!==e.text&&!e.treatAsRelax)return this.stack.pop();this.stack.pop()}}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Cn(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Cn&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||X.math.hasOwnProperty(e)||X.text.hasOwnProperty(e)||Vn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Un={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Yn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Wn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Gn(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=X[this.mode][t].group,h=qn.range(e);if(U.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(w(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:qn.range(e),text:t}}if(this.consume(),o)for(var c=0;c 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; // $FlowFixMe + + self.position = start; + return self; + } + +} // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; + +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function escape(text) { + return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +var utils = { + contains, + deflt, + escape, + hyphenate, + getBaseElem, + isCharacterBox, + protocolFromUrl +}; + +/* eslint no-console:0 */ + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ +class Settings { + constructor(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + this.displayMode = utils.deflt(options.displayMode, false); + this.output = utils.deflt(options.output, "htmlAndMathml"); + this.leqno = utils.deflt(options.leqno, false); + this.fleqn = utils.deflt(options.fleqn, false); + this.throwOnError = utils.deflt(options.throwOnError, true); + this.errorColor = utils.deflt(options.errorColor, "#cc0000"); + this.macros = options.macros || {}; + this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0)); + this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); + this.strict = utils.deflt(options.strict, "warn"); + this.trust = utils.deflt(options.trust, false); + this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity)); + this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); + this.globalGroup = utils.deflt(options.globalGroup, false); + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + + + useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + + + isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + } + +} + +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +class Style { + constructor(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + sup() { + return styles[sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + + + sub() { + return styles[sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + + + fracNum() { + return styles[fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + + + fracDen() { + return styles[fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + + + cramp() { + return styles[cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + + + text() { + return styles[text$1[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + + + isTight() { + return this.size >= 2; + } + +} // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +var Style$1 = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} + +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping. +// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraViniculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraViniculum below. +// The detour proceeds one extraViniculum distance up and slightly to the right, +// displacing the radiused corner between surd and viniculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long viniculumn, then down one extraViniculum distance, +// after which it resumes regular path geometry for the radical. + +/* viniculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum + / █████████████████████←0.04em (40 unit) std viniculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraViniculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z"; +}; + +var phasePath = function phasePath(y) { + var x = y / 2; // x coordinate at top of angle + + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; + +var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the viniculumn + // to a point near (14 units) the bottom of the surd. The viniculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum; + return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) { + extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraViniculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraViniculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraViniculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraViniculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraViniculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var innerPath = function innerPath(name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239c": + return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; + + case "\u2223": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; + + case "\u2225": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); + + case "\u239f": + return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; + + case "\u23a2": + return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; + + case "\u23a5": + return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; + + case "\u23aa": + return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; + + case "\u23d0": + return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; + + case "\u2016": + return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); + + default: + return ""; + } +}; +var path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +class DocumentFragment { + // HtmlDomNode + // Never used; needed for satisfying interface. + constructor(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + + + toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + + + toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + + + toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = child => child.toText(); + + return this.children.map(toText).join(""); + } + +} + +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(cls => cls).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +class Span { + constructor(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "span"); + } + + toMarkup() { + return toMarkup.call(this, "span"); + } + +} +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +class Anchor { + constructor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "a"); + } + + toMarkup() { + return toMarkup.call(this, "a"); + } + +} +/** + * This node represents an image embed () element. + */ + +class Img { + constructor(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + } + + toMarkup() { + var markup = "" + this.alt + " 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + + + toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } + +} +/** + * SVG nodes are used to render stretchy wide elements. + */ + +class SvgNode { + constructor(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + + toMarkup() { + var markup = ""; + } else { + return ""; + } + } + +} +class LineNode { + constructor(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + } + + toMarkup() { + var markup = " but got " + String(group) + "."); + } +} + +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +var fontMetricsData = { + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 1.0], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}; + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glpyh + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} + +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font, + group, + replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var math = "math"; +var text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var accent = "accent-token"; +var bin = "bin"; +var close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227a", "\\prec", true); +defineSymbol(math, main, rel, "\u227b", "\\succ", true); +defineSymbol(math, main, rel, "\u223c", "\\sim", true); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226a", "\\ll", true); +defineSymbol(math, main, rel, "\u226b", "\\gg", true); +defineSymbol(math, main, rel, "\u224d", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220b", "\\ni", true); +defineSymbol(math, main, rel, "\u221d", "\\propto", true); +defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(text, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(text, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210f", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266d", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266e", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266f", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211c", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\u00a7", "\\S", true); +defineSymbol(text, main, textord, "\u00a7", "\\S"); +defineSymbol(math, main, textord, "\u00b6", "\\P", true); +defineSymbol(text, main, textord, "\u00b6", "\\P"); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true); +defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true); +defineSymbol(math, main, close, "\u27ef", "\\rgroup", true); +defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228e", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet"); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); +defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(text, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); +defineSymbol(text, main, textord, "\u00f0", "\u00f0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(text, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, open, "\u250c", "\\@ulcorner", true); +defineSymbol(math, ams, close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between", true); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22b6", "\\origof", true); // not in font + +defineSymbol(math, main, rel, "\u22b7", "\\imageof", true); // not in font + +defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221e", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039e", "\\Xi", true); +defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\u00ac", "\\neg", true); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); +defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); +defineSymbol(math, main, mathord, "\u03be", "\\xi", true); +defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ"); +defineSymbol(math, main, bin, "\u00f7", "\\div", true); +defineSymbol(math, main, bin, "\u00b1", "\\pm", true); +defineSymbol(math, main, bin, "\u00d7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222a", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus"); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, open, "\u27e8", "\\langle", true); +defineSymbol(math, main, open, "\u2223", "\\lvert"); +defineSymbol(math, main, open, "\u2225", "\\lVert"); +defineSymbol(math, main, close, "?", "?"); +defineSymbol(math, main, close, "!", "!"); +defineSymbol(math, main, close, "\u27e9", "\\rangle", true); +defineSymbol(math, main, close, "\u2223", "\\rvert"); +defineSymbol(math, main, close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\ue020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(text, main, spacing, "\u00a0", "\\ "); +defineSymbol(text, main, spacing, "\u00a0", " "); +defineSymbol(text, main, spacing, "\u00a0", "\\space"); +defineSymbol(text, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, open, "{", "\\lbrace"); +defineSymbol(math, main, close, "}", "\\rbrace"); +defineSymbol(math, main, open, "[", "\\lbrack", true); +defineSymbol(text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, close, "]", "\\rbrack", true); +defineSymbol(text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, open, "(", "\\lparen", true); +defineSymbol(math, main, close, ")", "\\rparen", true); +defineSymbol(text, main, textord, "<", "\\textless", true); // in T1 fontenc + +defineSymbol(text, main, textord, ">", "\\textgreater", true); // in T1 fontenc + +defineSymbol(math, main, open, "\u230a", "\\lfloor", true); +defineSymbol(math, main, close, "\u230b", "\\rfloor", true); +defineSymbol(math, main, open, "\u2308", "\\lceil", true); +defineSymbol(math, main, close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text, main, textord, "|", "\\textbar", true); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(text, main, textord, "~", "\\textasciitilde"); +defineSymbol(text, main, textord, "\\", "\\textbackslash"); +defineSymbol(text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22c1", "\\bigvee"); +defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2a04", "\\biguplus"); +defineSymbol(math, main, op, "\u22c2", "\\bigcap"); +defineSymbol(math, main, op, "\u22c3", "\\bigcup"); +defineSymbol(math, main, op, "\u222b", "\\int"); +defineSymbol(math, main, op, "\u222b", "\\intop"); +defineSymbol(math, main, op, "\u222c", "\\iint"); +defineSymbol(math, main, op, "\u222d", "\\iiint"); +defineSymbol(math, main, op, "\u220f", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2a00", "\\bigodot"); +defineSymbol(math, main, op, "\u222e", "\\oint"); +defineSymbol(math, main, op, "\u222f", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222b", "\\smallint"); +defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02ca", "\\acute"); +defineSymbol(math, main, accent, "\u02cb", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u02c9", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, accent, "\u02da", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA + +defineSymbol(math, main, mathord, "\ue131", "\\@imath"); +defineSymbol(math, main, mathord, "\ue237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(text, main, textord, "\u0131", "\\i", true); +defineSymbol(text, main, textord, "\u0237", "\\j", true); +defineSymbol(text, main, textord, "\u00df", "\\ss", true); +defineSymbol(text, main, textord, "\u00e6", "\\ae", true); +defineSymbol(text, main, textord, "\u0153", "\\oe", true); +defineSymbol(text, main, textord, "\u00f8", "\\o", true); +defineSymbol(text, main, textord, "\u00c6", "\\AE", true); +defineSymbol(text, main, textord, "\u0152", "\\OE", true); +defineSymbol(text, main, textord, "\u00d8", "\\O", true); +defineSymbol(text, main, accent, "\u02ca", "\\'"); // acute + +defineSymbol(text, main, accent, "\u02cb", "\\`"); // grave + +defineSymbol(text, main, accent, "\u02c6", "\\^"); // circumflex + +defineSymbol(text, main, accent, "\u02dc", "\\~"); // tilde + +defineSymbol(text, main, accent, "\u02c9", "\\="); // macron + +defineSymbol(text, main, accent, "\u02d8", "\\u"); // breve + +defineSymbol(text, main, accent, "\u02d9", "\\."); // dot above + +defineSymbol(text, main, accent, "\u00b8", "\\c"); // cedilla + +defineSymbol(text, main, accent, "\u02da", "\\r"); // ring above + +defineSymbol(text, main, accent, "\u02c7", "\\v"); // caron + +defineSymbol(text, main, accent, "\u00a8", '\\"'); // diaresis + +defineSymbol(text, main, accent, "\u02dd", "\\H"); // double acute + +defineSymbol(text, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(text, main, textord, "\u2013", "--", true); +defineSymbol(text, main, textord, "\u2013", "\\textendash"); +defineSymbol(text, main, textord, "\u2014", "---", true); +defineSymbol(text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(text, main, textord, "\u2018", "`", true); +defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(text, main, textord, "\u2019", "'", true); +defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(text, main, textord, "\u201c", "``", true); +defineSymbol(text, main, textord, "\u201c", "\\textquotedblleft"); +defineSymbol(text, main, textord, "\u201d", "''", true); +defineSymbol(text, main, textord, "\u201d", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\u00b0", "\\degree", true); +defineSymbol(text, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(text, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". + +defineSymbol(math, main, textord, "\u00a3", "\\pounds"); +defineSymbol(math, main, textord, "\u00a3", "\\mathsterling", true); +defineSymbol(text, main, textord, "\u00a3", "\\pounds"); +defineSymbol(text, main, textord, "\u00a3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+\";:?/.,"; + +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + + defineSymbol(text, main, textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(text, main, textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var wideChar = ""; + +for (var _i3 = 0; _i3 < letters.length; _i3++) { + var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + + if (_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(text, main, textord, "k", wideChar); // Next, some wide character numerals + +for (var _i4 = 0; _i4 < 10; _i4++) { + var _ch4 = _i4.toString(); + + wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "\u00d0\u00de\u00fe"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(text, main, textord, _ch5, _ch5); +} + +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathnormal", "textit", "Math-Italic"], // A-Z italic +["mathnormal", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace +]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace +]; +var wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new ParseError("Unsupported character: " + wideChar); + } +}; + +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +class Options { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + constructor(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + + + havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + + + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + + + havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + + + havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + + + havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + + + withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + + + withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + + + withFont(font) { + return this.extend({ + font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + + + withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontShape(fontShape) { + return this.extend({ + fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + + + sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + + + baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + + + fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + + + getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + } + +} + +Options.BASESIZE = 6; + +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; + +/* eslint no-console:0 */ + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + var [wideFontName, wideFontClass] = wideCharacterFont(text, mode); + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol") { + var fontData = boldsymbol(text, mode, options, classes, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + var font = symbols[mode][text] && symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var canCombine = (prev, next) => { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + + + if (prev.classes.length === 1) { + var cls = prev.classes[0]; + + if (cls === "mbin" || cls === "mord") { + return false; + } + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var tryCombineChars = chars => { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var makeSpan$2 = function makeSpan(classes, children, options, style) { + var span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = makeSpan$2([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = line.height + "em"; + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var makeFragment = function makeFragment(children) { + var fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan$2([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size + }); + children.push(oldChildren[i]); + } + + return { + children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var makeVList = function makeVList(params, options) { + var { + children, + depth + } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = makeSpan$2(["pstrut"], []); + pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em"; + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = makeSpan$2(["vlist"], realChildren); + vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = makeSpan$2([], []); + var depthStrut = makeSpan$2(["vlist"], [emptySpan]); + depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = makeSpan$2(["vlist-s"], [new SymbolNode("\u200b")]); + rows = [makeSpan$2(["vlist-r"], [vlist, topStrut]), makeSpan$2(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan$2(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan$2(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var makeGlue = (measurement, options) => { + // Make an empty span for the space + var rule = makeSpan$2(["mspace"], [], options); + var size = calculateSize(measurement, options); + rule.style.marginRight = size + "em"; + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var [pathName, width, height] = svgData[value]; + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return span; +}; + +var buildCommon = { + fontMap, + makeSymbol, + mathsym, + makeSpan: makeSpan$2, + makeSvgSpan, + makeLineSpan, + makeAnchor, + makeFragment, + wrapFragment, + makeVList, + makeOrd, + makeGlue, + staticSvg, + svgData, + tryCombineChars +}; + +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; + +/** Context provided to function handlers for error messages. */ +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of functions + var data = { + type, + numArgs: props.numArgs, + argTypes: props.argTypes, + allowedInArgument: !!props.allowedInArgument, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + primitive: !!props.primitive, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var { + type, + htmlBuilder, + mathmlBuilder + } = _ref2; + defineFunction({ + type, + names: [], + props: { + numArgs: 0 + }, + + handler() { + throw new Error('Should never be called.'); + }, + + htmlBuilder, + mathmlBuilder + }); +} +var normalizeArgument = function normalizeArgument(arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var ordargument = function ordargument(arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; + +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ +var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap$1 = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildGroup$1(expression[i], options); + + if (output instanceof DocumentFragment) { + var children = output.children; + groups.push(...children); + } else { + groups.push(output); + } + } // Combine consecutive domTree.symbolNodes into a single symbolNode. + + + buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = expression[0]; + + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap$1[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options); + var dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + var isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + var nonspace = !node.hasClass("mspace"); + + if (nonspace) { + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("newline")) { + prev.node = makeSpan$1(["leftmost"]); // treat like beginning of line + } + + prev.insertAfter = (index => n => { + nodes.splice(index + 1, 0, n); + i++; + })(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan$1(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildGroup$1 = function buildGroup(group, options, baseOptions) { + if (!group) { + return makeSpan$1(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + + var strut = makeSpan$1(["strut"]); + strut.style.height = body.height + body.depth + "em"; + strut.style.verticalAlign = -body.depth + "em"; + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildExpression$1(tree, options, "root"); + var eqnNum; + + if (expression.length === 2 && expression[1].hasClass("tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + + var htmlNode = makeSpan$1(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = htmlNode.height + htmlNode.depth + "em"; + strut.style.verticalAlign = -htmlNode.depth + "em"; + } + + return htmlNode; +} + +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work simlarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +class MathNode { + constructor(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + + + getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + if (this.classes.length > 0) { + markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + + + toText() { + return this.children.map(child => child.toText()).join(""); + } + +} +/** + * This node represents a piece of text. + */ + +class TextNode { + constructor(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + + + toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text iteself). + */ + + + toText() { + return this.text; + } + +} +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +class SpaceNode { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200a"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200a"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200a\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205f\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", this.width + "em"); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + + + toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + } + +} + +var mathMLTree = { + MathNode, + TextNode, + SpaceNode, + newDocumentFragment +}; + +/** + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function makeText(text, mode, options) { + if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) { + text = symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return group.type === "textord" ? "bold" : "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and caligrahpic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (symbols[mode][text] && symbols[mode][text].replace) { + text = symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildGroup(expression[i], options); + + if (_group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + lastGroup.children.push(..._group.children); + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + lastGroup.children.push(..._group.children); + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + lastGroup.children.push(..._group.children); + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe + + return result; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + + if (isDisplayMode) { + math.setAttribute("display", "block"); + } // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} + +var optionsFromSettings = function optionsFromSettings(settings) { + return new Options({ + style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree = function buildTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; + +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23df", + overbrace: "\u23de", + overgroup: "\u23e0", + undergroup: "\u23e1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21d2", + xRightarrow: "\u21d2", + overleftharpoon: "\u21bc", + xleftharpoonup: "\u21bc", + overrightharpoon: "\u21c0", + xrightharpoonup: "\u21c0", + xLeftarrow: "\u21d0", + xLeftrightarrow: "\u21d4", + xhookleftarrow: "\u21a9", + xhookrightarrow: "\u21aa", + xmapsto: "\u21a6", + xrightharpoondown: "\u21c1", + xleftharpoondown: "\u21bd", + xrightleftharpoons: "\u21cc", + xleftrightharpoons: "\u21cb", + xtwoheadleftarrow: "\u219e", + xtwoheadrightarrow: "\u21a0", + xlongequal: "=", + xtofrom: "\u21c4", + xrightleftarrows: "\u21c4", + xrightequilibrium: "\u21cc", + // Not a perfect match. + xleftequilibrium: "\u21cb", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; + +var mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.substr(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + // $FlowFixMe + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": _height + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var [paths, _minWidth, _viewBoxHeight] = data; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": _height2 + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = _height2 + "em"; + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var { + span, + minWidth, + height + } = buildSvgSpan_(); // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + span.height = height; + span.style.height = height + "em"; + + if (minWidth > 0) { + span.style.minWidth = minWidth + "em"; + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + var img; + var totalHeight = inner.height + inner.depth + topPad + bottomPad; + + if (/fbox|color|angl/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": totalHeight + "em" + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = totalHeight + "em"; + return img; +}; + +var stretchy = { + encloseSpan, + mathMLnode, + svgSpan +}; + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe, >=0.125 + + + return node; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +var htmlBuilder$a = (grp, options) => { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSubGroup; + + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + grp.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base + + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } + + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent + + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + 2 * skew + "em)", + marginLeft: 2 * skew + "em" + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var mathmlBuilder$9 = (group, options) => { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => "\\" + accent).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + var base = normalizeArgument(args[0]); + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: (context, args) => { + var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); + +// Horizontal overlap functions +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: (group, options) => { + // Treat under accents much like underlines. + var innerGroup = buildGroup$1(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); + +// Helper function +var paddedNode = group => { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + + // Flow is unable to correctly infer the type of `group`, even though it's + // unamibiguously determined from the passed-in `type` above. + htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options); + var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var node; + + if (group.body) { + var upperNode = paddedNode(buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = paddedNode(buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = paddedNode(buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } + +}); + +var cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; + +var newCell = () => { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + // So these values are fixed and flow can do implicit typing. + return { + type: "styling", + body: [], + mode: "math", + style: "display" + }; +}; + +var isStartOfArrow = node => { + return node.type === "textord" && node.text === "@"; +}; + +var isLabelEnd = (node, endChar) => { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; + +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + var funcName = cdArrowFunctionName[arrowChar]; + + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + + case "\\uparrow": + case "\\downarrow": + { + var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + var bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + var arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + + case "\\Vert": + { + var arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} + +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + var parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + + while (true) { + // eslint-disable-line no-constant-condition + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + var next = parser.fetch().text; + + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + + break; + } else { + throw new ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + + var row = []; + var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. + + for (var i = 0; i < parsedRows.length; i++) { + // Start a new row. + var rowNodes = parsedRows[i]; // Create the first cell. + + var cell = newCell(); + + for (var j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + + j += 1; + var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. + + var labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; // Process the arrow. + + if ("=|.".indexOf(arrowChar) > -1) ; else if ("<>AV".indexOf(arrowChar) > -1) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (var labelNum = 0; labelNum < 2; labelNum++) { + var inLabel = true; + + for (var k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + + if (isStartOfArrow(rowNodes[k])) { + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + + labels[labelNum].body.push(rowNodes[k]); + } + + if (inLabel) { + // isLabelEnd never returned a true. + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } // Now join the arrow to its labels. + + + var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + + var wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display" // CD is always displaystyle. + + }; + row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + + cell = newCell(); + } + } + + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + + row = []; + body.push(row); + } // End row group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); // define column separation. + + var cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + + }); + return { + type: "array", + mode: "math", + body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} // The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + + htmlBuilder(group, options) { + var newOptions = options.havingStyle(options.style.sup()); + var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = 0.8 - label.depth + "em"; // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + + label.height = 0; + label.depth = 0; + return label; + }, + + mathmlBuilder(group, options) { + var label = new mathMLTree.MathNode("mrow", [buildGroup(group.label, options)]); + label = new mathMLTree.MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + + + label.setAttribute("voffset", "0.7em"); + label = new mathMLTree.MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } + +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + + htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", [buildGroup(group.fragment, options)]); + } + +}); + +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + var text; + + if (isNaN(code)) { + throw new ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + + return { + type: "textord", + mode: parser.mode, + text: text + }; + } + +}); + +var htmlBuilder$9 = (group, options) => { + var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var mathmlBuilder$8 = (group, options) => { + var inner = buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"] + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color, + body: ordargument(body) + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + argTypes: ["color"] + }, + + handler(_ref2, args) { + var { + parser, + breakOnTokenText + } = _ref2; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color, + body + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); + +// Row breaks within tabular environments, and line breaks at top level + +defineFunction({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var size = optArgs[0]; + var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); + return { + type: "cr", + mode: parser.mode, + newLine, + size: size && assertNodeType(size, "size").value + }; + }, + + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder(group, options) { + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = calculateSize(group.size, options) + "em"; + } + } + + return span; + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", calculateSize(group.size, options) + "em"); + } + } + + return node; + } + +}); + +var globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; + +var checkControlSequence = tok => { + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + return name; +}; + +var getRHS = parser => { + var tok = parser.gullet.popToken(); + + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + + return tok; +}; + +var letCommand = (parser, name, tok, global) => { + var macro = parser.gullet.macros.get(tok.text); + + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + + parser.gullet.macros.set(name, macro, global); +}; // -> | +// -> |\global +// -> | +// -> \global|\long|\outer + + +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref) { + var { + parser, + funcName + } = _ref; + parser.consumeSpaces(); + var token = parser.fetch(); + + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + + return assertNodeType(parser.parseFunction(), "internal"); + } + + throw new ParseError("Invalid token after macro prefix", token); + } + +}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> + +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref2) { + var { + parser, + funcName + } = _ref2; + var tok = parser.gullet.popToken(); + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + var numArgs = 0; + var insert; + var delimiters = [[]]; // contains no braces + + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + + + tok = parser.gullet.popToken(); + + if (!/^[1-9]$/.test(tok.text)) { + throw new ParseError("Invalid argument number \"" + tok.text + "\""); + } + + if (parseInt(tok.text) !== numArgs + 1) { + throw new ParseError("Argument number \"" + tok.text + "\" out of order"); + } + + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } // replacement text, enclosed in '{' and '}' and properly nested + + + var { + tokens + } = parser.gullet.consumeArg(); + + if (insert) { + tokens.unshift(insert); + } + + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } // Final arg is the expansion of the macro + + + parser.gullet.macros.set(name, { + tokens, + numArgs, + delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // -> +// -> \futurelet +// | \let +// -> |= + +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + var name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + var tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf + +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + var name = checkControlSequence(parser.gullet.popToken()); + var middle = parser.gullet.popToken(); + var tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } + +}); + +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font, mode) { + var replace = symbols.math[symbol] && symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes); + + if (center) { + centerSpan(span, options, Style$1.TEXT); + } + + return span; +}; +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ + + +var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: corner + }; +}; + +var makeInner = function makeInner(ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4].toFixed(3) : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4].toFixed(3); + var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + var svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon.makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return { + type: "elem", + elem: span + }; +}; // Helpers for makeStackedDelim + + +var lapInEms = 0.008; +var lap = { + type: "kern", + size: -1 * lapInEms +}; +var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; +var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (utils.contains(verts, delim)) { + repeat = "\u2223"; + } else if (utils.contains(doubleVerts, delim)) { + repeat = "\u2225"; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\lfloor" || delim === "\u230a") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + } else if (delim === "\\rfloor" || delim === "\u230b") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27ee") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27ef") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23b0") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23b1") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calcuate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + + var stack = []; // Add the bottom symbol + + stack.push(makeGlyphSpan(bottom, font, mode)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + + stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. + + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode)); + stack.push(lap); + stack.push(makeInner(repeat, _innerHeight, options)); + } // Add the top symbol + + + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode)); // Finally, build the vlist + + var newOptions = options.havingBaseStyle(Style$1.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes); +}; // All surds have 0.08em padding above the viniculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) { + var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight); + var pathNode = new PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": height + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick viniculum. + // If Settings.minRuleThickness is larger than that, we add extraViniculum. + + var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the viniculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraViniculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraViniculum + emPad; + texHeight = height + extraViniculum; + viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = spanHeight + "em"; + return { + span, + advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +var delimiter = { + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + sizeToMaxHeight: sizeToMaxHeight, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: group => { + var children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + node.setAttribute("stretchy", "true"); + node.setAttribute("minsize", delimiter.sizeToMaxHeight[group.size] + "em"); + node.setAttribute("maxsize", delimiter.sizeToMaxHeight[group.size] + "em"); + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: (group, options) => { + assertParsed(group); // Build the inner expression + + var inner = buildExpression$1(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: (group, options) => { + assertParsed(group); + var inner = buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: (group, options) => { + // A Firefox \middle will strech a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); + +var htmlBuilder$8 = (group, options) => { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options); + var label = group.label.substr(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + var lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + var clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); // Prevent size changes like \Huge from affecting line thickness + + var newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. + + inner.style.paddingLeft = angleHeight / 2 + lineWeight + "em"; // Create an SVG + + var viewBoxHeight = Math.floor(1000 * angleHeight * scale); + var path = phasePath(viewBoxHeight); + var svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": viewBoxHeight / 1000 + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); // Wrap it in a span with overflow: hidden. + + img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = angleHeight + "em"; + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var topPad = 0; + var bottomPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + + img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = ruleThickness + "em"; + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = ruleThickness + "em"; + img.style.borderRightWidth = ruleThickness + "em"; + } + + imgShift = inner.depth + bottomPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var mathmlBuilder$7 = (group, options) => { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "text"] + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "text"] + }, + + handler(_ref2, args, optArgs) { + var { + parser, + funcName + } = _ref2; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor, + borderColor, + body + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + + handler(_ref3, args) { + var { + parser + } = _ref3; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } + +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + + handler(_ref4, args) { + var { + parser, + funcName + } = _ref4; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false + }, + + handler(_ref5, args) { + var { + parser + } = _ref5; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } + +}); + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of environments. + var data = { + type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} + +var validateAmsEnvironmentContext = context => { + var settings = context.parser.settings; + + if (!settings.displayMode) { + throw new ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var { + hskipBeforeAndAfter, + addJot, + cols, + arraystretch, + colSeparationType, + addEqnNum, + singleRow, + emptySingleRow, + maxNumCols, + leqno + } = _ref; + parser.gullet.beginGroup(); + + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } // Get current arraystretch if it's not set by the environment + + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); + } + } + + parser.consume(); + } else if (next === "\\end") { + // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. + // NOTE: Currently, `cell` is the last item added into `row`. + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\\\") { + parser.consume(); + var size = void 0; // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + + rowGaps.push(size ? size.value : null); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + } else { + throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \cr + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot, + arraystretch, + body, + cols, + rowGaps, + hskipBeforeAndAfter, + hLinesBeforeRow, + colSeparationType, + addEqnNum, + leqno + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.substr(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var htmlBuilder$7 = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup$1(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + var eqnNumSpans = []; + + if (group.addEqnNum) { + // An environment with automatic equation numbers. + // Create node(s) that will trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + var rw = body[r]; + var shift = rw.pos - offset; + var eqnTag = buildCommon.makeSpan(["eqn-num"], [], options); + eqnTag.depth = rw.depth; + eqnTag.height = rw.height; + eqnNumSpans.push({ + type: "elem", + elem: eqnTag, + shift + }); + } + } + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = totalHeight + "em"; + separator.style.borderRightWidth = ruleThickness + "em"; + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 -" + ruleThickness / 2 + "em"; + separator.style.verticalAlign = -(totalHeight - offset) + "em"; + cols.push(separator); + } else { + throw new ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var _shift = row.pos - offset; + + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: _shift + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + if (!group.addEqnNum) { + return buildCommon.makeSpan(["mord"], [body], options); + } else { + var eqnNumCol = buildCommon.makeVList({ + positionType: "individualShift", + children: eqnNumSpans + }, options); + eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); + return buildCommon.makeFragment([body, eqnNumCol]); + } +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var mathmlBuilder$6 = function mathmlBuilder(group, options) { + var tbl = []; + var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); + var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); + + for (var i = 0; i < group.body.length; i++) { + var rw = group.body[i]; + var row = []; + + for (var j = 0; j < rw.length; j++) { + row.push(new mathMLTree.MathNode("mtd", [buildGroup(rw[j], options)])); + } + + if (group.addEqnNum) { + row.unshift(glue); + row.push(glue); + + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + + tbl.push(new mathMLTree.MathNode("mtr", row)); + } + + var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found emprically. They produce an array + // similar to LaTeX and in which content does not interfere with \hines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", gap.toFixed(4) + "em"); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var _i = iStart; _i < iEnd; _i++) { + if (cols[_i].type === "align") { + align += alignMap[cols[_i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[_i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i2 = 1; _i2 < _cols.length; _i2++) { + spacing += _i2 % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { + rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i3][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. + + +var alignedHandler = function alignedHandler(context, args) { + if (context.envName.indexOf("ed") === -1) { + validateAmsEnvironmentContext(context); + } + + var cols = []; + var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var res = parseArray(context.parser, { + cols, + addJot: true, + addEqnNum: context.envName === "align" || context.envName === "alignat", + emptySingleRow: true, + colSeparationType: separationType, + maxNumCols: context.envName === "split" ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + + if (args[0] && args[0].type === "ordgroup") { + var arg0 = ""; + + for (var i = 0; i < args[0].body.length; i++) { + var textord = assertNodeType(args[0].body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i4 = 1; _i4 < row.length; _i4 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i4], "styling"); + var ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i5 = 0; _i5 < numCols; ++_i5) { + var align = "r"; + var pregap = 0; + + if (_i5 % 2 === 1) { + align = "l"; + } else if (_i5 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i5] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + + handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath + + var colAlign = "c"; + var payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + var parser = context.parser; + parser.consumeSpaces(); + + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + + if ("lcr".indexOf(colAlign) === -1) { + throw new ParseError("Expected l or c or r", parser.nextToken); + } + + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. + + var numCols = Math.max(0, ...res.body.map(row => row.length)); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + var res = { + cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body.length > 0 && res.body[0].length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + return res; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.indexOf("r") > -1 ? "." : "\\{", + right: context.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: undefined + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + + handler(context) { + if (utils.contains(["gather", "gather*"], context.envName)) { + validateAmsEnvironmentContext(context); + } + + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + addEqnNum: context.envName === "gather", + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + var res = { + addEqnNum: context.envName === "equation", + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + + handler(context, args) { + throw new ParseError(context.funcName + " valid only within array environment"); + } + +}); + +var environments = _environments; + +// defineEnvironment definitions. + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!environments.hasOwnProperty(envName)) { + throw new ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = environments[envName]; + var { + args: _args, + optArgs + } = parser.parseArguments("\\begin{" + envName + "}", env); + var context = { + mode: parser.mode, + envName, + parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } // $FlowFixMe, "environment" handler returns an environment ParseNode + + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup + }; + } + +}); + +var makeSpan = buildCommon.makeSpan; + +function htmlBuilder$6(group, options) { + var elements = buildExpression$1(group.body, options, true); + return makeSpan([group.mclass], elements, options); +} + +function mathmlBuilder$5(group, options) { + var node; + var inner = buildExpression(group.body, options); + + if (group.mclass === "minner") { + return mathMLTree.newDocumentFragment(inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.substr(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +var binrelClass = arg => { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } + +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + + handler(_ref3, args) { + var { + parser, + funcName + } = _ref3; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); + +// TODO(kevinb): implement \\sl and \\sc + +var htmlBuilder$5 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup$1(group.body, newOptions); +}; + +var mathmlBuilder$4 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = normalizeArgument(args[0]); + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser, + funcName, + breakOnTokenText + } = _ref3; + var { + mode + } = parser; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body + } + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); + +var adjustStyle = (size, originalStyle) => { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY; + } else if (size === "text" && style.size === Style$1.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = Style$1.TEXT; + } else if (size === "script") { + style = Style$1.SCRIPT; + } else if (size === "scriptscript") { + style = Style$1.SCRIPTSCRIPT; + } + + return style; +}; + +var htmlBuilder$4 = (group, options) => { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildGroup$1(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildGroup$1(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === Style$1.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === Style$1.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === Style$1.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var mathmlBuilder$3 = (group, options) => { + var node = new mathMLTree.MathNode("mfrac", [buildGroup(group.numer, options), buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", ruleWidth + "em"); + } + + var style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + props: { + numArgs: 2, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: false, + numer, + denom, + hasBarLine, + leftDelim, + rightDelim, + size, + barSize: null + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); +defineFunction({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: (_ref2, args) => { + var { + parser, + funcName + } = _ref2; + var numer = args[0]; + var denom = args[1]; + return { + type: "genfrac", + mode: parser.mode, + continued: true, + numer, + denom, + hasBarLine: true, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + + handler(_ref3) { + var { + parser, + funcName, + token + } = _ref3; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith, + token + }; + } + +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + + handler(_ref4, args) { + var { + parser + } = _ref4; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = normalizeArgument(args[0]); + var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + var rightNode = normalizeArgument(args[1]); + var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = args[3]; + + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim, + rightDelim, + size + }; + }, + + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + + handler(_ref5, args) { + var { + parser, + funcName, + token + } = _ref5; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token + }; + } + +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: (_ref6, args) => { + var { + parser, + funcName + } = _ref6; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +var htmlBuilder$3 = (grp, options) => { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var mathmlBuilder$2 = (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$2 +}); + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: (group, options) => { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + } +}); + +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + + htmlBuilder(group, options) { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeFragment(elements); + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", buildExpression(group.body, options)); + } + +}); + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName, + token + } = _ref; + var value = assertNodeType(args[0], "raw").string; + var body = args[1]; + + if (parser.settings.strict) { + parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + } + + var trustContext; + var attributes = {}; + + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + + case "\\htmlData": + { + var data = value.split(","); + + for (var i = 0; i < data.length; i++) { + var keyVal = data[i].split("="); + + if (keyVal.length !== 2) { + throw new ParseError("Error parsing key-value for \\htmlData"); + } + + attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); + } + + trustContext = { + command: "\\htmlData", + attributes + }; + break; + } + + default: + throw new Error("Unrecognized html command"); + } + + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + + return { + type: "html", + mode: parser.mode, + attributes, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + var classes = ["enclosing"]; + + if (group.attributes.class) { + classes.push(...group.attributes.class.trim().split(/\s+/)); + } + + var span = buildCommon.makeSpan(classes, elements, options); + + for (var attr in group.attributes) { + if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { + span.setAttribute(attr, group.attributes[attr]); + } + } + + return span; + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.body, options); + } +}); + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.mathml, options); + } +}); + +var sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: (group, options) => { + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = Number(depth.toFixed(2)); + } + + var width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + var style = { + height: height + depth + "em" + }; + + if (width > 0) { + style.width = width + "em"; + } + + if (depth > 0) { + style.verticalAlign = -depth + "em"; + } + + var node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = depth.toFixed(2); + node.setAttribute("valign", "-" + depth + "em"); + } + + node.setAttribute("height", height + depth + "em"); + + if (group.width.number > 0) { + var width = calculateSize(group.width, options); + node.setAttribute("width", width + "em"); + } + + node.setAttribute("src", group.src); + return node; + } +}); + +// Horizontal spacing commands + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + + htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + + mathmlBuilder(group, options) { + var dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } + +}); + +// Horizontal overlap functions +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body + }; + }, + htmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = node.height + node.depth + "em"; + strut.style.verticalAlign = -node.depth + "em"; + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + + node = buildCommon.makeSpan(["thinbox"], [node], options); + return buildCommon.makeSpan(["mord", "vbox"], [node], options); + }, + mathmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(_ref, args) { + var { + funcName, + parser + } = _ref; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body + }; + } + +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(context, args) { + throw new ParseError("Mismatched " + context.funcName); + } + +}); + +var chooseMathStyle = (group, options) => { + switch (options.style.size) { + case Style$1.DISPLAY.size: + return group.display; + + case Style$1.TEXT.size: + return group.text; + + case Style$1.SCRIPT.size: + return group.script; + + case Style$1.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + var elements = buildExpression$1(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); + +// For an operator with limits, assemble the base, sup, and sub into a span. +var assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { + base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = slant + "em"; + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); +}; + +// Limits, symbols +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var htmlBuilder$2 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.substr(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildExpression$1(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +var mathmlBuilder$1 = (group, options) => { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22c0": "\\bigwedge", + "\u22c1": "\\bigvee", + "\u22c2": "\\bigcap", + "\u22c3": "\\bigcup", + "\u2a00": "\\bigodot", + "\u2a01": "\\bigoplus", + "\u2a02": "\\bigotimes", + "\u2a04": "\\biguplus", + "\u2a06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], + props: { + numArgs: 0 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], + props: { + numArgs: 0 + }, + + handler(_ref5) { + var { + parser, + funcName + } = _ref5; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +var htmlBuilder$1 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(child => { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildExpression$1(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var mathmlBuilder = (group, options) => { + // The steps taken here are similar to the html version. + var expression = buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(node => node.toText()).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mrow", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: htmlBuilder$1, + mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); + +defineFunctionBuilders({ + type: "ordgroup", + + htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression$1(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression$1(group.body, options, true), options); + }, + + mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } + +}); + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body + }; + }, + + htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } + +}); + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser + } = _ref3; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } + +}); + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + + htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + + mathmlBuilder(group, options) { + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", width + "em"); + rule.setAttribute("height", height + "em"); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", "+" + shift + "em"); + } else { + wrapper.setAttribute("height", shift + "em"); + wrapper.setAttribute("depth", "+" + -shift + "em"); + } + + wrapper.setAttribute("voffset", shift + "em"); + return wrapper; + } + +}); + +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression$1(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var htmlBuilder = (group, options) => { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref, args) => { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body + }; + }, + htmlBuilder, + mathmlBuilder: (group, options) => { + var newOptions = options.havingSize(group.size); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); + return node; + } +}); + +// smash, with optional [tb], as in AMS +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body, + smashHeight, + smashDepth + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body, + index + }; + }, + + htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup$1(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < Style$1.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var { + span: img, + ruleWidth, + advanceWidth + } = delimiter.sqrtImage(minDelimiterHeight, options); + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT); + var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + + mathmlBuilder(group, options) { + var { + body, + index + } = group; + return index ? new mathMLTree.MathNode("mroot", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup(body, options)]); + } + +}); + +var styleMap = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style, + body + }; + }, + + htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + + mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } + +}); + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? htmlBuilder$2 : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits); + + return _delegate ? htmlBuilder$1 : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder$a : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? htmlBuilder$3 : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + + htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var { + base: valueBase, + sup: valueSup, + sub: valueSub + } = group; + var base = buildGroup$1(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup$1(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildGroup$1(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === Style$1.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em"; + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = -base.italic + "em"; + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight, + marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + + mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === Style$1.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + return new mathMLTree.MathNode(nodeType, children); + } + +}); + +defineFunctionBuilders({ + type: "atom", + + htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } + +}); + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + var variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); +defineFunctionBuilders({ + type: "textord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + + mathmlBuilder(group, options) { + var text = makeText(group.text, group.mode, options); + var variant = getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + + htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + + mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } + +}); + +var pad = () => { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + + mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } + +}); + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = (group, options) => { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + + htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildExpression$1(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], inner, newOptions); + }, + + mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } + +}); + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } + +}); + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var axisHeight = options.fontMetrics().axisHeight; + var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return buildCommon.makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + return new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)], ["vcenter"]); + } + +}); + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + + htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + + mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } + +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); + +/** Include this to ensure that all functions are defined. */ +var functions = _functions; + +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +var combiningDiacriticalMarkString = "[\u0300-\u036f]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +class Lexer { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + constructor(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + + }; + } + + setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + + + lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + } + +} + +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ +class Namespace { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + + + endGroup() { + if (this.undefStack.length === 0) { + throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] === undefined) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + + + has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + + + get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + */ + + + set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + this.current[name] = value; + } + +} + +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +var macros = _macros; +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + var t = context.popToken(); + + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + var t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + + return { + tokens: [t], + numArgs: 0 + }; +}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + context.consumeSpaces(); + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var newcommand = (context, existsOK, nonexistsOK) => { + var arg = context.consumeArg().tokens; + + if (arg.length !== 1) { + throw new ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArg().tokens; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", context => newcommand(context, false, true)); +defineMacro("\\renewcommand", context => newcommand(context, true, false)); +defineMacro("\\providecommand", context => newcommand(context, true, true)); // terminal (console) tools + +defineMacro("\\message", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.log(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\errmessage", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.error(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\show", context => { + var tok = context.popToken(); + var name = tok.text; // eslint-disable-next-line no-console + + console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]); + return ''; +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 + +defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 + +defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\u00A9", "\\copyright"); +defineMacro("\u00AE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. + +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22ee", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.substr(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in symbols.math) { + if (utils.contains(['bin', 'rel'], symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", context => { + if (context.macros.get("\\df@tag")) { + throw new ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb -- A simulation of bold. +// The version in ambsy.sty works by typesetting three copies of the argument +// with small offsets. We use two copies. We omit the vertical offset because +// of rendering problems that makeVList encounters in Safari. + +defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} + +defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1] + "em"; +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// From amsopn.sty + +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); +defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. + +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); ////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx + +defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); + +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "\\relax": true, + // MacroExpander.js + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; +class MacroExpander { + constructor(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + + + beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + + + endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + + + future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + + + popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + + + pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + + + pushTokens(tokens) { + this.stack.push(...tokens); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + + + scanArgument(isOptional) { + var start; + var end; + var tokens; + + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + + if (this.future().text !== "[") { + return null; + } + + start = this.popToken(); // don't include [ in tokens + + ({ + tokens, + end + } = this.consumeArg(["]"])); + } else { + ({ + tokens, + start, + end + } = this.consumeArg()); + } // indicate the end of an argument + + + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return start.range(end, ""); + } + /** + * Consume all following space tokens, without expansion. + */ + + + consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + + + consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + var tokens = []; + var isDelimited = delims && delims.length > 0; + + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + + var start = this.future(); + var tok; + var depth = 0; + var match = 0; + + do { + tok = this.popToken(); + tokens.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + + if (depth === -1) { + throw new ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + + + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + + tokens.reverse(); // to fit in with stack order + + return { + tokens, + start, + end: tok + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + + + consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new ParseError("The length of delimiters doesn't match the number of args!"); + } + + var delims = delimiters[0]; + + for (var i = 0; i < delims.length; i++) { + var tok = this.popToken(); + + if (delims[i] !== tok.text) { + throw new ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + + var args = []; + + for (var _i = 0; _i < numArgs; _i++) { + args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order and will be returned as an array, + * also in reverse order. + * + * If not, the next token will be returned without removing it + * from the stack. This case can be detected by a `Token` return value + * instead of an `Array` return value. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty. + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + + + expandOnce(expandableOnly) { + var topToken = this.popToken(); + var name = topToken.text; + var expansion = !topToken.noexpand ? this._getExpansion(name) : null; + + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new ParseError("Undefined control sequence: " + name); + } + + this.pushToken(topToken); + return topToken; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + var tokens = expansion.tokens; + var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + // replace the placeholder with the indicated argument + tokens.splice(i, 2, ...args[+tok.text - 1]); + } else { + throw new ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + + + expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + + + expandNextToken() { + for (;;) { + var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + // \relax stops the expansion, but shouldn't get returned (a + // null return value couldn't get implemented as a function). + // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + if (expanded.text === "\\relax" || expanded.treatAsRelax) { + this.stack.pop(); + } else { + return this.stack.pop(); // === expanded + } + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + + + expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + /** + * Fully expand the given token stream and return the resulting list of tokens + */ + + + expandTokens(tokens) { + var output = []; + var oldStackLength = this.stack.length; + this.pushTokens(tokens); + + while (this.stack.length > oldStackLength) { + var expanded = this.expandOnce(true); // expand only expandable tokens + // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + if (expanded.treatAsRelax) { + // the expansion of \noexpand is the token itself + expanded.noexpand = false; + expanded.treatAsRelax = false; + } + + output.push(this.stack.pop()); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + + + expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(token => token.text).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + + + _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens, + numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + + + isDefined(name) { + return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + /** + * Determine whether a command is expandable. + */ + + + isExpandable(name) { + var macro = this.macros.get(name); + return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive; + } + +} + +/* eslint no-constant-condition:0 */ + +var unicodeAccents = { + "́": { + "text": "\\'", + "math": "\\acute" + }, + "̀": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "̄": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "̌": { + "text": "\\v", + "math": "\\check" + }, + "̂": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "̊": { + "text": "\\r", + "math": "\\mathring" + }, + "̋": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +var unicodeSymbols = { + "á": "á", + "à": "à", + "ä": "ä", + "ǟ": "ǟ", + "ã": "ã", + "ā": "ā", + "ă": "ă", + "ắ": "ắ", + "ằ": "ằ", + "ẵ": "ẵ", + "ǎ": "ǎ", + "â": "â", + "ấ": "ấ", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "ǡ": "ǡ", + "å": "å", + "ǻ": "ǻ", + "ḃ": "ḃ", + "ć": "ć", + "ḉ": "ḉ", + "č": "č", + "ĉ": "ĉ", + "ċ": "ċ", + "ç": "ç", + "ď": "ď", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "é", + "è": "è", + "ë": "ë", + "ẽ": "ẽ", + "ē": "ē", + "ḗ": "ḗ", + "ḕ": "ḕ", + "ĕ": "ĕ", + "ḝ": "ḝ", + "ě": "ě", + "ê": "ê", + "ế": "ế", + "ề": "ề", + "ễ": "ễ", + "ė": "ė", + "ȩ": "ȩ", + "ḟ": "ḟ", + "ǵ": "ǵ", + "ḡ": "ḡ", + "ğ": "ğ", + "ǧ": "ǧ", + "ĝ": "ĝ", + "ġ": "ġ", + "ģ": "ģ", + "ḧ": "ḧ", + "ȟ": "ȟ", + "ĥ": "ĥ", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "í", + "ì": "ì", + "ï": "ï", + "ḯ": "ḯ", + "ĩ": "ĩ", + "ī": "ī", + "ĭ": "ĭ", + "ǐ": "ǐ", + "î": "î", + "ǰ": "ǰ", + "ĵ": "ĵ", + "ḱ": "ḱ", + "ǩ": "ǩ", + "ķ": "ķ", + "ĺ": "ĺ", + "ľ": "ľ", + "ļ": "ļ", + "ḿ": "ḿ", + "ṁ": "ṁ", + "ń": "ń", + "ǹ": "ǹ", + "ñ": "ñ", + "ň": "ň", + "ṅ": "ṅ", + "ņ": "ņ", + "ó": "ó", + "ò": "ò", + "ö": "ö", + "ȫ": "ȫ", + "õ": "õ", + "ṍ": "ṍ", + "ṏ": "ṏ", + "ȭ": "ȭ", + "ō": "ō", + "ṓ": "ṓ", + "ṑ": "ṑ", + "ŏ": "ŏ", + "ǒ": "ǒ", + "ô": "ô", + "ố": "ố", + "ồ": "ồ", + "ỗ": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "ő": "ő", + "ṕ": "ṕ", + "ṗ": "ṗ", + "ŕ": "ŕ", + "ř": "ř", + "ṙ": "ṙ", + "ŗ": "ŗ", + "ś": "ś", + "ṥ": "ṥ", + "š": "š", + "ṧ": "ṧ", + "ŝ": "ŝ", + "ṡ": "ṡ", + "ş": "ş", + "ẗ": "ẗ", + "ť": "ť", + "ṫ": "ṫ", + "ţ": "ţ", + "ú": "ú", + "ù": "ù", + "ü": "ü", + "ǘ": "ǘ", + "ǜ": "ǜ", + "ǖ": "ǖ", + "ǚ": "ǚ", + "ũ": "ũ", + "ṹ": "ṹ", + "ū": "ū", + "ṻ": "ṻ", + "ŭ": "ŭ", + "ǔ": "ǔ", + "û": "û", + "ů": "ů", + "ű": "ű", + "ṽ": "ṽ", + "ẃ": "ẃ", + "ẁ": "ẁ", + "ẅ": "ẅ", + "ŵ": "ŵ", + "ẇ": "ẇ", + "ẘ": "ẘ", + "ẍ": "ẍ", + "ẋ": "ẋ", + "ý": "ý", + "ỳ": "ỳ", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "ȳ", + "ŷ": "ŷ", + "ẏ": "ẏ", + "ẙ": "ẙ", + "ź": "ź", + "ž": "ž", + "ẑ": "ẑ", + "ż": "ż", + "Á": "Á", + "À": "À", + "Ä": "Ä", + "Ǟ": "Ǟ", + "Ã": "Ã", + "Ā": "Ā", + "Ă": "Ă", + "Ắ": "Ắ", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ǎ": "Ǎ", + "Â": "Â", + "Ấ": "Ấ", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ǡ": "Ǡ", + "Å": "Å", + "Ǻ": "Ǻ", + "Ḃ": "Ḃ", + "Ć": "Ć", + "Ḉ": "Ḉ", + "Č": "Č", + "Ĉ": "Ĉ", + "Ċ": "Ċ", + "Ç": "Ç", + "Ď": "Ď", + "Ḋ": "Ḋ", + "Ḑ": "Ḑ", + "É": "É", + "È": "È", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ē": "Ē", + "Ḗ": "Ḗ", + "Ḕ": "Ḕ", + "Ĕ": "Ĕ", + "Ḝ": "Ḝ", + "Ě": "Ě", + "Ê": "Ê", + "Ế": "Ế", + "Ề": "Ề", + "Ễ": "Ễ", + "Ė": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ǵ": "Ǵ", + "Ḡ": "Ḡ", + "Ğ": "Ğ", + "Ǧ": "Ǧ", + "Ĝ": "Ĝ", + "Ġ": "Ġ", + "Ģ": "Ģ", + "Ḧ": "Ḧ", + "Ȟ": "Ȟ", + "Ĥ": "Ĥ", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Í": "Í", + "Ì": "Ì", + "Ï": "Ï", + "Ḯ": "Ḯ", + "Ĩ": "Ĩ", + "Ī": "Ī", + "Ĭ": "Ĭ", + "Ǐ": "Ǐ", + "Î": "Î", + "İ": "İ", + "Ĵ": "Ĵ", + "Ḱ": "Ḱ", + "Ǩ": "Ǩ", + "Ķ": "Ķ", + "Ĺ": "Ĺ", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Ḿ": "Ḿ", + "Ṁ": "Ṁ", + "Ń": "Ń", + "Ǹ": "Ǹ", + "Ñ": "Ñ", + "Ň": "Ň", + "Ṅ": "Ṅ", + "Ņ": "Ņ", + "Ó": "Ó", + "Ò": "Ò", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "Ṍ", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "Ō": "Ō", + "Ṓ": "Ṓ", + "Ṑ": "Ṑ", + "Ŏ": "Ŏ", + "Ǒ": "Ǒ", + "Ô": "Ô", + "Ố": "Ố", + "Ồ": "Ồ", + "Ỗ": "Ỗ", + "Ȯ": "Ȯ", + "Ȱ": "Ȱ", + "Ő": "Ő", + "Ṕ": "Ṕ", + "Ṗ": "Ṗ", + "Ŕ": "Ŕ", + "Ř": "Ř", + "Ṙ": "Ṙ", + "Ŗ": "Ŗ", + "Ś": "Ś", + "Ṥ": "Ṥ", + "Š": "Š", + "Ṧ": "Ṧ", + "Ŝ": "Ŝ", + "Ṡ": "Ṡ", + "Ş": "Ş", + "Ť": "Ť", + "Ṫ": "Ṫ", + "Ţ": "Ţ", + "Ú": "Ú", + "Ù": "Ù", + "Ü": "Ü", + "Ǘ": "Ǘ", + "Ǜ": "Ǜ", + "Ǖ": "Ǖ", + "Ǚ": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "Ṹ", + "Ū": "Ū", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ǔ": "Ǔ", + "Û": "Û", + "Ů": "Ů", + "Ű": "Ű", + "Ṽ": "Ṽ", + "Ẃ": "Ẃ", + "Ẁ": "Ẁ", + "Ẅ": "Ẅ", + "Ŵ": "Ŵ", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ý": "Ý", + "Ỳ": "Ỳ", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "Ȳ", + "Ŷ": "Ŷ", + "Ẏ": "Ẏ", + "Ź": "Ź", + "Ž": "Ž", + "Ẑ": "Ẑ", + "Ż": "Ż", + "ά": "ά", + "ὰ": "ὰ", + "ᾱ": "ᾱ", + "ᾰ": "ᾰ", + "έ": "έ", + "ὲ": "ὲ", + "ή": "ή", + "ὴ": "ὴ", + "ί": "ί", + "ὶ": "ὶ", + "ϊ": "ϊ", + "ΐ": "ΐ", + "ῒ": "ῒ", + "ῑ": "ῑ", + "ῐ": "ῐ", + "ό": "ό", + "ὸ": "ὸ", + "ύ": "ύ", + "ὺ": "ὺ", + "ϋ": "ϋ", + "ΰ": "ΰ", + "ῢ": "ῢ", + "ῡ": "ῡ", + "ῠ": "ῠ", + "ώ": "ώ", + "ὼ": "ὼ", + "Ύ": "Ύ", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "Ῡ": "Ῡ", + "Ῠ": "Ῠ", + "Ώ": "Ώ", + "Ὼ": "Ὼ" +}; + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +class Parser { + constructor(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + + + consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + + + fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + + + parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + } + + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precendence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } else if (atom.type === "internal") { + continue; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + + + handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + if (body[i].type === "infix") { + if (overIndex !== -1) { + throw new ParseError("only one infix operator per group", body[i].token); + } + + overIndex = i; + funcName = body[i].replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } + /** + * Handle a subscript or superscript with nice errors. + */ + + + handleSupSubscript(name // For error reporting. + ) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + var group = this.parseGroup(name); + + if (!group) { + throw new ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + + + formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + + + parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + var limits = lex.text === "\\limits"; + base.limits = limits; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new ParseError("Limit controls must follow a math operator", lex); + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + + + parseFunction(breakOnTokenText, name // For determining its context + ) { + var token = this.fetch(); + var func = token.text; + var funcData = functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new ParseError("Can't use function '" + func + "' in math mode", token); + } + + var { + args, + optArgs + } = this.parseArguments(func, funcData); + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + + + callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token, + breakOnTokenText + }; + var func = functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + + + parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + + if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new ParseError("Null argument, please report this as a bug"); + } + } + + return { + args, + optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + + + parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + + case "size": + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional); + + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + } : null; + } + + case "raw": + { + var token = this.parseStringGroup("raw", optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + + case "primitive": + { + if (optional) { + throw new ParseError("A primitive argument cannot be optional"); + } + + var _group = this.parseGroup(name); + + if (_group == null) { + throw new ParseError("Expected group as " + name, this.fetch()); + } + + return _group; + } + + case "original": + case null: + case undefined: + return this.parseArgumentGroup(optional); + + default: + throw new ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + + + consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + + + parseStringGroup(modeName, // Used to describe the mode in error messages. + optional) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + + this.consume(); // consume the end of the argument + + argToken.text = str; + return argToken; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + + + parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + + + parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (res == null) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + + + parseSizeGroup(optional) { + var res; + var isBlank = false; // don't expand before parseStringGroup + + this.gullet.consumeSpaces(); + + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + + + parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + + this.gullet.lexer.setCatcode("~", 12); // other character + + var res = this.parseStringGroup("url", optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + + this.gullet.lexer.setCatcode("~", 13); // active character + + if (res == null) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url + }; + } + /** + * Parses an argument with the mode specified. + */ + + + parseArgumentGroup(optional, mode) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var outerMode = this.mode; + + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + + this.gullet.beginGroup(); + var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end + + this.expect("EOF"); // expect the end of the argument + + this.gullet.endGroup(); + var result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + + return result; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + + + parseGroup(name, // For error reporting. + breakOnTokenText) { + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + + + formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + + + parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.substr(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = '\u0131'; // dotless i, in math and text mode + } else if (text === 'j') { + text = '\u0237'; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family, + loc, + text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc, + text + }; + } // $FlowFixMe + + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + + if (!command) { + throw new ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + // $FlowFixMe + base: symbol + }; + } + } // $FlowFixMe + + + return symbol; + } + +} +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). + + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new ParseError("\\tag works only in display equations"); + } + + parser.gullet.feed("\\df@tag"); + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.parse() + }]; + } + + return tree; +}; + +/* eslint no-console:0 */ + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings(options); + return parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +var katex = { + /** + * Current KaTeX version + */ + version: "0.13.19", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span, + Anchor, + SymbolNode, + SvgNode, + PathNode, + LineNode + } +}; + +export { katex as default }; diff --git a/core/bikeshed/pygments.css b/core/bikeshed/pygments.css new file mode 100644 index 00000000..691aeb82 --- /dev/null +++ b/core/bikeshed/pygments.css @@ -0,0 +1,74 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/core/binary/conventions.html b/core/binary/conventions.html new file mode 100644 index 00000000..079d7a59 --- /dev/null +++ b/core/binary/conventions.html @@ -0,0 +1,192 @@ + + + + + + + + + Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Conventions

    +

    The binary format for WebAssembly modules is a dense linear encoding of their abstract syntax. +1

    +

    The format is defined by an attribute grammar whose only terminal symbols are bytes. +A byte sequence is a well-formed encoding of a module if and only if it is generated by the grammar.

    +

    Each production of this grammar has exactly one synthesized attribute: the abstract syntax that the respective byte sequence encodes. +Thus, the attribute grammar implicitly defines a decoding function +(i.e., a parsing function for the binary format).

    +

    Except for a few exceptions, the binary grammar closely mirrors the grammar of the abstract syntax.

    +
    +

    Note

    +

    Some phrases of abstract syntax have multiple possible encodings in the binary format. +For example, numbers may be encoded as if they had optional leading zeros. +Implementations of decoders must support all possible alternatives; +implementations of encoders can pick any allowed encoding.

    +
    +

    The recommended extension for files containing WebAssembly modules in binary format is “\(\mathtt{.wasm}\)” +and the recommended Media Type is “\(\mathtt{application/wasm}\)”.

    +
    +
    1
    +

    Additional encoding layers – for example, introducing compression – may be defined on top of the basic representation defined here. +However, such layers are outside the scope of the current specification.

    +
    +
    +
    +

    Grammar

    +

    The following conventions are adopted in defining grammar rules for the binary format. +They mirror the conventions used for abstract syntax. +In order to distinguish symbols of the binary syntax from symbols of the abstract syntax, \(\mathtt{typewriter}\) font is adopted for the former.

    +
      +
    • Terminal symbols are bytes expressed in hexadecimal notation: \(\def\mathdef1207#1{\mathtt{0x#1}}\mathdef1207{0F}\).

    • +
    • Nonterminal symbols are written in typewriter font: \(\mathtt{valtype}, \mathtt{instr}\).

    • +
    • \(B^n\) is a sequence of \(n\geq 0\) iterations of \(B\).

    • +
    • \(B^\ast\) is a possibly empty sequence of iterations of \(B\). +(This is a shorthand for \(B^n\) used where \(n\) is not relevant.)

    • +
    • \(B^?\) is an optional occurrence of \(B\). +(This is a shorthand for \(B^n\) where \(n \leq 1\).)

    • +
    • \(x{:}B\) denotes the same language as the nonterminal \(B\), but also binds the variable \(x\) to the attribute synthesized for \(B\).

    • +
    • Productions are written \(\mathtt{sym} ::= B_1 \Rightarrow A_1 ~|~ \dots ~|~ B_n \Rightarrow A_n\), where each \(A_i\) is the attribute that is synthesized for \(\mathtt{sym}\) in the given case, usually from attribute variables bound in \(B_i\).

    • +
    • Some productions are augmented by side conditions in parentheses, which restrict the applicability of the production. They provide a shorthand for a combinatorial expansion of the production into many separate cases.

    • +
    • If the same meta variable or non-terminal symbol appears multiple times in a production (in the syntax or in an attribute), then all those occurrences must have the same instantiation. +(This is a shorthand for a side condition requiring multiple different variables to be equal.)

    • +
    +
    +

    Note

    +

    For example, the binary grammar for number types is given as follows:

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef1168#1{{}}\mathdef1168{number types} & \href{../binary/types.html#binary-numtype}{\mathtt{numtype}} &::=& + \def\mathdef1208#1{\mathtt{0x#1}}\mathdef1208{7F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef1209#1{\mathtt{0x#1}}\mathdef1209{7E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef1210#1{\mathtt{0x#1}}\mathdef1210{7D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef1211#1{\mathtt{0x#1}}\mathdef1211{7C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ +\end{array}\end{split}\]
    +

    Consequently, the byte \(\def\mathdef1212#1{\mathtt{0x#1}}\mathdef1212{7F}\) encodes the type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\), +\(\def\mathdef1213#1{\mathtt{0x#1}}\mathdef1213{7E}\) encodes the type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\), and so forth. +No other byte value is allowed as the encoding of a number type.

    +

    The binary grammar for limits is defined as follows:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1168#1{{}}\mathdef1168{limits} & \href{../binary/types.html#binary-limits}{\mathtt{limits}} &::=& + \def\mathdef1214#1{\mathtt{0x#1}}\mathdef1214{00}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\epsilon \} \\ &&|& + \def\mathdef1215#1{\mathtt{0x#1}}\mathdef1215{01}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}}~~m{:}\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m \} \\ +\end{array}\end{split}\]
    +

    That is, a limits pair is encoded as either the byte \(\def\mathdef1216#1{\mathtt{0x#1}}\mathdef1216{00}\) followed by the encoding of a \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) value, +or the byte \(\def\mathdef1217#1{\mathtt{0x#1}}\mathdef1217{01}\) followed by two such encodings. +The variables \(n\) and \(m\) name the attributes of the respective \(\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}}\) nonterminals, which in this case are the actual unsigned integers those decode into. +The attribute of the complete production then is the abstract syntax for the limit, expressed in terms of the former values.

    +
    +
    +
    +

    Auxiliary Notation

    +

    When dealing with binary encodings the following notation is also used:

    +
      +
    • \(\epsilon\) denotes the empty byte sequence.

    • +
    • \(||B||\) is the length of the byte sequence generated from the production \(B\) in a derivation.

    • +
    +
    +
    +

    Vectors

    +

    Vectors are encoded with their \(\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}}\) length followed by the encoding of their element sequence.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1168#1{{}}\mathdef1168{vector} & \href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\mathtt{B}) &::=& + n{:}\href{../binary/values.html#binary-int}{\def\mathdef1173#1{{\mathtt{u}#1}}\mathdef1173{\mathtt{32}}}~~(x{:}\mathtt{B})^n &\Rightarrow& x^n \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/binary/index.html b/core/binary/index.html new file mode 100644 index 00000000..3d8ffb86 --- /dev/null +++ b/core/binary/index.html @@ -0,0 +1,167 @@ + + + + + + + + + Binary Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/binary/instructions.html b/core/binary/instructions.html new file mode 100644 index 00000000..66833c26 --- /dev/null +++ b/core/binary/instructions.html @@ -0,0 +1,775 @@ + + + + + + + + + Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Instructions

    +

    Instructions are encoded by opcodes. +Each opcode is represented by a single byte, +and is followed by the instruction’s immediate arguments, where present. +The only exception are structured control instructions, which consist of several opcodes bracketing their nested instruction sequences.

    +
    +

    Note

    +

    Gaps in the byte code ranges for encoding instructions are reserved for future extensions.

    +
    +
    +

    Control Instructions

    +

    Control instructions have varying encodings. For structured instructions, the instruction sequences forming nested blocks are terminated with explicit opcodes for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) and \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\).

    +

    Block types are encoded in special compressed form, by either the byte \(\def\mathdef1296#1{\mathtt{0x#1}}\mathdef1296{40}\) indicating the empty type, as a single value type, or as a type index encoded as a positive signed integer.

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef1257#1{{}}\mathdef1257{block type} & \href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}} &::=& + \def\mathdef1297#1{\mathtt{0x#1}}\mathdef1297{40} &\Rightarrow& \epsilon \\ &&|& + t{:}\href{../binary/types.html#binary-valtype}{\mathtt{valtype}} &\Rightarrow& t \\ &&|& + x{:}\href{../binary/values.html#binary-int}{\def\mathdef1267#1{{\mathtt{s}#1}}\mathdef1267{\mathtt{33}}} &\Rightarrow& x & (\mathrel{\mbox{if}} x \geq 0) \\ +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& + \def\mathdef1298#1{\mathtt{0x#1}}\mathdef1298{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} \\ &&|& + \def\mathdef1299#1{\mathtt{0x#1}}\mathdef1299{01} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} \\ &&|& + \def\mathdef1300#1{\mathtt{0x#1}}\mathdef1300{02}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef1301#1{\mathtt{0x#1}}\mathdef1301{0B} + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& + \def\mathdef1302#1{\mathtt{0x#1}}\mathdef1302{03}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef1303#1{\mathtt{0x#1}}\mathdef1303{0B} + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& + \def\mathdef1304#1{\mathtt{0x#1}}\mathdef1304{04}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef1305#1{\mathtt{0x#1}}\mathdef1305{0B} + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\epsilon~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& + \def\mathdef1306#1{\mathtt{0x#1}}\mathdef1306{04}~~\mathit{bt}{:}\href{../binary/instructions.html#binary-blocktype}{\mathtt{blocktype}}~~(\mathit{in}_1{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~ + \def\mathdef1307#1{\mathtt{0x#1}}\mathdef1307{05}~~(\mathit{in}_2{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef1308#1{\mathtt{0x#1}}\mathdef1308{0B} + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\mathit{in}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\mathit{in}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& + \def\mathdef1309#1{\mathtt{0x#1}}\mathdef1309{0C}~~l{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l \\ &&|& + \def\mathdef1310#1{\mathtt{0x#1}}\mathdef1310{0D}~~l{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l \\ &&|& + \def\mathdef1311#1{\mathtt{0x#1}}\mathdef1311{0E}~~l^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}})~~l_N{:}\href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N \\ &&|& + \def\mathdef1312#1{\mathtt{0x#1}}\mathdef1312{0F} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}} \\ &&|& + \def\mathdef1313#1{\mathtt{0x#1}}\mathdef1313{10}~~x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x \\ &&|& + \def\mathdef1314#1{\mathtt{0x#1}}\mathdef1314{11}~~y{:}\href{../binary/modules.html#binary-typeidx}{\mathtt{typeidx}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\) opcode \(\def\mathdef1315#1{\mathtt{0x#1}}\mathdef1315{05}\) in the encoding of an \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) instruction can be omitted if the following instruction sequence is empty.

    +

    Unlike any other occurrence, the type index in a block type is encoded as a positive signed integer, so that its signed LEB128 bit pattern cannot collide with the encoding of value types or the special code \(\def\mathdef1316#1{\mathtt{0x#1}}\mathdef1316{40}\), which correspond to the LEB128 encoding of negative integers. +To avoid any loss in the range of allowed indices, it is treated as a 33 bit signed integer.

    +
    +
    +
    +

    Reference Instructions

    +

    Reference instructions are represented by single byte codes.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& + \def\mathdef1317#1{\mathtt{0x#1}}\mathdef1317{D0}~~t{:}\href{../binary/types.html#binary-reftype}{\mathtt{reftype}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t \\ &&|& + \def\mathdef1318#1{\mathtt{0x#1}}\mathdef1318{D1} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} \\ &&|& + \def\mathdef1319#1{\mathtt{0x#1}}\mathdef1319{D2}~~x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Parametric Instructions

    +

    Parametric instructions are represented by single byte codes, possibly followed by a type annotation.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& + \def\mathdef1320#1{\mathtt{0x#1}}\mathdef1320{1A} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} \\ &&|& + \def\mathdef1321#1{\mathtt{0x#1}}\mathdef1321{1B} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}} \\ &&|& + \def\mathdef1322#1{\mathtt{0x#1}}\mathdef1322{1C}~~t^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/types.html#binary-valtype}{\mathtt{valtype}}) &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t^\ast \\ +\end{array}\end{split}\]
    +
    +
    +

    Variable Instructions

    +

    Variable instructions are represented by byte codes followed by the encoding of the respective index.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& + \def\mathdef1323#1{\mathtt{0x#1}}\mathdef1323{20}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x \\ &&|& + \def\mathdef1324#1{\mathtt{0x#1}}\mathdef1324{21}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x \\ &&|& + \def\mathdef1325#1{\mathtt{0x#1}}\mathdef1325{22}~~x{:}\href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x \\ &&|& + \def\mathdef1326#1{\mathtt{0x#1}}\mathdef1326{23}~~x{:}\href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x \\ &&|& + \def\mathdef1327#1{\mathtt{0x#1}}\mathdef1327{24}~~x{:}\href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Table Instructions

    +

    Table instructions are represented either by a single byte or a one byte prefix followed by a variable-length unsigned integer.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& + \def\mathdef1328#1{\mathtt{0x#1}}\mathdef1328{25}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x \\ &&|& + \def\mathdef1329#1{\mathtt{0x#1}}\mathdef1329{26}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x \\ &&|& + \def\mathdef1330#1{\mathtt{0x#1}}\mathdef1330{FC}~~12{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~y{:}\href{../binary/modules.html#binary-elemidx}{\mathtt{elemidx}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y \\ &&|& + \def\mathdef1331#1{\mathtt{0x#1}}\mathdef1331{FC}~~13{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-elemidx}{\mathtt{elemidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x \\ &&|& + \def\mathdef1332#1{\mathtt{0x#1}}\mathdef1332{FC}~~14{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}}~~y{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y \\ &&|& + \def\mathdef1333#1{\mathtt{0x#1}}\mathdef1333{FC}~~15{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x \\ &&|& + \def\mathdef1334#1{\mathtt{0x#1}}\mathdef1334{FC}~~16{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x \\ &&|& + \def\mathdef1335#1{\mathtt{0x#1}}\mathdef1335{FC}~~17{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Memory Instructions

    +

    Each variant of memory instruction is encoded with a different byte code. Loads and stores are followed by the encoding of their \(\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) immediate.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{memory argument} & \href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &::=& + a{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~o{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~a,~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~o \} \\ +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\ &&|& + \def\mathdef1336#1{\mathtt{0x#1}}\mathdef1336{28}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef1337#1{\mathtt{0x#1}}\mathdef1337{29}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef1338#1{\mathtt{0x#1}}\mathdef1338{2A}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef1339#1{\mathtt{0x#1}}\mathdef1339{2B}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef1340#1{\mathtt{0x#1}}\mathdef1340{2C}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& + \def\mathdef1341#1{\mathtt{0x#1}}\mathdef1341{2D}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& + \def\mathdef1342#1{\mathtt{0x#1}}\mathdef1342{2E}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& + \def\mathdef1343#1{\mathtt{0x#1}}\mathdef1343{2F}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& + \def\mathdef1344#1{\mathtt{0x#1}}\mathdef1344{30}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& + \def\mathdef1345#1{\mathtt{0x#1}}\mathdef1345{31}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& + \def\mathdef1346#1{\mathtt{0x#1}}\mathdef1346{32}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& + \def\mathdef1347#1{\mathtt{0x#1}}\mathdef1347{33}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& + \def\mathdef1348#1{\mathtt{0x#1}}\mathdef1348{34}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_s}~m \\ &&|& + \def\mathdef1349#1{\mathtt{0x#1}}\mathdef1349{35}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_u}~m \\ &&|& + \def\mathdef1350#1{\mathtt{0x#1}}\mathdef1350{36}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef1351#1{\mathtt{0x#1}}\mathdef1351{37}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef1352#1{\mathtt{0x#1}}\mathdef1352{38}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef1353#1{\mathtt{0x#1}}\mathdef1353{39}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef1354#1{\mathtt{0x#1}}\mathdef1354{3A}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& + \def\mathdef1355#1{\mathtt{0x#1}}\mathdef1355{3B}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& + \def\mathdef1356#1{\mathtt{0x#1}}\mathdef1356{3C}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& + \def\mathdef1357#1{\mathtt{0x#1}}\mathdef1357{3D}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& + \def\mathdef1358#1{\mathtt{0x#1}}\mathdef1358{3E}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32}~m \\ &&|& + \def\mathdef1359#1{\mathtt{0x#1}}\mathdef1359{3F}~~\def\mathdef1360#1{\mathtt{0x#1}}\mathdef1360{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} \\ &&|& + \def\mathdef1361#1{\mathtt{0x#1}}\mathdef1361{40}~~\def\mathdef1362#1{\mathtt{0x#1}}\mathdef1362{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} \\ &&|& + \def\mathdef1363#1{\mathtt{0x#1}}\mathdef1363{FC}~~8{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-dataidx}{\mathtt{dataidx}}~\def\mathdef1364#1{\mathtt{0x#1}}\mathdef1364{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x \\ &&|& + \def\mathdef1365#1{\mathtt{0x#1}}\mathdef1365{FC}~~9{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~x{:}\href{../binary/modules.html#binary-dataidx}{\mathtt{dataidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x \\ &&|& + \def\mathdef1366#1{\mathtt{0x#1}}\mathdef1366{FC}~~10{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~\def\mathdef1367#1{\mathtt{0x#1}}\mathdef1367{00}~~\def\mathdef1368#1{\mathtt{0x#1}}\mathdef1368{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\ &&|& + \def\mathdef1369#1{\mathtt{0x#1}}\mathdef1369{FC}~~11{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~\def\mathdef1370#1{\mathtt{0x#1}}\mathdef1370{00} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    In future versions of WebAssembly, the additional zero bytes occurring in the encoding of the \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\), \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\), and \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\) instructions may be used to index additional memories.

    +
    +
    +
    +

    Numeric Instructions

    +

    All variants of numeric instructions are represented by separate byte codes.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions are followed by the respective literal.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& + \def\mathdef1371#1{\mathtt{0x#1}}\mathdef1371{41}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1270#1{{\mathtt{i}#1}}\mathdef1270{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& + \def\mathdef1372#1{\mathtt{0x#1}}\mathdef1372{42}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1271#1{{\mathtt{i}#1}}\mathdef1271{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& + \def\mathdef1373#1{\mathtt{0x#1}}\mathdef1373{43}~~z{:}\href{../binary/values.html#binary-float}{\def\mathdef1273#1{{\mathtt{f}#1}}\mathdef1273{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ &&|& + \def\mathdef1374#1{\mathtt{0x#1}}\mathdef1374{44}~~z{:}\href{../binary/values.html#binary-float}{\def\mathdef1274#1{{\mathtt{f}#1}}\mathdef1274{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ +\end{array}\end{split}\]
    +

    All other numeric instructions are plain opcodes without any immediates.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots && \phantom{thisshouldbeenough} \\&&|& + \def\mathdef1375#1{\mathtt{0x#1}}\mathdef1375{45} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& + \def\mathdef1376#1{\mathtt{0x#1}}\mathdef1376{46} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef1377#1{\mathtt{0x#1}}\mathdef1377{47} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef1378#1{\mathtt{0x#1}}\mathdef1378{48} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1379#1{\mathtt{0x#1}}\mathdef1379{49} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef1380#1{\mathtt{0x#1}}\mathdef1380{4A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1381#1{\mathtt{0x#1}}\mathdef1381{4B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef1382#1{\mathtt{0x#1}}\mathdef1382{4C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1383#1{\mathtt{0x#1}}\mathdef1383{4D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef1384#1{\mathtt{0x#1}}\mathdef1384{4E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef1385#1{\mathtt{0x#1}}\mathdef1385{4F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1386#1{\mathtt{0x#1}}\mathdef1386{50} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& + \def\mathdef1387#1{\mathtt{0x#1}}\mathdef1387{51} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef1388#1{\mathtt{0x#1}}\mathdef1388{52} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef1389#1{\mathtt{0x#1}}\mathdef1389{53} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1390#1{\mathtt{0x#1}}\mathdef1390{54} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef1391#1{\mathtt{0x#1}}\mathdef1391{55} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1392#1{\mathtt{0x#1}}\mathdef1392{56} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef1393#1{\mathtt{0x#1}}\mathdef1393{57} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1394#1{\mathtt{0x#1}}\mathdef1394{58} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef1395#1{\mathtt{0x#1}}\mathdef1395{59} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef1396#1{\mathtt{0x#1}}\mathdef1396{5A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1397#1{\mathtt{0x#1}}\mathdef1397{5B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef1398#1{\mathtt{0x#1}}\mathdef1398{5C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef1399#1{\mathtt{0x#1}}\mathdef1399{5D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& + \def\mathdef1400#1{\mathtt{0x#1}}\mathdef1400{5E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& + \def\mathdef1401#1{\mathtt{0x#1}}\mathdef1401{5F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& + \def\mathdef1402#1{\mathtt{0x#1}}\mathdef1402{60} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1403#1{\mathtt{0x#1}}\mathdef1403{61} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef1404#1{\mathtt{0x#1}}\mathdef1404{62} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef1405#1{\mathtt{0x#1}}\mathdef1405{63} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& + \def\mathdef1406#1{\mathtt{0x#1}}\mathdef1406{64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& + \def\mathdef1407#1{\mathtt{0x#1}}\mathdef1407{65} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& + \def\mathdef1408#1{\mathtt{0x#1}}\mathdef1408{66} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1409#1{\mathtt{0x#1}}\mathdef1409{67} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& + \def\mathdef1410#1{\mathtt{0x#1}}\mathdef1410{68} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& + \def\mathdef1411#1{\mathtt{0x#1}}\mathdef1411{69} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& + \def\mathdef1412#1{\mathtt{0x#1}}\mathdef1412{6A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef1413#1{\mathtt{0x#1}}\mathdef1413{6B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef1414#1{\mathtt{0x#1}}\mathdef1414{6C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef1415#1{\mathtt{0x#1}}\mathdef1415{6D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& + \def\mathdef1416#1{\mathtt{0x#1}}\mathdef1416{6E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& + \def\mathdef1417#1{\mathtt{0x#1}}\mathdef1417{6F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& + \def\mathdef1418#1{\mathtt{0x#1}}\mathdef1418{70} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& + \def\mathdef1419#1{\mathtt{0x#1}}\mathdef1419{71} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& + \def\mathdef1420#1{\mathtt{0x#1}}\mathdef1420{72} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& + \def\mathdef1421#1{\mathtt{0x#1}}\mathdef1421{73} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& + \def\mathdef1422#1{\mathtt{0x#1}}\mathdef1422{74} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& + \def\mathdef1423#1{\mathtt{0x#1}}\mathdef1423{75} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1424#1{\mathtt{0x#1}}\mathdef1424{76} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1425#1{\mathtt{0x#1}}\mathdef1425{77} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& + \def\mathdef1426#1{\mathtt{0x#1}}\mathdef1426{78} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1427#1{\mathtt{0x#1}}\mathdef1427{79} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& + \def\mathdef1428#1{\mathtt{0x#1}}\mathdef1428{7A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& + \def\mathdef1429#1{\mathtt{0x#1}}\mathdef1429{7B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& + \def\mathdef1430#1{\mathtt{0x#1}}\mathdef1430{7C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef1431#1{\mathtt{0x#1}}\mathdef1431{7D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef1432#1{\mathtt{0x#1}}\mathdef1432{7E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef1433#1{\mathtt{0x#1}}\mathdef1433{7F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& + \def\mathdef1434#1{\mathtt{0x#1}}\mathdef1434{80} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& + \def\mathdef1435#1{\mathtt{0x#1}}\mathdef1435{81} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& + \def\mathdef1436#1{\mathtt{0x#1}}\mathdef1436{82} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& + \def\mathdef1437#1{\mathtt{0x#1}}\mathdef1437{83} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& + \def\mathdef1438#1{\mathtt{0x#1}}\mathdef1438{84} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& + \def\mathdef1439#1{\mathtt{0x#1}}\mathdef1439{85} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& + \def\mathdef1440#1{\mathtt{0x#1}}\mathdef1440{86} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& + \def\mathdef1441#1{\mathtt{0x#1}}\mathdef1441{87} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1442#1{\mathtt{0x#1}}\mathdef1442{88} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1443#1{\mathtt{0x#1}}\mathdef1443{89} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& + \def\mathdef1444#1{\mathtt{0x#1}}\mathdef1444{8A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1445#1{\mathtt{0x#1}}\mathdef1445{8B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& + \def\mathdef1446#1{\mathtt{0x#1}}\mathdef1446{8C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& + \def\mathdef1447#1{\mathtt{0x#1}}\mathdef1447{8D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& + \def\mathdef1448#1{\mathtt{0x#1}}\mathdef1448{8E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& + \def\mathdef1449#1{\mathtt{0x#1}}\mathdef1449{8F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& + \def\mathdef1450#1{\mathtt{0x#1}}\mathdef1450{90} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& + \def\mathdef1451#1{\mathtt{0x#1}}\mathdef1451{91} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& + \def\mathdef1452#1{\mathtt{0x#1}}\mathdef1452{92} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef1453#1{\mathtt{0x#1}}\mathdef1453{93} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef1454#1{\mathtt{0x#1}}\mathdef1454{94} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef1455#1{\mathtt{0x#1}}\mathdef1455{95} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& + \def\mathdef1456#1{\mathtt{0x#1}}\mathdef1456{96} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& + \def\mathdef1457#1{\mathtt{0x#1}}\mathdef1457{97} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& + \def\mathdef1458#1{\mathtt{0x#1}}\mathdef1458{98} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1459#1{\mathtt{0x#1}}\mathdef1459{99} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& + \def\mathdef1460#1{\mathtt{0x#1}}\mathdef1460{9A} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& + \def\mathdef1461#1{\mathtt{0x#1}}\mathdef1461{9B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& + \def\mathdef1462#1{\mathtt{0x#1}}\mathdef1462{9C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& + \def\mathdef1463#1{\mathtt{0x#1}}\mathdef1463{9D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& + \def\mathdef1464#1{\mathtt{0x#1}}\mathdef1464{9E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& + \def\mathdef1465#1{\mathtt{0x#1}}\mathdef1465{9F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& + \def\mathdef1466#1{\mathtt{0x#1}}\mathdef1466{A0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef1467#1{\mathtt{0x#1}}\mathdef1467{A1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef1468#1{\mathtt{0x#1}}\mathdef1468{A2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef1469#1{\mathtt{0x#1}}\mathdef1469{A3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& + \def\mathdef1470#1{\mathtt{0x#1}}\mathdef1470{A4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& + \def\mathdef1471#1{\mathtt{0x#1}}\mathdef1471{A5} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& + \def\mathdef1472#1{\mathtt{0x#1}}\mathdef1472{A6} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1473#1{\mathtt{0x#1}}\mathdef1473{A7} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef1474#1{\mathtt{0x#1}}\mathdef1474{A8} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef1475#1{\mathtt{0x#1}}\mathdef1475{A9} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef1476#1{\mathtt{0x#1}}\mathdef1476{AA} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef1477#1{\mathtt{0x#1}}\mathdef1477{AB} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef1478#1{\mathtt{0x#1}}\mathdef1478{AC} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef1479#1{\mathtt{0x#1}}\mathdef1479{AD} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef1480#1{\mathtt{0x#1}}\mathdef1480{AE} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef1481#1{\mathtt{0x#1}}\mathdef1481{AF} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef1482#1{\mathtt{0x#1}}\mathdef1482{B0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef1483#1{\mathtt{0x#1}}\mathdef1483{B1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef1484#1{\mathtt{0x#1}}\mathdef1484{B2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef1485#1{\mathtt{0x#1}}\mathdef1485{B3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef1486#1{\mathtt{0x#1}}\mathdef1486{B4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& + \def\mathdef1487#1{\mathtt{0x#1}}\mathdef1487{B5} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& + \def\mathdef1488#1{\mathtt{0x#1}}\mathdef1488{B6} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& + \def\mathdef1489#1{\mathtt{0x#1}}\mathdef1489{B7} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef1490#1{\mathtt{0x#1}}\mathdef1490{B8} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef1491#1{\mathtt{0x#1}}\mathdef1491{B9} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& + \def\mathdef1492#1{\mathtt{0x#1}}\mathdef1492{BA} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& + \def\mathdef1493#1{\mathtt{0x#1}}\mathdef1493{BB} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef1494#1{\mathtt{0x#1}}\mathdef1494{BC} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef1495#1{\mathtt{0x#1}}\mathdef1495{BD} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& + \def\mathdef1496#1{\mathtt{0x#1}}\mathdef1496{BE} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef1497#1{\mathtt{0x#1}}\mathdef1497{BF} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef1498#1{\mathtt{0x#1}}\mathdef1498{C0} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& + \def\mathdef1499#1{\mathtt{0x#1}}\mathdef1499{C1} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& + \def\mathdef1500#1{\mathtt{0x#1}}\mathdef1500{C2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& + \def\mathdef1501#1{\mathtt{0x#1}}\mathdef1501{C3} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& + \def\mathdef1502#1{\mathtt{0x#1}}\mathdef1502{C4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{32\_s} \\ +\end{array}\end{split}\]
    +

    The saturating truncation instructions all have a one byte prefix, +whereas the actual opcode is encoded by a variable-length unsigned integer.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots && \phantom{thisshouldbeenough} \\&&|& + \def\mathdef1503#1{\mathtt{0x#1}}\mathdef1503{FC}~~0{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef1504#1{\mathtt{0x#1}}\mathdef1504{FC}~~1{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef1505#1{\mathtt{0x#1}}\mathdef1505{FC}~~2{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef1506#1{\mathtt{0x#1}}\mathdef1506{FC}~~3{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef1507#1{\mathtt{0x#1}}\mathdef1507{FC}~~4{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef1508#1{\mathtt{0x#1}}\mathdef1508{FC}~~5{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef1509#1{\mathtt{0x#1}}\mathdef1509{FC}~~6{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef1510#1{\mathtt{0x#1}}\mathdef1510{FC}~~7{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +
    +

    Vector Instructions

    +

    All variants of vector instructions are represented by separate byte codes. +They all have a one byte prefix, whereas the actual opcode is encoded by a variable-length unsigned integer.

    +

    Vector loads and stores are followed by the encoding of their \(\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) immediate.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{lane index} & \href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &::=& + l{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}} &\Rightarrow& l \\ +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& + \def\mathdef1511#1{\mathtt{0x#1}}\mathdef1511{FD}~~0{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef1512#1{\mathtt{0x#1}}\mathdef1512{FD}~~1{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_s}~m \\ &&|& + \def\mathdef1513#1{\mathtt{0x#1}}\mathdef1513{FD}~~2{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_u}~m \\ &&|& + \def\mathdef1514#1{\mathtt{0x#1}}\mathdef1514{FD}~~3{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_s}~m \\ &&|& + \def\mathdef1515#1{\mathtt{0x#1}}\mathdef1515{FD}~~4{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_u}~m \\ &&|& + \def\mathdef1516#1{\mathtt{0x#1}}\mathdef1516{FD}~~5{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_s}~m \\ &&|& + \def\mathdef1517#1{\mathtt{0x#1}}\mathdef1517{FD}~~6{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_u}~m \\ &&|& + \def\mathdef1518#1{\mathtt{0x#1}}\mathdef1518{FD}~~7{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_splat}~m \\ &&|& + \def\mathdef1519#1{\mathtt{0x#1}}\mathdef1519{FD}~~8{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_splat}~m \\ &&|& + \def\mathdef1520#1{\mathtt{0x#1}}\mathdef1520{FD}~~9{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_splat}~m \\ &&|& + \def\mathdef1521#1{\mathtt{0x#1}}\mathdef1521{FD}~~10{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_splat}~m \\ &&|& + \def\mathdef1522#1{\mathtt{0x#1}}\mathdef1522{FD}~~92{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_zero}~m \\ &&|& + \def\mathdef1523#1{\mathtt{0x#1}}\mathdef1523{FD}~~93{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_zero}~m \\ &&|& + \def\mathdef1524#1{\mathtt{0x#1}}\mathdef1524{FD}~~11{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef1525#1{\mathtt{0x#1}}\mathdef1525{FD}~~84{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_lane}~m~l \\ &&|& + \def\mathdef1526#1{\mathtt{0x#1}}\mathdef1526{FD}~~85{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_lane}~m~l \\ &&|& + \def\mathdef1527#1{\mathtt{0x#1}}\mathdef1527{FD}~~86{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_lane}~m~l \\ &&|& + \def\mathdef1528#1{\mathtt{0x#1}}\mathdef1528{FD}~~87{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_lane}~m~l \\ &&|& + \def\mathdef1529#1{\mathtt{0x#1}}\mathdef1529{FD}~~88{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8\_lane}~m~l \\ &&|& + \def\mathdef1530#1{\mathtt{0x#1}}\mathdef1530{FD}~~89{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16\_lane}~m~l \\ &&|& + \def\mathdef1531#1{\mathtt{0x#1}}\mathdef1531{FD}~~90{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32\_lane}~m~l \\ &&|& + \def\mathdef1532#1{\mathtt{0x#1}}\mathdef1532{FD}~~91{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~m{:}\href{../binary/instructions.html#binary-memarg}{\mathtt{memarg}}~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{64\_lane}~m~l \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}\) instruction is followed by 16 immediate bytes, which are converted into a \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\) in \(\href{../exec/numerics.html#aux-littleendian}{\mathrm{littleendian}}\) byte order:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& + \def\mathdef1533#1{\mathtt{0x#1}}\mathdef1533{FD}~~12{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~(b{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}})^{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~ + bytes_{\mathsf{i128}}^{-1}(b_{0}~\dots~b_{15}) \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}\) instruction is also followed by the encoding of 16 \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) immediates.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& + \def\mathdef1534#1{\mathtt{0x#1}}\mathdef1534{FD}~~13{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~(l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}})^{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~l^{16} \\ +\end{array}\end{split}\]
    +

    \(\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\) and \(\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}\) instructions are followed by the encoding of a \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) immediate.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots \\&&|& + \def\mathdef1535#1{\mathtt{0x#1}}\mathdef1535{FD}~~21{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~l \\ &&|& + \def\mathdef1536#1{\mathtt{0x#1}}\mathdef1536{FD}~~22{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~l \\ &&|& + \def\mathdef1537#1{\mathtt{0x#1}}\mathdef1537{FD}~~23{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ &&|& + \def\mathdef1538#1{\mathtt{0x#1}}\mathdef1538{FD}~~24{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~l \\ &&|& + \def\mathdef1539#1{\mathtt{0x#1}}\mathdef1539{FD}~~25{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~l \\ &&|& + \def\mathdef1540#1{\mathtt{0x#1}}\mathdef1540{FD}~~26{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ &&|& + \def\mathdef1541#1{\mathtt{0x#1}}\mathdef1541{FD}~~27{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~l \\ &&|& + \def\mathdef1542#1{\mathtt{0x#1}}\mathdef1542{FD}~~28{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ &&|& + \def\mathdef1543#1{\mathtt{0x#1}}\mathdef1543{FD}~~29{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~l \\ &&|& + \def\mathdef1544#1{\mathtt{0x#1}}\mathdef1544{FD}~~30{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ &&|& + \def\mathdef1545#1{\mathtt{0x#1}}\mathdef1545{FD}~~31{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~l \\ &&|& + \def\mathdef1546#1{\mathtt{0x#1}}\mathdef1546{FD}~~32{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ &&|& + \def\mathdef1547#1{\mathtt{0x#1}}\mathdef1547{FD}~~33{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~l \\ &&|& + \def\mathdef1548#1{\mathtt{0x#1}}\mathdef1548{FD}~~34{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}}~~l{:}\href{../binary/instructions.html#binary-laneidx}{\mathtt{laneidx}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~l \\ +\end{array}\end{split}\]
    +

    All other vector instructions are plain opcodes without any immediates.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{instruction} & \href{../binary/instructions.html#binary-instr}{\mathtt{instr}} &::=& \dots && \phantom{vechaslongerinstructionnames} \\&&|& + \def\mathdef1549#1{\mathtt{0x#1}}\mathdef1549{FD}~~14{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}} \\ &&|& + \def\mathdef1550#1{\mathtt{0x#1}}\mathdef1550{FD}~~15{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ &&|& + \def\mathdef1551#1{\mathtt{0x#1}}\mathdef1551{FD}~~16{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ &&|& + \def\mathdef1552#1{\mathtt{0x#1}}\mathdef1552{FD}~~17{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ &&|& + \def\mathdef1553#1{\mathtt{0x#1}}\mathdef1553{FD}~~18{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ &&|& + \def\mathdef1554#1{\mathtt{0x#1}}\mathdef1554{FD}~~19{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ &&|& + \def\mathdef1555#1{\mathtt{0x#1}}\mathdef1555{FD}~~20{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1556#1{\mathtt{0x#1}}\mathdef1556{FD}~~35{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1557#1{\mathtt{0x#1}}\mathdef1557{FD}~~36{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1558#1{\mathtt{0x#1}}\mathdef1558{FD}~~37{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1559#1{\mathtt{0x#1}}\mathdef1559{FD}~~38{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef1560#1{\mathtt{0x#1}}\mathdef1560{FD}~~39{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1561#1{\mathtt{0x#1}}\mathdef1561{FD}~~40{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef1562#1{\mathtt{0x#1}}\mathdef1562{FD}~~41{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1563#1{\mathtt{0x#1}}\mathdef1563{FD}~~42{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef1564#1{\mathtt{0x#1}}\mathdef1564{FD}~~43{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef1565#1{\mathtt{0x#1}}\mathdef1565{FD}~~44{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1566#1{\mathtt{0x#1}}\mathdef1566{FD}~~45{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1567#1{\mathtt{0x#1}}\mathdef1567{FD}~~46{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1568#1{\mathtt{0x#1}}\mathdef1568{FD}~~47{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1569#1{\mathtt{0x#1}}\mathdef1569{FD}~~48{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef1570#1{\mathtt{0x#1}}\mathdef1570{FD}~~49{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1571#1{\mathtt{0x#1}}\mathdef1571{FD}~~50{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef1572#1{\mathtt{0x#1}}\mathdef1572{FD}~~51{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1573#1{\mathtt{0x#1}}\mathdef1573{FD}~~52{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef1574#1{\mathtt{0x#1}}\mathdef1574{FD}~~53{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef1575#1{\mathtt{0x#1}}\mathdef1575{FD}~~54{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1576#1{\mathtt{0x#1}}\mathdef1576{FD}~~55{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1577#1{\mathtt{0x#1}}\mathdef1577{FD}~~56{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1578#1{\mathtt{0x#1}}\mathdef1578{FD}~~57{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1579#1{\mathtt{0x#1}}\mathdef1579{FD}~~58{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef1580#1{\mathtt{0x#1}}\mathdef1580{FD}~~59{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1581#1{\mathtt{0x#1}}\mathdef1581{FD}~~60{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef1582#1{\mathtt{0x#1}}\mathdef1582{FD}~~61{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1583#1{\mathtt{0x#1}}\mathdef1583{FD}~~62{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef1584#1{\mathtt{0x#1}}\mathdef1584{FD}~~63{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef1585#1{\mathtt{0x#1}}\mathdef1585{FD}~~64{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1586#1{\mathtt{0x#1}}\mathdef1586{FD}~~214{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1587#1{\mathtt{0x#1}}\mathdef1587{FD}~~215{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1588#1{\mathtt{0x#1}}\mathdef1588{FD}~~216{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef1589#1{\mathtt{0x#1}}\mathdef1589{FD}~~217{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef1590#1{\mathtt{0x#1}}\mathdef1590{FD}~~218{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef1591#1{\mathtt{0x#1}}\mathdef1591{FD}~~219{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s} \\ &&|& +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1592#1{\mathtt{0x#1}}\mathdef1592{FD}~~65{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1593#1{\mathtt{0x#1}}\mathdef1593{FD}~~66{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1594#1{\mathtt{0x#1}}\mathdef1594{FD}~~67{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}} \\ &&|& + \def\mathdef1595#1{\mathtt{0x#1}}\mathdef1595{FD}~~68{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}} \\ &&|& + \def\mathdef1596#1{\mathtt{0x#1}}\mathdef1596{FD}~~69{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}} \\ &&|& + \def\mathdef1597#1{\mathtt{0x#1}}\mathdef1597{FD}~~70{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1598#1{\mathtt{0x#1}}\mathdef1598{FD}~~71{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}} \\ &&|& + \def\mathdef1599#1{\mathtt{0x#1}}\mathdef1599{FD}~~72{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}} \\ &&|& + \def\mathdef1600#1{\mathtt{0x#1}}\mathdef1600{FD}~~73{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}} \\ &&|& + \def\mathdef1601#1{\mathtt{0x#1}}\mathdef1601{FD}~~74{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}} \\ &&|& + \def\mathdef1602#1{\mathtt{0x#1}}\mathdef1602{FD}~~75{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}} \\ &&|& + \def\mathdef1603#1{\mathtt{0x#1}}\mathdef1603{FD}~~76{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1604#1{\mathtt{0x#1}}\mathdef1604{FD}~~77{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{not}} \\ &&|& + \def\mathdef1605#1{\mathtt{0x#1}}\mathdef1605{FD}~~78{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{and}} \\ &&|& + \def\mathdef1606#1{\mathtt{0x#1}}\mathdef1606{FD}~~79{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{andnot}} \\ &&|& + \def\mathdef1607#1{\mathtt{0x#1}}\mathdef1607{FD}~~80{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{or}} \\ &&|& + \def\mathdef1608#1{\mathtt{0x#1}}\mathdef1608{FD}~~81{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{xor}} \\ &&|& + \def\mathdef1609#1{\mathtt{0x#1}}\mathdef1609{FD}~~82{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitselect}} \\ &&|& + \def\mathdef1610#1{\mathtt{0x#1}}\mathdef1610{FD}~~83{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{any\_true}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1611#1{\mathtt{0x#1}}\mathdef1611{FD}~~96{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1612#1{\mathtt{0x#1}}\mathdef1612{FD}~~97{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1613#1{\mathtt{0x#1}}\mathdef1613{FD}~~98{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{popcnt}} \\ &&|& + \def\mathdef1614#1{\mathtt{0x#1}}\mathdef1614{FD}~~99{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}} \\ &&|& + \def\mathdef1615#1{\mathtt{0x#1}}\mathdef1615{FD}~~100{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} \\ &&|& + \def\mathdef1616#1{\mathtt{0x#1}}\mathdef1616{FD}~~101{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_s} \\ &&|& + \def\mathdef1617#1{\mathtt{0x#1}}\mathdef1617{FD}~~102{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_u} \\ &&|& + \def\mathdef1618#1{\mathtt{0x#1}}\mathdef1618{FD}~~107{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}} \\ &&|& + \def\mathdef1619#1{\mathtt{0x#1}}\mathdef1619{FD}~~108{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1620#1{\mathtt{0x#1}}\mathdef1620{FD}~~109{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1621#1{\mathtt{0x#1}}\mathdef1621{FD}~~110{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1622#1{\mathtt{0x#1}}\mathdef1622{FD}~~111{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s} \\ &&|& + \def\mathdef1623#1{\mathtt{0x#1}}\mathdef1623{FD}~~112{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u} \\ &&|& + \def\mathdef1624#1{\mathtt{0x#1}}\mathdef1624{FD}~~113{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1625#1{\mathtt{0x#1}}\mathdef1625{FD}~~114{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s} \\ &&|& + \def\mathdef1626#1{\mathtt{0x#1}}\mathdef1626{FD}~~115{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u} \\ &&|& + \def\mathdef1627#1{\mathtt{0x#1}}\mathdef1627{FD}~~118{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s} \\ &&|& + \def\mathdef1628#1{\mathtt{0x#1}}\mathdef1628{FD}~~119{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u} \\ &&|& + \def\mathdef1629#1{\mathtt{0x#1}}\mathdef1629{FD}~~120{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s} \\ &&|& + \def\mathdef1630#1{\mathtt{0x#1}}\mathdef1630{FD}~~121{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u} \\ &&|& + \def\mathdef1631#1{\mathtt{0x#1}}\mathdef1631{FD}~~123{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1632#1{\mathtt{0x#1}}\mathdef1632{FD}~~124{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_s}\\ &&|& + \def\mathdef1633#1{\mathtt{0x#1}}\mathdef1633{FD}~~125{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_u}\\ &&|& + \def\mathdef1634#1{\mathtt{0x#1}}\mathdef1634{FD}~~128{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1635#1{\mathtt{0x#1}}\mathdef1635{FD}~~129{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1636#1{\mathtt{0x#1}}\mathdef1636{FD}~~130{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{q15mulr\_sat}}\mathsf{\_s} \\ &&|& + \def\mathdef1637#1{\mathtt{0x#1}}\mathdef1637{FD}~~131{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}} \\ &&|& + \def\mathdef1638#1{\mathtt{0x#1}}\mathdef1638{FD}~~132{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} \\ &&|& + \def\mathdef1639#1{\mathtt{0x#1}}\mathdef1639{FD}~~133{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_s} \\ &&|& + \def\mathdef1640#1{\mathtt{0x#1}}\mathdef1640{FD}~~134{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_u} \\ &&|& + \def\mathdef1641#1{\mathtt{0x#1}}\mathdef1641{FD}~~135{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_s} \\ &&|& + \def\mathdef1642#1{\mathtt{0x#1}}\mathdef1642{FD}~~136{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_s} \\ &&|& + \def\mathdef1643#1{\mathtt{0x#1}}\mathdef1643{FD}~~137{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_u} \\ &&|& + \def\mathdef1644#1{\mathtt{0x#1}}\mathdef1644{FD}~~138{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_u} \\ &&|& + \def\mathdef1645#1{\mathtt{0x#1}}\mathdef1645{FD}~~139{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}} \\ &&|& + \def\mathdef1646#1{\mathtt{0x#1}}\mathdef1646{FD}~~140{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1647#1{\mathtt{0x#1}}\mathdef1647{FD}~~141{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1648#1{\mathtt{0x#1}}\mathdef1648{FD}~~142{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1649#1{\mathtt{0x#1}}\mathdef1649{FD}~~143{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s} \\ &&|& + \def\mathdef1650#1{\mathtt{0x#1}}\mathdef1650{FD}~~144{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u} \\ &&|& + \def\mathdef1651#1{\mathtt{0x#1}}\mathdef1651{FD}~~145{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1652#1{\mathtt{0x#1}}\mathdef1652{FD}~~146{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s} \\ &&|& + \def\mathdef1653#1{\mathtt{0x#1}}\mathdef1653{FD}~~147{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u} \\ &&|& + \def\mathdef1654#1{\mathtt{0x#1}}\mathdef1654{FD}~~149{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} \\ &&|& + \def\mathdef1655#1{\mathtt{0x#1}}\mathdef1655{FD}~~150{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s} \\ &&|& + \def\mathdef1656#1{\mathtt{0x#1}}\mathdef1656{FD}~~151{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u} \\ &&|& + \def\mathdef1657#1{\mathtt{0x#1}}\mathdef1657{FD}~~152{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s} \\ &&|& + \def\mathdef1658#1{\mathtt{0x#1}}\mathdef1658{FD}~~153{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u} \\ &&|& + \def\mathdef1659#1{\mathtt{0x#1}}\mathdef1659{FD}~~155{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u} \\ &&|& + \def\mathdef1660#1{\mathtt{0x#1}}\mathdef1660{FD}~~156{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_s}\\ &&|& + \def\mathdef1661#1{\mathtt{0x#1}}\mathdef1661{FD}~~157{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_s}\\ &&|& + \def\mathdef1662#1{\mathtt{0x#1}}\mathdef1662{FD}~~158{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_u}\\ &&|& + \def\mathdef1663#1{\mathtt{0x#1}}\mathdef1663{FD}~~159{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} + \phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1664#1{\mathtt{0x#1}}\mathdef1664{FD}~~126{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_s}\\ &&|& + \def\mathdef1665#1{\mathtt{0x#1}}\mathdef1665{FD}~~127{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_u}\\ &&|& + \def\mathdef1666#1{\mathtt{0x#1}}\mathdef1666{FD}~~160{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1667#1{\mathtt{0x#1}}\mathdef1667{FD}~~161{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1668#1{\mathtt{0x#1}}\mathdef1668{FD}~~163{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}} \\ &&|& + \def\mathdef1669#1{\mathtt{0x#1}}\mathdef1669{FD}~~164{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} \\ &&|& + \def\mathdef1670#1{\mathtt{0x#1}}\mathdef1670{FD}~~167{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_s} \\ &&|& + \def\mathdef1671#1{\mathtt{0x#1}}\mathdef1671{FD}~~168{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_s} \\ &&|& + \def\mathdef1672#1{\mathtt{0x#1}}\mathdef1672{FD}~~169{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_u} \\ &&|& + \def\mathdef1673#1{\mathtt{0x#1}}\mathdef1673{FD}~~170{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_u} \\ &&|& + \def\mathdef1674#1{\mathtt{0x#1}}\mathdef1674{FD}~~171{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}} \\ &&|& + \def\mathdef1675#1{\mathtt{0x#1}}\mathdef1675{FD}~~172{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1676#1{\mathtt{0x#1}}\mathdef1676{FD}~~173{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1677#1{\mathtt{0x#1}}\mathdef1677{FD}~~174{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1678#1{\mathtt{0x#1}}\mathdef1678{FD}~~177{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1679#1{\mathtt{0x#1}}\mathdef1679{FD}~~181{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} \\ &&|& + \def\mathdef1680#1{\mathtt{0x#1}}\mathdef1680{FD}~~182{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s} \\ &&|& + \def\mathdef1681#1{\mathtt{0x#1}}\mathdef1681{FD}~~183{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u} \\ &&|& + \def\mathdef1682#1{\mathtt{0x#1}}\mathdef1682{FD}~~184{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s} \\ &&|& + \def\mathdef1683#1{\mathtt{0x#1}}\mathdef1683{FD}~~185{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u} \\ &&|& + \def\mathdef1684#1{\mathtt{0x#1}}\mathdef1684{FD}~~186{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s}\\ &&|& + \def\mathdef1685#1{\mathtt{0x#1}}\mathdef1685{FD}~~188{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_s}\\ &&|& + \def\mathdef1686#1{\mathtt{0x#1}}\mathdef1686{FD}~~189{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_s}\\ &&|& + \def\mathdef1687#1{\mathtt{0x#1}}\mathdef1687{FD}~~190{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_u}\\ &&|& + \def\mathdef1688#1{\mathtt{0x#1}}\mathdef1688{FD}~~191{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} + \phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1689#1{\mathtt{0x#1}}\mathdef1689{FD}~~192{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1690#1{\mathtt{0x#1}}\mathdef1690{FD}~~193{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1691#1{\mathtt{0x#1}}\mathdef1691{FD}~~195{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}} \\ &&|& + \def\mathdef1692#1{\mathtt{0x#1}}\mathdef1692{FD}~~196{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} \\ &&|& + \def\mathdef1693#1{\mathtt{0x#1}}\mathdef1693{FD}~~199{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_s} \\ &&|& + \def\mathdef1694#1{\mathtt{0x#1}}\mathdef1694{FD}~~200{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_s} \\ &&|& + \def\mathdef1695#1{\mathtt{0x#1}}\mathdef1695{FD}~~201{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_u} \\ &&|& + \def\mathdef1696#1{\mathtt{0x#1}}\mathdef1696{FD}~~202{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_u} \\ &&|& + \def\mathdef1697#1{\mathtt{0x#1}}\mathdef1697{FD}~~203{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}} \\ &&|& + \def\mathdef1698#1{\mathtt{0x#1}}\mathdef1698{FD}~~204{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef1699#1{\mathtt{0x#1}}\mathdef1699{FD}~~205{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef1700#1{\mathtt{0x#1}}\mathdef1700{FD}~~206{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1701#1{\mathtt{0x#1}}\mathdef1701{FD}~~209{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1702#1{\mathtt{0x#1}}\mathdef1702{FD}~~213{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} \\ &&|& + \def\mathdef1703#1{\mathtt{0x#1}}\mathdef1703{FD}~~220{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_s}\\ &&|& + \def\mathdef1704#1{\mathtt{0x#1}}\mathdef1704{FD}~~221{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_s}\\ &&|& + \def\mathdef1705#1{\mathtt{0x#1}}\mathdef1705{FD}~~222{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_u}\\ &&|& + \def\mathdef1706#1{\mathtt{0x#1}}\mathdef1706{FD}~~223{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1707#1{\mathtt{0x#1}}\mathdef1707{FD}~~103{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ceil}} \\ &&|& + \def\mathdef1708#1{\mathtt{0x#1}}\mathdef1708{FD}~~104{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{floor}} \\ &&|& + \def\mathdef1709#1{\mathtt{0x#1}}\mathdef1709{FD}~~105{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}} \\ &&|& + \def\mathdef1710#1{\mathtt{0x#1}}\mathdef1710{FD}~~106{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{nearest}} \\ &&|& + \def\mathdef1711#1{\mathtt{0x#1}}\mathdef1711{FD}~~224{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1712#1{\mathtt{0x#1}}\mathdef1712{FD}~~225{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1713#1{\mathtt{0x#1}}\mathdef1713{FD}~~227{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}} \\ &&|& + \def\mathdef1714#1{\mathtt{0x#1}}\mathdef1714{FD}~~228{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1715#1{\mathtt{0x#1}}\mathdef1715{FD}~~229{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1716#1{\mathtt{0x#1}}\mathdef1716{FD}~~230{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} \\ &&|& + \def\mathdef1717#1{\mathtt{0x#1}}\mathdef1717{FD}~~231{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}} \\ &&|& + \def\mathdef1718#1{\mathtt{0x#1}}\mathdef1718{FD}~~232{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}} \\ &&|& + \def\mathdef1719#1{\mathtt{0x#1}}\mathdef1719{FD}~~233{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}} \\ &&|& + \def\mathdef1720#1{\mathtt{0x#1}}\mathdef1720{FD}~~234{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}} \\ &&|& + \def\mathdef1721#1{\mathtt{0x#1}}\mathdef1721{FD}~~235{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1722#1{\mathtt{0x#1}}\mathdef1722{FD}~~116{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ceil}} \\ &&|& + \def\mathdef1723#1{\mathtt{0x#1}}\mathdef1723{FD}~~117{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{floor}} \\ &&|& + \def\mathdef1724#1{\mathtt{0x#1}}\mathdef1724{FD}~~122{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}} \\ &&|& + \def\mathdef1725#1{\mathtt{0x#1}}\mathdef1725{FD}~~148{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{nearest}} \\ &&|& + \def\mathdef1726#1{\mathtt{0x#1}}\mathdef1726{FD}~~236{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}} \\ &&|& + \def\mathdef1727#1{\mathtt{0x#1}}\mathdef1727{FD}~~237{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}} \\ &&|& + \def\mathdef1728#1{\mathtt{0x#1}}\mathdef1728{FD}~~239{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}} \\ &&|& + \def\mathdef1729#1{\mathtt{0x#1}}\mathdef1729{FD}~~240{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}} \\ &&|& + \def\mathdef1730#1{\mathtt{0x#1}}\mathdef1730{FD}~~241{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}} \\ &&|& + \def\mathdef1731#1{\mathtt{0x#1}}\mathdef1731{FD}~~242{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} \\ &&|& + \def\mathdef1732#1{\mathtt{0x#1}}\mathdef1732{FD}~~243{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}} \\ &&|& + \def\mathdef1733#1{\mathtt{0x#1}}\mathdef1733{FD}~~244{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}} \\ &&|& + \def\mathdef1734#1{\mathtt{0x#1}}\mathdef1734{FD}~~245{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}} \\ &&|& + \def\mathdef1735#1{\mathtt{0x#1}}\mathdef1735{FD}~~246{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}} \\ &&|& + \def\mathdef1736#1{\mathtt{0x#1}}\mathdef1736{FD}~~247{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef1257#1{{}}\mathdef1257{instruction}} & \phantom{\href{../binary/instructions.html#binary-instr}{\mathtt{instr}}} &\phantom{::=}& \phantom{\dots} && \phantom{vechaslongerinstructionnames} \\[-2ex] &&|& + \def\mathdef1737#1{\mathtt{0x#1}}\mathdef1737{FD}~~248{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_s} \\ &&|& + \def\mathdef1738#1{\mathtt{0x#1}}\mathdef1738{FD}~~249{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_u} \\ &&|& + \def\mathdef1739#1{\mathtt{0x#1}}\mathdef1739{FD}~~250{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_i32x4\_s} \\ &&|& + \def\mathdef1740#1{\mathtt{0x#1}}\mathdef1740{FD}~~251{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_i32x4\_u} \\ &&|& + \def\mathdef1741#1{\mathtt{0x#1}}\mathdef1741{FD}~~252{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_s\_zero}\\ &&|& + \def\mathdef1742#1{\mathtt{0x#1}}\mathdef1742{FD}~~253{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_u\_zero}\\ &&|& + \def\mathdef1743#1{\mathtt{0x#1}}\mathdef1743{FD}~~254{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_s}\\ &&|& + \def\mathdef1744#1{\mathtt{0x#1}}\mathdef1744{FD}~~255{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_u}\\ &&|& + \def\mathdef1745#1{\mathtt{0x#1}}\mathdef1745{FD}~~94{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{demote}}\mathsf{\_f64x2\_zero}\\ &&|& + \def\mathdef1746#1{\mathtt{0x#1}}\mathdef1746{FD}~~95{:}\href{../binary/values.html#binary-int}{\def\mathdef1262#1{{\mathtt{u}#1}}\mathdef1262{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{promote}}\mathsf{\_low\_f32x4}\\ +\end{array}\end{split}\]
    +
    +
    +

    Expressions

    +

    Expressions are encoded by their instruction sequence terminated with an explicit \(\def\mathdef1747#1{\mathtt{0x#1}}\mathdef1747{0B}\) opcode for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\).

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1257#1{{}}\mathdef1257{expression} & \href{../binary/instructions.html#binary-expr}{\mathtt{expr}} &::=& + (\mathit{in}{:}\href{../binary/instructions.html#binary-instr}{\mathtt{instr}})^\ast~~\def\mathdef1748#1{\mathtt{0x#1}}\mathdef1748{0B} &\Rightarrow& \mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/binary/modules.html b/core/binary/modules.html new file mode 100644 index 00000000..439735c5 --- /dev/null +++ b/core/binary/modules.html @@ -0,0 +1,539 @@ + + + + + + + + + Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Modules

    +

    The binary encoding of modules is organized into sections. +Most sections correspond to one component of a module record, +except that function definitions are split into two sections, separating their type declarations in the function section from their bodies in the code section.

    +
    +

    Note

    +

    This separation enables parallel and streaming compilation of the functions in a module.

    +
    +
    +

    Indices

    +

    All indices are encoded with their respective value.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{type index} & \href{../binary/modules.html#binary-typeidx}{\mathtt{typeidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{function index} & \href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{table index} & \href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{memory index} & \href{../binary/modules.html#binary-memidx}{\mathtt{memidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{global index} & \href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{element index} & \href{../binary/modules.html#binary-elemidx}{\mathtt{elemidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{data index} & \href{../binary/modules.html#binary-dataidx}{\mathtt{dataidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{local index} & \href{../binary/modules.html#binary-localidx}{\mathtt{localidx}} &::=& x{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& x \\ +\def\mathdef1749#1{{}}\mathdef1749{label index} & \href{../binary/modules.html#binary-labelidx}{\mathtt{labelidx}} &::=& l{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}} &\Rightarrow& l \\ +\end{array}\end{split}\]
    +
    +
    +

    Sections

    +

    Each section consists of

    +
      +
    • a one-byte section id,

    • +
    • the \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) size of the contents, in bytes,

    • +
    • the actual contents, whose structure is depended on the section id.

    • +
    +

    Every section is optional; an omitted section is equivalent to the section being present with empty contents.

    +

    The following parameterized grammar rule defines the generic structure of a section with id \(N\) and contents described by the grammar \(\mathtt{B}\).

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef1749#1{{}}\mathdef1749{section} & \href{../binary/modules.html#binary-section}{\mathtt{section}}_N(\mathtt{B}) &::=& + N{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}}~~\mathit{size}{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}}~~\mathit{cont}{:}\mathtt{B} + &\Rightarrow& \mathit{cont} & (\mathrel{\mbox{if}} \mathit{size} = ||\mathtt{B}||) \\ &&|& + \epsilon &\Rightarrow& \epsilon +\end{array}\end{split}\]
    +

    For most sections, the contents \(\mathtt{B}\) encodes a vector. +In these cases, the empty result \(\epsilon\) is interpreted as the empty vector.

    +
    +

    Note

    +

    Other than for unknown custom sections, +the \(\mathit{size}\) is not required for decoding, but can be used to skip sections when navigating through a binary. +The module is malformed if the size does not match the length of the binary contents \(\mathtt{B}\).

    +
    +

    The following section ids are used:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Id

    Section

    0

    custom section

    1

    type section

    2

    import section

    3

    function section

    4

    table section

    5

    memory section

    6

    global section

    7

    export section

    8

    start section

    9

    element section

    10

    code section

    11

    data section

    12

    data count section

    +
    +
    +

    Custom Section

    +

    Custom sections have the id 0. +They are intended to be used for debugging information or third-party extensions, and are ignored by the WebAssembly semantics. +Their contents consist of a name further identifying the custom section, followed by an uninterpreted sequence of bytes for custom use.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{custom section} & \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}} &::=& + \href{../binary/modules.html#binary-section}{\mathtt{section}}_0(\href{../binary/modules.html#binary-customsec}{\mathtt{custom}}) \\ +\def\mathdef1749#1{{}}\mathdef1749{custom data} & \href{../binary/modules.html#binary-customsec}{\mathtt{custom}} &::=& + \href{../binary/values.html#binary-name}{\mathtt{name}}~~\href{../binary/values.html#binary-byte}{\mathtt{byte}}^\ast \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    If an implementation interprets the data of a custom section, then errors in that data, or the placement of the section, must not invalidate the module.

    +
    +
    +
    +

    Type Section

    +

    The type section has the id 1. +It decodes into a vector of function types that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{types}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{type section} & \href{../binary/modules.html#binary-typesec}{\mathtt{typesec}} &::=& + \mathit{ft}^\ast{:\,}\href{../binary/modules.html#binary-section}{\mathtt{section}}_1(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/types.html#binary-functype}{\mathtt{functype}})) &\Rightarrow& \mathit{ft}^\ast \\ +\end{array}\end{split}\]
    +
    +
    +

    Import Section

    +

    The import section has the id 2. +It decodes into a vector of imports that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{imports}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{import section} & \href{../binary/modules.html#binary-importsec}{\mathtt{importsec}} &::=& + \mathit{im}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_2(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-import}{\mathtt{import}})) &\Rightarrow& \mathit{im}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{import} & \href{../binary/modules.html#binary-import}{\mathtt{import}} &::=& + \mathit{mod}{:}\href{../binary/values.html#binary-name}{\mathtt{name}}~~\mathit{nm}{:}\href{../binary/values.html#binary-name}{\mathtt{name}}~~d{:}\href{../binary/modules.html#binary-importdesc}{\mathtt{importdesc}} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-import}{\mathsf{module}}~\mathit{mod}, \href{../syntax/modules.html#syntax-import}{\mathsf{name}}~\mathit{nm}, \href{../syntax/modules.html#syntax-import}{\mathsf{desc}}~d \} \\ +\def\mathdef1749#1{{}}\mathdef1749{import description} & \href{../binary/modules.html#binary-importdesc}{\mathtt{importdesc}} &::=& + \def\mathdef1788#1{\mathtt{0x#1}}\mathdef1788{00}~~x{:}\href{../binary/modules.html#binary-typeidx}{\mathtt{typeidx}} &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{func}}~x \\ &&|& + \def\mathdef1789#1{\mathtt{0x#1}}\mathdef1789{01}~~\mathit{tt}{:}\href{../binary/types.html#binary-tabletype}{\mathtt{tabletype}} &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{table}}~\mathit{tt} \\ &&|& + \def\mathdef1790#1{\mathtt{0x#1}}\mathdef1790{02}~~\mathit{mt}{:}\href{../binary/types.html#binary-memtype}{\mathtt{memtype}} &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{mem}}~\mathit{mt} \\ &&|& + \def\mathdef1791#1{\mathtt{0x#1}}\mathdef1791{03}~~\mathit{gt}{:}\href{../binary/types.html#binary-globaltype}{\mathtt{globaltype}} &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{global}}~\mathit{gt} \\ +\end{array}\end{split}\]
    +
    +
    +

    Function Section

    +

    The function section has the id 3. +It decodes into a vector of type indices that represent the \(\href{../syntax/modules.html#syntax-func}{\mathsf{type}}\) fields of the functions in the \(\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}\) component of a module. +The \(\href{../syntax/modules.html#syntax-func}{\mathsf{locals}}\) and \(\href{../syntax/modules.html#syntax-func}{\mathsf{body}}\) fields of the respective functions are encoded separately in the code section.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{function section} & \href{../binary/modules.html#binary-funcsec}{\mathtt{funcsec}} &::=& + x^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_3(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-typeidx}{\mathtt{typeidx}})) &\Rightarrow& x^\ast \\ +\end{array}\end{split}\]
    +
    +
    +

    Table Section

    +

    The table section has the id 4. +It decodes into a vector of tables that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{tables}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{table section} & \href{../binary/modules.html#binary-tablesec}{\mathtt{tablesec}} &::=& + \mathit{tab}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_4(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-table}{\mathtt{table}})) &\Rightarrow& \mathit{tab}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{table} & \href{../binary/modules.html#binary-table}{\mathtt{table}} &::=& + \mathit{tt}{:}\href{../binary/types.html#binary-tabletype}{\mathtt{tabletype}} &\Rightarrow& \{ \href{../syntax/modules.html#syntax-table}{\mathsf{type}}~\mathit{tt} \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Memory Section

    +

    The memory section has the id 5. +It decodes into a vector of memories that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{mems}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{memory section} & \href{../binary/modules.html#binary-memsec}{\mathtt{memsec}} &::=& + \mathit{mem}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_5(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-mem}{\mathtt{mem}})) &\Rightarrow& \mathit{mem}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{memory} & \href{../binary/modules.html#binary-mem}{\mathtt{mem}} &::=& + \mathit{mt}{:}\href{../binary/types.html#binary-memtype}{\mathtt{memtype}} &\Rightarrow& \{ \href{../syntax/modules.html#syntax-mem}{\mathsf{type}}~\mathit{mt} \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Global Section

    +

    The global section has the id 6. +It decodes into a vector of globals that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{global section} & \href{../binary/modules.html#binary-globalsec}{\mathtt{globalsec}} &::=& + \mathit{glob}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_6(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-global}{\mathtt{global}})) &\Rightarrow& \mathit{glob}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{global} & \href{../binary/modules.html#binary-global}{\mathtt{global}} &::=& + \mathit{gt}{:}\href{../binary/types.html#binary-globaltype}{\mathtt{globaltype}}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-global}{\mathsf{type}}~\mathit{gt}, \href{../syntax/modules.html#syntax-global}{\mathsf{init}}~e \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Export Section

    +

    The export section has the id 7. +It decodes into a vector of exports that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{export section} & \href{../binary/modules.html#binary-exportsec}{\mathtt{exportsec}} &::=& + \mathit{ex}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_7(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-export}{\mathtt{export}})) &\Rightarrow& \mathit{ex}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{export} & \href{../binary/modules.html#binary-export}{\mathtt{export}} &::=& + \mathit{nm}{:}\href{../binary/values.html#binary-name}{\mathtt{name}}~~d{:}\href{../binary/modules.html#binary-exportdesc}{\mathtt{exportdesc}} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-export}{\mathsf{name}}~\mathit{nm}, \href{../syntax/modules.html#syntax-export}{\mathsf{desc}}~d \} \\ +\def\mathdef1749#1{{}}\mathdef1749{export description} & \href{../binary/modules.html#binary-exportdesc}{\mathtt{exportdesc}} &::=& + \def\mathdef1792#1{\mathtt{0x#1}}\mathdef1792{00}~~x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~x \\ &&|& + \def\mathdef1793#1{\mathtt{0x#1}}\mathdef1793{01}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}} &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~x \\ &&|& + \def\mathdef1794#1{\mathtt{0x#1}}\mathdef1794{02}~~x{:}\href{../binary/modules.html#binary-memidx}{\mathtt{memidx}} &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~x \\ &&|& + \def\mathdef1795#1{\mathtt{0x#1}}\mathdef1795{03}~~x{:}\href{../binary/modules.html#binary-globalidx}{\mathtt{globalidx}} &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Start Section

    +

    The start section has the id 8. +It decodes into an optional start function that represents the \(\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{start section} & \href{../binary/modules.html#binary-startsec}{\mathtt{startsec}} &::=& + \mathit{st}^?{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_8(\href{../binary/modules.html#binary-start}{\mathtt{start}}) &\Rightarrow& \mathit{st}^? \\ +\def\mathdef1749#1{{}}\mathdef1749{start function} & \href{../binary/modules.html#binary-start}{\mathtt{start}} &::=& + x{:}\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}} &\Rightarrow& \{ \href{../syntax/modules.html#syntax-start}{\mathsf{func}}~x \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Element Section

    +

    The element section has the id 9. +It decodes into a vector of element segments that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{element section} & \href{../binary/modules.html#binary-elemsec}{\mathtt{elemsec}} &::=& + \mathit{seg}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_9(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-elem}{\mathtt{elem}})) &\Rightarrow& \mathit{seg} \\ +\def\mathdef1749#1{{}}\mathdef1749{element segment} & \href{../binary/modules.html#binary-elem}{\mathtt{elem}} &::=& + \def\mathdef1796#1{\mathtt{0x#1}}\mathdef1796{00}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~y^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~((\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~y)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~0, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~e \} \} \\ &&|& + \def\mathdef1797#1{\mathtt{0x#1}}\mathdef1797{01}~~\mathit{et}:\href{../binary/modules.html#binary-elemkind}{\mathtt{elemkind}}~~y^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~((\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~y)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}} \} \\ &&|& + \def\mathdef1798#1{\mathtt{0x#1}}\mathdef1798{02}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~\mathit{et}:\href{../binary/modules.html#binary-elemkind}{\mathtt{elemkind}}~~y^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~((\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~y)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~x, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~e \} \} \\ &&|& + \def\mathdef1799#1{\mathtt{0x#1}}\mathdef1799{03}~~\mathit{et}:\href{../binary/modules.html#binary-elemkind}{\mathtt{elemkind}}~~y^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-funcidx}{\mathtt{funcidx}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~((\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~y)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}} \} \\ &&|& + \def\mathdef1800#1{\mathtt{0x#1}}\mathdef1800{04}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~\mathit{el}^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\mathit{el}^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~0, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~e \} \} \\ &&|& + \def\mathdef1801#1{\mathtt{0x#1}}\mathdef1801{05}~~\mathit{et}:\href{../binary/types.html#binary-reftype}{\mathtt{reftype}}~~\mathit{el}^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\mathit{el}^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}} \} \\ &&|& + \def\mathdef1802#1{\mathtt{0x#1}}\mathdef1802{06}~~x{:}\href{../binary/modules.html#binary-tableidx}{\mathtt{tableidx}}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~\mathit{et}:\href{../binary/types.html#binary-reftype}{\mathtt{reftype}}~~\mathit{el}^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\mathit{el}^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~x, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~e \} \} \\ &&|& + \def\mathdef1803#1{\mathtt{0x#1}}\mathdef1803{07}~~\mathit{et}:\href{../binary/types.html#binary-reftype}{\mathtt{reftype}}~~\mathit{el}^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}) + &\Rightarrow& \\&&&\quad + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\mathit{el}^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}} \} \\ +\def\mathdef1749#1{{}}\mathdef1749{element kind} & \href{../binary/modules.html#binary-elemkind}{\mathtt{elemkind}} &::=& + \def\mathdef1804#1{\mathtt{0x#1}}\mathdef1804{00} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The initial byte can be interpreted as a bitfield. +Bit 0 indicates a passive or declarative segment, +bit 1 indicates the presence of an explicit table index for an active segment and otherwise distinguishes passive from declarative segments, +bit 2 indicates the use of element type and element expressions instead of element kind and element indices.

    +

    Additional element kinds may be added in future versions of WebAssembly.

    +
    +
    +
    +

    Code Section

    +

    The code section has the id 10. +It decodes into a vector of code entries that are pairs of value type vectors and expressions. +They represent the \(\href{../syntax/modules.html#syntax-func}{\mathsf{locals}}\) and \(\href{../syntax/modules.html#syntax-func}{\mathsf{body}}\) field of the functions in the \(\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}\) component of a module. +The \(\href{../syntax/modules.html#syntax-func}{\mathsf{type}}\) fields of the respective functions are encoded separately in the function section.

    +

    The encoding of each code entry consists of

    +
      +
    • the \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) size of the function code in bytes,

    • +
    • the actual function code, which in turn consists of

      +
        +
      • the declaration of locals,

      • +
      • the function body as an expression.

      • +
      +
    • +
    +

    Local declarations are compressed into a vector whose entries consist of

    +
      +
    • a \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\) count,

    • +
    • a value type,

    • +
    +

    denoting count locals of the same value type.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef1749#1{{}}\mathdef1749{code section} & \href{../binary/modules.html#binary-codesec}{\mathtt{codesec}} &::=& + \mathit{code}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_{10}(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-code}{\mathtt{code}})) + &\Rightarrow& \mathit{code}^\ast \\ +\def\mathdef1749#1{{}}\mathdef1749{code} & \href{../binary/modules.html#binary-code}{\mathtt{code}} &::=& + \mathit{size}{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}}~~\mathit{code}{:}\href{../binary/modules.html#binary-func}{\mathtt{func}} + &\Rightarrow& \mathit{code} & (\mathrel{\mbox{if}} \mathit{size} = ||\href{../binary/modules.html#binary-func}{\mathtt{func}}||) \\ +\def\mathdef1749#1{{}}\mathdef1749{function} & \href{../binary/modules.html#binary-func}{\mathtt{func}} &::=& + (t^\ast)^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-local}{\mathtt{locals}})~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}} + &\Rightarrow& \href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((t^\ast)^\ast), e^\ast + & (\mathrel{\mbox{if}} |\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((t^\ast)^\ast)| < 2^{32}) \\ +\def\mathdef1749#1{{}}\mathdef1749{locals} & \href{../binary/modules.html#binary-local}{\mathtt{locals}} &::=& + n{:}\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}}~~t{:}\href{../binary/types.html#binary-valtype}{\mathtt{valtype}} &\Rightarrow& t^n \\ +\end{array}\end{split}\]
    +

    Here, \(\mathit{code}\) ranges over pairs \((\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^\ast, \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}})\). +The meta function \(\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((t^\ast)^\ast)\) concatenates all sequences \(t_i^\ast\) in \((t^\ast)^\ast\). +Any code for which the length of the resulting sequence is out of bounds of the maximum size of a vector is malformed.

    +
    +

    Note

    +

    Like with sections, the code \(\mathit{size}\) is not needed for decoding, but can be used to skip functions when navigating through a binary. +The module is malformed if a size does not match the length of the respective function code.

    +
    +
    +
    +

    Data Section

    +

    The data section has the id 11. +It decodes into a vector of data segments that represent the \(\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\) component of a module.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{data section} & \href{../binary/modules.html#binary-datasec}{\mathtt{datasec}} &::=& + \mathit{seg}^\ast{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_{11}(\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/modules.html#binary-data}{\mathtt{data}})) &\Rightarrow& \mathit{seg} \\ +\def\mathdef1749#1{{}}\mathdef1749{data segment} & \href{../binary/modules.html#binary-data}{\mathtt{data}} &::=& + \def\mathdef1805#1{\mathtt{0x#1}}\mathdef1805{00}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~b^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/values.html#binary-byte}{\mathtt{byte}}) + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~0, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~e \} \} \\ &&|& + \def\mathdef1806#1{\mathtt{0x#1}}\mathdef1806{01}~~b^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/values.html#binary-byte}{\mathtt{byte}}) + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}} \} \\ &&|& + \def\mathdef1807#1{\mathtt{0x#1}}\mathdef1807{02}~~x{:}\href{../binary/modules.html#binary-memidx}{\mathtt{memidx}}~~e{:}\href{../binary/instructions.html#binary-expr}{\mathtt{expr}}~~b^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/values.html#binary-byte}{\mathtt{byte}}) + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~x, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~e \} \} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The initial byte can be interpreted as a bitfield. +Bit 0 indicates a passive segment, +bit 1 indicates the presence of an explicit memory index for an active segment.

    +

    In the current version of WebAssembly, at most one memory may be defined or +imported in a single module, so all valid active data +segments have a \(\href{../syntax/modules.html#syntax-data}{\mathsf{memory}}\) value of \(0\).

    +
    +
    +
    +

    Data Count Section

    +

    The data count section has the id 12. +It decodes into an optional u32 that represents the number of data segments in the data section. If this count does not match the length of the data segment vector, the module is malformed.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1749#1{{}}\mathdef1749{data count section} & \href{../binary/modules.html#binary-datacountsec}{\mathtt{datacountsec}} &::=& + \mathit{n}^?{:}\href{../binary/modules.html#binary-section}{\mathtt{section}}_{12}(\href{../binary/values.html#binary-int}{\def\mathdef1754#1{{\mathtt{u}#1}}\mathdef1754{\mathtt{32}}}) &\Rightarrow& \mathit{n}^? \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The data count section is used to simplify single-pass validation. Since the +data section occurs after the code section, the \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}\) and +\(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}\) instructions would not be able to check whether the data +segment index is valid until the data section is read. The data count section +occurs before the code section, so a single-pass validator can use this count +instead of deferring validation.

    +
    +
    +
    +

    Modules

    +

    The encoding of a module starts with a preamble containing a 4-byte magic number (the string \(\def\mathdef1808#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef1808{\backslash0asm}\)) and a version field. +The current version of the WebAssembly binary format is 1.

    +

    The preamble is followed by a sequence of sections. +Custom sections may be inserted at any place in this sequence, +while other sections must occur at most once and in the prescribed order. +All sections can be empty.

    +

    The lengths of vectors produced by the (possibly empty) function and code section must match up.

    +

    Similarly, the optional data count must match the length of the data segment vector. +Furthermore, it must be present if any \(data index <syntax-dataidx>\) occurs in the code section.

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef1749#1{{}}\mathdef1749{magic} & \href{../binary/modules.html#binary-magic}{\mathtt{magic}} &::=& + \def\mathdef1809#1{\mathtt{0x#1}}\mathdef1809{00}~\def\mathdef1810#1{\mathtt{0x#1}}\mathdef1810{61}~\def\mathdef1811#1{\mathtt{0x#1}}\mathdef1811{73}~\def\mathdef1812#1{\mathtt{0x#1}}\mathdef1812{6D} \\ +\def\mathdef1749#1{{}}\mathdef1749{version} & \href{../binary/modules.html#binary-version}{\mathtt{version}} &::=& + \def\mathdef1813#1{\mathtt{0x#1}}\mathdef1813{01}~\def\mathdef1814#1{\mathtt{0x#1}}\mathdef1814{00}~\def\mathdef1815#1{\mathtt{0x#1}}\mathdef1815{00}~\def\mathdef1816#1{\mathtt{0x#1}}\mathdef1816{00} \\ +\def\mathdef1749#1{{}}\mathdef1749{module} & \href{../binary/modules.html#binary-module}{\mathtt{module}} &::=& + \href{../binary/modules.html#binary-magic}{\mathtt{magic}} \\ &&& + \href{../binary/modules.html#binary-version}{\mathtt{version}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast{:\,}\href{../binary/modules.html#binary-typesec}{\mathtt{typesec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast{:\,}\href{../binary/modules.html#binary-importsec}{\mathtt{importsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}^n{:\,}\href{../binary/modules.html#binary-funcsec}{\mathtt{funcsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-table}{\mathit{table}}^\ast{:\,}\href{../binary/modules.html#binary-tablesec}{\mathtt{tablesec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-mem}{\mathit{mem}}^\ast{:\,}\href{../binary/modules.html#binary-memsec}{\mathtt{memsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-global}{\mathit{global}}^\ast{:\,}\href{../binary/modules.html#binary-globalsec}{\mathtt{globalsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast{:\,}\href{../binary/modules.html#binary-exportsec}{\mathtt{exportsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-start}{\mathit{start}}^?{:\,}\href{../binary/modules.html#binary-startsec}{\mathtt{startsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^\ast{:\,}\href{../binary/modules.html#binary-elemsec}{\mathtt{elemsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + m^?{:\,}\href{../binary/modules.html#binary-datacountsec}{\mathtt{datacountsec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \mathit{code}^n{:\,}\href{../binary/modules.html#binary-codesec}{\mathtt{codesec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast \\ &&& + \href{../syntax/modules.html#syntax-data}{\mathit{data}}^m{:\,}\href{../binary/modules.html#binary-datasec}{\mathtt{datasec}} \\ &&& + \href{../binary/modules.html#binary-customsec}{\mathtt{customsec}}^\ast + \quad\Rightarrow\quad \{~ + \begin{array}[t]{@{}l@{}} + \href{../syntax/modules.html#syntax-module}{\mathsf{types}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}}^n, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{tables}}~\href{../syntax/modules.html#syntax-table}{\mathit{table}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{mems}}~\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{globals}}~\href{../syntax/modules.html#syntax-global}{\mathit{global}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{elems}}~\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{datas}}~\href{../syntax/modules.html#syntax-data}{\mathit{data}}^m, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{start}}~\href{../syntax/modules.html#syntax-start}{\mathit{start}}^?, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{imports}}~\href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{exports}}~\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast ~\} \\ + \end{array} \\ &&& + (\mathrel{\mbox{if}} m^? \neq \epsilon \vee \href{../syntax/modules.html#syntax-dataidx}{\mathrm{dataidx}}(\mathit{code}^n) = \emptyset) \\ +\end{array}\end{split}\]
    +

    where for each \(t_i^\ast, e_i\) in \(\mathit{code}^n\),

    +
    +\[\begin{split}\href{../syntax/modules.html#syntax-func}{\mathit{func}}^n[i] = \{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}^n[i], \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~t_i^\ast, \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~e_i \} ) \\\end{split}\]
    +
    +

    Note

    +

    The version of the WebAssembly binary format may increase in the future +if backward-incompatible changes have to be made to the format. +However, such changes are expected to occur very infrequently, if ever. +The binary format is intended to be forward-compatible, +such that future extensions can be made without incrementing its version.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/binary/types.html b/core/binary/types.html new file mode 100644 index 00000000..31573886 --- /dev/null +++ b/core/binary/types.html @@ -0,0 +1,217 @@ + + + + + + + + + Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Types

    +
    +

    Note

    +

    In some places, possible types include both type constructors or types denoted by type indices. +Thus, the binary format for type constructors corresponds to the encodings of small negative \(\href{../binary/values.html#binary-sint}{\href{../syntax/values.html#syntax-int}{\mathit{s}N}}\) values, such that they can unambiguously occur in the same place as (positive) type indices.

    +
    +
    +

    Number Types

    +

    Number types are encoded by a single byte.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{number type} & \href{../binary/types.html#binary-numtype}{\mathtt{numtype}} &::=& + \def\mathdef1856#1{\mathtt{0x#1}}\mathdef1856{7F} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef1857#1{\mathtt{0x#1}}\mathdef1857{7E} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef1858#1{\mathtt{0x#1}}\mathdef1858{7D} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef1859#1{\mathtt{0x#1}}\mathdef1859{7C} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Vector Types

    +

    Vector types are also encoded by a single byte.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{vector type} & \href{../binary/types.html#binary-vectype}{\mathtt{vectype}} &::=& + \def\mathdef1860#1{\mathtt{0x#1}}\mathdef1860{7B} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Reference Types

    +

    Reference types are also encoded by a single byte.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{reference type} & \href{../binary/types.html#binary-reftype}{\mathtt{reftype}} &::=& + \def\mathdef1861#1{\mathtt{0x#1}}\mathdef1861{70} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} \\ &&|& + \def\mathdef1862#1{\mathtt{0x#1}}\mathdef1862{6F} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{externref}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Value Types

    +

    Value types are encoded with their respective encoding as a number type, vector type, or reference type.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{value type} & \href{../binary/types.html#binary-valtype}{\mathtt{valtype}} &::=& + t{:}\href{../binary/types.html#binary-numtype}{\mathtt{numtype}} &\Rightarrow& t \\ &&|& + t{:}\href{../binary/types.html#binary-vectype}{\mathtt{vectype}} &\Rightarrow& t \\ &&|& + t{:}\href{../binary/types.html#binary-reftype}{\mathtt{reftype}} &\Rightarrow& t \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Value types can occur in contexts where type indices are also allowed, such as in the case of block types. +Thus, the binary format for types corresponds to the signed LEB128 encoding of small negative \(\href{../syntax/values.html#syntax-int}{\mathit{s}N}\) values, so that they can coexist with (positive) type indices in the future.

    +
    +
    +
    +

    Result Types

    +

    Result types are encoded by the respective vectors of value types `.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{result type} & \href{../binary/types.html#binary-resulttype}{\mathtt{resulttype}} &::=& + t^\ast{:\,}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/types.html#binary-valtype}{\mathtt{valtype}}) &\Rightarrow& [t^\ast] \\ +\end{array}\end{split}\]
    +
    +
    +

    Function Types

    +

    Function types are encoded by the byte \(\def\mathdef1863#1{\mathtt{0x#1}}\mathdef1863{60}\) followed by the respective vectors of parameter and result types.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{function type} & \href{../binary/types.html#binary-functype}{\mathtt{functype}} &::=& + \def\mathdef1864#1{\mathtt{0x#1}}\mathdef1864{60}~~\mathit{rt}_1{:\,}\href{../binary/types.html#binary-resulttype}{\mathtt{resulttype}}~~\mathit{rt}_2{:\,}\href{../binary/types.html#binary-resulttype}{\mathtt{resulttype}} + &\Rightarrow& \mathit{rt}_1 \href{../syntax/types.html#syntax-functype}{\rightarrow} \mathit{rt}_2 \\ +\end{array}\end{split}\]
    +
    +
    +

    Limits

    +

    Limits are encoded with a preceding flag indicating whether a maximum is present.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1817#1{{}}\mathdef1817{limits} & \href{../binary/types.html#binary-limits}{\mathtt{limits}} &::=& + \def\mathdef1865#1{\mathtt{0x#1}}\mathdef1865{00}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1822#1{{\mathtt{u}#1}}\mathdef1822{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\epsilon \} \\ &&|& + \def\mathdef1866#1{\mathtt{0x#1}}\mathdef1866{01}~~n{:}\href{../binary/values.html#binary-int}{\def\mathdef1822#1{{\mathtt{u}#1}}\mathdef1822{\mathtt{32}}}~~m{:}\href{../binary/values.html#binary-int}{\def\mathdef1822#1{{\mathtt{u}#1}}\mathdef1822{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Memory Types

    +

    Memory types are encoded with their limits.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1817#1{{}}\mathdef1817{memory type} & \href{../binary/types.html#binary-memtype}{\mathtt{memtype}} &::=& + \mathit{lim}{:}\href{../binary/types.html#binary-limits}{\mathtt{limits}} &\Rightarrow& \mathit{lim} \\ +\end{array}\end{split}\]
    +
    +
    +

    Table Types

    +

    Table types are encoded with their limits and the encoding of their element reference type.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1817#1{{}}\mathdef1817{table type} & \href{../binary/types.html#binary-tabletype}{\mathtt{tabletype}} &::=& + \mathit{et}{:}\href{../binary/types.html#binary-reftype}{\mathtt{reftype}}~~\mathit{lim}{:}\href{../binary/types.html#binary-limits}{\mathtt{limits}} &\Rightarrow& \mathit{lim}~\mathit{et} \\ +\end{array}\end{split}\]
    +
    +
    +

    Global Types

    +

    Global types are encoded by their value type and a flag for their mutability.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef1817#1{{}}\mathdef1817{global type} & \href{../binary/types.html#binary-globaltype}{\mathtt{globaltype}} &::=& + t{:}\href{../binary/types.html#binary-valtype}{\mathtt{valtype}}~~m{:}\href{../binary/types.html#binary-mut}{\mathtt{mut}} &\Rightarrow& m~t \\ +\def\mathdef1817#1{{}}\mathdef1817{mutability} & \href{../binary/types.html#binary-mut}{\mathtt{mut}} &::=& + \def\mathdef1867#1{\mathtt{0x#1}}\mathdef1867{00} &\Rightarrow& \href{../syntax/types.html#syntax-mut}{\mathsf{const}} \\ &&|& + \def\mathdef1868#1{\mathtt{0x#1}}\mathdef1868{01} &\Rightarrow& \href{../syntax/types.html#syntax-mut}{\mathsf{var}} \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/binary/values.html b/core/binary/values.html new file mode 100644 index 00000000..7efd7ff7 --- /dev/null +++ b/core/binary/values.html @@ -0,0 +1,208 @@ + + + + + + + + + Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Values

    +
    +

    Bytes

    +

    Bytes encode themselves.

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad}l} +\def\mathdef1869#1{{}}\mathdef1869{byte} & \href{../binary/values.html#binary-byte}{\mathtt{byte}} &::=& + \def\mathdef1908#1{\mathtt{0x#1}}\mathdef1908{00} &\Rightarrow& \def\mathdef1909#1{\mathtt{0x#1}}\mathdef1909{00} \\ &&|&& + \dots \\ &&|& + \def\mathdef1910#1{\mathtt{0x#1}}\mathdef1910{FF} &\Rightarrow& \def\mathdef1911#1{\mathtt{0x#1}}\mathdef1911{FF} \\ +\end{array}\end{split}\]
    +
    +
    +

    Integers

    +

    All integers are encoded using the LEB128 variable-length integer encoding, in either unsigned or signed variant.

    +

    Unsigned integers are encoded in unsigned LEB128 format. +As an additional constraint, the total number of bytes encoding a value of type \(\href{../syntax/values.html#syntax-int}{\mathit{u}N}\) must not exceed \(\mathrm{ceil}(N/7)\) bytes.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef1869#1{{}}\mathdef1869{unsigned integer} & \href{../binary/values.html#binary-int}{\def\mathdef1870#1{{\mathtt{u}#1}}\mathdef1870{N}} &::=& + n{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^7 \wedge n < 2^N) \\ &&|& + n{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}}~~m{:}\def\mathdef1912#1{{\mathtt{u}#1}}\mathdef1912{(N\mathtt{-7})} &\Rightarrow& + 2^7\cdot m + (n-2^7) & (\mathrel{\mbox{if}} n \geq 2^7 \wedge N > 7) \\ +\end{array}\end{split}\]
    +

    Signed integers are encoded in signed LEB128 format, which uses a two’s complement representation. +As an additional constraint, the total number of bytes encoding a value of type \(\href{../syntax/values.html#syntax-int}{\mathit{s}N}\) must not exceed \(\mathrm{ceil}(N/7)\) bytes.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef1869#1{{}}\mathdef1869{signed integer} & \href{../binary/values.html#binary-int}{\def\mathdef1876#1{{\mathtt{s}#1}}\mathdef1876{N}} &::=& + n{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^6 \wedge n < 2^{N-1}) \\ &&|& + n{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}} &\Rightarrow& n-2^7 & (\mathrel{\mbox{if}} 2^6 \leq n < 2^7 \wedge n \geq 2^7-2^{N-1}) \\ &&|& + n{:}\href{../binary/values.html#binary-byte}{\mathtt{byte}}~~m{:}\def\mathdef1913#1{{\mathtt{s}#1}}\mathdef1913{(N\mathtt{-7})} &\Rightarrow& + 2^7\cdot m + (n-2^7) & (\mathrel{\mbox{if}} n \geq 2^7 \wedge N > 7) \\ +\end{array}\end{split}\]
    +

    Uninterpreted integers are encoded as signed integers.

    +
    +\[\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1869#1{{}}\mathdef1869{uninterpreted integer} & \href{../binary/values.html#binary-int}{\def\mathdef1881#1{{\mathtt{i}#1}}\mathdef1881{N}} &::=& + n{:}\href{../binary/values.html#binary-int}{\def\mathdef1876#1{{\mathtt{s}#1}}\mathdef1876{N}} &\Rightarrow& i & (\mathrel{\mbox{if}} n = \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(i)) +\end{array}\]
    +
    +

    Note

    +

    The side conditions \(N > 7\) in the productions for non-terminal bytes of the \(\def\mathdef1914#1{{\mathit{u#1}}}\mathdef1914{}\) and \(\def\mathdef1915#1{{\mathit{s#1}}}\mathdef1915{}\) encodings restrict the encoding’s length. +However, “trailing zeros” are still allowed within these bounds. +For example, \(\def\mathdef1916#1{\mathtt{0x#1}}\mathdef1916{03}\) and \(\def\mathdef1917#1{\mathtt{0x#1}}\mathdef1917{83}~\def\mathdef1918#1{\mathtt{0x#1}}\mathdef1918{00}\) are both well-formed encodings for the value \(3\) as a \(\href{../syntax/values.html#syntax-int}{\mathit{u8}}\). +Similarly, either of \(\def\mathdef1919#1{\mathtt{0x#1}}\mathdef1919{7e}\) and \(\def\mathdef1920#1{\mathtt{0x#1}}\mathdef1920{FE}~\def\mathdef1921#1{\mathtt{0x#1}}\mathdef1921{7F}\) and \(\def\mathdef1922#1{\mathtt{0x#1}}\mathdef1922{FE}~\def\mathdef1923#1{\mathtt{0x#1}}\mathdef1923{FF}~\def\mathdef1924#1{\mathtt{0x#1}}\mathdef1924{7F}\) are well-formed encodings of the value \(-2\) as a \(\href{../syntax/values.html#syntax-int}{\mathit{s16}}\).

    +

    The side conditions on the value \(n\) of terminal bytes further enforce that +any unused bits in these bytes must be \(0\) for positive values and \(1\) for negative ones. +For example, \(\def\mathdef1925#1{\mathtt{0x#1}}\mathdef1925{83}~\def\mathdef1926#1{\mathtt{0x#1}}\mathdef1926{10}\) is malformed as a \(\href{../syntax/values.html#syntax-int}{\mathit{u8}}\) encoding. +Similarly, both \(\def\mathdef1927#1{\mathtt{0x#1}}\mathdef1927{83}~\def\mathdef1928#1{\mathtt{0x#1}}\mathdef1928{3E}\) and \(\def\mathdef1929#1{\mathtt{0x#1}}\mathdef1929{FF}~\def\mathdef1930#1{\mathtt{0x#1}}\mathdef1930{7B}\) are malformed as \(\href{../syntax/values.html#syntax-int}{\mathit{s8}}\) encodings.

    +
    +
    +
    +

    Floating-Point

    +

    Floating-point values are encoded directly by their IEEE 754-2019 (Section 3.4) bit pattern in little endian byte order:

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef1869#1{{}}\mathdef1869{floating-point value} & \href{../binary/values.html#binary-float}{\def\mathdef1884#1{{\mathtt{f}#1}}\mathdef1884{N}} &::=& + b^\ast{:\,}\href{../binary/values.html#binary-byte}{\mathtt{byte}}^{N/8} &\Rightarrow& \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-float}{\mathit{f}N}}^{-1}(b^\ast) \\ +\end{array}\end{split}\]
    +
    +
    +

    Names

    +

    Names are encoded as a vector of bytes containing the Unicode (Section 3.9) UTF-8 encoding of the name’s character sequence.

    +
    +\[\begin{split}\begin{array}{llclllll} +\def\mathdef1869#1{{}}\mathdef1869{name} & \href{../binary/values.html#binary-name}{\mathtt{name}} &::=& + b^\ast{:}\href{../binary/conventions.html#binary-vec}{\mathtt{vec}}(\href{../binary/values.html#binary-byte}{\mathtt{byte}}) &\Rightarrow& \href{../syntax/values.html#syntax-name}{\mathit{name}} + && (\mathrel{\mbox{if}} \href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(\href{../syntax/values.html#syntax-name}{\mathit{name}}) = b^\ast) \\ +\end{array}\end{split}\]
    +

    The auxiliary \(\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}\) function expressing this encoding is defined as follows:

    +
    +\[\begin{split}\begin{array}{@{}l@{}} +\begin{array}{@{}lcl@{\qquad}l@{}} +\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c^\ast) &=& (\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c))^\ast \\[1ex] +\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) &=& b & + (\begin{array}[t]{@{}c@{~}l@{}} + \mathrel{\mbox{if}} & c < \def\mathdef1931#1{\mathrm{U{+}#1}}\mathdef1931{80} \\ + \wedge & c = b) \\ + \end{array} \\ +\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) &=& b_1~b_2 & + (\begin{array}[t]{@{}c@{~}l@{}} + \mathrel{\mbox{if}} & \def\mathdef1932#1{\mathrm{U{+}#1}}\mathdef1932{80} \leq c < \def\mathdef1933#1{\mathrm{U{+}#1}}\mathdef1933{800} \\ + \wedge & c = 2^6(b_1-\def\mathdef1934#1{\mathtt{0x#1}}\mathdef1934{C0})+(b_2-\def\mathdef1935#1{\mathtt{0x#1}}\mathdef1935{80})) \\ + \end{array} \\ +\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) &=& b_1~b_2~b_3 & + (\begin{array}[t]{@{}c@{~}l@{}} + \mathrel{\mbox{if}} & \def\mathdef1936#1{\mathrm{U{+}#1}}\mathdef1936{800} \leq c < \def\mathdef1937#1{\mathrm{U{+}#1}}\mathdef1937{D800} \vee \def\mathdef1938#1{\mathrm{U{+}#1}}\mathdef1938{E000} \leq c < \def\mathdef1939#1{\mathrm{U{+}#1}}\mathdef1939{10000} \\ + \wedge & c = 2^{12}(b_1-\def\mathdef1940#1{\mathtt{0x#1}}\mathdef1940{E0})+2^6(b_2-\def\mathdef1941#1{\mathtt{0x#1}}\mathdef1941{80})+(b_3-\def\mathdef1942#1{\mathtt{0x#1}}\mathdef1942{80})) \\ + \end{array} \\ +\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) &=& b_1~b_2~b_3~b_4 & + (\begin{array}[t]{@{}c@{~}l@{}} + \mathrel{\mbox{if}} & \def\mathdef1943#1{\mathrm{U{+}#1}}\mathdef1943{10000} \leq c < \def\mathdef1944#1{\mathrm{U{+}#1}}\mathdef1944{110000} \\ + \wedge & c = 2^{18}(b_1-\def\mathdef1945#1{\mathtt{0x#1}}\mathdef1945{F0})+2^{12}(b_2-\def\mathdef1946#1{\mathtt{0x#1}}\mathdef1946{80})+2^6(b_3-\def\mathdef1947#1{\mathtt{0x#1}}\mathdef1947{80})+(b_4-\def\mathdef1948#1{\mathtt{0x#1}}\mathdef1948{80})) \\ + \end{array} \\ +\end{array} \\ +\mathrel{\mbox{where}} b_2, b_3, b_4 < \def\mathdef1949#1{\mathtt{0x#1}}\mathdef1949{C0} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Unlike in some other formats, name strings are not 0-terminated.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/exec/conventions.html b/core/exec/conventions.html new file mode 100644 index 00000000..2004b56b --- /dev/null +++ b/core/exec/conventions.html @@ -0,0 +1,207 @@ + + + + + + + + + Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Conventions

    +

    WebAssembly code is executed when instantiating a module or invoking an exported function on the resulting module instance.

    +

    Execution behavior is defined in terms of an abstract machine that models the program state. +It includes a stack, which records operand values and control constructs, and an abstract store containing global state.

    +

    For each instruction, there is a rule that specifies the effect of its execution on the program state. +Furthermore, there are rules describing the instantiation of a module. +As with validation, all rules are given in two equivalent forms:

    +
      +
    1. In prose, describing the execution in intuitive form.

    2. +
    3. In formal notation, describing the rule in mathematical form. 1

    4. +
    +
    +

    Note

    +

    As with validation, the prose and formal rules are equivalent, +so that understanding of the formal notation is not required to read this specification. +The formalism offers a more concise description in notation that is used widely in programming languages semantics and is readily amenable to mathematical proof.

    +
    +
    +

    Prose Notation

    +

    Execution is specified by stylised, step-wise rules for each instruction of the abstract syntax. +The following conventions are adopted in stating these rules.

    +
      +
    • The execution rules implicitly assume a given store \(S\).

    • +
    • The execution rules also assume the presence of an implicit stack +that is modified by pushing or popping +values, labels, and frames.

    • +
    • Certain rules require the stack to contain at least one frame. +The most recent frame is referred to as the current frame.

    • +
    • Both the store and the current frame are mutated by replacing some of their components. +Such replacement is assumed to apply globally.

    • +
    • The execution of an instruction may trap, +in which case the entire computation is aborted and no further modifications to the store are performed by it. (Other computations can still be initiated afterwards.)

    • +
    • The execution of an instruction may also end in a jump to a designated target, +which defines the next instruction to execute.

    • +
    • Execution can enter and exit instruction sequences that form blocks.

    • +
    • Instruction sequences are implicitly executed in order, unless a trap or jump occurs.

    • +
    • In various places the rules contain assertions expressing crucial invariants about the program state.

    • +
    +
    +
    +

    Formal Notation

    +
    +

    Note

    +

    This section gives a brief explanation of the notation for specifying execution formally. +For the interested reader, a more thorough introduction can be found in respective text books. 2

    +
    +

    The formal execution rules use a standard approach for specifying operational semantics, rendering them into reduction rules. +Every rule has the following general form:

    +
    +\[\mathit{configuration} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad \mathit{configuration}\]
    +

    A configuration is a syntactic description of a program state. +Each rule specifies one step of execution. +As long as there is at most one reduction rule applicable to a given configuration, reduction – and thereby execution – is deterministic. +WebAssembly has only very few exceptions to this, which are noted explicitly in this specification.

    +

    For WebAssembly, a configuration typically is a tuple \((S; F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast)\) consisting of the current store \(S\), the call frame \(F\) of the current function, and the sequence of instructions that is to be executed. +(A more precise definition is given later.)

    +

    To avoid unnecessary clutter, the store \(S\) and the frame \(F\) are omitted from reduction rules that do not touch them.

    +

    There is no separate representation of the stack. +Instead, it is conveniently represented as part of the configuration’s instruction sequence. +In particular, values are defined to coincide with \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions, +and a sequence of \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions can be interpreted as an operand “stack” that grows to the right.

    +
    +

    Note

    +

    For example, the reduction rule for the \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) instruction can be given as follows:

    +
    +\[(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n_1 + n_2) \mathbin{\mathrm{mod}} 2^{32})\]
    +

    Per this rule, two \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions and the \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) instruction itself are removed from the instruction stream and replaced with one new \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instruction. +This can be interpreted as popping two value off the stack and pushing the result.

    +

    When no result is produced, an instruction reduces to the empty sequence:

    +
    +\[\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad \epsilon\]
    +
    +

    Labels and frames are similarly defined to be part of an instruction sequence.

    +

    The order of reduction is determined by the definition of an appropriate evaluation context.

    +

    Reduction terminates when no more reduction rules are applicable. +Soundness of the WebAssembly type system guarantees that this is only the case when the original instruction sequence has either been reduced to a sequence of \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions, which can be interpreted as the values of the resulting operand stack, +or if a trap occurred.

    +
    +

    Note

    +

    For example, the following instruction sequence,

    +
    +\[(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\]
    +

    terminates after three steps:

    +
    +\[\begin{split}\begin{array}{ll} +& (\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ +\href{../exec/conventions.html#formal-notation}{\hookrightarrow} & (\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_4)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ +\href{../exec/conventions.html#formal-notation}{\hookrightarrow} & (\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_5)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ +\href{../exec/conventions.html#formal-notation}{\hookrightarrow} & (\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_6) \\ +\end{array}\end{split}\]
    +

    where \(x_4 = -x_2\) and \(x_5 = -x_2 + x_3\) and \(x_6 = x_1 \cdot (-x_2 + x_3)\).

    +
    +
    +
    1
    +

    The semantics is derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    +
    2
    +

    For example: Benjamin Pierce. Types and Programming Languages. The MIT Press 2002

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/exec/index.html b/core/exec/index.html new file mode 100644 index 00000000..14a4537b --- /dev/null +++ b/core/exec/index.html @@ -0,0 +1,162 @@ + + + + + + + + + Execution — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/exec/instructions.html b/core/exec/instructions.html new file mode 100644 index 00000000..add88423 --- /dev/null +++ b/core/exec/instructions.html @@ -0,0 +1,2443 @@ + + + + + + + + + Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Instructions

    +

    WebAssembly computation is performed by executing individual instructions.

    +
    +

    Numeric Instructions

    +

    Numeric instructions are defined in terms of the generic numeric operators. +The mapping of numeric instructions to their underlying operators is expressed by the following definition:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\mathit{op}_{\mathsf{i}N}(n_1,\dots,n_k) &=& \mathrm{i}\mathit{op}_N(n_1,\dots,n_k) \\ +\mathit{op}_{\mathsf{f}N}(z_1,\dots,z_k) &=& \mathrm{f}\mathit{op}_N(z_1,\dots,z_k) \\ +\end{array}\end{split}\]
    +

    And for conversion operators:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\mathit{cvtop}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{t_1,t_2}(c) &=& \mathit{cvtop}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{|t_1|,|t_2|}(c) \\ +\end{array}\end{split}\]
    +

    Where the underlying operators are partial, the corresponding instruction will trap when the result is not defined. +Where the underlying operators are non-deterministic, because they may return one of multiple possible NaN values, so are the corresponding instructions.

    +
    +

    Note

    +

    For example, the result of instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) applied to operands \(i_1, i_2\) +invokes \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}}(i_1, i_2)\), +which maps to the generic \(\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_{32}(i_1, i_2)\) via the above definition. +Similarly, \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s}\) applied to \(z\) +invokes \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}^{\mathsf{s}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}},\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}}(z)\), +which maps to the generic \(\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{32,64}(z)\).

    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\)

    +
      +
    1. Push the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    2. +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions already are values.

    +
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(t\) is on the top of the stack.

    2. +
    3. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. If \(\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}_t(c_1)\) is defined, then:

      +
        +
      1. Let \(c\) be a possible result of computing \(\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}_t(c_1)\).

      2. +
      3. Push the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

      4. +
      +
    6. +
    7. Else:

      +
        +
      1. Trap.

      2. +
      +
    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~t\mathsf{.}\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c \in \href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}_t(c_1)) \\ +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~t\mathsf{.}\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + & (\mathrel{\mbox{if}} \href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}_{t}(c_1) = \{\}) +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(t\) are on the top of the stack.

    2. +
    3. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. If \(\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}_t(c_1, c_2)\) is defined, then:

      +
        +
      1. Let \(c\) be a possible result of computing \(\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}_t(c_1, c_2)\).

      2. +
      3. Push the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

      4. +
      +
    8. +
    9. Else:

      +
        +
      1. Trap.

      2. +
      +
    10. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2)~t\mathsf{.}\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c \in \href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}_t(c_1,c_2)) \\ +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2)~t\mathsf{.}\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + & (\mathrel{\mbox{if}} \href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}_{t}(c_1,c2) = \{\}) +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-testop}{\mathit{testop}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(t\) is on the top of the stack.

    2. +
    3. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-testop}{\mathit{testop}}_t(c_1)\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~t\mathsf{.}\href{../syntax/instructions.html#syntax-testop}{\mathit{testop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-testop}{\mathit{testop}}_t(c_1)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-relop}{\mathit{relop}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(t\) are on the top of the stack.

    2. +
    3. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-relop}{\mathit{relop}}_t(c_1, c_2)\).

    8. +
    9. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    10. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2)~t\mathsf{.}\href{../syntax/instructions.html#syntax-relop}{\mathit{relop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-relop}{\mathit{relop}}_t(c_1,c_2)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{.}\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}\mathsf{\_}t_1\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\)

    +
      +
    1. Assert: due to validation, a value of value type \(t_1\) is on the top of the stack.

    2. +
    3. Pop the value \(t_1.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. If \(\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{t_1,t_2}(c_1)\) is defined:

      +
        +
      1. Let \(c_2\) be a possible result of computing \(\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{t_1,t_2}(c_1)\).

      2. +
      3. Push the value \(t_2.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2\) to the stack.

      4. +
      +
    6. +
    7. Else:

      +
        +
      1. Trap.

      2. +
      +
    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~t_2\mathsf{.}\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}\mathsf{\_}t_1\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^? &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (t_2\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2) + & (\mathrel{\mbox{if}} c_2 \in \href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{t_1,t_2}(c_1)) \\ +(t_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~t_2\mathsf{.}\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}\mathsf{\_}t_1\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^? &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + & (\mathrel{\mbox{if}} \href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{t_1,t_2}(c_1) = \{\}) +\end{array}\end{split}\]
    +
    +
    +
    +

    Reference Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\)

    +
      +
    1. Push the value \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\) to the stack.

    2. +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since the \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}\) instruction is already a value.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}}\)

    +
      +
    1. Assert: due to validation, a reference value is on the top of the stack.

    2. +
    3. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    4. +
    5. If \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) is \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\), then:

      +
        +
      1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~1\) to the stack.

      2. +
      +
    6. +
    7. Else:

      +
        +
      1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0\) to the stack.

      2. +
      +
    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-val}{\mathit{val}}~\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~1 + & (\mathrel{\mbox{if}} \href{../exec/runtime.html#syntax-val}{\mathit{val}} = \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t) \\ +\href{../exec/runtime.html#syntax-val}{\mathit{val}}~\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0 + & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the function address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x]\).

    6. +
    7. Push the value \(\href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a\) to the stack.

    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +F; \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& F; \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a + & (\mathrel{\mbox{if}} a = F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x]) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Vector Instructions

    +

    Most vector instructions are defined in terms of generic numeric operators applied lane-wise based on the shape.

    +
    +\[\begin{array}{lll@{\qquad}l} +\mathit{op}_{t\mathsf{x}N}(n_1,\dots,n_k) &=& + \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t\mathsf{x}N}(op_t(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(n_1) ~\dots~ \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(n_k)) +\end{array}\]
    +
    +

    Note

    +

    For example, the result of instruction \(\mathsf{i32x4}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) applied to operands \(i_1, i_2\) +invokes \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}_{\mathsf{i32x4}}(i_1, i_2)\), which maps to +\(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\mathsf{i32x4}}(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}}(i_1^+, i_2^+))\), +where \(i_1^+\) and \(i_2^+\) are sequences resulting from invoking +\(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i32x4}}(i_1)\) and \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i32x4}}(i_2)\) +respectively.

    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\)

    +
      +
    1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    2. +
    +
    +

    Note

    +

    No formal reduction rule is required for this instruction, since \(\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}\) instructions coincide with values.

    +
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}}_{\mathsf{i128}}(c_1)\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}}_{\mathsf{i128}}(c_1)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}}_{\mathsf{i128}}(c_1, c_2)\).

    8. +
    9. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    10. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}}_{\mathsf{i128}}(c_1, c_2)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}}\)

    +
      +
    1. Assert: due to validation, three values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_3\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    6. +
    7. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    8. +
    9. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}}_{\mathsf{i128}}(c_1, c_2, c_3)\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    12. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}}_{\mathsf{i128}}(c_1, c_2, c_3)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{any\_true}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(i\) be the result of computing \(\href{../exec/numerics.html#op-ine}{\mathrm{ine}}_{128}(c_1, 0)\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) onto the stack.

    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{any\_true}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i) + & (\mathrel{\mbox{if}} i = \href{../exec/numerics.html#op-ine}{\mathrm{ine}}_{128}(c_1, 0)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_2)\).

    6. +
    7. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    8. +
    9. Let \(j^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_1)\).

    10. +
    11. Let \(c^\ast\) be the concatenation of the two sequences \(j^\ast~0^{240}\)

    12. +
    13. Let \(c'\) be the result of \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{i8x16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ])\).

    14. +
    15. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c'\) onto the stack.

    16. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c') +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_2) \\ + \wedge & c^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_1)~0^{240} \\ + \wedge & c' = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{i8x16}(c^\ast[ i^\ast[0] ] \dots c^\ast[ i^\ast[15] ]) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~x^\ast\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Assert: due to validation, for all \(x_i\) in \(x^\ast\) it holds that \(x_i < 32\).

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    6. +
    7. Let \(i_2^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_2)\).

    8. +
    9. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    10. +
    11. Let \(i_1^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_1)\).

    12. +
    13. Let \(i^\ast\) be the concatenation of the two sequences \(i_1^\ast~i_2^\ast\).

    14. +
    15. Let \(c\) be the result of \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{i8x16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]])\).

    16. +
    17. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    18. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~x^\ast &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_1)~\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{i8x16}(c_2) \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{i8x16}(i^\ast[x^\ast[0]] \dots i^\ast[x^\ast[15]]) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    +
      +
    1. Let \(t\) be the type \(\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    2. +
    3. Assert: due to validation, a value of value type \(t\) is on the top of the stack.

    4. +
    5. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \(N\) be the integer \(\href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    8. +
    9. Let \(c\) be the result of \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1^N)\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    12. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} t = \href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}) + \wedge c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1^{\href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})})) + \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t_1\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?~x\)

    +
      +
    1. Assert: due to validation, \(x < N\).

    2. +
    3. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}N}(c_1)\).

    8. +
    9. Let \(t_2\) be the type \(\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(t_1\mathsf{x}N)\).

    10. +
    11. Let \(c_2\) be the result of computing \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{sx^?}_{t_1,t_2}(i^\ast[x])\).

    12. +
    13. Push the value \(t_2.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t_1\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (t_2\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_2) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & t_2 = \href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(t_1\mathsf{x}N) \\ + \wedge & c_2 = \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{sx^?}_{t_1,t_2}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}N}(c_1)[x]) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~x\)

    +
      +
    1. Assert: due to validation, \(x < \href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    2. +
    3. Let \(t_1\) be the type \(\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    4. +
    5. Assert: due to validation, a value of value type \(t_1\) is on the top of the stack.

    6. +
    7. Pop the value \(t_1.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1\) from the stack.

    8. +
    9. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    10. +
    11. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    12. +
    13. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_2)\).

    14. +
    15. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(i^\ast \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [x] = c_1)\)

    16. +
    17. Push \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) on the stack.

    18. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(t_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_2)) \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(i^\ast \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [x] = c_1) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(c\) be the result of computing \(\href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1)\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    8. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1)) +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. If \(\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1, c_2)\) is defined:

      +
        +
      1. Let \(c\) be a possible result of computing \(\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1, c_2)\).

      2. +
      3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

      4. +
      +
    8. +
    9. Else:

      +
        +
      1. Trap.

      2. +
      +
    10. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c \in \href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1, c_2)) \\ +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + & (\mathrel{\mbox{if}} \href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1, c_2) = \{\}) +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_1)\).

    8. +
    9. Let \(j^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_2)\).

    10. +
    11. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t\mathsf{x}N}(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{1,|t|}(\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}}_t(i^\ast, j^\ast)))\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t\mathsf{x}N}(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{1,|t|}(\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}}_t(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_1), \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_2))))) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) from the stack.

    4. +
    5. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    6. +
    7. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    8. +
    9. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_1)\).

    10. +
    11. Let \(c\) be \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}}_{t}(i^\ast, s^N))\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c_1) \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}}_{t}(i^\ast, s^N))) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(i_1^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c_1)\)

    6. +
    7. Let \(i\) be the result of computing \(\href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\bigwedge(i_1 \neq 0)^\ast)\).

    8. +
    9. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) onto the stack.

    10. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i_1^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}}(c) \\ + \wedge & i = \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\bigwedge(i_1 \neq 0)^\ast) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(i_1^N\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c)\).

    6. +
    7. Let \(B\) be the bit width \(|t|\) of value type \(t\).

    8. +
    9. Let \(i_2^N\) be the sequence as a result of computing \(\href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_{B}(i_1^N, 0^N)\).

    10. +
    11. Let \(c\) be the integer \(\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_{32}^{-1}(i_2^N~0^{32-N})\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) onto the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) + & (\mathrel{\mbox{if}} c = \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_{32}^{-1}(\href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_{|t|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c), 0^N))) + \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    1. Assert: due to syntax, \(N = 2\cdot M\).

    2. +
    3. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) are on the top of the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    6. +
    7. Let \(d_2^M\) be the result of computing \(\href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_2))\).

    8. +
    9. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    10. +
    11. Let \(d_1^M\) be the result of computing \(\href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1))\).

    12. +
    13. Let \(c\) be the result of \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(d_1^M~d_2^M)\).

    14. +
    15. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    16. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\_t_1\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & d_1^M = \href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}( \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)) \\ + \wedge & d_2^M = \href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}( \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_2)) \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(d_1^M~d_2^M) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)\).

    6. +
    7. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(i^\ast))\)

    8. +
    9. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    10. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1))) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. If \(\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\) is \(\mathsf{low}\), then:

      +
        +
      1. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[0 \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      2. +
      +
    6. +
    7. Else:

      +
        +
      1. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[N \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      2. +
      +
    8. +
    9. Let \(j^\ast\) be the result of computing \(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{|t_1|,|t_2|}(i^\ast)\).

    10. +
    11. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(j^\ast)\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^? &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[\href{../syntax/instructions.html#syntax-half}{\mathit{half}}(0, N) \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N])) + \end{array} +\end{array}\end{split}\]
    +

    where:

    +
    +\[\begin{split}\begin{array}{lcl} +\mathsf{low}(x, y) &=& x \\ +\mathsf{high}(x, y) &=& y \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\mathsf{\_zero}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)\).

    6. +
    7. Let \(j^\ast\) be the result of computing \(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(i^\ast)\) concatenated with the vector \(0^M\).

    8. +
    9. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(j^\ast)\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    12. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\mathsf{\_zero} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1))~0^M) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(\mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. Let \((i_1~i_2)^\ast\) be the result of computing \(\href{../exec/numerics.html#op-imul}{\mathrm{imul}}_{32}(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{16,32}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}}(c_1)), \href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{16,32}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}}(c_2)))\)

    8. +
    9. Let \(j^\ast\) be the result of computing \(\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_{32}(i_1, i_2)^\ast\).

    10. +
    11. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}}(j^\ast)\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~\mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & (i_1~i_2)^\ast = \href{../exec/numerics.html#op-imul}{\mathrm{imul}}_{32}(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{16,32}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}}(c_1)), \href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{16,32}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}}(c_2))) \\ + \wedge & j^\ast = \href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_{32}(i_1, i_2)^\ast \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}}(j^\ast) + \end{array} +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}t_1\mathsf{x}M\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    1. Assert: due to validation, two values of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2\) from the stack.

    4. +
    5. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    6. +
    7. If \(\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\) is \(\mathsf{low}\), then:

      +
        +
      1. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[0 \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      2. +
      3. Let \(j^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_2)[0 \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      4. +
      +
    8. +
    9. Else:

      +
        +
      1. Let \(i^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[N \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      2. +
      3. Let \(j^\ast\) be the sequence \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_2)[N \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N]\).

      4. +
      +
    10. +
    11. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../exec/numerics.html#op-imul}{\mathrm{imul}}_{t_2\mathsf{x}N}(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(i^\ast), \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(j^\ast)))\)

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) onto the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_2)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}t_1\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)[\href{../syntax/instructions.html#syntax-half}{\mathit{half}}(0, N) \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N] \\ + \wedge & j^\ast = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_2)[\href{../syntax/instructions.html#syntax-half}{\mathit{half}}(0, N) \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N] \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(\href{../exec/numerics.html#op-imul}{\mathrm{imul}}_{t_2\mathsf{x}N}(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(i^\ast), \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(j^\ast))) + \end{array}\end{split}\]
    +

    where:

    +
    +\[\begin{split}\begin{array}{lcl} +\mathsf{low}(x, y) &=& x \\ +\mathsf{high}(x, y) &=& y \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\_t_1\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1\) from the stack.

    4. +
    5. Let \((i_1~i_2)^\ast\) be the sequence \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1))\).

    6. +
    7. Let \(j^\ast\) be the result of computing \(\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_{N}(i_1, i_2)^\ast\).

    8. +
    9. Let c be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(j^\ast)\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\) to the stack.

    12. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c_1)~t_2\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\_t_1\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c) \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & (i_1~i_2)^\ast = \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{|t_1|,|t_2|}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t_1\mathsf{x}M}(c_1)) \\ + \wedge & j^\ast = \href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_{N}(i_1, i_2)^\ast \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{t_2\mathsf{x}N}(j^\ast) + \end{array} +\end{array}\end{split}\]
    +
    +
    +
    +

    Parametric Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\)

    +
      +
    1. Assert: due to validation, a value is on the top of the stack.

    2. +
    3. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    4. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-val}{\mathit{val}}~~\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \epsilon +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~(t^\ast)^?\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) from the stack.

    4. +
    5. Assert: due to validation, two more values (of the same value type) are on the top of the stack.

    6. +
    7. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_2\) from the stack.

    8. +
    9. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_1\) from the stack.

    10. +
    11. If \(c\) is not \(0\), then:

      +
        +
      1. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_1\) back to the stack.

      2. +
      +
    12. +
    13. Else:

      +
        +
      1. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_2\) back to the stack.

      2. +
      +
    14. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-val}{\mathit{val}}_1~\href{../exec/runtime.html#syntax-val}{\mathit{val}}_2~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t^? &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}_1 + & (\mathrel{\mbox{if}} c \neq 0) \\ +\href{../exec/runtime.html#syntax-val}{\mathit{val}}_1~\href{../exec/runtime.html#syntax-val}{\mathit{val}}_2~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t^? &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}_2 + & (\mathrel{\mbox{if}} c = 0) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    In future versions of WebAssembly, \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) may allow more than one value per choice.

    +
    +
    +
    +
    +

    Variable Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x]\) exists.

    4. +
    5. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) be the value \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x]\).

    6. +
    7. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    8. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +F; (\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& F; \href{../exec/runtime.html#syntax-val}{\mathit{val}} + & (\mathrel{\mbox{if}} F.\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x] = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x]\) exists.

    4. +
    5. Assert: due to validation, a value is on the top of the stack.

    6. +
    7. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    8. +
    9. Replace \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x]\) with the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\).

    10. +
    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& F'; \epsilon + & (\mathrel{\mbox{if}} F' = F \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}[x] = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x\)

    +
      +
    1. Assert: due to validation, a value is on the top of the stack.

    2. +
    3. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    4. +
    5. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    6. +
    7. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    8. +
    9. Execute the instruction \((\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x)\).

    10. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x) +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the global address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a]\) exists.

    8. +
    9. Let \(\mathit{glob}\) be the global instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a]\).

    10. +
    11. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) be the value \(\mathit{glob}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}\).

    12. +
    13. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}} +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}} = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the global address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a]\) exists.

    8. +
    9. Let \(\mathit{glob}\) be the global instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a]\).

    10. +
    11. Assert: due to validation, a value is on the top of the stack.

    12. +
    13. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    14. +
    15. Replace \(\mathit{glob}.\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}\) with the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\).

    16. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad +(\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x]].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}} = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Validation ensures that the global is, in fact, marked as mutable.

    +
    +
    +
    +
    +

    Table Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    14. +
    15. If \(i\) is not smaller than the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    16. +
    17. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) be the value \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i]\).

    18. +
    19. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    20. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}} +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i] = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\).

    10. +
    11. Assert: due to validation, a reference value is on the top of the stack.

    12. +
    13. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    18. +
    19. If \(i\) is not smaller than the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    20. +
    21. Replace the element \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i]\) with \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\).

    22. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i] = \href{../exec/runtime.html#syntax-val}{\mathit{val}}) \\ +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\).

    10. +
    11. Let \(\mathit{sz}\) be the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}) +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}| = \mathit{sz}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\).

    10. +
    11. Let \(\mathit{sz}\) be the length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\).

    12. +
    13. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    14. +
    15. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    16. +
    17. Assert: due to validation, a reference value is on the top of the stack.

    18. +
    19. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    20. +
    21. Either, try growing \(\mathit{table}\) by \(n\) entries with initialization value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\):

    22. +
    +
    +
      +
    1. If it succeeds, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}\) to the stack.

    2. +
    3. Else, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(-1)\) to the stack.

    4. +
    +
    +
      +
    1. Or, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(-1)\) to the stack.

    2. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x] = a \\ + \wedge & \mathit{sz} = |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}| \\ + \wedge & S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a] = \href{../exec/modules.html#grow-table}{\mathrm{growtable}}(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a], n, \href{../exec/runtime.html#syntax-val}{\mathit{val}})) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~{-1}) +\end{array} +\end{array}\end{split}\]
    +
    +

    Note

    +

    The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}\) instruction is non-deterministic. +It may either succeed, returning the old table size \(\mathit{sz}\), +or fail, returning \({-1}\). +Failure must occur if the referenced table instance has a maximum size defined that would be exceeded. +However, failure can occur in other cases as well. +In practice, the choice depends on the resources available to the embedder.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(\mathit{ta}\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    14. +
    15. Assert: due to validation, a reference value is on the top of the stack.

    16. +
    17. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    22. +
    23. If \(i + n\) is larger than the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    24. +
    +
      +
    1. If \(n\) is \(0\), then:

      +
        +
      1. Return.

      2. +
      +
    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) to the stack.

    4. +
    5. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    6. +
    7. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\).

    8. +
    9. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(i+1)\) to the stack.

    10. +
    11. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    14. +
    15. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x\).

    16. +
    +
    +\[\begin{split}\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & i + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}|) \\[1ex] + \end{array} +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i+1)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x) \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(\mathit{ta}_x\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}_x]\) exists.

    8. +
    9. Let \(\mathit{tab}_x\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}_x]\).

    10. +
    11. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[y]\) exists.

    12. +
    13. Let \(\mathit{ta}_y\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[y]\).

    14. +
    15. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}_y]\) exists.

    16. +
    17. Let \(\mathit{tab}_y\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}_y]\).

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    22. +
    23. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    24. +
    25. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) from the stack.

    26. +
    27. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    28. +
    29. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) from the stack.

    30. +
    31. If \(s + n\) is larger than the length of \(\mathit{tab}_y.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\) or \(d + n\) is larger than the length of \(\mathit{tab}_x.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    32. +
    33. If \(n = 0\), then:

    34. +
    +
    +
      +
    1. Return.

    2. +
    +
    +
      +
    1. If \(d \leq s\), then:

    2. +
    +
    +
      +
    1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) to the stack.

    4. +
    5. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~y\).

    6. +
    7. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\).

    8. +
    9. Assert: due to the earlier check against the table size, \(d+1 < 2^{32}\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+1)\) to the stack.

    12. +
    13. Assert: due to the earlier check against the table size, \(s+1 < 2^{32}\).

    14. +
    15. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+1)\) to the stack.

    16. +
    +
    +
      +
    1. Else:

    2. +
    +
    +
      +
    1. Assert: due to the earlier check against the table size, \(d+n-1 < 2^{32}\).

    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+n-1)\) to the stack.

    4. +
    5. Assert: due to the earlier check against the table size, \(s+n-1 < 2^{32}\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+n-1)\) to the stack.

    8. +
    +
      +
    1. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~y\).

    2. +
    +
      +
    1. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\).

    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    4. +
    5. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) to the stack.

    6. +
    +
    +
      +
    1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    2. +
    3. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y\).

    4. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & s + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[y]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}| \\ + \vee & d + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}|) \\[1ex] + \end{array} +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~y)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} d \leq s) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+n-1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+n-1)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~y)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y) \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} d > s) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(\mathit{ta}\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\).

    10. +
    11. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[y]\) exists.

    12. +
    13. Let \(\mathit{ea}\) be the element address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[y]\).

    14. +
    15. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[\mathit{ea}]\) exists.

    16. +
    17. Let \(\mathit{elem}\) be the element instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[\mathit{ea}]\).

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    22. +
    23. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    24. +
    25. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) from the stack.

    26. +
    27. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    28. +
    29. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) from the stack.

    30. +
    31. If \(s + n\) is larger than the length of \(\mathit{elem}.\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}\) or \(d + n\) is larger than the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    32. +
    33. If \(n = 0\), then:

      +
        +
      1. Return.

      2. +
      +
    34. +
    35. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) be the reference value \(\mathit{elem}.\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}[s]\).

    36. +
    37. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    38. +
    39. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    40. +
    41. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\).

    42. +
    43. Assert: due to the earlier check against the table size, \(d+1 < 2^{32}\).

    44. +
    45. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+1)\) to the stack.

    46. +
    47. Assert: due to the earlier check against the segment size, \(s+1 < 2^{32}\).

    48. +
    49. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+1)\) to the stack.

    50. +
    51. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    52. +
    53. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y\).

    54. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & s + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[y]].\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}| \\ + \vee & d + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}|) \\[1ex] + \end{array} +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y) \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} \href{../exec/runtime.html#syntax-val}{\mathit{val}} = S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[y]].\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}[s]) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the element address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[a]\) exists.

    8. +
    9. Replace \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[a]\) with the element instance \(\{\href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\epsilon\}\).

    10. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{elems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}[x]] = \{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\epsilon \}) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Memory Instructions

    +
    +

    Note

    +

    The alignment \(\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}\) in load and store instructions does not affect the semantics. +It is an indication that the offset \(\mathit{ea}\) at which the memory is accessed is intended to satisfy the property \(\mathit{ea} \mathbin{\mathrm{mod}} 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} = 0\). +A WebAssembly implementation can use this hint to optimize for the intended use. +Unaligned access violating that property is still allowed and must succeed regardless of the annotation. +However, it may be substantially slower on some hardware.

    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) and \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    14. +
    15. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    16. +
    17. If \(N\) is not part of the instruction, then:

      +
        +
      1. Let \(N\) be the bit width \(|t|\) of number type \(t\).

      2. +
      +
    18. +
    19. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    20. +
    21. Let \(b^\ast\) be the byte sequence \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\).

    22. +
    23. If \(N\) and \(\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\) are part of the instruction, then:

      +
        +
      1. Let \(n\) be the integer for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = b^\ast\).

      2. +
      3. Let \(c\) be the result of computing \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{N,|t|}(n)\).

      4. +
      +
    24. +
    25. Else:

      +
        +
      1. Let \(c\) be the constant for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_t(c) = b^\ast\).

      2. +
      +
    26. +
    27. Push the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    28. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + |t|/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_t(c) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} |t|/8]) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + S; F; (t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{N,|t|}(n)) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}({N}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}})^?~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{M}\mathsf{x}N\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    14. +
    15. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    16. +
    17. If \(\mathit{ea} + M \cdot N /8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
      +
        +
      1. Trap.

      2. +
      +
      +
    18. +
    19. Let \(b^\ast\) be the byte sequence \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} M \cdot N /8]\).

    20. +
    21. Let \(m_k\) be the integer for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}M}}(m_k) = b^\ast[k \cdot M/8 \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} M/8]\).

    22. +
    23. Let \(W\) be the integer \(M \cdot 2\).

    24. +
    25. Let \(n_k\) be the result of \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{M,W}(m_k)\).

    26. +
    27. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\mathit{i}W\mathsf{x}N}(n_0 \dots n_{N-1})\).

    28. +
    29. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    30. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{M}\mathsf{x}N\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + M \cdot N / 8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}M}}(m_k) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} + k \cdot M/8 \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} M/8]) \\ + \wedge & W = M \cdot 2 \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\mathit{i}W\mathsf{x}N}(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{M,W}(m_0) \dots \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}}^{\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}}_{M,W}(m_{N-1})) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{M}\mathsf{x}N\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    14. +
    15. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    16. +
    17. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
      +
        +
      1. Trap.

      2. +
      +
      +
    18. +
    19. Let \(b^\ast\) be the byte sequence \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\).

    20. +
    21. Let \(n\) be the integer for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = b^\ast\).

    22. +
    23. Let \(L\) be the integer \(128 / N\).

    24. +
    25. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}\mathsf{x}L}(n^L)\).

    26. +
    27. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    28. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]) \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}\mathsf{x}L}(n^L) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    14. +
    15. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    16. +
    17. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
      +
        +
      1. Trap.

      2. +
      +
      +
    18. +
    19. Let \(b^\ast\) be the byte sequence \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\).

    20. +
    21. Let \(n\) be the integer for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = b^\ast\).

    22. +
    23. Let \(c\) be the result of \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}^{\mathsf{u}}}_{N,128}(n)\).

    24. +
    25. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    26. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]) \\ + \wedge & c = \href{../exec/numerics.html#op-extend-u}{\mathrm{extend}^{\mathsf{u}}}_{N,128}(n) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~v\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    18. +
    19. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    20. +
    21. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    22. +
    23. Let \(b^\ast\) be the byte sequence \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\).

    24. +
    25. Let \(r\) be the constant for which \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(r) = b^\ast\).

    26. +
    27. Let \(L\) be \(128 / N\).

    28. +
    29. Let \(c\) be the result of computing \(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\mathsf{i}N\mathsf{x}L}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i}N\mathsf{x}L}(v) \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [x] = r)\).

    30. +
    31. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) to the stack.

    32. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~v)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(r) = S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]) \\ + \wedge & L = 128/N \\ + \wedge & c = \href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}^{-1}_{\mathsf{i}N\mathsf{x}L}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i}N\mathsf{x}L}(v) \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [x] = r) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~v)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) and \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(t\) is on the top of the stack.

    12. +
    13. Pop the value \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    18. +
    19. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    20. +
    21. If \(N\) is not part of the instruction, then:

      +
        +
      1. Let \(N\) be the bit width \(|t|\) of number type \(t\).

      2. +
      +
    22. +
    23. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    24. +
    25. If \(N\) is part of the instruction, then:

      +
        +
      1. Let \(n\) be the result of computing \(\href{../exec/numerics.html#op-wrap}{\mathrm{wrap}}_{|t|,N}(c)\).

      2. +
      3. Let \(b^\ast\) be the byte sequence \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(n)\).

      4. +
      +
    26. +
    27. Else:

      +
        +
      1. Let \(b^\ast\) be the byte sequence \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_t(c)\).

      2. +
      +
    28. +
    29. Replace the bytes \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\) with \(b^\ast\).

    30. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + |t|/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} |t|/8] = \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_t(c)) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N/8 \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8] = \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(\href{../exec/numerics.html#op-wrap}{\mathrm{wrap}}_{|t|,N}(c)) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(t.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}^?~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    18. +
    19. Let \(\mathit{ea}\) be the integer \(i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}\).

    20. +
    21. If \(\mathit{ea} + N/8\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    22. +
    23. Let \(L\) be \(128/N\).

    24. +
    25. Let \(b^\ast\) be the byte sequence \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i}N\mathsf{x}L}(c)[x])\).

    26. +
    27. Replace the bytes \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8]\) with \(b^\ast\).

    28. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & \mathit{ea} = i + \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}} \\ + \wedge & \mathit{ea} + N \leq |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \wedge & L = 128/N \\ + \wedge & S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}[\mathit{ea} \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} N/8] = \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{\href{../syntax/values.html#syntax-int}{\mathit{i}N}}(\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{\mathsf{i}N\mathsf{x}L}(c)[x]) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~k)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Let \(\mathit{sz}\) be the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) divided by the page size.

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}\) to the stack.

    14. +
    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}) +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| = \mathit{sz}\cdot64\,\mathrm{Ki}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(a\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\).

    10. +
    11. Let \(\mathit{sz}\) be the length of \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) divided by the page size.

    12. +
    13. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    14. +
    15. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    16. +
    17. Let \(\mathit{err}\) be the \(\href{../syntax/values.html#syntax-int}{\mathit{i32}}\) value \(2^{32}-1\), for which \(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_{32}(\mathit{err})\) is \(-1\).

    18. +
    19. Either, try growing \(\mathit{mem}\) by \(n\) pages:

    20. +
    +
    +
      +
    1. If it succeeds, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}\) to the stack.

    2. +
    3. Else, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{err}\) to the stack.

    4. +
    +
    +
      +
    1. Or, push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{err}\) to the stack.

    2. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\mathit{sz}) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0] = a \\ + \wedge & \mathit{sz} = |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}|/64\,\mathrm{Ki} \\ + \wedge & S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a] = \href{../exec/modules.html#grow-mem}{\mathrm{growmem}}(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a], n)) \\[1ex] + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_{32}^{-1}(-1)) +\end{array} +\end{array}\end{split}\]
    +
    +

    Note

    +

    The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\) instruction is non-deterministic. +It may either succeed, returning the old memory size \(\mathit{sz}\), +or fail, returning \({-1}\). +Failure must occur if the referenced memory instance has a maximum size defined that would be exceeded. +However, failure can occur in other cases as well. +In practice, the choice depends on the resources available to the embedder.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(\mathit{ma}\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) from the stack.

    22. +
    23. If \(d + n\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    24. +
    25. If \(n = 0\), then:

      +
        +
      1. Return.

      2. +
      +
    26. +
    27. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    28. +
    29. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    30. +
    31. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    32. +
    33. Assert: due to the earlier check against the memory size, \(d+1 < 2^{32}\).

    34. +
    35. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+1)\) to the stack.

    36. +
    37. Push the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) to the stack.

    38. +
    39. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    40. +
    41. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\).

    42. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + (\mathrel{\mbox{if}} d + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[x]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}|) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+1)~\href{../exec/runtime.html#syntax-val}{\mathit{val}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(\mathit{ma}\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\).

    10. +
    11. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    12. +
    13. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    14. +
    15. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) from the stack.

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) from the stack.

    22. +
    23. If \(s + n\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) or \(d + n\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    24. +
    25. If \(n = 0\), then:

    26. +
    +
    +
      +
    1. Return.

    2. +
    +
    +
      +
    1. If \(d \leq s\), then:

    2. +
    +
    +
      +
    1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) to the stack.

    4. +
    5. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    6. +
    7. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    8. +
    9. Assert: due to the earlier check against the memory size, \(d+1 < 2^{32}\).

    10. +
    11. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+1)\) to the stack.

    12. +
    13. Assert: due to the earlier check against the memory size, \(s+1 < 2^{32}\).

    14. +
    15. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+1)\) to the stack.

    16. +
    +
    +
      +
    1. Else:

    2. +
    +
    +
      +
    1. Assert: due to the earlier check against the memory size, \(d+n-1 < 2^{32}\).

    2. +
    3. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+n-1)\) to the stack.

    4. +
    5. Assert: due to the earlier check against the memory size, \(s+n-1 < 2^{32}\).

    6. +
    7. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+n-1)\) to the stack.

    8. +
    9. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    10. +
    11. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    12. +
    13. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    14. +
    15. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) to the stack.

    16. +
    +
    +
      +
    1. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    2. +
    3. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\).

    4. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & s + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| \\ + \vee & d + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}|) \\[1ex] + \end{array} +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} d \leq s) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+n-1) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+n-1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} d > s) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\) exists.

    4. +
    5. Let \(\mathit{ma}\) be the memory address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[0]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\) exists.

    8. +
    9. Let \(\mathit{mem}\) be the memory instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[\mathit{ma}]\).

    10. +
    11. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]\) exists.

    12. +
    13. Let \(\mathit{da}\) be the data address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]\).

    14. +
    15. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[\mathit{da}]\) exists.

    16. +
    17. Let \(\mathit{data}\) be the data instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[\mathit{da}]\).

    18. +
    19. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    20. +
    21. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\) from the stack.

    22. +
    23. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    24. +
    25. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s\) from the stack.

    26. +
    27. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    28. +
    29. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) from the stack.

    30. +
    31. If \(s + n\) is larger than the length of \(\mathit{data}.\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}\) or \(d + n\) is larger than the length of \(\mathit{mem}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    32. +
    33. If \(n = 0\), then:

      +
        +
      1. Return.

      2. +
      +
    34. +
    35. Let \(b\) be the byte \(\mathit{data}.\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}[s]\).

    36. +
    37. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d\) to the stack.

    38. +
    39. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~b\) to the stack.

    40. +
    41. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}\).

    42. +
    43. Assert: due to the earlier check against the memory size, \(d+1 < 2^{32}\).

    44. +
    45. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(d+1)\) to the stack.

    46. +
    47. Assert: due to the earlier check against the memory size, \(s+1 < 2^{32}\).

    48. +
    49. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(s+1)\) to the stack.

    50. +
    51. Push the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~(n-1)\) to the stack.

    52. +
    53. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x\).

    54. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & s + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]].\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}| \\ + \vee & d + n > |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[x]].\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}|) \\[1ex] + \end{array} +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad S; F; \epsilon + \\ \qquad + (\mathrel{\mbox{otherwise}}) +\\[1ex] +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n+1)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x) + \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow} + \\ \qquad S; F; + \begin{array}[t]{@{}l@{}} + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~b)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~0, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~0 \}) \\ + (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~d+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~s+1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x) \\ + \end{array} + \\ \qquad + (\mathrel{\mbox{otherwise}}, \mathrel{\mbox{if}} b = S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]].\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}[s]) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the data address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[a]\) exists.

    8. +
    9. Replace \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[a]\) with the data instance \(\{\href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~\epsilon\}\).

    10. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \epsilon +\end{array} +\\ \qquad + (\mathrel{\mbox{if}} S' = S \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-store}{\mathsf{datas}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}[x]] = \{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~\epsilon \}) \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Control Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}}\)

    +
      +
    1. Do nothing.

    2. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \epsilon +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\)

    +
      +
    1. Trap.

    2. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    1. Assert: due to validation, \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\) is defined.

    2. +
    3. Let \([t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]\) be the function type \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\).

    4. +
    5. Let \(L\) be the label whose arity is \(n\) and whose continuation is the end of the block.

    6. +
    7. Assert: due to validation, there are at least \(m\) values on the top of the stack.

    8. +
    9. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m\) from the stack.

    10. +
    11. Enter the block \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) with label \(L\).

    12. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl} +F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\mathit{bt}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + F; \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\epsilon\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \\&&\quad (\mathrel{\mbox{if}} \href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\mathit{bt}) = [t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    1. Assert: due to validation, \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\) is defined.

    2. +
    3. Let \([t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]\) be the function type \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\).

    4. +
    5. Let \(L\) be the label whose arity is \(m\) and whose continuation is the start of the loop.

    6. +
    7. Assert: due to validation, there are at least \(m\) values on the top of the stack.

    8. +
    9. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m\) from the stack.

    10. +
    11. Enter the block \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) with label \(L\).

    12. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl} +F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + F; \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_m\{\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \\&&\quad (\mathrel{\mbox{if}} \href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\mathit{bt}) = [t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    1. Assert: due to validation, \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\) is defined.

    2. +
    3. Let \([t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]\) be the function type \(\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}})\).

    4. +
    5. Let \(L\) be the label whose arity is \(n\) and whose continuation is the end of the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) instruction.

    6. +
    7. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    8. +
    9. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) from the stack.

    10. +
    11. Assert: due to validation, there are at least \(m\) values on the top of the stack.

    12. +
    13. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m\) from the stack.

    14. +
    15. If \(c\) is non-zero, then:

      +
        +
      1. Enter the block \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast\) with label \(L\).

      2. +
      +
    16. +
    17. Else:

      +
        +
      1. Enter the block \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast\) with label \(L\).

      2. +
      +
    18. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl} +F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + F; \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\epsilon\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \\&&\quad (\mathrel{\mbox{if}} c \neq 0 \wedge \href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\mathit{bt}) = [t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]) \\ +F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& + F; \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\epsilon\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \\&&\quad (\mathrel{\mbox{if}} c = 0 \wedge \href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\mathit{bt}) = [t_1^m] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^n]) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l\)

    +
      +
    1. Assert: due to validation, the stack contains at least \(l+1\) labels.

    2. +
    3. Let \(L\) be the \(l\)-th label appearing on the stack, starting from the top and counting from zero.

    4. +
    5. Let \(n\) be the arity of \(L\).

    6. +
    7. Assert: due to validation, there are at least \(n\) values on the top of the stack.

    8. +
    9. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) from the stack.

    10. +
    11. Repeat \(l+1\) times:

      +
        +
      1. While the top of the stack is a value, do:

        +
          +
        1. Pop the value from the stack.

        2. +
        +
      2. +
      3. Assert: due to validation, the top of the stack now is a label.

      4. +
      5. Pop the label from the stack.

      6. +
      +
    12. +
    13. Push the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) to the stack.

    14. +
    15. Jump to the continuation of \(L\).

    16. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../exec/runtime.html#syntax-ctxt-block}{B}^l[\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l)]~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\) from the stack.

    4. +
    5. If \(c\) is non-zero, then:

      +
        +
      1. Execute the instruction \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l)\).

      2. +
      +
    6. +
    7. Else:

      +
        +
      1. Do nothing.

      2. +
      +
    8. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l) + & (\mathrel{\mbox{if}} c \neq 0) \\ +(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \epsilon + & (\mathrel{\mbox{if}} c = 0) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N\)

    +
      +
    1. Assert: due to validation, a value of value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    2. +
    3. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    4. +
    5. If \(i\) is smaller than the length of \(l^\ast\), then:

      +
        +
      1. Let \(l_i\) be the label \(l^\ast[i]\).

      2. +
      3. Execute the instruction \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l_i)\).

      4. +
      +
    6. +
    7. Else:

      +
        +
      1. Execute the instruction \((\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l_N)\).

      2. +
      +
    8. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l_i) + & (\mathrel{\mbox{if}} l^\ast[i] = l_i) \\ +(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& (\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l_N) + & (\mathrel{\mbox{if}} |l^\ast| \leq i) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Let \(n\) be the arity of \(F\).

    4. +
    5. Assert: due to validation, there are at least \(n\) values on the top of the stack.

    6. +
    7. Pop the results \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) from the stack.

    8. +
    9. Assert: due to validation, the stack contains at least one frame.

    10. +
    11. While the top of the stack is not a frame, do:

      +
        +
      1. Pop the top element from the stack.

      2. +
      +
    12. +
    13. Assert: the top of the stack is the frame \(F\).

    14. +
    15. Pop the frame from the stack.

    16. +
    17. Push \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) to the stack.

    18. +
    19. Jump to the instruction after the original call that pushed the frame.

    20. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F\}~\href{../exec/runtime.html#syntax-ctxt-block}{B}^k[\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}]~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x]\) exists.

    4. +
    5. Let \(a\) be the function address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x]\).

    6. +
    7. Invoke the function instance at address \(a\).

    8. +
    +
    +\[\begin{array}{lcl@{\qquad}l} +F; (\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& F; (\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) + & (\mathrel{\mbox{if}} F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x] = a) +\end{array}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y\)

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\) exists.

    4. +
    5. Let \(\mathit{ta}\) be the table address \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]\).

    6. +
    7. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\) exists.

    8. +
    9. Let \(\mathit{tab}\) be the table instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[\mathit{ta}]\).

    10. +
    11. Assert: due to validation, \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[y]\) exists.

    12. +
    13. Let \(\mathit{ft}_{\mathrm{expect}}\) be the function type \(F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[y]\).

    14. +
    15. Assert: due to validation, a value with value type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) is on the top of the stack.

    16. +
    17. Pop the value \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i\) from the stack.

    18. +
    19. If \(i\) is not smaller than the length of \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\), then:

      +
        +
      1. Trap.

      2. +
      +
    20. +
    21. Let \(r\) be the reference \(\mathit{tab}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i]\).

    22. +
    23. If \(r\) is \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\), then:

      +
        +
      1. Trap.

      2. +
      +
    24. +
    25. Assert: due to validation of table mutation, \(r\) is a function reference.

    26. +
    27. Let \(\href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a\) be the function reference \(r\).

    28. +
    29. Assert: due to validation of table mutation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a]\) exists.

    30. +
    31. Let \(\mathit{f}\) be the function instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a]\).

    32. +
    33. Let \(\mathit{ft}_{\mathrm{actual}}\) be the function type \(\mathit{f}.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}\).

    34. +
    35. If \(\mathit{ft}_{\mathrm{actual}}\) and \(\mathit{ft}_{\mathrm{expect}}\) differ, then:

      +
        +
      1. Trap.

      2. +
      +
    36. +
    37. Invoke the function instance at address \(a\).

    38. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; (\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x]].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}[i] = \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a \\ + \wedge & S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a] = f \\ + \wedge & F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[y] = f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}) + \end{array} +\\[1ex] +\begin{array}{lcl@{\qquad}l} +S; F; (\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~i)~(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array} +\\ \qquad + (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +
    +

    Blocks

    +

    The following auxiliary rules define the semantics of executing an instruction sequence +that forms a block.

    +
    +

    Entering \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) with label \(L\)

    +
      +
    1. Push \(L\) to the stack.

    2. +
    3. Jump to the start of the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\).

    4. +
    +
    +

    Note

    +

    No formal reduction rule is needed for entering an instruction sequence, +because the label \(L\) is embedded in the administrative instruction that structured control instructions reduce to directly.

    +
    +
    +
    +

    Exiting \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) with label \(L\)

    +

    When the end of a block is reached without a jump or trap aborting it, then the following steps are performed.

    +
      +
    1. Let \(m\) be the number of values on the top of the stack.

    2. +
    3. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m\) from the stack.

    4. +
    5. Assert: due to validation, the label \(L\) is now on the top of the stack.

    6. +
    7. Pop the label from the stack.

    8. +
    9. Push \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m\) back to the stack.

    10. +
    11. Jump to the position after the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) of the structured control instruction associated with the label \(L\).

    12. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^m~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}^m +\end{array}\end{split}\]
    +
    +

    Note

    +

    This semantics also applies to the instruction sequence contained in a \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}\) instruction. +Therefore, execution of a loop falls off the end, unless a backwards branch is performed explicitly.

    +
    +
    +
    +
    +

    Function Calls

    +

    The following auxiliary rules define the semantics of invoking a function instance +through one of the call instructions +and returning from it.

    +
    +

    Invocation of function address \(a\)

    +
      +
    1. Assert: due to validation, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a]\) exists.

    2. +
    3. Let \(f\) be the function instance, \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a]\).

    4. +
    5. Let \([t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m]\) be the function type \(f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}\).

    6. +
    7. Let \(t^\ast\) be the list of value types \(f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}.\href{../syntax/modules.html#syntax-func}{\mathsf{locals}}\).

    8. +
    9. Let \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) be the expression \(f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}.\href{../syntax/modules.html#syntax-func}{\mathsf{body}}\).

    10. +
    11. Assert: due to validation, \(n\) values are on the top of the stack.

    12. +
    13. Pop the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) from the stack.

    14. +
    15. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_0^\ast\) be the list of zero values of types \(t^\ast\).

    16. +
    17. Let \(F\) be the frame \(\{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#default-val}{\mathrm{default}}_t)^\ast \}\).

    18. +
    19. Push the activation of \(F\) with arity \(m\) to the stack.

    20. +
    21. Let \(L\) be the label whose arity is \(m\) and whose continuation is the end of the function.

    22. +
    23. Enter the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) with label \(L\).

    24. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_m\{F\}~\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_m\{\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a] = f \\ + \wedge & f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}} = [t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m] \\ + \wedge & f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}} = \{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~x, \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~t^k, \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \} \\ + \wedge & F = \{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~f.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}, ~\href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#default-val}{\mathrm{default}}_t)^k \}) + \end{array} \\ +\end{array}\end{split}\]
    +
    +
    +

    Returning from a function

    +

    When the end of a function is reached without a jump (i.e., \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\)) or trap aborting it, then the following steps are performed.

    +
      +
    1. Let \(F\) be the current frame.

    2. +
    3. Let \(n\) be the arity of the activation of \(F\).

    4. +
    5. Assert: due to validation, there are \(n\) values on the top of the stack.

    6. +
    7. Pop the results \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) from the stack.

    8. +
    9. Assert: due to validation, the frame \(F\) is now on the top of the stack.

    10. +
    11. Pop the frame from the stack.

    12. +
    13. Push \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) back to the stack.

    14. +
    15. Jump to the instruction after the original call.

    16. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n +\end{array}\end{split}\]
    +
    +
    +

    Host Functions

    +

    Invoking a host function has non-deterministic behavior. +It may either terminate with a trap or return regularly. +However, in the latter case, it must consume and produce the right number and types of WebAssembly values on the stack, +according to its function type.

    +

    A host function may also modify the store. +However, all store modifications must result in an extension of the original store, i.e., they must only modify mutable contents and must not have instances removed. +Furthermore, the resulting store must be valid, i.e., all data and code in it is well-typed.

    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{l} +\begin{array}{lcl@{\qquad}l} +S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; \href{../exec/runtime.html#syntax-result}{\mathit{result}} +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a] = \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~[t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m], \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\mathit{hf} \} \\ + \wedge & (S'; \href{../exec/runtime.html#syntax-result}{\mathit{result}}) \in \mathit{hf}(S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n)) \\ + \end{array} \\ +\begin{array}{lcl@{\qquad}l} +S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~a) +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{if}} & S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a] = \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~[t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m], \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\mathit{hf} \} \\ + \wedge & \bot \in \mathit{hf}(S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n)) \\ + \end{array} \\ +\end{array}\end{split}\]
    +

    Here, \(\mathit{hf}(S; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n)\) denotes the implementation-defined execution of host function \(\mathit{hf}\) in current store \(S\) with arguments \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\). +It yields a set of possible outcomes, where each element is either a pair of a modified store \(S'\) and a result +or the special value \(\bot\) indicating divergence. +A host function is non-deterministic if there is at least one argument for which the set of outcomes is not singular.

    +

    For a WebAssembly implementation to be sound in the presence of host functions, +every host function instance must be valid, +which means that it adheres to suitable pre- and post-conditions: +under a valid store \(S\), and given arguments \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\) matching the ascribed parameter types \(t_1^n\), +executing the host function must yield a non-empty set of possible outcomes each of which is either divergence or consists of a valid store \(S'\) that is an extension of \(S\) and a result matching the ascribed return types \(t_2^m\). +All these notions are made precise in the Appendix.

    +
    +

    Note

    +

    A host function can call back into WebAssembly by invoking a function exported from a module. +However, the effects of any such call are subsumed by the non-deterministic behavior allowed for the host function.

    +
    +
    +
    +
    +

    Expressions

    +

    An expression is evaluated relative to a current frame pointing to its containing module instance.

    +
      +
    1. Jump to the start of the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) of the expression.

    2. +
    3. Execute the instruction sequence.

    4. +
    5. Assert: due to validation, the top of the stack contains a value.

    6. +
    7. Pop the value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) from the stack.

    8. +
    +

    The value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) is the result of the evaluation.

    +
    +\[S; F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S'; F'; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'^\ast +\qquad (\mathrel{\mbox{if}} S; F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S'; F'; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})\]
    +
    +

    Note

    +

    Evaluation iterates this reduction rule until reaching a value. +Expressions constituting function bodies are executed during function invocation.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/exec/modules.html b/core/exec/modules.html new file mode 100644 index 00000000..103c3cfb --- /dev/null +++ b/core/exec/modules.html @@ -0,0 +1,729 @@ + + + + + + + + + Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Modules

    +

    For modules, the execution semantics primarily defines instantiation, which allocates instances for a module and its contained definitions, initializes tables and memories from contained element and data segments, and invokes the start function if present. It also includes invocation of exported functions.

    +

    Instantiation depends on a number of auxiliary notions for type-checking imports and allocating instances.

    +
    +

    External Typing

    +

    For the purpose of checking external values against imports, +such values are classified by external types. +The following auxiliary typing rules specify this typing relation relative to a store \(S\) in which the referenced instances live.

    +
    +

    \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~a\)

    +
      +
    • The store entry \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a]\) must exist.

    • +
    • Then \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~a\) is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a].\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}\).

    • +
    +
    +\[\frac{ +}{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~a : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[a].\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}} +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~a\)

    +
      +
    • The store entry \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a]\) must exist.

    • +
    • Then \(\href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~a\) is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}\).

    • +
    +
    +\[\frac{ +}{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~a : \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}[a].\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}} +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~a\)

    +
      +
    • The store entry \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a]\) must exist.

    • +
    • Then \(\href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~a\) is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}\).

    • +
    +
    +\[\frac{ +}{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~a : \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}[a].\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}} +}\]
    +
    +
    +

    \(\href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~a\)

    +
      +
    • The store entry \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a]\) must exist.

    • +
    • Then \(\href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~a\) is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}\).

    • +
    +
    +\[\frac{ +}{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~a : \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}[a].\href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}} +}\]
    +
    +
    +
    +

    Value Typing

    +

    For the purpose of checking argument values against the parameter types of exported functions, +values are classified by value types. +The following auxiliary typing rules specify this typing relation relative to a store \(S\) in which possibly referenced addresses live.

    +
    +

    Numeric Values \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\)

    + +
    +\[\frac{ +}{ + S \href{../appendix/properties.html#valid-val}{\vdash} t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c : t +}\]
    +
    +
    +

    Null References \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\)

    + +
    +\[\frac{ +}{ + S \href{../appendix/properties.html#valid-val}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t : t +}\]
    +
    +
    +

    Function References \(\href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a\)

    +
      +
    • The external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~a\) must be valid.

    • +
    • Then the value is valid with reference type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\).

    • +
    +
    +\[\frac{ + S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~a : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}{ + S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~a : \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} +}\]
    +
    +
    +

    External References \(\href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~a\)

    +
      +
    • The value is valid with reference type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}\).

    • +
    +
    +\[\frac{ +}{ + S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~a : \href{../syntax/types.html#syntax-reftype}{\mathsf{externref}} +}\]
    +
    +
    +
    +

    Allocation

    +

    New instances of functions, tables, memories, and globals are allocated in a store \(S\), as defined by the following auxiliary functions.

    +
    +

    Functions

    +
      +
    1. Let \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}\) be the function to allocate and \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) its module instance.

    2. +
    3. Let \(a\) be the first free function address in \(S\).

    4. +
    5. Let \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) be the function type \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[\href{../syntax/modules.html#syntax-func}{\mathit{func}}.\href{../syntax/modules.html#syntax-func}{\mathsf{type}}]\).

    6. +
    7. Let \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\) be the function instance \(\{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}} \}\).

    8. +
    9. Append \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}\) of \(S\).

    10. +
    11. Return \(a\).

    12. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{rlll} +\href{../exec/modules.html#alloc-func}{\mathrm{allocfunc}}(S, \href{../syntax/modules.html#syntax-func}{\mathit{func}}, \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}) &=& S', \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}| \\ +\href{../syntax/types.html#syntax-functype}{\mathit{functype}} &=& \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[\href{../syntax/modules.html#syntax-func}{\mathit{func}}.\href{../syntax/modules.html#syntax-func}{\mathsf{type}}] \\ +\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} &=& \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}} \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}~\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Host Functions

    +
      +
    1. Let \(\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}}\) be the host function to allocate and \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) its function type.

    2. +
    3. Let \(a\) be the first free function address in \(S\).

    4. +
    5. Let \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\) be the function instance \(\{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}} \}\).

    6. +
    7. Append \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}\) of \(S\).

    8. +
    9. Return \(a\).

    10. +
    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{rlll} +\href{../exec/modules.html#alloc-hostfunc}{\mathrm{allochostfunc}}(S, \href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}}) &=& S', \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}| \\ +\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} &=& \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}} \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}~\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Host functions are never allocated by the WebAssembly semantics itself, +but may be allocated by the embedder.

    +
    +
    +
    +

    Tables

    +
      +
    1. Let \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) be the table type to allocate and \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\) the initialization value.

    2. +
    3. Let \((\{\href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^?\}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}})\) be the structure of table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\).

    4. +
    5. Let \(a\) be the first free table address in \(S\).

    6. +
    7. Let \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}\) be the table instance \(\{ \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}, \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n \}\) with \(n\) elements set to \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\).

    8. +
    9. Append \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}\) of \(S\).

    10. +
    11. Return \(a\).

    12. +
    +
    +\[\begin{split}\begin{array}{rlll} +\href{../exec/modules.html#alloc-table}{\mathrm{alloctable}}(S, \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) &=& S', \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} &=& \{\href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^?\}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} \\ +\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}| \\ +\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}} &=& \{ \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}, \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{tables}}~\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Memories

    +
      +
    1. Let \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\) be the memory type to allocate.

    2. +
    3. Let \(\{\href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^?\}\) be the structure of memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\).

    4. +
    5. Let \(a\) be the first free memory address in \(S\).

    6. +
    7. Let \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}\) be the memory instance \(\{ \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~(\def\mathdef2106#1{\mathtt{0x#1}}\mathdef2106{00})^{n \cdot 64\,\mathrm{Ki}} \}\) that contains \(n\) pages of zeroed bytes.

    8. +
    9. Append \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}\) of \(S\).

    10. +
    11. Return \(a\).

    12. +
    +
    +\[\begin{split}\begin{array}{rlll} +\href{../exec/modules.html#alloc-mem}{\mathrm{allocmem}}(S, \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}) &=& S', \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} &=& \{\href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^?\} \\ +\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}| \\ +\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}} &=& \{ \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~(\def\mathdef2107#1{\mathtt{0x#1}}\mathdef2107{00})^{n \cdot 64\,\mathrm{Ki}} \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{mems}}~\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Globals

    +
      +
    1. Let \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\) be the global type to allocate and \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}\) the value to initialize the global with.

    2. +
    3. Let \(a\) be the first free global address in \(S\).

    4. +
    5. Let \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}\) be the global instance \(\{ \href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}, \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}} \}\).

    6. +
    7. Append \(\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}\) of \(S\).

    8. +
    9. Return \(a\).

    10. +
    +
    +\[\begin{split}\begin{array}{rlll} +\href{../exec/modules.html#alloc-global}{\mathrm{allocglobal}}(S, \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}) &=& S', \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}| \\ +\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}} &=& \{ \href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}, \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}} \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{globals}}~\href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Element segments

    +
      +
    1. Let \(\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}\) be the elements’ type and \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast\) the vector of references to allocate.

    2. +
    3. Let \(a\) be the first free element address in \(S\).

    4. +
    5. Let \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}\) be the element instance \(\{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{type}}~t, \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast \}\).

    6. +
    7. Append \(\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}\) of \(S\).

    8. +
    9. Return \(a\).

    10. +
    +
    +\[\begin{split}\begin{array}{rlll} +\href{../exec/modules.html#alloc-elem}{\mathrm{allocelem}}(S, \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast) &=& S', \href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}| \\ +\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}} &=& \{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}, \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{elems}}~\href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Data segments

    +
      +
    1. Let \(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}\) be the vector of bytes to allocate.

    2. +
    3. Let \(a\) be the first free data address in \(S\).

    4. +
    5. Let \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}\) be the data instance \(\{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}} \}\).

    6. +
    7. Append \(\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}\) to the \(\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}\) of \(S\).

    8. +
    9. Return \(a\).

    10. +
    +
    +\[\begin{split}\begin{array}{rlll} +\href{../exec/modules.html#alloc-data}{\mathrm{allocdata}}(S, \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}) &=& S', \href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}} \\[1ex] +\mbox{where:} \hfill \\ +\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}} &=& |S.\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}| \\ +\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}} &=& \{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}} \} \\ +S' &=& S \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../exec/runtime.html#syntax-store}{\mathsf{datas}}~\href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}\} \\ +\end{array}\end{split}\]
    +
    +
    +

    Growing tables

    +
      +
    1. Let \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}\) be the table instance to grow, \(n\) the number of elements by which to grow it, and \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}\) the initialization value.

    2. +
    3. Let \(\mathit{len}\) be \(n\) added to the length of \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\).

    4. +
    5. If \(\mathit{len}\) is larger than or equal to \(2^{32}\), then fail.

    6. +
    7. Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the structure of table type \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}\).

    8. +
    9. Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'\) be \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) with \(\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\) updated to \(\mathit{len}\).

    10. +
    11. If \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'\) is not valid, then fail.

    12. +
    13. Append \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n\) to \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}\).

    14. +
    15. Set \(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}\) to the table type \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'~t\).

    16. +
    +
    +\[\begin{split}\begin{array}{rllll} +\href{../exec/modules.html#grow-table}{\mathrm{growtable}}(\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}, n, \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) &=& \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}} = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}'~t \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}} = \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n \\ + && ( + \begin{array}[t]{@{}r@{~}l@{}} + \mathrel{\mbox{if}} & \mathit{len} = n + |\href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}| \\ + \wedge & \mathit{len} < 2^{32} \\ + \wedge & \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t = \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}.\href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}} \\ + \wedge & \href{../syntax/types.html#syntax-limits}{\mathit{limits}}' = \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/types.html#syntax-limits}{\mathsf{min}} = \mathit{len} \\ + \wedge & \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}' \mathrel{\mbox{ok}} \\ + \end{array} \\ +\end{array}\end{split}\]
    +
    +
    +

    Growing memories

    +
      +
    1. Let \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}\) be the memory instance to grow and \(n\) the number of pages by which to grow it.

    2. +
    3. Assert: The length of \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) is divisible by the page size \(64\,\mathrm{Ki}\).

    4. +
    5. Let \(\mathit{len}\) be \(n\) added to the length of \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\) divided by the page size \(64\,\mathrm{Ki}\).

    6. +
    7. If \(\mathit{len}\) is larger than \(2^{16}\), then fail.

    8. +
    9. Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) be the structure of memory type \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}\).

    10. +
    11. Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'\) be \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) with \(\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\) updated to \(\mathit{len}\).

    12. +
    13. If \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'\) is not valid, then fail.

    14. +
    15. Append \(n\) times \(64\,\mathrm{Ki}\) bytes with value \(\def\mathdef2108#1{\mathtt{0x#1}}\mathdef2108{00}\) to \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}\).

    16. +
    17. Set \(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}\) to the memory type \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}'\).

    18. +
    +
    +\[\begin{split}\begin{array}{rllll} +\href{../exec/modules.html#grow-mem}{\mathrm{growmem}}(\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}, n) &=& \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}} = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}' \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}} = \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~(\def\mathdef2109#1{\mathtt{0x#1}}\mathdef2109{00})^{n \cdot 64\,\mathrm{Ki}} \\ + && ( + \begin{array}[t]{@{}r@{~}l@{}} + \mathrel{\mbox{if}} & \mathit{len} = n + |\href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}| / 64\,\mathrm{Ki} \\ + \wedge & \mathit{len} \leq 2^{16} \\ + \wedge & \href{../syntax/types.html#syntax-limits}{\mathit{limits}} = \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}.\href{../exec/runtime.html#syntax-meminst}{\mathsf{type}} \\ + \wedge & \href{../syntax/types.html#syntax-limits}{\mathit{limits}}' = \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/types.html#syntax-limits}{\mathsf{min}} = \mathit{len} \\ + \wedge & \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}' \mathrel{\mbox{ok}} \\ + \end{array} \\ +\end{array}\end{split}\]
    +
    +
    +

    Modules

    +

    The allocation function for modules requires a suitable list of external values that are assumed to match the import vector of the module, +a list of initialization values for the module’s globals, +and list of reference vectors for the module’s element segments.

    +
      +
    1. Let \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) be the module to allocate and \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast\) the vector of external values providing the module’s imports, \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) the initialization values of the module’s globals, and \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast\) the reference vectors of the module’s element segments.

    2. +
    3. For each function \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}\), do:

      +
        +
      1. Let \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_i\) be the function address resulting from allocating \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}_i\) for the module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) defined below.

      2. +
      +
    4. +
    5. For each table \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{tables}}\), do:

      +
        +
      1. Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_i~t_i\) be the table type \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}_i.\href{../syntax/modules.html#syntax-table}{\mathsf{type}}\).

      2. +
      +

      b. Let \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_i\) be the table address resulting from allocating \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}_i.\href{../syntax/modules.html#syntax-table}{\mathsf{type}}\) +with initialization value \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t_i\).

      +
    6. +
    7. For each memory \(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{mems}}\), do:

      +
        +
      1. Let \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_i\) be the memory address resulting from allocating \(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}_i.\href{../syntax/modules.html#syntax-mem}{\mathsf{type}}\).

      2. +
      +
    8. +
    9. For each global \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}\), do:

      +
        +
      1. Let \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_i\) be the global address resulting from allocating \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i.\href{../syntax/modules.html#syntax-global}{\mathsf{type}}\) with initializer value \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast[i]\).

      2. +
      +
    10. +
    11. For each element segment \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\), do:

      +
        +
      1. Let \(\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}_i\) be the element address resulting from allocating a element instance of reference type \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i.\href{../syntax/modules.html#syntax-elem}{\mathsf{type}}\) with contents \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast[i]\).

      2. +
      +
    12. +
    13. For each data segment \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\), do:

      +
        +
      1. Let \(\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}_i\) be the data address resulting from allocating a data instance with contents \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i.\href{../syntax/modules.html#syntax-data}{\mathsf{init}}\).

      2. +
      +
    14. +
    15. Let \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast\) be the concatenation of the function addresses \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_i\) in index order.

    16. +
    17. Let \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast\) be the concatenation of the table addresses \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_i\) in index order.

    18. +
    19. Let \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast\) be the concatenation of the memory addresses \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_i\) in index order.

    20. +
    21. Let \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast\) be the concatenation of the global addresses \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_i\) in index order.

    22. +
    23. Let \(\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}^\ast\) be the concatenation of the element addresses \(\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}_i\) in index order.

    24. +
    25. Let \(\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}^\ast\) be the concatenation of the data addresses \(\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}_i\) in index order.

    26. +
    27. Let \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_{\mathrm{mod}}^\ast\) be the list of function addresses extracted from \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast\), concatenated with \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast\).

    28. +
    29. Let \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_{\mathrm{mod}}^\ast\) be the list of table addresses extracted from \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast\), concatenated with \(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast\).

    30. +
    31. Let \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_{\mathrm{mod}}^\ast\) be the list of memory addresses extracted from \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast\), concatenated with \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast\).

    32. +
    33. Let \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_{\mathrm{mod}}^\ast\) be the list of global addresses extracted from \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast\), concatenated with \(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast\).

    34. +
    35. For each export \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}\), do:

      +
        +
      1. If \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) is a function export for function index \(x\), then let \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) be the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_{\mathrm{mod}}^\ast[x])\).

      2. +
      3. Else, if \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) is a table export for table index \(x\), then let \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) be the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~(\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_{\mathrm{mod}}^\ast[x])\).

      4. +
      5. Else, if \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) is a memory export for memory index \(x\), then let \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) be the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_{\mathrm{mod}}^\ast[x])\).

      6. +
      7. Else, if \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) is a global export for global index \(x\), then let \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) be the external value \(\href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~(\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_{\mathrm{mod}}^\ast[x])\).

      8. +
      9. Let \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i\) be the export instance \(\{\href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}~(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i.\href{../syntax/modules.html#syntax-export}{\mathsf{name}}), \href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\}\).

      10. +
      +
    36. +
    37. Let \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast\) be the concatenation of the export instances \(\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}_i\) in index order.

    38. +
    39. Let \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) be the module instance \(\{\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}~(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{types}}),\) \(\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}_{\mathrm{mod}}^\ast,\) \(\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}_{\mathrm{mod}}^\ast,\) \(\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}_{\mathrm{mod}}^\ast,\) \(\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}_{\mathrm{mod}}^\ast,\) \(\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}~\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast\}\).

    40. +
    41. Return \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\).

    42. +
    +
    +\[\begin{split}~\\ +\begin{array}{rlll} +\href{../exec/modules.html#alloc-module}{\mathrm{allocmodule}}(S, \href{../syntax/modules.html#syntax-module}{\mathit{module}}, \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast, (\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast) &=& S', \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} +\end{array}\end{split}\]
    +

    where:

    +
    +\[\begin{split}\begin{array}{@{}rlll@{}} +\href{../syntax/modules.html#syntax-table}{\mathit{table}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{tables}} \\ +\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{mems}} \\ +\href{../syntax/modules.html#syntax-global}{\mathit{global}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}} \\ +\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}} \\ +\href{../syntax/modules.html#syntax-data}{\mathit{data}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}} \\ +\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast &=& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}} \\[1ex] +\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} &=& \{~ + \begin{array}[t]{@{}l@{}} + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}~\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{types}}, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}~\href{../exec/runtime.html#syntax-externval}{\mathrm{funcs}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast)~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}~\href{../exec/runtime.html#syntax-externval}{\mathrm{tables}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast)~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}~\href{../exec/runtime.html#syntax-externval}{\mathrm{mems}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast)~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}~\href{../exec/runtime.html#syntax-externval}{\mathrm{globals}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{im}}^\ast)~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}}~\href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}}~\href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}}~\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast ~\} + \end{array} \\[1ex] +S_1, \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast &=& + \href{../exec/modules.html#alloc-func}{\mathrm{allocfunc}}^\ast(S, \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}, \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}) \\ +S_2, \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast &=& + \href{../exec/modules.html#alloc-table}{\mathrm{alloctable}}^\ast(S_1, (\href{../syntax/modules.html#syntax-table}{\mathit{table}}.\href{../syntax/modules.html#syntax-table}{\mathsf{type}})^\ast, (\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t)^\ast) + \quad (\mathrel{\mbox{where}} (\href{../syntax/modules.html#syntax-table}{\mathit{table}}.\href{../syntax/modules.html#syntax-table}{\mathsf{type}})^\ast = (\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t)^\ast) \\ +S_3, \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast &=& + \href{../exec/modules.html#alloc-mem}{\mathrm{allocmem}}^\ast(S_2, (\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}.\href{../syntax/modules.html#syntax-mem}{\mathsf{type}})^\ast) \\ +S_4, \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast &=& + \href{../exec/modules.html#alloc-global}{\mathrm{allocglobal}}^\ast(S_3, (\href{../syntax/modules.html#syntax-global}{\mathit{global}}.\href{../syntax/modules.html#syntax-global}{\mathsf{type}})^\ast, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast) \\ +S_5, \href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}^\ast &=& + \href{../exec/modules.html#alloc-elem}{\mathrm{allocelem}}^\ast(S_4, (\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}.\href{../syntax/modules.html#syntax-elem}{\mathsf{type}})^\ast, (\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast) \\ +S', \href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}^\ast &=& + \href{../exec/modules.html#alloc-data}{\mathrm{allocdata}}^\ast(S_5, (\href{../syntax/modules.html#syntax-data}{\mathit{data}}.\href{../syntax/modules.html#syntax-data}{\mathsf{init}})^\ast) \\ +\href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast &=& + \{ \href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}~(\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{name}}), \href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{ex}} \}^\ast \\[1ex] +\href{../exec/runtime.html#syntax-externval}{\mathrm{funcs}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{ex}}^\ast) &=& (\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[x])^\ast + \qquad~ (\mathrel{\mbox{where}} x^\ast = \href{../syntax/modules.html#syntax-exportdesc}{\mathrm{funcs}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast)) \\ +\href{../exec/runtime.html#syntax-externval}{\mathrm{tables}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{ex}}^\ast) &=& (\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[x])^\ast + \qquad (\mathrel{\mbox{where}} x^\ast = \href{../syntax/modules.html#syntax-exportdesc}{\mathrm{tables}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast)) \\ +\href{../exec/runtime.html#syntax-externval}{\mathrm{mems}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{ex}}^\ast) &=& (\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[x])^\ast + \qquad (\mathrel{\mbox{where}} x^\ast = \href{../syntax/modules.html#syntax-exportdesc}{\mathrm{mems}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast)) \\ +\href{../exec/runtime.html#syntax-externval}{\mathrm{globals}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_{\mathrm{ex}}^\ast) &=& (\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}[x])^\ast + \qquad\!\!\! (\mathrel{\mbox{where}} x^\ast = \href{../syntax/modules.html#syntax-exportdesc}{\mathrm{globals}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast)) \\ +\end{array}\end{split}\]
    +

    Here, the notation \(\mathrm{allocx}^\ast\) is shorthand for multiple allocations of object kind \(X\), defined as follows:

    +
    +\[\begin{split}\begin{array}{rlll} +\mathrm{allocx}^\ast(S_0, X^n, \dots) &=& S_n, a^n \\[1ex] +\mbox{where for all $i < n$:} \hfill \\ +S_{i+1}, a^n[i] &=& \mathrm{allocx}(S_i, X^n[i], \dots) +\end{array}\end{split}\]
    +

    Moreover, if the dots \(\dots\) are a sequence \(A^n\) (as for globals or tables), then the elements of this sequence are passed to the allocation function pointwise.

    +
    +

    Note

    +

    The definition of module allocation is mutually recursive with the allocation of its associated functions, because the resulting module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) is passed to the function allocator as an argument, in order to form the necessary closures. +In an implementation, this recursion is easily unraveled by mutating one or the other in a secondary step.

    +
    +
    +
    +
    +

    Instantiation

    +

    Given a store \(S\), a module \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is instantiated with a list of external values \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^n\) supplying the required imports as follows.

    +

    Instantiation checks that the module is valid and the provided imports match the declared types, +and may fail with an error otherwise. +Instantiation can also result in a trap from executing the start function. +It is up to the embedder to define how such conditions are reported.

    +
      +
    1. If \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is not valid, then:

      +
        +
      1. Fail.

      2. +
      +
    2. +
    3. Assert: \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) is valid with external types \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_{\mathrm{im}}^m\) classifying its imports.

    4. +
    5. If the number \(m\) of imports is not equal to the number \(n\) of provided external values, then:

      +
        +
      1. Fail.

      2. +
      +
    6. +
    7. For each external value \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) in \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^n\) and external type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'_i\) in \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_{\mathrm{im}}^n\), do:

      +
        +
      1. If \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}_i\) is not valid with an external type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_i\) in store \(S\), then:

        +
          +
        1. Fail.

        2. +
        +
      2. +
      3. If \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_i\) does not match \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}'_i\), then:

        +
          +
        1. Fail.

        2. +
        +
      4. +
      +
    8. +
    +
      +
    1. Let \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}_{\mathrm{init}}\) be the auxiliary module instance \(\{\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}}~\href{../exec/runtime.html#syntax-externval}{\mathrm{globals}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^n), \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}\}\) that only consists of the imported globals and the imported and allocated functions from the final module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\), defined below.

    2. +
    3. Let \(F_{\mathrm{init}}\) be the auxiliary frame \(\{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}_{\mathrm{init}}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\epsilon \}\).

    4. +
    5. Push the frame \(F_{\mathrm{init}}\) to the stack.

    6. +
    7. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) be the vector of global initialization values determined by \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) and \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^n\). These may be calculated as follows.

      +
        +
      1. For each global \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}\), do:

        +
          +
        1. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) be the result of evaluating the initializer expression \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i.\href{../syntax/modules.html#syntax-global}{\mathsf{init}}\).

        2. +
        +
      2. +
      3. Assert: due to validation, the frame \(F_{\mathrm{init}}\) is now on the top of the stack.

      4. +
      5. Let \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) be the concatenation of \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) in index order.

      6. +
      +
    8. +
    9. Let \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast\) be the list of reference vectors determined by the element segments in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\). These may be calculated as follows.

      +
      +
        +
      1. For each element segment \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\), and for each element expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{ij}\) in \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i.\href{../syntax/modules.html#syntax-elem}{\mathsf{init}}\), do:

        +
          +
        1. Let \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}_{ij}\) be the result of evaluating the initializer expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{ij}\).

        2. +
        +
      2. +
      3. Let \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast_i\) be the concatenation of function elements \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}_{ij}\) in order of index \(j\).

      4. +
      5. Let \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast\) be the concatenation of function element vectors \(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast_i\) in order of index \(i\).

      6. +
      +
      +
    10. +
    11. Pop the frame \(F_{\mathrm{init}}\) from the stack.

    12. +
    13. Let \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) be a new module instance allocated from \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) in store \(S\) with imports \(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^n\), global initializer values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\), and element segment contents \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast\), and let \(S'\) be the extended store produced by module allocation.

    14. +
    15. Let \(F\) be the auxiliary frame \(\{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\epsilon \}\).

    16. +
    17. Push the frame \(F\) to the stack.

    18. +
    19. For each element segment \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\) whose mode is of the form \(\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}_i, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~\mathit{einstr}^\ast_i~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \}\), do:

      +
        +
      1. Let \(n\) be the length of the vector \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i.\href{../syntax/modules.html#syntax-elem}{\mathsf{init}}\).

      2. +
      3. Execute the instruction sequence \(\mathit{einstr}^\ast_i\).

      4. +
      5. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0\).

      6. +
      7. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\).

      8. +
      9. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}_i~i\).

      10. +
      11. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~i\).

      12. +
      +
    20. +
    21. For each data segment \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\) whose mode is of the form \(\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}}_i, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~\mathit{dinstr}^\ast_i~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \}\), do:

      +
        +
      1. Assert: \(\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}}_i\) is \(0\).

      2. +
      3. Let \(n\) be the length of the vector \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i.\href{../syntax/modules.html#syntax-data}{\mathsf{init}}\).

      4. +
      5. Execute the instruction sequence \(\mathit{dinstr}^\ast_i\).

      6. +
      7. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0\).

      8. +
      9. Execute the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n\).

      10. +
      11. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~i\).

      12. +
      13. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~i\).

      14. +
      +
    22. +
    23. If the start function \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\) is not empty, then:

      +
        +
      1. Let \(\href{../syntax/modules.html#syntax-start}{\mathit{start}}\) be the start function \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\).

      2. +
      3. Execute the instruction \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~\href{../syntax/modules.html#syntax-start}{\mathit{start}}.\href{../syntax/modules.html#syntax-start}{\mathsf{func}}\).

      4. +
      +
    24. +
    25. Assert: due to validation, the frame \(F\) is now on the top of the stack.

    26. +
    27. Pop the frame \(F\) from the stack.

    28. +
    +
    +\[\begin{split}~\\ +\begin{array}{@{}rcll} +\href{../exec/modules.html#exec-instantiation}{\mathrm{instantiate}}(S, \href{../syntax/modules.html#syntax-module}{\mathit{module}}, \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^k) &=& S'; F; + \begin{array}[t]{@{}l@{}} + \mathrm{runelem}_0(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^n[0])~\dots~\mathrm{runelem}_{n-1}(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^n[n-1]) \\ + \mathrm{rundata}_0(\href{../syntax/modules.html#syntax-data}{\mathit{data}}^m[0])~\dots~\mathrm{rundata}_{m-1}(\href{../syntax/modules.html#syntax-data}{\mathit{data}}^m[m-1]) \\ + (\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~\href{../syntax/modules.html#syntax-start}{\mathit{start}}.\href{../syntax/modules.html#syntax-start}{\mathsf{func}})^? \\ + \end{array} \\ +&(\mathrel{\mbox{if}} + & \href{../valid/modules.html#valid-module}{\vdash} \href{../syntax/modules.html#syntax-module}{\mathit{module}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_{\mathrm{im}}^k \href{../syntax/types.html#syntax-functype}{\rightarrow} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_{\mathrm{ex}}^\ast \\ + &\wedge& (S \href{../exec/modules.html#valid-externval}{\vdash} \href{../exec/runtime.html#syntax-externval}{\mathit{externval}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}})^k \\ + &\wedge& (\href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}_{\mathrm{im}})^k \\[1ex] + &\wedge& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}} = \href{../syntax/modules.html#syntax-global}{\mathit{global}}^\ast \\ + &\wedge& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}} = \href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^n \\ + &\wedge& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}} = \href{../syntax/modules.html#syntax-data}{\mathit{data}}^m \\ + &\wedge& \href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{start}} = \href{../syntax/modules.html#syntax-start}{\mathit{start}}^? \\ + &\wedge& (\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{\mathrm{g}} = \href{../syntax/modules.html#syntax-global}{\mathit{global}}.GINIT)^\ast \\ + &\wedge& (\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{\mathrm{e}}^\ast = \href{../syntax/modules.html#syntax-elem}{\mathit{elem}}.EINIT)^n \\[1ex] + &\wedge& S', \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} = \href{../exec/modules.html#alloc-module}{\mathrm{allocmodule}}(S, \href{../syntax/modules.html#syntax-module}{\mathit{module}}, \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^k, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast, (\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^n) \\ + &\wedge& F = \{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\epsilon \} \\[1ex] + &\wedge& (S'; F; \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{\mathrm{g}} \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast \\ + &\wedge& ((S'; F; \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}_{\mathrm{e}} \href{../exec/conventions.html#formal-notation}{\hookrightarrow}^\ast S'; F; \href{../exec/runtime.html#syntax-ref}{\mathit{ref}}~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}})^\ast)^n \\ + &\wedge& (\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} = \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}}[\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}.\href{../syntax/modules.html#syntax-elem}{\mathsf{table}}])^\ast \\ + &\wedge& (\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} = \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}}[\href{../syntax/modules.html#syntax-data}{\mathit{data}}.\href{../syntax/modules.html#syntax-data}{\mathsf{memory}}])^\ast \\ + &\wedge& (\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} = \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}}[\href{../syntax/modules.html#syntax-start}{\mathit{start}}.\href{../syntax/modules.html#syntax-start}{\mathsf{func}}])^?) +\end{array}\end{split}\]
    +

    where:

    +
    +\[\begin{split}\begin{array}{@{}l} +\mathrm{runelem}_i(\{\href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}}\}) \quad=\quad \epsilon \\ +\mathrm{runelem}_i(\{\href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}} \{\href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~0, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\}\}) \quad=\\ \qquad + \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~i)~(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~i) \\ +\mathrm{runelem}_i(\{\href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\mathit{et}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^n, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}}\}) \quad=\\ \qquad + (\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~i) \\[1ex] +\mathrm{rundata}_i(\{\href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^n, DMODE~\href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}}\}) \quad=\quad \epsilon \\ +\mathrm{rundata}_i(\{\href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^n, DMODE~\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}} \{\href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~0, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\}\}) \quad=\\ \qquad + \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~i)~(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~i) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Module allocation and the evaluation of global initializers and element segments are mutually recursive because the global initialization values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) and element segment contents \((\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}^\ast)^\ast\) are passed to the module allocator while depending on the module instance \(\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}\) and store \(S'\) returned by allocation. +However, this recursion is just a specification device. +In practice, the initialization values can be determined beforehand by staging module allocation such that first, the module’s own \(function instances <syntax-funcinst>\) are pre-allocated in the store, then the initializer expressions are evaluated, then the rest of the module instance is allocated, and finally the new function instances’ \(\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}\) fields are set to that module instance. +This is possible because validation ensures that initialization expressions cannot actually call a function, only take their reference.

    +

    All failure conditions are checked before any observable mutation of the store takes place. +Store mutation is not atomic; +it happens in individual steps that may be interleaved with other threads.

    +

    Evaluation of constant expressions does not affect the store.

    +
    +
    +
    +

    Invocation

    +

    Once a module has been instantiated, any exported function can be invoked externally via its function address \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\) in the store \(S\) and an appropriate list \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) of argument values.

    +

    Invocation may fail with an error if the arguments do not fit the function type. +Invocation can also result in a trap. +It is up to the embedder to define how such conditions are reported.

    +
    +

    Note

    +

    If the embedder API performs type checks itself, either statically or dynamically, before performing an invocation, then no failure other than traps can occur.

    +
    +

    The following steps are performed:

    +
      +
    1. Assert: \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}]\) exists.

    2. +
    3. Let \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}\) be the function instance \(S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}]\).

    4. +
    5. Let \([t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m]\) be the function type \(\href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}.\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}\).

    6. +
    7. If the length \(|\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast|\) of the provided argument values is different from the number \(n\) of expected arguments, then:

      +
        +
      1. Fail.

      2. +
      +
    8. +
    9. For each value type \(t_i\) in \(t_1^n\) and corresponding value \(val_i\) in \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\), do:

      +
        +
      1. If \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_i\) is not valid with value type \(t_i\), then:

        +
          +
        1. Fail.

        2. +
        +
      2. +
      +
    10. +
    11. Let \(F\) be the dummy frame \(\{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\{\}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\epsilon \}\).

    12. +
    13. Push the frame \(F\) to the stack.

    14. +
    15. Push the values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast\) to the stack.

    16. +
    17. Invoke the function instance at address \(\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}\).

    18. +
    +

    Once the function has returned, the following steps are executed:

    +
      +
    1. Assert: due to validation, \(m\) values are on the top of the stack.

    2. +
    3. Pop \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_{\mathrm{res}}^m\) from the stack.

    4. +
    +

    The values \(\href{../exec/runtime.html#syntax-val}{\mathit{val}}_{\mathrm{res}}^m\) are returned as the results of the invocation.

    +
    +\[\begin{split}~\\[-1ex] +\begin{array}{@{}lcl} +\href{../exec/modules.html#exec-invocation}{\mathrm{invoke}}(S, \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}, \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n) &=& S; F; \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}) \\ + &(\mathrel{\mbox{if}} & S.\href{../exec/runtime.html#syntax-store}{\mathsf{funcs}}[\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}].\href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}} = [t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m] \\ + &\wedge& (S \href{../appendix/properties.html#valid-val}{\vdash} \href{../exec/runtime.html#syntax-val}{\mathit{val}} : t_1)^n \\ + &\wedge& F = \{ \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\{\}, \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\epsilon \}) \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/exec/numerics.html b/core/exec/numerics.html new file mode 100644 index 00000000..b1f6963e --- /dev/null +++ b/core/exec/numerics.html @@ -0,0 +1,1565 @@ + + + + + + + + + Numerics — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Numerics

    +

    Numeric primitives are defined in a generic manner, by operators indexed over a bit width \(N\).

    +

    Some operators are non-deterministic, because they can return one of several possible results (such as different NaN values). +Technically, each operator thus returns a set of allowed values. +For convenience, deterministic results are expressed as plain values, which are assumed to be identified with a respective singleton set.

    +

    Some operators are partial, because they are not defined on certain inputs. +Technically, an empty set of results is returned for these inputs.

    +

    In formal notation, each operator is defined by equational clauses that apply in decreasing order of precedence. +That is, the first clause that is applicable to the given arguments defines the result. +In some cases, similar clauses are combined into one by using the notation \(\pm\) or \(\mp\). +When several of these placeholders occur in a single clause, then they must be resolved consistently: either the upper sign is chosen for all of them or the lower sign.

    +
    +

    Note

    +

    For example, the \(\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}\) operator is defined as follows:

    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(\pm p_1, \pm p_2) &=& \pm p_1 \\ +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(\pm p_1, \mp p_2) &=& \mp p_1 \\ +\end{array}\end{split}\]
    +

    This definition is to be read as a shorthand for the following expansion of each clause into two separate ones:

    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(+ p_1, + p_2) &=& + p_1 \\ +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(- p_1, - p_2) &=& - p_1 \\ +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(+ p_1, - p_2) &=& - p_1 \\ +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(- p_1, + p_2) &=& + p_1 \\ +\end{array}\end{split}\]
    +
    +

    Numeric operators are lifted to input sequences by applying the operator element-wise, returning a sequence of results. When there are multiple inputs, they must be of equal length.

    +
    +\[\begin{array}{lll@{\qquad}l} +op(c_1^n, \dots, c_k^n) &=& op(c_1^n[0], \dots, c_k^n[0])~\dots~op(c_1^n[n-1], \dots, c_k^n[n-1]) +\end{array}\]
    +
    +

    Note

    +

    For example, the unary operator \(\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}\), when given a sequence of floating-point values, return a sequence of floating-point results:

    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(z^n) &=& \href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(z[0])~\dots~\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(z[n]) +\end{array}\]
    +

    The binary operator \(\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}\), when given two sequences of integers of the same length, \(n\), return a sequence of integer results:

    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_N(i_1^n, i_2^n) &=& \href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_N(i_1[0], i_2[0])~\dots~\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_N(i_1[n], i_2[n]) +\end{array}\]
    +
    +

    Conventions:

    +
      +
    • The meta variable \(d\) is used to range over single bits.

    • +
    • The meta variable \(p\) is used to range over (signless) magnitudes of floating-point values, including \(\href{../syntax/values.html#syntax-float}{\mathsf{nan}}\) and \(\infty\).

    • +
    • The meta variable \(q\) is used to range over (signless) rational magnitudes, excluding \(\href{../syntax/values.html#syntax-float}{\mathsf{nan}}\) or \(\infty\).

    • +
    • The notation \(f^{-1}\) denotes the inverse of a bijective function \(f\).

    • +
    • Truncation of rational values is written \(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q)\), with the usual mathematical definition:

      +
      +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q) &=& \pm i & (\mathrel{\mbox{if}} i \in \mathbb{N} \wedge +q - 1 < i \leq +q) \\ +\end{array}\end{split}\]
      +
    • +
    +
      +
    • Saturation of integers is written \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i)\) and \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(i)\). The arguments to these two functions range over arbitrary signed integers.

      +
        +
      • Unsigned saturation, \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i)\) clamps \(i\) to between \(0\) and \(2^N-1\):

        +
        +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i) &=& 2^N-1 & (\mathrel{\mbox{if}} i > 2^N-1)\\ +\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i) &=& 0 & (\mathrel{\mbox{if}} i < 0) \\ +\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i) &=& i & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
        +
      • +
      • Signed saturation, \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(i)\) clamps \(i\) to between \(-2^{N-1}\) and \(2^{N-1}-1\):

      • +
      +
      +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(i) &=& \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N^{-1}(-2^{N-1}) & (\mathrel{\mbox{if}} i < -2^{N-1})\\ +\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(i) &=& \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N^{-1}(2^{N-1}-1) & (\mathrel{\mbox{if}} i > 2^{N-1}-1)\\ +\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(i) &=& i & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
      +
    • +
    +
    +

    Representations

    +

    Numbers have an underlying binary representation as a sequence of bits:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{\mathsf{i}N}(i) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) \\ +\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{\mathsf{f}N}(z) &=& \href{../exec/numerics.html#aux-fbits}{\mathrm{fbits}}_N(z) \\ +\end{array}\end{split}\]
    +

    Each of these functions is a bijection, hence they are invertible.

    +
    +

    Integers

    +

    Integers are represented as base two unsigned numbers:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) &=& d_{N-1}~\dots~d_0 & (i = 2^{N-1}\cdot d_{N-1} + \dots + 2^0\cdot d_0) \\ +\end{array}\end{split}\]
    +

    Boolean operators like \(\wedge\), \(\vee\), or \(\veebar\) are lifted to bit sequences of equal length by applying them pointwise.

    +
    +
    +

    Floating-Point

    +

    Floating-point values are represented in the respective binary format defined by IEEE 754-2019 (Section 3.4):

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-fbits}{\mathrm{fbits}}_N(\pm (1+m\cdot 2^{-M})\cdot 2^e) &=& \href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({\pm})~\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_E(e+\href{../exec/numerics.html#aux-fbias}{\mathrm{fbias}}_N)~\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_M(m) \\ +\href{../exec/numerics.html#aux-fbits}{\mathrm{fbits}}_N(\pm (0+m\cdot 2^{-M})\cdot 2^e) &=& \href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({\pm})~(0)^E~\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_M(m) \\ +\href{../exec/numerics.html#aux-fbits}{\mathrm{fbits}}_N(\pm \infty) &=& \href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({\pm})~(1)^E~(0)^M \\ +\href{../exec/numerics.html#aux-fbits}{\mathrm{fbits}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({\pm})~(1)^E~\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_M(n) \\[1ex] +\href{../exec/numerics.html#aux-fbias}{\mathrm{fbias}}_N &=& 2^{E-1}-1 \\ +\href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({+}) &=& 0 \\ +\href{../exec/numerics.html#aux-fsign}{\mathrm{fsign}}({-}) &=& 1 \\ +\end{array}\end{split}\]
    +

    where \(M = \href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)\) and \(E = \href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(N)\).

    +
    +
    +

    Storage

    +

    When a number is stored into memory, it is converted into a sequence of bytes in little endian byte order:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_t(i) &=& \href{../exec/numerics.html#aux-littleendian}{\mathrm{littleendian}}(\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_t(i)) \\[1ex] +\href{../exec/numerics.html#aux-littleendian}{\mathrm{littleendian}}(\epsilon) &=& \epsilon \\ +\href{../exec/numerics.html#aux-littleendian}{\mathrm{littleendian}}(d^8~{d'}^\ast~) &=& \href{../exec/numerics.html#aux-littleendian}{\mathrm{littleendian}}({d'}^\ast)~\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_8^{-1}(d^8) \\ +\end{array}\end{split}\]
    +

    Again these functions are invertable bijections.

    +
    +
    +

    Vectors

    +

    Numeric vectors have the same underlying representation as an \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\). They can also be interpreted as a sequence of numeric values packed into a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) with a particular \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\).

    +
    +\[\begin{split}\begin{array}{l} +\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-lanes}{\mathrm{lanes}}_{t\mathsf{x}N}(c) &=& + c_0~\dots~c_{N-1} \\ +\end{array} +\\ \qquad + \begin{array}[t]{@{}r@{~}l@{}} + (\mathrel{\mbox{where}} & B = |t| / 8 \\ + \wedge & b^{16} = bytes_{\href{../syntax/values.html#syntax-int}{\mathit{i128}}}(c) \\ + \wedge & c_i = \href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{t}^{-1}(b^{16}[i \cdot B \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} B])) + \end{array} +\end{array}\end{split}\]
    +

    These functions are bijections, so they are invertible.

    +
    +
    +
    +

    Integer Operations

    +
    +

    Sign Interpretation

    +

    Integer operators are defined on \(\href{../syntax/values.html#syntax-int}{\mathit{i}N}\) values. +Operators that use a signed interpretation convert the value using the following definition, which takes the two’s complement when the value lies in the upper half of the value range (i.e., its most significant bit is \(1\)):

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i) &=& i & (0 \leq i < 2^{N-1}) \\ +\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i) &=& i - 2^N & (2^{N-1} \leq i < 2^N) \\ +\end{array}\end{split}\]
    +

    This function is bijective, and hence invertible.

    +
    +
    +

    Boolean Interpretation

    +

    The integer result of predicates – i.e., tests and relational operators – is defined with the help of the following auxiliary function producing the value \(1\) or \(0\) depending on a condition.

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(C) &=& 1 & (\mathrel{\mbox{if}} C) \\ +\href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(C) &=& 0 & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_N(i_1, i_2)\)

    +
      +
    • Return the result of adding \(i_1\) and \(i_2\) modulo \(2^N\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-iadd}{\mathrm{iadd}}_N(i_1, i_2) &=& (i_1 + i_2) \mathbin{\mathrm{mod}} 2^N +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-isub}{\mathrm{isub}}_N(i_1, i_2)\)

    +
      +
    • Return the result of subtracting \(i_2\) from \(i_1\) modulo \(2^N\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-isub}{\mathrm{isub}}_N(i_1, i_2) &=& (i_1 - i_2 + 2^N) \mathbin{\mathrm{mod}} 2^N +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-imul}{\mathrm{imul}}_N(i_1, i_2)\)

    +
      +
    • Return the result of multiplying \(i_1\) and \(i_2\) modulo \(2^N\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-imul}{\mathrm{imul}}_N(i_1, i_2) &=& (i_1 \cdot i_2) \mathbin{\mathrm{mod}} 2^N +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-idiv-u}{\mathrm{idiv\_u}}_N(i_1, i_2)\)

    +
      +
    • If \(i_2\) is \(0\), then the result is undefined.

    • +
    • Else, return the result of dividing \(i_1\) by \(i_2\), truncated toward zero.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-idiv-u}{\mathrm{idiv\_u}}_N(i_1, 0) &=& \{\} \\ +\href{../exec/numerics.html#op-idiv-u}{\mathrm{idiv\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(i_1 / i_2) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial.

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-idiv-s}{\mathrm{idiv\_s}}_N(i_1, i_2)\)

    +
      +
    • Let \(j_1\) be the signed interpretation of \(i_1\).

    • +
    • Let \(j_2\) be the signed interpretation of \(i_2\).

    • +
    • If \(j_2\) is \(0\), then the result is undefined.

    • +
    • Else if \(j_1\) divided by \(j_2\) is \(2^{N-1}\), then the result is undefined.

    • +
    • Else, return the result of dividing \(j_1\) by \(j_2\), truncated toward zero.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-idiv-s}{\mathrm{idiv\_s}}_N(i_1, 0) &=& \{\} \\ +\href{../exec/numerics.html#op-idiv-s}{\mathrm{idiv\_s}}_N(i_1, i_2) &=& \{\} \qquad\qquad (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) / \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2) = 2^{N-1}) \\ +\href{../exec/numerics.html#op-idiv-s}{\mathrm{idiv\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N^{-1}(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) / \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2))) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial. +Besides division by \(0\), the result of \((-2^{N-1})/(-1) = +2^{N-1}\) is not representable as an \(N\)-bit signed integer.

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-irem-u}{\mathrm{irem\_u}}_N(i_1, i_2)\)

    +
      +
    • If \(i_2\) is \(0\), then the result is undefined.

    • +
    • Else, return the remainder of dividing \(i_1\) by \(i_2\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-irem-u}{\mathrm{irem\_u}}_N(i_1, 0) &=& \{\} \\ +\href{../exec/numerics.html#op-irem-u}{\mathrm{irem\_u}}_N(i_1, i_2) &=& i_1 - i_2 \cdot \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(i_1 / i_2) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial.

    +

    As long as both operators are defined, +it holds that \(i_1 = i_2\cdot\href{../exec/numerics.html#op-idiv-u}{\mathrm{idiv\_u}}(i_1, i_2) + \href{../exec/numerics.html#op-irem-u}{\mathrm{irem\_u}}(i_1, i_2)\).

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-irem-s}{\mathrm{irem\_s}}_N(i_1, i_2)\)

    +
      +
    • Let \(j_1\) be the signed interpretation of \(i_1\).

    • +
    • Let \(j_2\) be the signed interpretation of \(i_2\).

    • +
    • If \(i_2\) is \(0\), then the result is undefined.

    • +
    • Else, return the remainder of dividing \(j_1\) by \(j_2\), with the sign of the dividend \(j_1\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-irem-s}{\mathrm{irem\_s}}_N(i_1, 0) &=& \{\} \\ +\href{../exec/numerics.html#op-irem-s}{\mathrm{irem\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N^{-1}(j_1 - j_2 \cdot \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(j_1 / j_2)) \\ + && (\mathrel{\mbox{where}} j_1 = \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) \wedge j_2 = \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial.

    +

    As long as both operators are defined, +it holds that \(i_1 = i_2\cdot\href{../exec/numerics.html#op-idiv-s}{\mathrm{idiv\_s}}(i_1, i_2) + \href{../exec/numerics.html#op-irem-s}{\mathrm{irem\_s}}(i_1, i_2)\).

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-inot}{\mathrm{inot}}_N(i)\)

    +
      +
    • Return the bitwise negation of \(i\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-inot}{\mathrm{inot}}_N(i) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) \veebar \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(2^N-1)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iand}{\mathrm{iand}}_N(i_1, i_2)\)

    +
      +
    • Return the bitwise conjunction of \(i_1\) and \(i_2\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-iand}{\mathrm{iand}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) \wedge \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iandnot}{\mathrm{iandnot}}_N(i_1, i_2)\)

    +
      +
    • Return the bitwise conjunction of \(i_1\) and the bitwise negation of \(i_2\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-iandnot}{\mathrm{iandnot}}_N(i_1, i_2) &=& \href{../exec/numerics.html#op-iand}{\mathrm{iand}}_N(i_1, \href{../exec/numerics.html#op-inot}{\mathrm{inot}}_N(i2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ior}{\mathrm{ior}}_N(i_1, i_2)\)

    +
      +
    • Return the bitwise disjunction of \(i_1\) and \(i_2\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ior}{\mathrm{ior}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) \vee \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ixor}{\mathrm{ixor}}_N(i_1, i_2)\)

    +
      +
    • Return the bitwise exclusive disjunction of \(i_1\) and \(i_2\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ixor}{\mathrm{ixor}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(\href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) \veebar \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ishl}{\mathrm{ishl}}_N(i_1, i_2)\)

    +
      +
    • Let \(k\) be \(i_2\) modulo \(N\).

    • +
    • Return the result of shifting \(i_1\) left by \(k\) bits, modulo \(2^N\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ishl}{\mathrm{ishl}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(d_2^{N-k}~0^k) + & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) = d_1^k~d_2^{N-k} \wedge k = i_2 \mathbin{\mathrm{mod}} N) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ishr-u}{\mathrm{ishr\_u}}_N(i_1, i_2)\)

    +
      +
    • Let \(k\) be \(i_2\) modulo \(N\).

    • +
    • Return the result of shifting \(i_1\) right by \(k\) bits, extended with \(0\) bits.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ishr-u}{\mathrm{ishr\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(0^k~d_1^{N-k}) + & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) = d_1^{N-k}~d_2^k \wedge k = i_2 \mathbin{\mathrm{mod}} N) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ishr-s}{\mathrm{ishr\_s}}_N(i_1, i_2)\)

    +
      +
    • Let \(k\) be \(i_2\) modulo \(N\).

    • +
    • Return the result of shifting \(i_1\) right by \(k\) bits, extended with the most significant bit of the original value.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ishr-s}{\mathrm{ishr\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(d_0^{k+1}~d_1^{N-k-1}) + & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) = d_0~d_1^{N-k-1}~d_2^k \wedge k = i_2 \mathbin{\mathrm{mod}} N) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-irotl}{\mathrm{irotl}}_N(i_1, i_2)\)

    +
      +
    • Let \(k\) be \(i_2\) modulo \(N\).

    • +
    • Return the result of rotating \(i_1\) left by \(k\) bits.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-irotl}{\mathrm{irotl}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(d_2^{N-k}~d_1^k) + & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) = d_1^k~d_2^{N-k} \wedge k = i_2 \mathbin{\mathrm{mod}} N) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-irotr}{\mathrm{irotr}}_N(i_1, i_2)\)

    +
      +
    • Let \(k\) be \(i_2\) modulo \(N\).

    • +
    • Return the result of rotating \(i_1\) right by \(k\) bits.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-irotr}{\mathrm{irotr}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N^{-1}(d_2^k~d_1^{N-k}) + & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i_1) = d_1^{N-k}~d_2^k \wedge k = i_2 \mathbin{\mathrm{mod}} N) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iclz}{\mathrm{iclz}}_N(i)\)

    +
      +
    • Return the count of leading zero bits in \(i\); all bits are considered leading zeros if \(i\) is \(0\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-iclz}{\mathrm{iclz}}_N(i) &=& k & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) = 0^k~(1~d^\ast)^?) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ictz}{\mathrm{ictz}}_N(i)\)

    +
      +
    • Return the count of trailing zero bits in \(i\); all bits are considered trailing zeros if \(i\) is \(0\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ictz}{\mathrm{ictz}}_N(i) &=& k & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) = (d^\ast~1)^?~0^k) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ipopcnt}{\mathrm{ipopcnt}}_N(i)\)

    +
      +
    • Return the count of non-zero bits in \(i\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ipopcnt}{\mathrm{ipopcnt}}_N(i) &=& k & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ibits}{\mathrm{ibits}}_N(i) = (0^\ast~1)^k~0^\ast) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ieqz}{\mathrm{ieqz}}_N(i)\)

    +
      +
    • Return \(1\) if \(i\) is zero, \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ieqz}{\mathrm{ieqz}}_N(i) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i = 0) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ieq}{\mathrm{ieq}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) equals \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ieq}{\mathrm{ieq}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 = i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ine}{\mathrm{ine}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) does not equal \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ine}{\mathrm{ine}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 \neq i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ilt-u}{\mathrm{ilt\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) is less than \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ilt-u}{\mathrm{ilt\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 < i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_N(i_1, i_2)\)

    + +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) < \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-igt-u}{\mathrm{igt\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) is greater than \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-igt-u}{\mathrm{igt\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 > i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-igt-s}{\mathrm{igt\_s}}_N(i_1, i_2)\)

    + +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-igt-s}{\mathrm{igt\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) > \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ile-u}{\mathrm{ile\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) is less than or equal to \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ile-u}{\mathrm{ile\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 \leq i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ile-s}{\mathrm{ile\_s}}_N(i_1, i_2)\)

    + +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ile-s}{\mathrm{ile\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) \leq \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ige-u}{\mathrm{ige\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(1\) if \(i_1\) is greater than or equal to \(i_2\), \(0\) otherwise.

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ige-u}{\mathrm{ige\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(i_1 \geq i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ige-s}{\mathrm{ige\_s}}_N(i_1, i_2)\)

    + +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ige-s}{\mathrm{ige\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) \geq \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iextendn-s}{\mathrm{iextend}M\mathrm{\_s}}_N(i)\)

    +
      +
    • Return \(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{M,N}(i)\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iextendn-s}{\mathrm{iextend}M\mathrm{\_s}}_{N}(i) &=& \href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{M,N}(i) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ibitselect}{\mathrm{ibitselect}}_N(i_1, i_2, i_3)\)

    +
      +
    • Let \(j_1\) be the bitwise conjunction of \(i_1\) and \(i_3\).

    • +
    • Let \(j_3'\) be the bitwise negation of \(i_3\).

    • +
    • Let \(j_2\) be the bitwise conjunction of \(i_2\) and \(j_3'\).

    • +
    • Return the bitwise disjunction of \(j_1\) and \(j_2\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ibitselect}{\mathrm{ibitselect}}_N(i_1, i_2, i_3) &=& \href{../exec/numerics.html#op-ior}{\mathrm{ior}}_N(\href{../exec/numerics.html#op-iand}{\mathrm{iand}}_N(i_1, i_3), \href{../exec/numerics.html#op-iand}{\mathrm{iand}}_N(i_2, \href{../exec/numerics.html#op-inot}{\mathrm{inot}}_N(i_3))) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iabs}{\mathrm{iabs}}_N(i)\)

    +
      +
    • Let \(j\) be the signed interpretation of \(i\).

    • +
    • If \(j\) greater than or equal to \(0\), then return \(i\).

    • +
    • Else return the negation of j, modulo \(2^N\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-iabs}{\mathrm{iabs}}_N(i) &=& i & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i) \ge 0) \\ +\href{../exec/numerics.html#op-iabs}{\mathrm{iabs}}_N(i) &=& -\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i) \mathbin{\mathrm{mod}} 2^N & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ineg}{\mathrm{ineg}}_N(i)\)

    +
      +
    • Return the result of negating \(i\), modulo \(2^N\).

    • +
    +
    +\[\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ineg}{\mathrm{ineg}}_N(i) &=& (2^N - i) \mathbin{\mathrm{mod}} 2^N +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(i_1\) if \(\href{../exec/numerics.html#op-ilt-u}{\mathrm{ilt\_u}}_N(i_1, i_2)\) is \(1\), return \(i_2\) otherwise.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_1 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-ilt-u}{\mathrm{ilt\_u}}_N(i_1, i_2) = 1)\\ +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_2 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-imin-s}{\mathrm{imin\_s}}_N(i_1, i_2)\)

    +
      +
    • Return \(i_1\) if \(\href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_N(i_1, i_2)\) is \(1\), return \(i_2\) otherwise.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_1 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-ilt-s}{\mathrm{ilt\_s}}_N(i_1, i_2) = 1)\\ +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_2 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-imax-u}{\mathrm{imax\_u}}_N(i_1, i_2)\)

    +
      +
    • Return \(i_1\) if \(\href{../exec/numerics.html#op-igt-u}{\mathrm{igt\_u}}_N(i_1, i_2)\) is \(1\), return \(i_2\) otherwise.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_1 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-igt-u}{\mathrm{igt\_u}}_N(i_1, i_2) = 1)\\ +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_2 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-imax-s}{\mathrm{imax\_s}}_N(i_1, i_2)\)

    +
      +
    • Return \(i_1\) if \(\href{../exec/numerics.html#op-igt-s}{\mathrm{igt\_s}}_N(i_1, i_2)\) is \(1\), return \(i_2\) otherwise.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_1 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-igt-s}{\mathrm{igt\_s}}_N(i_1, i_2) = 1)\\ +\href{../exec/numerics.html#op-imin-u}{\mathrm{imin\_u}}_N(i_1, i_2) &=& i_2 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iaddsat-u}{\mathrm{iaddsat\_u}}_N(i_1, i_2)\)

    +
      +
    • Let \(i\) be the result of adding \(i_1\) and \(i_2\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iaddsat-u}{\mathrm{iaddsat\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i_1 + i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iaddsat-s}{\mathrm{iaddsat\_s}}_N(i_1, i_2)\)

    +
      +
    • Let \(j_1\) be the signed interpretation of \(i_1\)

    • +
    • Let \(j_2\) be the signed interpretation of \(i_2\)

    • +
    • Let \(j\) be the result of adding \(j_1\) and \(j_2\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(j)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iaddsat-s}{\mathrm{iaddsat\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) + \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-isubsat-u}{\mathrm{isubsat\_u}}_N(i_1, i_2)\)

    +
      +
    • Let \(i\) be the result of subtracting \(i_2\) from \(i_1\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-isubsat-u}{\mathrm{isubsat\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(i_1 - i_2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-isubsat-s}{\mathrm{isubsat\_s}}_N(i_1, i_2)\)

    +
      +
    • Let \(j_1\) be the signed interpretation of \(i_1\)

    • +
    • Let \(j_2\) be the signed interpretation of \(i_2\)

    • +
    • Let \(j\) be the result of subtracting \(j_2\) from \(j_1\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(j)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-isubsat-s}{\mathrm{isubsat\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_1) - \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N(i_2)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iavgr-u}{\mathrm{iavgr\_u}}_N(i_1, i_2)\)

    +
      +
    • Let \(j\) be the result of adding \(i_1\), \(i_2\), and \(1\).

    • +
    • Return the result of dividing \(j\) by \(2\), truncated toward zero.

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iavgr-u}{\mathrm{iavgr\_u}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}((i_1 + i_2 + 1) / 2) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-iq15mulrsat-s}{\mathrm{iq15mulrsat\_s}}_N(i_1, i_2)\)

    +
      +
    • Return the result of \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#op-ishr-s}{\mathrm{ishr\_s}}_N(i_1 \cdot i_2 + 2^{14}, 15))\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-iq15mulrsat-s}{\mathrm{iq15mulrsat\_s}}_N(i_1, i_2) &=& \href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#op-ishr-s}{\mathrm{ishr\_s}}_N(i_1 \cdot i_2 + 2^{14}, 15)) +\end{array}\]
    +
    +
    +
    +

    Floating-Point Operations

    +

    Floating-point arithmetic follows the IEEE 754-2019 standard, +with the following qualifications:

    +
      +
    • All operators use round-to-nearest ties-to-even, except where otherwise specified. +Non-default directed rounding attributes are not supported.

    • +
    • Following the recommendation that operators propagate NaN payloads from their operands is permitted but not required.

    • +
    • All operators use “non-stop” mode, and floating-point exceptions are not otherwise observable. +In particular, neither alternate floating-point exception handling attributes nor operators on status flags are supported. +There is no observable difference between quiet and signalling NaNs.

    • +
    +
    +

    Note

    +

    Some of these limitations may be lifted in future versions of WebAssembly.

    +
    +
    +

    Rounding

    +

    Rounding always is round-to-nearest ties-to-even, in correspondence with IEEE 754-2019 (Section 4.3.1).

    +

    An exact floating-point number is a rational number that is exactly representable as a floating-point number of given bit width \(N\).

    +

    A limit number for a given floating-point bit width \(N\) is a positive or negative number whose magnitude is the smallest power of \(2\) that is not exactly representable as a floating-point number of width \(N\) (that magnitude is \(2^{128}\) for \(N = 32\) and \(2^{1024}\) for \(N = 64\)).

    +

    A candidate number is either an exact floating-point number or a positive or negative limit number for the given bit width \(N\).

    +

    A candidate pair is a pair \(z_1,z_2\) of candidate numbers, such that no candidate number exists that lies between the two.

    +

    A real number \(r\) is converted to a floating-point value of bit width \(N\) as follows:

    +
      +
    • If \(r\) is \(0\), then return \(+0\).

    • +
    • Else if \(r\) is an exact floating-point number, then return \(r\).

    • +
    • Else if \(r\) greater than or equal to the positive limit, then return \(+\infty\).

    • +
    • Else if \(r\) is less than or equal to the negative limit, then return \(-\infty\).

    • +
    • Else if \(z_1\) and \(z_2\) are a candidate pair such that \(z_1 < r < z_2\), then:

      +
        +
      • If \(|r - z_1| < |r - z_2|\), then let \(z\) be \(z_1\).

      • +
      • Else if \(|r - z_1| > |r - z_2|\), then let \(z\) be \(z_2\).

      • +
      • Else if \(|r - z_1| = |r - z_2|\) and the significand of \(z_1\) is even, then let \(z\) be \(z_1\).

      • +
      • Else, let \(z\) be \(z_2\).

      • +
      +
    • +
    • If \(z\) is \(0\), then:

      +
        +
      • If \(r < 0\), then return \(-0\).

      • +
      • Else, return \(+0\).

      • +
      +
    • +
    • Else if \(z\) is a limit number, then:

      +
        +
      • If \(r < 0\), then return \(-\infty\).

      • +
      • Else, return \(+\infty\).

      • +
      +
    • +
    • Else, return \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(0) &=& +0 \\ +\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(r) &=& r & (\mathrel{\mbox{if}} r \in \mathrm{exact}_N) \\ +\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(r) &=& +\infty & (\mathrel{\mbox{if}} r \geq +\mathrm{limit}_N) \\ +\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(r) &=& -\infty & (\mathrel{\mbox{if}} r \leq -\mathrm{limit}_N) \\ +\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(r) &=& \mathrm{closest}_N(r, z_1, z_2) & (\mathrel{\mbox{if}} z_1 < r < z_2 \wedge (z_1,z_2) \in \mathrm{candidatepair}_N) \\[1ex] +\mathrm{closest}_N(r, z_1, z_2) &=& \mathrm{rectify}_N(r, z_1) & (\mathrel{\mbox{if}} |r-z_1|<|r-z_2|) \\ +\mathrm{closest}_N(r, z_1, z_2) &=& \mathrm{rectify}_N(r, z_2) & (\mathrel{\mbox{if}} |r-z_1|>|r-z_2|) \\ +\mathrm{closest}_N(r, z_1, z_2) &=& \mathrm{rectify}_N(r, z_1) & (\mathrel{\mbox{if}} |r-z_1|=|r-z_2| \wedge \mathrm{even}_N(z_1)) \\ +\mathrm{closest}_N(r, z_1, z_2) &=& \mathrm{rectify}_N(r, z_2) & (\mathrel{\mbox{if}} |r-z_1|=|r-z_2| \wedge \mathrm{even}_N(z_2)) \\[1ex] +\mathrm{rectify}_N(r, \pm \mathrm{limit}_N) &=& \pm \infty \\ +\mathrm{rectify}_N(r, 0) &=& +0 \qquad (r \geq 0) \\ +\mathrm{rectify}_N(r, 0) &=& -0 \qquad (r < 0) \\ +\mathrm{rectify}_N(r, z) &=& z \\ +\end{array}\end{split}\]
    +

    where:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\mathrm{exact}_N &=& \href{../syntax/values.html#syntax-float}{\mathit{f}N} \cap \mathbb{Q} \\ +\mathrm{limit}_N &=& 2^{2^{\href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(N)-1}} \\ +\mathrm{candidate}_N &=& \mathrm{exact}_N \cup \{+\mathrm{limit}_N, -\mathrm{limit}_N\} \\ +\mathrm{candidatepair}_N &=& \{ (z_1, z_2) \in \mathrm{candidate}_N^2 ~|~ z_1 < z_2 \wedge \forall z \in \mathrm{candidate}_N, z \leq z_1 \vee z \geq z_2\} \\[1ex] +\mathrm{even}_N((d + m\cdot 2^{-M}) \cdot 2^e) &\Leftrightarrow& m \mathbin{\mathrm{mod}} 2 = 0 \\ +\mathrm{even}_N(\pm \mathrm{limit}_N) &\Leftrightarrow& \mathrm{true} \\ +\end{array}\end{split}\]
    +
    +
    +

    NaN Propagation

    +

    When the result of a floating-point operator other than \(\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}\), \(\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}\), or \(\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}\) is a NaN, +then its sign is non-deterministic and the payload is computed as follows:

    +
      +
    • If the payload of all NaN inputs to the operator is canonical (including the case that there are no NaN inputs), then the payload of the output is canonical as well.

    • +
    • Otherwise the payload is picked non-deterministically among all arithmetic NaNs; that is, its most significant bit is \(1\) and all others are unspecified.

    • +
    +

    This non-deterministic result is expressed by the following auxiliary function producing a set of allowed outputs from a set of inputs:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z^\ast\} &=& \{ + \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), - \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) ~|~ n = \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N \} + & (\mathrel{\mbox{if}} \forall \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) \in z^\ast,~ n = \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N) \\ +\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z^\ast\} &=& \{ + \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), - \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) ~|~ n \geq \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N \} + & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of opposite signs, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of equal sign, then return that infinity.

    • +
    • Else if one of \(z_1\) or \(z_2\) is an infinity, then return that infinity.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of opposite sign, then return positive zero.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of equal sign, then return that zero.

    • +
    • Else if one of \(z_1\) or \(z_2\) is a zero, then return the other operand.

    • +
    • Else if both \(z_1\) and \(z_2\) are values with the same magnitude but opposite signs, then return positive zero.

    • +
    • Else return the result of adding \(z_1\) and \(z_2\), rounded to the nearest representable value.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm \infty, \mp \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm \infty, \pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, \pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm \infty, z_2) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm 0, \mp 0) &=& +0 \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm 0, \pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, \pm 0) &=& z_1 \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm 0, z_2) &=& z_2 \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(\pm q, \mp q) &=& +0 \\ +\href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z_1 + z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of equal signs, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of opposite sign, then return \(z_1\).

    • +
    • Else if \(z_1\) is an infinity, then return that infinity.

    • +
    • Else if \(z_2\) is an infinity, then return that infinity negated.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of equal sign, then return positive zero.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of opposite sign, then return \(z_1\).

    • +
    • Else if \(z_2\) is a zero, then return \(z_1\).

    • +
    • Else if \(z_1\) is a zero, then return \(z_2\) negated.

    • +
    • Else if both \(z_1\) and \(z_2\) are the same value, then return positive zero.

    • +
    • Else return the result of subtracting \(z_2\) from \(z_1\), rounded to the nearest representable value.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm \infty, \pm \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm \infty, \mp \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, \pm \infty) &=& \mp \infty \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm \infty, z_2) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm 0, \pm 0) &=& +0 \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm 0, \mp 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, \pm 0) &=& z_1 \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm 0, \pm q_2) &=& \mp q_2 \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(\pm q, \pm q) &=& +0 \\ +\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z_1 - z_2) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Up to the non-determinism regarding NaNs, it always holds that \(\href{../exec/numerics.html#op-fsub}{\mathrm{fsub}}_N(z_1, z_2) = \href{../exec/numerics.html#op-fadd}{\mathrm{fadd}}_N(z_1, \href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(z_2))\).

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if one of \(z_1\) and \(z_2\) is a zero and the other an infinity, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of equal sign, then return positive infinity.

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities of opposite sign, then return negative infinity.

    • +
    • Else if one of \(z_1\) or \(z_2\) is an infinity and the other a value with equal sign, then return positive infinity.

    • +
    • Else if one of \(z_1\) or \(z_2\) is an infinity and the other a value with opposite sign, then return negative infinity.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of equal sign, then return positive zero.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of opposite sign, then return negative zero.

    • +
    • Else return the result of multiplying \(z_1\) and \(z_2\), rounded to the nearest representable value.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \pm 0) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \mp 0) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm 0, \pm \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm 0, \mp \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \pm \infty) &=& +\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \mp \infty) &=& -\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm q_1, \pm \infty) &=& +\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm q_1, \mp \infty) &=& -\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \pm q_2) &=& +\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm \infty, \mp q_2) &=& -\infty \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm 0, \pm 0) &=& + 0 \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(\pm 0, \mp 0) &=& - 0 \\ +\href{../exec/numerics.html#op-fmul}{\mathrm{fmul}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z_1 \cdot z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are infinities, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if \(z_1\) is an infinity and \(z_2\) a value with equal sign, then return positive infinity.

    • +
    • Else if \(z_1\) is an infinity and \(z_2\) a value with opposite sign, then return negative infinity.

    • +
    • Else if \(z_2\) is an infinity and \(z_1\) a value with equal sign, then return positive zero.

    • +
    • Else if \(z_2\) is an infinity and \(z_1\) a value with opposite sign, then return negative zero.

    • +
    • Else if \(z_1\) is a zero and \(z_2\) a value with equal sign, then return positive zero.

    • +
    • Else if \(z_1\) is a zero and \(z_2\) a value with opposite sign, then return negative zero.

    • +
    • Else if \(z_2\) is a zero and \(z_1\) a value with equal sign, then return positive infinity.

    • +
    • Else if \(z_2\) is a zero and \(z_1\) a value with opposite sign, then return negative infinity.

    • +
    • Else return the result of dividing \(z_1\) by \(z_2\), rounded to the nearest representable value.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm \infty, \pm \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm \infty, \mp \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm 0, \pm 0) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm 0, \mp 0) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm \infty, \pm q_2) &=& +\infty \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm \infty, \mp q_2) &=& -\infty \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm q_1, \pm \infty) &=& +0 \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm q_1, \mp \infty) &=& -0 \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm 0, \pm q_2) &=& +0 \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm 0, \mp q_2) &=& -0 \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm q_1, \pm 0) &=& +\infty \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(\pm q_1, \mp 0) &=& -\infty \\ +\href{../exec/numerics.html#op-fdiv}{\mathrm{fdiv}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z_1 / z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if one of \(z_1\) or \(z_2\) is a negative infinity, then return negative infinity.

    • +
    • Else if one of \(z_1\) or \(z_2\) is a positive infinity, then return the other value.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of opposite signs, then return negative zero.

    • +
    • Else return the smaller value of \(z_1\) and \(z_2\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(+ \infty, z_2) &=& z_2 \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(- \infty, z_2) &=& - \infty \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, + \infty) &=& z_1 \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, - \infty) &=& - \infty \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(\pm 0, \mp 0) &=& -0 \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, z_2) &=& z_1 & (\mathrel{\mbox{if}} z_1 \leq z_2) \\ +\href{../exec/numerics.html#op-fmin}{\mathrm{fmin}}_N(z_1, z_2) &=& z_2 & (\mathrel{\mbox{if}} z_2 \leq z_1) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z_1, z_2\}\).

    • +
    • Else if one of \(z_1\) or \(z_2\) is a positive infinity, then return positive infinity.

    • +
    • Else if one of \(z_1\) or \(z_2\) is a negative infinity, then return the other value.

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes of opposite signs, then return positive zero.

    • +
    • Else return the larger value of \(z_1\) and \(z_2\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2\} \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_1\} \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(+ \infty, z_2) &=& + \infty \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(- \infty, z_2) &=& z_2 \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, + \infty) &=& + \infty \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, - \infty) &=& z_1 \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(\pm 0, \mp 0) &=& +0 \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, z_2) &=& z_1 & (\mathrel{\mbox{if}} z_1 \geq z_2) \\ +\href{../exec/numerics.html#op-fmax}{\mathrm{fmax}}_N(z_1, z_2) &=& z_2 & (\mathrel{\mbox{if}} z_2 \geq z_1) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(z_1, z_2)\)

    +
      +
    • If \(z_1\) and \(z_2\) have the same sign, then return \(z_1\).

    • +
    • Else return \(z_1\) with negated sign.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(\pm p_1, \pm p_2) &=& \pm p_1 \\ +\href{../exec/numerics.html#op-fcopysign}{\mathrm{fcopysign}}_N(\pm p_1, \mp p_2) &=& \mp p_1 \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return \(z\) with positive sign.

    • +
    • Else if \(z\) is an infinity, then return positive infinity.

    • +
    • Else if \(z\) is a zero, then return positive zero.

    • +
    • Else if \(z\) is a positive value, then \(z\).

    • +
    • Else return \(z\) negated.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& +\href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) \\ +\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(\pm \infty) &=& +\infty \\ +\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(\pm 0) &=& +0 \\ +\href{../exec/numerics.html#op-fabs}{\mathrm{fabs}}_N(\pm q) &=& +q \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return \(z\) with negated sign.

    • +
    • Else if \(z\) is an infinity, then return that infinity negated.

    • +
    • Else if \(z\) is a zero, then return that zero negated.

    • +
    • Else return \(z\) negated.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \mp \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) \\ +\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(\pm \infty) &=& \mp \infty \\ +\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(\pm 0) &=& \mp 0 \\ +\href{../exec/numerics.html#op-fneg}{\mathrm{fneg}}_N(\pm q) &=& \mp q \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z\}\).

    • +
    • Else if \(z\) is negative infinity, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else if \(z\) is positive infinity, then return positive infinity.

    • +
    • Else if \(z\) is a zero, then return that zero.

    • +
    • Else if \(z\) has a negative sign, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\).

    • +
    • Else return the square root of \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\} \\ +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(- \infty) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(+ \infty) &=& + \infty \\ +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(- q) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} \\ +\href{../exec/numerics.html#op-fsqrt}{\mathrm{fsqrt}}_N(+ q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N\left(\sqrt{q}\right) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z\}\).

    • +
    • Else if \(z\) is an infinity, then return \(z\).

    • +
    • Else if \(z\) is a zero, then return \(z\).

    • +
    • Else if \(z\) is smaller than \(0\) but greater than \(-1\), then return negative zero.

    • +
    • Else return the smallest integral value that is not smaller than \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\} \\ +\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(\pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(- q) &=& -0 & (\mathrel{\mbox{if}} -1 < -q < 0) \\ +\href{../exec/numerics.html#op-fceil}{\mathrm{fceil}}_N(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(i) & (\mathrel{\mbox{if}} \pm q \leq i < \pm q + 1) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z\}\).

    • +
    • Else if \(z\) is an infinity, then return \(z\).

    • +
    • Else if \(z\) is a zero, then return \(z\).

    • +
    • Else if \(z\) is greater than \(0\) but smaller than \(1\), then return positive zero.

    • +
    • Else return the largest integral value that is not larger than \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\} \\ +\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(\pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(+ q) &=& +0 & (\mathrel{\mbox{if}} 0 < +q < 1) \\ +\href{../exec/numerics.html#op-ffloor}{\mathrm{ffloor}}_N(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(i) & (\mathrel{\mbox{if}} \pm q - 1 < i \leq \pm q) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z\}\).

    • +
    • Else if \(z\) is an infinity, then return \(z\).

    • +
    • Else if \(z\) is a zero, then return \(z\).

    • +
    • Else if \(z\) is greater than \(0\) but smaller than \(1\), then return positive zero.

    • +
    • Else if \(z\) is smaller than \(0\) but greater than \(-1\), then return negative zero.

    • +
    • Else return the integral value with the same sign as \(z\) and the largest magnitude that is not larger than the magnitude of \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\} \\ +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(\pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(+ q) &=& +0 & (\mathrel{\mbox{if}} 0 < +q < 1) \\ +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(- q) &=& -0 & (\mathrel{\mbox{if}} -1 < -q < 0) \\ +\href{../exec/numerics.html#op-ftrunc}{\mathrm{ftrunc}}_N(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(\pm i) & (\mathrel{\mbox{if}} +q - 1 < i \leq +q) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(z)\)

    +
      +
    • If \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{z\}\).

    • +
    • Else if \(z\) is an infinity, then return \(z\).

    • +
    • Else if \(z\) is a zero, then return \(z\).

    • +
    • Else if \(z\) is greater than \(0\) but smaller than or equal to \(0.5\), then return positive zero.

    • +
    • Else if \(z\) is smaller than \(0\) but greater than or equal to \(-0.5\), then return negative zero.

    • +
    • Else return the integral value that is nearest to \(z\); if two values are equally near, return the even one.

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\} \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(\pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(+ q) &=& +0 & (\mathrel{\mbox{if}} 0 < +q \leq 0.5) \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(- q) &=& -0 & (\mathrel{\mbox{if}} -0.5 \leq -q < 0) \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(\pm i) & (\mathrel{\mbox{if}} |i - q| < 0.5) \\ +\href{../exec/numerics.html#op-fnearest}{\mathrm{fnearest}}_N(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(\pm i) & (\mathrel{\mbox{if}} |i - q| = 0.5 \wedge i~\mbox{even}) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-feq}{\mathrm{feq}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(0\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(1\).

    • +
    • Else if both \(z_1\) and \(z_2\) are the same value, then return \(1\).

    • +
    • Else return \(0\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-feq}{\mathrm{feq}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 0 \\ +\href{../exec/numerics.html#op-feq}{\mathrm{feq}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-feq}{\mathrm{feq}}_N(\pm 0, \mp 0) &=& 1 \\ +\href{../exec/numerics.html#op-feq}{\mathrm{feq}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 = z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fne}{\mathrm{fne}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(1\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(0\).

    • +
    • Else if both \(z_1\) and \(z_2\) are the same value, then return \(0\).

    • +
    • Else return \(1\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fne}{\mathrm{fne}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 1 \\ +\href{../exec/numerics.html#op-fne}{\mathrm{fne}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 1 \\ +\href{../exec/numerics.html#op-fne}{\mathrm{fne}}_N(\pm 0, \mp 0) &=& 0 \\ +\href{../exec/numerics.html#op-fne}{\mathrm{fne}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 \neq z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(0\).

    • +
    • Else if \(z_1\) and \(z_2\) are the same value, then return \(0\).

    • +
    • Else if \(z_1\) is positive infinity, then return \(0\).

    • +
    • Else if \(z_1\) is negative infinity, then return \(1\).

    • +
    • Else if \(z_2\) is positive infinity, then return \(1\).

    • +
    • Else if \(z_2\) is negative infinity, then return \(0\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(0\).

    • +
    • Else if \(z_1\) is smaller than \(z_2\), then return \(1\).

    • +
    • Else return \(0\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z, z) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(+ \infty, z_2) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(- \infty, z_2) &=& 1 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, + \infty) &=& 1 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, - \infty) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(\pm 0, \mp 0) &=& 0 \\ +\href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 < z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(0\).

    • +
    • Else if \(z_1\) and \(z_2\) are the same value, then return \(0\).

    • +
    • Else if \(z_1\) is positive infinity, then return \(1\).

    • +
    • Else if \(z_1\) is negative infinity, then return \(0\).

    • +
    • Else if \(z_2\) is positive infinity, then return \(0\).

    • +
    • Else if \(z_2\) is negative infinity, then return \(1\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(0\).

    • +
    • Else if \(z_1\) is larger than \(z_2\), then return \(1\).

    • +
    • Else return \(0\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z, z) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(+ \infty, z_2) &=& 1 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(- \infty, z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z_1, + \infty) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z_1, - \infty) &=& 1 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(\pm 0, \mp 0) &=& 0 \\ +\href{../exec/numerics.html#op-fgt}{\mathrm{fgt}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 > z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(0\).

    • +
    • Else if \(z_1\) and \(z_2\) are the same value, then return \(1\).

    • +
    • Else if \(z_1\) is positive infinity, then return \(0\).

    • +
    • Else if \(z_1\) is negative infinity, then return \(1\).

    • +
    • Else if \(z_2\) is positive infinity, then return \(1\).

    • +
    • Else if \(z_2\) is negative infinity, then return \(0\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(1\).

    • +
    • Else if \(z_1\) is smaller than or equal to \(z_2\), then return \(1\).

    • +
    • Else return \(0\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z, z) &=& 1 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(+ \infty, z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(- \infty, z_2) &=& 1 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z_1, + \infty) &=& 1 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z_1, - \infty) &=& 0 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(\pm 0, \mp 0) &=& 1 \\ +\href{../exec/numerics.html#op-fle}{\mathrm{fle}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 \leq z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z_1, z_2)\)

    +
      +
    • If either \(z_1\) or \(z_2\) is a NaN, then return \(0\).

    • +
    • Else if \(z_1\) and \(z_2\) are the same value, then return \(1\).

    • +
    • Else if \(z_1\) is positive infinity, then return \(1\).

    • +
    • Else if \(z_1\) is negative infinity, then return \(0\).

    • +
    • Else if \(z_2\) is positive infinity, then return \(0\).

    • +
    • Else if \(z_2\) is negative infinity, then return \(1\).

    • +
    • Else if both \(z_1\) and \(z_2\) are zeroes, then return \(1\).

    • +
    • Else if \(z_1\) is smaller than or equal to \(z_2\), then return \(1\).

    • +
    • Else return \(0\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n), z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z_1, \pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z, z) &=& 1 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(+ \infty, z_2) &=& 1 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(- \infty, z_2) &=& 0 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z_1, + \infty) &=& 0 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z_1, - \infty) &=& 1 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(\pm 0, \mp 0) &=& 1 \\ +\href{../exec/numerics.html#op-fge}{\mathrm{fge}}_N(z_1, z_2) &=& \href{../exec/numerics.html#aux-bool}{\mathrm{bool}}(z_1 \geq z_2) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fpmin}{\mathrm{fpmin}}_N(z_1, z_2)\)

    +
      +
    • If \(z_2\) is less than \(z_1\) then return \(z_2\).

    • +
    • Else return \(z_1\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fpmin}{\mathrm{fpmin}}_N(z_1, z_2) &=& z_2 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_2, z_1) = 1) \\ +\href{../exec/numerics.html#op-fpmin}{\mathrm{fpmin}}_N(z_1, z_2) &=& z_1 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-fpmax}{\mathrm{fpmax}}_N(z_1, z_2)\)

    +
      +
    • If \(z_1\) is less than \(z_2\) then return \(z_2\).

    • +
    • Else return \(z_1\).

    • +
    +
    +\[\begin{split}\begin{array}{@{}lcll} +\href{../exec/numerics.html#op-fpmax}{\mathrm{fpmax}}_N(z_1, z_2) &=& z_2 & (\mathrel{\mbox{if}} \href{../exec/numerics.html#op-flt}{\mathrm{flt}}_N(z_1, z_2) = 1) \\ +\href{../exec/numerics.html#op-fpmax}{\mathrm{fpmax}}_N(z_1, z_2) &=& z_1 & (\mathrel{\mbox{otherwise}}) +\end{array}\end{split}\]
    +
    +
    +
    +

    Conversions

    +
    +

    \(\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}^{\mathsf{u}}}_{M,N}(i)\)

    +
      +
    • Return \(i\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-extend-u}{\mathrm{extend}^{\mathsf{u}}}_{M,N}(i) &=& i \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    In the abstract syntax, unsigned extension just reinterprets the same value.

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{M,N}(i)\)

    +
      +
    • Let \(j\) be the signed interpretation of \(i\) of size \(M\).

    • +
    • Return the two’s complement of \(j\) relative to size \(N\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-extend-s}{\mathrm{extend}^{\mathsf{s}}}_{M,N}(i) &=& \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_N^{-1}(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_M(i)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-wrap}{\mathrm{wrap}}_{M,N}(i)\)

    +
      +
    • Return \(i\) modulo \(2^N\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-wrap}{\mathrm{wrap}}_{M,N}(i) &=& i \mathbin{\mathrm{mod}} 2^N \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-trunc-u}{\mathrm{trunc}^{\mathsf{u}}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a NaN, then the result is undefined.

    • +
    • Else if \(z\) is an infinity, then the result is undefined.

    • +
    • Else if \(z\) is a number and \(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z)\) is a value within range of the target type, then return that value.

    • +
    • Else the result is undefined.

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-trunc-u}{\mathrm{trunc}^{\mathsf{u}}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \{\} \\ +\href{../exec/numerics.html#op-trunc-u}{\mathrm{trunc}^{\mathsf{u}}}_{M,N}(\pm \infty) &=& \{\} \\ +\href{../exec/numerics.html#op-trunc-u}{\mathrm{trunc}^{\mathsf{u}}}_{M,N}(\pm q) &=& \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q) & (\mathrel{\mbox{if}} -1 < \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q) < 2^N) \\ +\href{../exec/numerics.html#op-trunc-u}{\mathrm{trunc}^{\mathsf{u}}}_{M,N}(\pm q) &=& \{\} & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial. +It is not defined for NaNs, infinities, or values for which the result is out of range.

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a NaN, then the result is undefined.

    • +
    • Else if \(z\) is an infinity, then the result is undefined.

    • +
    • If \(z\) is a number and \(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z)\) is a value within range of the target type, then return that value.

    • +
    • Else the result is undefined.

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \{\} \\ +\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{M,N}(\pm \infty) &=& \{\} \\ +\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{M,N}(\pm q) &=& \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q) & (\mathrel{\mbox{if}} -2^{N-1} - 1 < \href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(\pm q) < 2^{N-1}) \\ +\href{../exec/numerics.html#op-trunc-s}{\mathrm{trunc}^{\mathsf{s}}}_{M,N}(\pm q) &=& \{\} & (\mathrel{\mbox{otherwise}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    This operator is partial. +It is not defined for NaNs, infinities, or values for which the result is out of range.

    +
    +
    +
    +

    \(\href{../exec/numerics.html#op-trunc-sat-u}{\mathrm{trunc\_sat\_u}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a NaN, then return \(0\).

    • +
    • Else if \(z\) is negative infinity, then return \(0\).

    • +
    • Else if \(z\) is positive infinity, then return \(2^N - 1\).

    • +
    • Else, return \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z))\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-trunc-sat-u}{\mathrm{trunc\_sat\_u}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-trunc-sat-u}{\mathrm{trunc\_sat\_u}}_{M,N}(- \infty) &=& 0 \\ +\href{../exec/numerics.html#op-trunc-sat-u}{\mathrm{trunc\_sat\_u}}_{M,N}(+ \infty) &=& 2^N - 1 \\ +\href{../exec/numerics.html#op-trunc-sat-u}{\mathrm{trunc\_sat\_u}}_{M,N}(z) &=& \href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-trunc-sat-s}{\mathrm{trunc\_sat\_s}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a NaN, then return \(0\).

    • +
    • Else if \(z\) is negative infinity, then return \(-2^{N-1}\).

    • +
    • Else if \(z\) is positive infinity, then return \(2^{N-1} - 1\).

    • +
    • Else, return \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z))\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-trunc-sat-s}{\mathrm{trunc\_sat\_s}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& 0 \\ +\href{../exec/numerics.html#op-trunc-sat-s}{\mathrm{trunc\_sat\_s}}_{M,N}(- \infty) &=& -2^{N-1} \\ +\href{../exec/numerics.html#op-trunc-sat-s}{\mathrm{trunc\_sat\_s}}_{M,N}(+ \infty) &=& 2^{N-1}-1 \\ +\href{../exec/numerics.html#op-trunc-sat-s}{\mathrm{trunc\_sat\_s}}_{M,N}(z) &=& \href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#aux-trunc}{\mathrm{trunc}}(z)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-promote}{\mathrm{promote}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a canonical NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\) (i.e., a canonical NaN of size \(N\)).

    • +
    • Else if \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(1)\}\) (i.e., any arithmetic NaN of size \(N\)).

    • +
    • Else, return \(z\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-promote}{\mathrm{promote}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} & (\mathrel{\mbox{if}} n = \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N) \\ +\href{../exec/numerics.html#op-promote}{\mathrm{promote}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{+ \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(1)\} & (\mathrel{\mbox{otherwise}}) \\ +\href{../exec/numerics.html#op-promote}{\mathrm{promote}}_{M,N}(z) &=& z \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(z)\)

    +
      +
    • If \(z\) is a canonical NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\}\) (i.e., a canonical NaN of size \(N\)).

    • +
    • Else if \(z\) is a NaN, then return an element of \(\href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(1)\}\) (i.e., any NaN of size \(N\)).

    • +
    • Else if \(z\) is an infinity, then return that infinity.

    • +
    • Else if \(z\) is a zero, then return that zero.

    • +
    • Else, return \(\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z)\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{\} & (\mathrel{\mbox{if}} n = \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N) \\ +\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(\pm \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)) &=& \href{../exec/numerics.html#aux-nans}{\mathrm{nans}}_N\{+ \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(1)\} & (\mathrel{\mbox{otherwise}}) \\ +\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(\pm \infty) &=& \pm \infty \\ +\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(\pm 0) &=& \pm 0 \\ +\href{../exec/numerics.html#op-demote}{\mathrm{demote}}_{M,N}(\pm q) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(\pm q) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-convert-u}{\mathrm{convert}^{\mathsf{u}}}_{M,N}(i)\)

    +
      +
    • Return \(\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(i)\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-convert-u}{\mathrm{convert}^{\mathsf{u}}}_{M,N}(i) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(i) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-convert-s}{\mathrm{convert}^{\mathsf{s}}}_{M,N}(i)\)

    +
      +
    • Let \(j\) be the signed interpretation of \(i\).

    • +
    • Return \(\href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(j)\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-convert-s}{\mathrm{convert}^{\mathsf{s}}}_{M,N}(i) &=& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_M(i)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-reinterpret}{\mathrm{reinterpret}}_{t_1,t_2}(c)\)

    +
      +
    • Let \(d^\ast\) be the bit sequence \(\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{t_1}(c)\).

    • +
    • Return the constant \(c'\) for which \(\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{t_2}(c') = d^\ast\).

    • +
    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-reinterpret}{\mathrm{reinterpret}}_{t_1,t_2}(c) &=& \href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{t_2}^{-1}(\href{../exec/numerics.html#aux-bits}{\mathrm{bits}}_{t_1}(c)) \\ +\end{array}\end{split}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-narrow-s}{\mathrm{narrow}^{\mathsf{s}}}_{M,N}(i)\)

    +
      +
    • Let \(j\) be the signed interpretation of \(i\) of size \(M\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(j)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-narrow-s}{\mathrm{narrow}^{\mathsf{s}}}_{M,N}(i) &=& \href{../exec/numerics.html#aux-sat-s}{\mathrm{sat}^{\mathsf{s}}}_N(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_M(i)) +\end{array}\]
    +
    +
    +

    \(\href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}^{\mathsf{u}}}_{M,N}(i)\)

    +
      +
    • Let \(j\) be the signed interpretation of \(i\) of size \(M\).

    • +
    • Return \(\href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(j)\).

    • +
    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../exec/numerics.html#op-narrow-u}{\mathrm{narrow}^{\mathsf{u}}}_{M,N}(i) &=& \href{../exec/numerics.html#aux-sat-u}{\mathrm{sat}^{\mathsf{u}}}_N(\href{../exec/numerics.html#aux-signed}{\mathrm{signed}}_M(i)) +\end{array}\]
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/exec/runtime.html b/core/exec/runtime.html new file mode 100644 index 00000000..4eb896a6 --- /dev/null +++ b/core/exec/runtime.html @@ -0,0 +1,557 @@ + + + + + + + + + Runtime Structure — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Runtime Structure

    +

    Store, stack, and other runtime structure forming the WebAssembly abstract machine, such as values or module instances, are made precise in terms of additional auxiliary syntax.

    +
    +

    Values

    +

    WebAssembly computations manipulate values of either the four basic number types, i.e., integers and floating-point data of 32 or 64 bit width each, of vectors of 128 bit width, or of reference type.

    +

    In most places of the semantics, values of different types can occur. +In order to avoid ambiguities, values are therefore represented with an abstract syntax that makes their type explicit. +It is convenient to reuse the same notation as for the \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions and \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}\) producing them.

    +

    References other than null are represented with additional administrative instructions. +They either are function references, pointing to a specific function address, +or external references pointing to an uninterpreted form of extern address that can be defined by the embedder to represent its own objects.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2149#1{{}}\mathdef2149{(number)} & \href{../exec/runtime.html#syntax-num}{\mathit{num}} &::=& + \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i32}} \\&&|& + \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i64}} \\&&|& + \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-float}{\mathit{f32}} \\&&|& + \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-float}{\mathit{f64}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(vector)} & \href{../exec/runtime.html#syntax-vec}{\mathit{vec}} &::=& + \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i128}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(reference)} & \href{../exec/runtime.html#syntax-ref}{\mathit{ref}} &::=& + \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t \\&&|& + \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\&&|& + \href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~\href{../exec/runtime.html#syntax-externaddr}{\mathit{externaddr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(value)} & \href{../exec/runtime.html#syntax-val}{\mathit{val}} &::=& + \href{../exec/runtime.html#syntax-num}{\mathit{num}} ~|~ \href{../exec/runtime.html#syntax-vec}{\mathit{vec}} ~|~ \href{../exec/runtime.html#syntax-ref}{\mathit{ref}} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Future versions of WebAssembly may add additional forms of reference.

    +
    +

    Each value type has an associated default value; +it is the respective value \(0\) for number types and null for reference types.

    +
    +\[\begin{split}\begin{array}{lcl@{\qquad}l} +\href{../exec/runtime.html#default-val}{\mathrm{default}}_t &=& t{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0 & (\mathrel{\mbox{if}} t = \href{../syntax/types.html#syntax-numtype}{\mathit{numtype}}) \\ +\href{../exec/runtime.html#default-val}{\mathrm{default}}_t &=& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t & (\mathrel{\mbox{if}} t = \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}) \\ +\end{array}\end{split}\]
    +
    +

    Convention

    +
      +
    • The meta variable \(r\) ranges over reference values where clear from context.

    • +
    +
    +
    +
    +

    Results

    +

    A result is the outcome of a computation. +It is either a sequence of values or a trap.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2149#1{{}}\mathdef2149{(result)} & \href{../exec/runtime.html#syntax-result}{\mathit{result}} &::=& + \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast \\&&|& + \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} +\end{array}\end{split}\]
    +
    +

    Note

    +

    In the current version of WebAssembly, a result can consist of at most one value.

    +
    +
    +
    +

    Store

    +

    The store represents all global state that can be manipulated by WebAssembly programs. +It consists of the runtime representation of all instances of functions, tables, memories, and globals, element segments, and data segments that have been allocated during the life time of the abstract machine. 1

    +

    It is an invariant of the semantics that no element or data instance is addressed from anywhere else but the owning module instances.

    +

    Syntactically, the store is defined as a record listing the existing instances of each category:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(store)} & \href{../exec/runtime.html#syntax-store}{\mathit{store}} &::=& \{~ + \begin{array}[t]{l@{~}ll} + \href{../exec/runtime.html#syntax-store}{\mathsf{funcs}} & \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}}^\ast, \\ + \href{../exec/runtime.html#syntax-store}{\mathsf{tables}} & \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}}^\ast, \\ + \href{../exec/runtime.html#syntax-store}{\mathsf{mems}} & \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}}^\ast, \\ + \href{../exec/runtime.html#syntax-store}{\mathsf{globals}} & \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}}^\ast, \\ + \href{../exec/runtime.html#syntax-store}{\mathsf{elems}} & \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}}^\ast, \\ + \href{../exec/runtime.html#syntax-store}{\mathsf{datas}} & \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}}^\ast ~\} \\ + \end{array} +\end{array}\end{split}\]
    +
    +
    1
    +

    In practice, implementations may apply techniques like garbage collection to remove objects from the store that are no longer referenced. +However, such techniques are not semantically observable, +and hence outside the scope of this specification.

    +
    +
    +
    +

    Convention

    +
      +
    • The meta variable \(S\) ranges over stores where clear from context.

    • +
    +
    +
    +
    +

    Addresses

    +

    Function instances, table instances, memory instances, and global instances, element instances, and data instances in the store are referenced with abstract addresses. +These are simply indices into the respective store component. +In addition, an embedder may supply an uninterpreted set of host addresses.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(address)} & \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} &::=& + 0 ~|~ 1 ~|~ 2 ~|~ \dots \\ +\def\mathdef2149#1{{}}\mathdef2149{(function address)} & \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(table address)} & \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(memory address)} & \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(global address)} & \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(element address)} & \href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(data address)} & \href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(extern address)} & \href{../exec/runtime.html#syntax-externaddr}{\mathit{externaddr}} &::=& + \href{../exec/runtime.html#syntax-addr}{\mathit{addr}} \\ +\end{array}\end{split}\]
    +

    An embedder may assign identity to exported store objects corresponding to their addresses, +even where this identity is not observable from within WebAssembly code itself +(such as for function instances or immutable globals).

    +
    +

    Note

    +

    Addresses are dynamic, globally unique references to runtime objects, +in contrast to indices, +which are static, module-local references to their original definitions. +A memory address \(\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}\) denotes the abstract address of a memory instance in the store, +not an offset inside a memory instance.

    +

    There is no specific limit on the number of allocations of store objects, +hence logical addresses can be arbitrarily large natural numbers.

    +
    +
    +
    +

    Module Instances

    +

    A module instance is the runtime representation of a module. +It is created by instantiating a module, +and collects runtime representations of all entities that are imported, defined, or exported by the module.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(module instance)} & \href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} &::=& \{ + \begin{array}[t]{l@{~}ll} + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{funcaddrs}} & \href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{tableaddrs}} & \href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{memaddrs}} & \href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{globaladdrs}} & \href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{elemaddrs}} & \href{../exec/runtime.html#syntax-elemaddr}{\mathit{elemaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{dataaddrs}} & \href{../exec/runtime.html#syntax-dataaddr}{\mathit{dataaddr}}^\ast, \\ + \href{../exec/runtime.html#syntax-moduleinst}{\mathsf{exports}} & \href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}}^\ast ~\} \\ + \end{array} +\end{array}\end{split}\]
    +

    Each component references runtime instances corresponding to respective declarations from the original module – whether imported or defined – in the order of their static indices. +Function instances, table instances, memory instances, and global instances are referenced with an indirection through their respective addresses in the store.

    +

    It is an invariant of the semantics that all export instances in a given module instance have different names.

    +
    +
    +

    Function Instances

    +

    A function instance is the runtime representation of a function. +It effectively is a closure of the original function over the runtime module instance of its originating module. +The module instance is used to resolve references to other definitions during execution of the function.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(function instance)} & \href{../exec/runtime.html#syntax-funcinst}{\mathit{funcinst}} &::=& + \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{code}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}} \} \\ &&|& + \{ \href{../exec/runtime.html#syntax-funcinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}, \href{../exec/runtime.html#syntax-funcinst}{\mathsf{hostcode}}~\href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}} \} \\ +\def\mathdef2149#1{{}}\mathdef2149{(host function)} & \href{../exec/runtime.html#syntax-hostfunc}{\mathit{hostfunc}} &::=& \dots \\ +\end{array}\end{split}\]
    +

    A host function is a function expressed outside WebAssembly but passed to a module as an import. +The definition and behavior of host functions are outside the scope of this specification. +For the purpose of this specification, it is assumed that when invoked, +a host function behaves non-deterministically, +but within certain constraints that ensure the integrity of the runtime.

    +
    +

    Note

    +

    Function instances are immutable, and their identity is not observable by WebAssembly code. +However, the embedder might provide implicit or explicit means for distinguishing their addresses.

    +
    +
    +
    +

    Table Instances

    +

    A table instance is the runtime representation of a table. +It records its type and holds a vector of reference values.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(table instance)} & \href{../exec/runtime.html#syntax-tableinst}{\mathit{tableinst}} &::=& + \{ \href{../exec/runtime.html#syntax-tableinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}, \href{../exec/runtime.html#syntax-tableinst}{\mathsf{elem}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) \} \\ +\end{array}\end{split}\]
    +

    Table elements can be mutated through table instructions, the execution of an active element segment, or by external means provided by the embedder.

    +

    It is an invariant of the semantics that all table elements have a type equal to the element type of \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\). +It also is an invariant that the length of the element vector never exceeds the maximum size of \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\), if present.

    +
    +
    +

    Memory Instances

    +

    A memory instance is the runtime representation of a linear memory. +It records its type and holds a vector of bytes.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(memory instance)} & \href{../exec/runtime.html#syntax-meminst}{\mathit{meminst}} &::=& + \{ \href{../exec/runtime.html#syntax-meminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}, \href{../exec/runtime.html#syntax-meminst}{\mathsf{data}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}) \} \\ +\end{array}\end{split}\]
    +

    The length of the vector always is a multiple of the WebAssembly page size, which is defined to be the constant \(65536\) – abbreviated \(64\,\mathrm{Ki}\).

    +

    The bytes can be mutated through memory instructions, the execution of an active data segment, or by external means provided by the embedder.

    +

    It is an invariant of the semantics that the length of the byte vector, divided by page size, never exceeds the maximum size of \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\), if present.

    +
    +
    +

    Global Instances

    +

    A global instance is the runtime representation of a global variable. +It records its type and holds an individual value.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(global instance)} & \href{../exec/runtime.html#syntax-globalinst}{\mathit{globalinst}} &::=& + \{ \href{../exec/runtime.html#syntax-globalinst}{\mathsf{type}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}, \href{../exec/runtime.html#syntax-globalinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}} \} \\ +\end{array}\end{split}\]
    +

    The value of mutable globals can be mutated through variable instructions or by external means provided by the embedder.

    +

    It is an invariant of the semantics that the value has a type equal to the value type of \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\).

    +
    +
    +

    Element Instances

    +

    An element instance is the runtime representation of an element segment. +It holds a vector of references and their common type.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(element instance)} & \href{../exec/runtime.html#syntax-eleminst}{\mathit{eleminst}} &::=& + \{ \href{../exec/runtime.html#syntax-eleminst}{\mathsf{type}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}, \href{../exec/runtime.html#syntax-eleminst}{\mathsf{elem}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../exec/runtime.html#syntax-ref}{\mathit{ref}}) \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Data Instances

    +

    An data instance is the runtime representation of a data segment. +It holds a vector of bytes.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(data instance)} & \href{../exec/runtime.html#syntax-datainst}{\mathit{datainst}} &::=& + \{ \href{../exec/runtime.html#syntax-datainst}{\mathsf{data}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}) \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Export Instances

    +

    An export instance is the runtime representation of an export. +It defines the export’s name and the associated external value.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(export instance)} & \href{../exec/runtime.html#syntax-exportinst}{\mathit{exportinst}} &::=& + \{ \href{../exec/runtime.html#syntax-exportinst}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../exec/runtime.html#syntax-exportinst}{\mathsf{value}}~\href{../exec/runtime.html#syntax-externval}{\mathit{externval}} \} \\ +\end{array}\end{split}\]
    +
    +
    +

    External Values

    +

    An external value is the runtime representation of an entity that can be imported or exported. +It is an address denoting either a function instance, table instance, memory instance, or global instances in the shared store.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2149#1{{}}\mathdef2149{(external value)} & \href{../exec/runtime.html#syntax-externval}{\mathit{externval}} &::=& + \href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\&&|& + \href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} \\&&|& + \href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} \\&&|& + \href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} \\ +\end{array}\end{split}\]
    +
    +

    Conventions

    +

    The following auxiliary notation is defined for sequences of external values. +It filters out entries of a specific kind in an order-preserving fashion:

    +
      +
    • \(\href{../exec/runtime.html#syntax-externval}{\mathrm{funcs}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast) = [\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} ~|~ (\href{../exec/runtime.html#syntax-externval}{\mathsf{func}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}}) \in \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast]\)

    • +
    • \(\href{../exec/runtime.html#syntax-externval}{\mathrm{tables}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast) = [\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}} ~|~ (\href{../exec/runtime.html#syntax-externval}{\mathsf{table}}~\href{../exec/runtime.html#syntax-tableaddr}{\mathit{tableaddr}}) \in \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast]\)

    • +
    • \(\href{../exec/runtime.html#syntax-externval}{\mathrm{mems}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast) = [\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}} ~|~ (\href{../exec/runtime.html#syntax-externval}{\mathsf{mem}}~\href{../exec/runtime.html#syntax-memaddr}{\mathit{memaddr}}) \in \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast]\)

    • +
    • \(\href{../exec/runtime.html#syntax-externval}{\mathrm{globals}}(\href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast) = [\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}} ~|~ (\href{../exec/runtime.html#syntax-externval}{\mathsf{global}}~\href{../exec/runtime.html#syntax-globaladdr}{\mathit{globaladdr}}) \in \href{../exec/runtime.html#syntax-externval}{\mathit{externval}}^\ast]\)

    • +
    +
    +
    +
    +

    Stack

    +

    Besides the store, most instructions interact with an implicit stack. +The stack contains three kinds of entries:

    + +

    These entries can occur on the stack in any order during the execution of a program. +Stack entries are described by abstract syntax as follows.

    +
    +

    Note

    +

    It is possible to model the WebAssembly semantics using separate stacks for operands, control constructs, and calls. +However, because the stacks are interdependent, additional book keeping about associated stack heights would be required. +For the purpose of this specification, an interleaved representation is simpler.

    +
    +
    +

    Values

    +

    Values are represented by themselves.

    +
    +
    +

    Labels

    +

    Labels carry an argument arity \(n\) and their associated branch target, which is expressed syntactically as an instruction sequence:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(label)} & \href{../exec/runtime.html#syntax-label}{\mathit{label}} &::=& + \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\} \\ +\end{array}\end{split}\]
    +

    Intuitively, \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) is the continuation to execute when the branch is taken, in place of the original control construct.

    +
    +

    Note

    +

    For example, a loop label has the form

    +
    +\[\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\dots~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\}\]
    +

    When performing a branch to this label, this executes the loop, effectively restarting it from the beginning. +Conversely, a simple block label has the form

    +
    +\[\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\epsilon\}\]
    +

    When branching, the empty continuation ends the targeted block, such that execution can proceed with consecutive instructions.

    +
    +
    +
    +

    Activations and Frames

    +

    Activation frames carry the return arity \(n\) of the respective function, +hold the values of its locals (including arguments) in the order corresponding to their static local indices, +and a reference to the function’s own module instance:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(activation)} & \mathit{activation} &::=& + \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{\href{../exec/runtime.html#syntax-frame}{\mathit{frame}}\} \\ +\def\mathdef2149#1{{}}\mathdef2149{(frame)} & \href{../exec/runtime.html#syntax-frame}{\mathit{frame}} &::=& + \{ \href{../exec/runtime.html#syntax-frame}{\mathsf{locals}}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast, \href{../exec/runtime.html#syntax-frame}{\mathsf{module}}~\href{../exec/runtime.html#syntax-moduleinst}{\mathit{moduleinst}} \} \\ +\end{array}\end{split}\]
    +

    The values of the locals are mutated by respective variable instructions.

    +
    +
    +

    Conventions

    +
      +
    • The meta variable \(L\) ranges over labels where clear from context.

    • +
    • The meta variable \(F\) ranges over frames where clear from context.

    • +
    • The following auxiliary definition takes a block type and looks up the function type that it denotes in the current frame:

    • +
    +
    +\[\begin{split}\begin{array}{lll} +\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F(\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}) &=& F.\href{../exec/runtime.html#syntax-frame}{\mathsf{module}}.\href{../exec/runtime.html#syntax-moduleinst}{\mathsf{types}}[\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}] \\ +\href{../exec/runtime.html#exec-expand}{\mathrm{expand}}_F([\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?]) &=& [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?] \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Administrative Instructions

    +
    +

    Note

    +

    This section is only relevant for the formal notation.

    +
    +

    In order to express the reduction of traps, calls, and control instructions, the syntax of instructions is extended to include the following administrative instructions:

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2149#1{{}}\mathdef2149{(administrative instruction)} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\ &&|& + \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} \\ &&|& + \href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\ &&|& + \href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}~\href{../exec/runtime.html#syntax-externaddr}{\mathit{externaddr}} \\ &&|& + \href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}~\href{../exec/runtime.html#syntax-funcaddr}{\mathit{funcaddr}} \\ &&|& + \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ &&|& + \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{\href{../exec/runtime.html#syntax-frame}{\mathit{frame}}\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ +\end{array}\end{split}\]
    +

    The \(\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\) instruction represents the occurrence of a trap. +Traps are bubbled up through nested instruction sequences, ultimately reducing the entire program to a single \(\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\) instruction, signalling abrupt termination.

    +

    The \(\href{../exec/runtime.html#syntax-ref}{\mathsf{ref}}\) instruction represents function reference values. Similarly, \(\href{../exec/runtime.html#syntax-ref.extern}{\mathsf{ref{.}extern}}\) represents external references.

    +

    The \(\href{../exec/runtime.html#syntax-invoke}{\mathsf{invoke}}\) instruction represents the imminent invocation of a function instance, identified by its address. +It unifies the handling of different forms of calls.

    +

    The \(\href{../exec/runtime.html#syntax-label}{\mathsf{label}}\) and \(\href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}\) instructions model labels and frames “on the stack”. +Moreover, the administrative syntax maintains the nesting structure of the original structured control instruction or function body and their instruction sequences with an \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) marker. +That way, the end of the inner instruction sequence is known when part of an outer sequence.

    +
    +

    Note

    +

    For example, the reduction rule for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\) is:

    +
    +\[\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~[t^n]~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad +\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\epsilon\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\]
    +

    This replaces the block with a label instruction, +which can be interpreted as “pushing” the label on the stack. +When \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) is reached, i.e., the inner instruction sequence has been reduced to the empty sequence – or rather, a sequence of \(n\) \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}\) instructions representing the resulting values – then the \(\href{../exec/runtime.html#syntax-label}{\mathsf{label}}\) instruction is eliminated courtesy of its own reduction rule:

    +
    +\[\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_m\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../exec/runtime.html#syntax-val}{\mathit{val}}^n~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad \href{../exec/runtime.html#syntax-val}{\mathit{val}}^n\]
    +

    This can be interpreted as removing the label from the stack and only leaving the locally accumulated operand values.

    +
    +
    +

    Block Contexts

    +

    In order to specify the reduction of branches, the following syntax of block contexts is defined, indexed by the count \(k\) of labels surrounding a hole \([\_]\) that marks the place where the next step of computation is taking place:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(block contexts)} & \href{../exec/runtime.html#syntax-ctxt-block}{B}^0 &::=& + \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast~[\_]~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \\ +\def\mathdef2149#1{{}}\mathdef2149{(block contexts)} & \href{../exec/runtime.html#syntax-ctxt-block}{B}^{k+1} &::=& + \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast~\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../exec/runtime.html#syntax-ctxt-block}{B}^k~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \\ +\end{array}\end{split}\]
    +

    This definition allows to index active labels surrounding a branch or return instruction.

    +
    +

    Note

    +

    For example, the reduction of a simple branch can be defined as follows:

    +
    +\[\href{../exec/runtime.html#syntax-label}{\mathsf{label}}_0\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~\href{../exec/runtime.html#syntax-ctxt-block}{B}^l[\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l]~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \quad\href{../exec/conventions.html#formal-notation}{\hookrightarrow}\quad \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\]
    +

    Here, the hole \([\_]\) of the context is instantiated with a branch instruction. +When a branch occurs, +this rule replaces the targeted label and associated instruction sequence with the label’s continuation. +The selected label is identified through the label index \(l\), which corresponds to the number of surrounding \(\href{../exec/runtime.html#syntax-label}{\mathsf{label}}\) instructions that must be hopped over – which is exactly the count encoded in the index of a block context.

    +
    +
    +
    +

    Configurations

    +

    A configuration consists of the current store and an executing thread.

    +

    A thread is a computation over instructions +that operates relative to a current frame referring to the module instance in which the computation runs, i.e., where the current function originates from.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2149#1{{}}\mathdef2149{(configuration)} & \href{../exec/runtime.html#syntax-config}{\mathit{config}} &::=& + \href{../exec/runtime.html#syntax-store}{\mathit{store}}; \href{../exec/runtime.html#syntax-thread}{\mathit{thread}} \\ +\def\mathdef2149#1{{}}\mathdef2149{(thread)} & \href{../exec/runtime.html#syntax-thread}{\mathit{thread}} &::=& + \href{../exec/runtime.html#syntax-frame}{\mathit{frame}}; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The current version of WebAssembly is single-threaded, +but configurations with multiple threads may be supported in the future.

    +
    +
    +
    +

    Evaluation Contexts

    +

    Finally, the following definition of evaluation context and associated structural rules enable reduction inside instruction sequences and administrative forms as well as the propagation of traps:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2149#1{{}}\mathdef2149{(evaluation contexts)} & E &::=& + [\_] ~|~ + \href{../exec/runtime.html#syntax-val}{\mathit{val}}^\ast~E~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast ~|~ + \href{../exec/runtime.html#syntax-label}{\mathsf{label}}_n\{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\}~E~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{rcl} +S; F; E[\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast] &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F'; E[{\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'}^\ast] \\ + && (\mathrel{\mbox{if}} S; F; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S'; F'; {\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'}^\ast) \\ +S; F; \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F'\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S'; F; \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F''\}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ + && (\mathrel{\mbox{if}} S; F'; \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast \href{../exec/conventions.html#formal-notation}{\hookrightarrow} S'; F''; {\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}'}^\ast) \\[1ex] +S; F; E[\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}] &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} + \qquad (\mathrel{\mbox{if}} E \neq [\_]) \\ +S; F; \href{../exec/runtime.html#syntax-frame}{\mathsf{frame}}_n\{F'\}~\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} &\href{../exec/conventions.html#formal-notation}{\hookrightarrow}& S; F; \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}} \\ +\end{array}\end{split}\]
    +

    Reduction terminates when a thread’s instruction sequence has been reduced to a result, +that is, either a sequence of values or to a \(\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\).

    +
    +

    Note

    +

    The restriction on evaluation contexts rules out contexts like \([\_]\) and \(\epsilon~[\_]~\epsilon\) for which \(E[\href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}] = \href{../exec/runtime.html#syntax-trap}{\mathsf{trap}}\).

    +

    For an example of reduction under evaluation contexts, consider the following instruction sequence.

    +
    +\[(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\]
    +

    This can be decomposed into \(E[(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_2)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}}]\) where

    +
    +\[E = (\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_1)~[\_]~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~x_3)~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}}\]
    +

    Moreover, this is the only possible choice of evaluation context where the contents of the hole matches the left-hand side of a reduction rule.

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/genindex.html b/core/genindex.html new file mode 100644 index 00000000..0adb322f --- /dev/null +++ b/core/genindex.html @@ -0,0 +1,1947 @@ + + + + + + + + Index — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + + +

    Index

    + +
    + Symbols + | A + | B + | C + | D + | E + | F + | G + | H + | I + | K + | L + | M + | N + | O + | P + | R + | S + | T + | U + | V + | W + +
    +

    Symbols

    + + +
    + +

    A

    + + + +
    + +

    B

    + + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + + +
    + +

    F

    + + + +
    + +

    G

    + + + +
    + +

    H

    + + + +
    + +

    I

    + + + +
    + +

    K

    + + +
    + +

    L

    + + + +
    + +

    M

    + + + +
    + +

    N

    + + + +
    + +

    O

    + + + +
    + +

    P

    + + + +
    + +

    R

    + + + +
    + +

    S

    + + + +
    + +

    T

    + + + +
    + +

    U

    + + + +
    + +

    V

    + + + +
    + +

    W

    + + +
    + + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/index.html b/core/index.html new file mode 100644 index 00000000..586df31b --- /dev/null +++ b/core/index.html @@ -0,0 +1,172 @@ + + + + + + + + + WebAssembly Specification — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/intro/index.html b/core/intro/index.html new file mode 100644 index 00000000..998f8048 --- /dev/null +++ b/core/intro/index.html @@ -0,0 +1,119 @@ + + + + + + + + + Introduction — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/intro/introduction.html b/core/intro/introduction.html new file mode 100644 index 00000000..614de8bf --- /dev/null +++ b/core/intro/introduction.html @@ -0,0 +1,181 @@ + + + + + + + + + Introduction — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Introduction

    +

    WebAssembly (abbreviated Wasm 1) is a safe, portable, low-level code format +designed for efficient execution and compact representation. +Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.

    +

    WebAssembly is an open standard developed by a W3C Community Group.

    +

    This document describes version 2.0 + stringref (Draft 2022-04-27) of the core WebAssembly standard. +It is intended that it will be superseded by new incremental releases with additional features in the future.

    +
    +

    Design Goals

    +

    The design goals of WebAssembly are the following:

    +
      +
    • Fast, safe, and portable semantics:

      +
        +
      • Fast: executes with near native code performance, taking advantage of capabilities common to all contemporary hardware.

      • +
      • Safe: code is validated and executes in a memory-safe 2, sandboxed environment preventing data corruption or security breaches.

      • +
      • Well-defined: fully and precisely defines valid programs and their behavior in a way that is easy to reason about informally and formally.

      • +
      • Hardware-independent: can be compiled on all modern architectures, desktop or mobile devices and embedded systems alike.

      • +
      • Language-independent: does not privilege any particular language, programming model, or object model.

      • +
      • Platform-independent: can be embedded in browsers, run as a stand-alone VM, or integrated in other environments.

      • +
      • Open: programs can interoperate with their environment in a simple and universal manner.

      • +
      +
    • +
    • Efficient and portable representation:

      +
        +
      • Compact: has a binary format that is fast to transmit by being smaller than typical text or native code formats.

      • +
      • Modular: programs can be split up in smaller parts that can be transmitted, cached, and consumed separately.

      • +
      • Efficient: can be decoded, validated, and compiled in a fast single pass, equally with either just-in-time (JIT) or ahead-of-time (AOT) compilation.

      • +
      • Streamable: allows decoding, validation, and compilation to begin as soon as possible, before all data has been seen.

      • +
      • Parallelizable: allows decoding, validation, and compilation to be split into many independent parallel tasks.

      • +
      • Portable: makes no architectural assumptions that are not broadly supported across modern hardware.

      • +
      +
    • +
    +

    WebAssembly code is also intended to be easy to inspect and debug, especially in environments like web browsers, but such features are beyond the scope of this specification.

    +
    +
    1
    +

    A contraction of “WebAssembly”, not an acronym, hence not using all-caps.

    +
    +
    2
    +

    No program can break WebAssembly’s memory model. Of course, it cannot guarantee that an unsafe language compiling to WebAssembly does not corrupt its own memory layout, e.g. inside WebAssembly’s linear memory.

    +
    +
    +
    +
    +

    Scope

    +

    At its core, WebAssembly is a virtual instruction set architecture (virtual ISA). +As such, it has many use cases and can be embedded in many different environments. +To encompass their variety and enable maximum reuse, the WebAssembly specification is split and layered into several documents.

    +

    This document is concerned with the core ISA layer of WebAssembly. +It defines the instruction set, binary encoding, validation, and execution semantics, as well as a textual representation. +It does not, however, define how WebAssembly programs can interact with a specific environment they execute in, nor how they are invoked from such an environment.

    +

    Instead, this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. +These will each define a WebAssembly application programming interface (API) suitable for a given environment.

    +
    +
    +

    Security Considerations

    +

    WebAssembly provides no ambient access to the computing environment in which code is executed. +Any interaction with the environment, such as I/O, access to resources, or operating system calls, can only be performed by invoking functions provided by the embedder and imported into a WebAssembly module. +An embedder can establish security policies suitable for a respective environment by controlling or limiting which functional capabilities it makes available for import. +Such considerations are an embedder’s responsibility and the subject of API definitions for a specific environment.

    +

    Because WebAssembly is designed to be translated into machine code running directly on the host’s hardware, it is potentially vulnerable to side channel attacks on the hardware level. +In environments where this is a concern, an embedder may have to put suitable mitigations into place to isolate WebAssembly computations.

    +
    +
    +

    Dependencies

    +

    WebAssembly depends on two existing standards:

    + +

    However, to make this specification self-contained, relevant aspects of the aforementioned standards are defined and formalized as part of this specification, +such as the binary representation and rounding of floating-point values, and the value range and UTF-8 encoding of Unicode characters.

    +
    +

    Note

    +

    The aforementioned standards are the authoritative source of all respective definitions. +Formalizations given in this specification are intended to match these definitions. +Any discrepancy in the syntax or semantics described is to be considered an error.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/intro/overview.html b/core/intro/overview.html new file mode 100644 index 00000000..778a2b7f --- /dev/null +++ b/core/intro/overview.html @@ -0,0 +1,228 @@ + + + + + + + + + Overview — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Overview

    +
    +

    Concepts

    +

    WebAssembly encodes a low-level, assembly-like programming language. +This language is structured around the following concepts.

    +
    +
    Values

    WebAssembly provides only four basic number types. +These are integers and IEEE 754-2019 numbers, +each in 32 and 64 bit width. +32 bit integers also serve as Booleans and as memory addresses. +The usual operations on these types are available, +including the full matrix of conversions between them. +There is no distinction between signed and unsigned integer types. +Instead, integers are interpreted by respective operations +as either unsigned or signed in two’s complement representation.

    +

    In addition to these basic number types, there is a single 128 bit wide +vector type representing different types of packed data. +The supported representations are 4 32-bit, or 2 64-bit +IEEE 754-2019 numbers, or different widths of packed integer values +specifically 2 64-bit integers, 4 32-bit integers, 8 +16-bit integers, or 16 8-bit integers.

    +

    Finally, values can consist of opaque references that represent pointers towards different sorts of entities. +Unlike with other types, their size or representation is not observable.

    +
    +
    +
    +
    Instructions

    The computational model of WebAssembly is based on a stack machine. +Code consists of sequences of instructions that are executed in order. +Instructions manipulate values on an implicit operand stack 1 +and fall into two main categories. +Simple instructions perform basic operations on data. +They pop arguments from the operand stack and push results back to it. +Control instructions alter control flow. +Control flow is structured, meaning it is expressed with well-nested constructs such as blocks, loops, and conditionals. +Branches can only target such constructs.

    +
    +
    +
    +
    Traps

    Under some conditions, certain instructions may produce a trap, +which immediately aborts execution. +Traps cannot be handled by WebAssembly code, +but are reported to the outside environment, +where they typically can be caught.

    +
    +
    +
    +
    Functions

    Code is organized into separate functions. +Each function takes a sequence of values as parameters +and returns a sequence of values as results. +Functions can call each other, including recursively, +resulting in an implicit call stack that cannot be accessed directly. +Functions may also declare mutable local variables that are usable as virtual registers.

    +
    +
    +
    +
    Tables

    A table is an array of opaque values of a particular element type. +It allows programs to select such values indirectly through a dynamic index operand. +Currently, the only available element type is an untyped function reference. +Thereby, a program can call functions indirectly through a dynamic index into a table. +For example, this allows emulating function pointers by way of table indices.

    +
    +
    +
    +
    Linear Memory

    A linear memory is a contiguous, mutable array of raw bytes. +Such a memory is created with an initial size but can be grown dynamically. +A program can load and store values from/to a linear memory at any byte address (including unaligned). +Integer loads and stores can specify a storage size which is smaller than the size of the respective value type. +A trap occurs if an access is not within the bounds of the current memory size.

    +
    +
    +
    +
    Modules

    A WebAssembly binary takes the form of a module +that contains definitions for functions, tables, and linear memories, +as well as mutable or immutable global variables. +Definitions can also be imported, specifying a module/name pair and a suitable type. +Each definition can optionally be exported under one or more names. +In addition to definitions, modules can define initialization data for their memories or tables +that takes the form of segments copied to given offsets. +They can also define a start function that is automatically executed.

    +
    +
    +
    +
    Embedder

    A WebAssembly implementation will typically be embedded into a host environment. +This environment defines how loading of modules is initiated, +how imports are provided (including host-side definitions), and how exports can be accessed. +However, the details of any particular embedding are beyond the scope of this specification, and will instead be provided by complementary, environment-specific API definitions.

    +
    +
    +
    +
    1
    +

    In practice, implementations need not maintain an actual operand stack. Instead, the stack can be viewed as a set of anonymous registers that are implicitly referenced by instructions. The type system ensures that the stack height, and thus any referenced register, is always known statically.

    +
    +
    +
    +
    +

    Semantic Phases

    +

    Conceptually, the semantics of WebAssembly is divided into three phases. +For each part of the language, the specification specifies each of them.

    +
    +
    Decoding

    WebAssembly modules are distributed in a binary format. +Decoding processes that format and converts it into an internal representation of a module. +In this specification, this representation is modelled by abstract syntax, but a real implementation could compile directly to machine code instead.

    +
    +
    +
    +
    Validation

    A decoded module has to be valid. +Validation checks a number of well-formedness conditions to guarantee that the module is meaningful and safe. +In particular, it performs type checking of functions and the instruction sequences in their bodies, ensuring for example that the operand stack is used consistently.

    +
    +
    +
    +
    Execution

    Finally, a valid module can be executed. +Execution can be further divided into two phases:

    +

    Instantiation. +A module instance is the dynamic representation of a module, +complete with its own state and execution stack. +Instantiation executes the module body itself, given definitions for all its imports. +It initializes globals, memories and tables and invokes the module’s start function if defined. +It returns the instances of the module’s exports.

    +

    Invocation. +Once instantiated, further WebAssembly computations can be initiated by invoking an exported function on a module instance. +Given the required arguments, that executes the respective function and returns its results.

    +

    Instantiation and invocation are operations within the embedding environment.

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/objects.inv b/core/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..6bbef7a86e4231b6f9692858d20e39bfa02d7f4c GIT binary patch literal 10897 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 literal 0 HcmV?d00001 diff --git a/core/search.html b/core/search.html new file mode 100644 index 00000000..4591a88e --- /dev/null +++ b/core/search.html @@ -0,0 +1,115 @@ + + + + + + + + Search — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +

    Search

    + +
    + +

    + Please activate JavaScript to enable the search + functionality. +

    +
    + + +

    + Searching for multiple words only shows matches that contain + all words. +

    + + +
    + + + +
    + + + +
    + +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/searchindex.js b/core/searchindex.js new file mode 100644 index 00000000..ed31bc93 --- /dev/null +++ b/core/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["appendix/algorithm","appendix/changes","appendix/custom","appendix/embedding","appendix/implementation","appendix/index","appendix/index-instructions","appendix/index-rules","appendix/index-types","appendix/properties","binary/conventions","binary/index","binary/instructions","binary/modules","binary/types","binary/values","exec/conventions","exec/index","exec/instructions","exec/modules","exec/numerics","exec/runtime","index","intro/index","intro/introduction","intro/overview","syntax/conventions","syntax/index","syntax/instructions","syntax/modules","syntax/types","syntax/values","text/conventions","text/index","text/instructions","text/lexical","text/modules","text/types","text/values","valid/conventions","valid/index","valid/instructions","valid/modules","valid/types"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,sphinx:56},filenames:["appendix/algorithm.rst","appendix/changes.rst","appendix/custom.rst","appendix/embedding.rst","appendix/implementation.rst","appendix/index.rst","appendix/index-instructions.rst","appendix/index-rules.rst","appendix/index-types.rst","appendix/properties.rst","binary/conventions.rst","binary/index.rst","binary/instructions.rst","binary/modules.rst","binary/types.rst","binary/values.rst","exec/conventions.rst","exec/index.rst","exec/instructions.rst","exec/modules.rst","exec/numerics.rst","exec/runtime.rst","index.rst","intro/index.rst","intro/introduction.rst","intro/overview.rst","syntax/conventions.rst","syntax/index.rst","syntax/instructions.rst","syntax/modules.rst","syntax/types.rst","syntax/values.rst","text/conventions.rst","text/index.rst","text/instructions.rst","text/lexical.rst","text/modules.rst","text/types.rst","text/values.rst","valid/conventions.rst","valid/index.rst","valid/instructions.rst","valid/modules.rst","valid/types.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,2,5,9,10,12,13,15,18,19,20,21,22,24,26,28,29,31,32,34,35,36,38,39,41],"00":[6,10,12,13,14,15,19,31,35],"01":[6,10,12,13,14],"02":[6,12,13],"03":[6,12,13,15],"04":[6,12,13,22,24],"05":[6,12,13],"06":[6,13],"07":[6,13],"08":6,"09":[6,35,38],"0a":[6,32,35,38],"0b":[6,12],"0c":[6,12],"0d":[6,12,35,38],"0e":[6,12],"0f":[6,10,12],"0x":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"1":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"10":[6,12,13,15,38],"100":12,"10000":15,"101":12,"102":12,"1024":20,"103":12,"104":12,"105":12,"106":12,"107":12,"108":12,"109":12,"10ffff":[31,35],"11":[6,12,13,31],"110":12,"110000":[15,38],"111":12,"1114112":31,"112":12,"113":12,"114":12,"115":12,"116":12,"117":12,"118":12,"119":12,"12":[6,12,13,15],"120":12,"121":12,"122":12,"123":12,"124":12,"125":12,"126":12,"127":12,"128":[12,18,20,21,25,28,30,31,41],"129":12,"13":[6,12],"130":12,"131":12,"132":12,"133":12,"134":12,"135":12,"136":12,"137":12,"138":12,"139":12,"14":[6,12,20],"140":12,"141":12,"142":12,"143":12,"144":12,"145":12,"146":12,"147":12,"148":12,"149":12,"15":[6,12,18,20,38],"150":12,"151":12,"152":12,"153":12,"155":12,"156":12,"157":12,"158":12,"159":12,"16":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"160":12,"161":12,"163":12,"164":12,"167":12,"168":12,"169":12,"16x4":[6,12,28,34],"17":[6,8,12],"170":12,"171":12,"172":12,"173":12,"174":12,"177":12,"18":[6,12,15],"181":12,"182":12,"183":12,"184":12,"185":12,"186":12,"188":12,"189":12,"19":[6,12],"190":12,"191":12,"192":12,"193":12,"195":12,"196":12,"199":12,"1a":[6,12],"1b":[6,12],"1c":[6,12],"1d":6,"1e":6,"1ex":[9,15,18,19,20,21,34,36,38,43],"1f":6,"2":[2,5,8,9,12,13,15,16,18,19,20,21,22,24,25,26,28,31,32,34,35,38,39,41,43],"20":[6,12,38],"200":12,"2002":[16,39],"201":12,"2017":[9,16,39],"2018":9,"2019":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"202":12,"2022":[22,24],"203":12,"204":12,"205":12,"206":12,"209":12,"21":[6,12],"213":12,"214":12,"215":12,"216":12,"217":12,"218":12,"219":12,"22":[6,12,38],"220":12,"221":12,"222":12,"223":12,"224":12,"225":12,"227":12,"228":12,"229":12,"23":[6,12,31],"230":12,"231":12,"232":12,"233":12,"234":12,"235":12,"236":12,"237":12,"239":12,"24":[6,12],"240":[12,18],"241":12,"242":12,"243":12,"244":12,"245":12,"246":12,"247":12,"248":12,"249":12,"25":[6,12],"250":12,"251":12,"252":12,"253":12,"254":12,"255":12,"256":31,"26":[6,12],"27":[6,12,22,24,38],"28":[6,12],"29":[6,12],"2a":[6,12],"2b":[6,12],"2c":[6,12],"2d":[6,12],"2e":[6,12],"2ex":[12,34],"2f":[6,12],"3":[1,8,12,13,15,20,30,31,34,41],"30":[6,12],"31":[6,12],"32":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"32x2":[6,12,28,34],"33":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"34":[6,12],"35":[6,12],"36":[6,12],"37":[6,12],"38":[6,12],"38th":[9,16,39],"39":[6,12],"3a":[6,12],"3b":[6,12],"3c":[6,12],"3d":[6,12],"3e":[6,12,15],"3ex":34,"3f":[6,12],"4":[1,8,12,13,15,20,25,31,34,35],"40":[6,8,12],"41":[6,8,12],"42":[6,12],"43":[6,12],"44":[6,12],"45":[6,12],"46":[6,12],"47":[6,12],"48":[6,12],"49":[6,12],"4a":[6,12],"4b":[6,12],"4c":[6,12],"4d":[6,12],"4e":[6,12],"4f":[6,12],"5":[1,8,12,13,20,32,38],"50":[6,12],"51":[6,12],"52":[6,12,31],"53":[6,12],"54":[6,12],"55":[6,12],"56":[6,12],"57":[6,12],"58":[6,12],"59":[6,12],"5a":[6,12],"5b":[6,12],"5c":[6,12,38],"5d":[6,12],"5e":[6,12],"5f":[6,8,12],"6":[1,12,13,15],"60":[6,8,12,14],"61":[6,8,12,13],"62":[6,12],"63":[6,12],"64":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"65":[6,12],"65536":21,"66":[6,12],"67":[6,12],"68":[6,12],"69":[6,12],"6a":[6,12],"6b":[6,12],"6c":[6,12],"6d":[6,12,13],"6e":[6,8,12],"6f":[6,8,12,14],"7":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"70":[6,8,12,14],"71":[6,8,12],"72":[6,12],"73":[6,12,13],"74":[6,12],"75":[6,12],"754":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"76":[6,12],"77":[6,12],"78":[6,12],"79":[6,12],"7a":[6,8,12],"7b":[6,8,12,14,15],"7c":[6,8,10,12,14],"7d":[6,8,10,12,14],"7e":[6,8,10,12,14,15],"7f":[6,8,10,12,14,15,38],"7th":9,"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"80":[6,12,15],"800":15,"81":[6,12],"82":[6,12],"83":[6,12,15],"84":[6,12],"85":[6,12],"86":[6,12],"87":[6,12],"88":[6,12],"89":[6,12],"8a":[6,12],"8b":[6,12],"8c":[6,12],"8d":[6,12],"8e":[6,12],"8f":[6,12],"8x8":[6,12,28,34],"9":[12,13,15,38],"90":[6,12],"91":[6,12],"92":[6,12],"93":[6,12],"94":[6,12],"95":[6,12],"96":[6,12],"97":[6,12],"98":[6,12],"99":[6,12],"9a":[6,12],"9b":[6,12],"9c":[6,12],"9d":[6,12],"9e":[6,12],"9f":[6,12],"abstract":[3,9,10,16,20,21,25,26,31,32,36,38,39],"boolean":[25,28],"break":[24,28],"byte":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43],"case":[0,3,4,9,10,13,14,16,18,20,24,26,28,32,34,36,38,39,41,43],"char":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"class":[3,29,30,31,34,35],"const":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"default":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"do":[0,2,3,9,16,18,19,28,36,38,39,41],"export":[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],"final":[0,9,19,21,25,39],"float":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,42,43],"function":[0,1,4,5,7,8,10,11,15,16,17,20,24,25,27,28,32,33,34,39,40,41],"import":[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],"int":[0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"long":[3,16,20,41],"new":[0,1,3,9,16,19,24,34,36,39,41],"null":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"return":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"short":[26,29],"static":[9,19,21,25,28,29],"switch":0,"throw":28,"true":[0,20],"try":[3,18],"var":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"while":[9,13,18,19,28,29,31,35],A:[0,2,3,4,9,10,16,18,19,20,21,24,25,26,28,29,31,32,35,36,38,39,41,42],And:18,As:[3,15,16,20,24,28,36,41],At:[24,36],BE:[6,12],But:0,For:[0,3,4,9,10,12,13,15,16,18,19,20,21,25,26,28,29,32,34,35,39,41,42],If:[3,4,9,10,13,18,19,20,26,28,30,32,36,39,41,42,43],In:[0,3,9,10,12,13,14,16,18,19,20,21,24,25,28,29,30,31,32,34,36,38,39,41,43],It:[0,2,3,13,16,18,19,20,21,24,25,28,29,30,32,35,36],Its:[24,28,29,43],No:[9,10,18,24,31,34],Of:24,On:3,Or:[9,18,43],Such:[2,16,24,25,34,36,39,41],That:[0,9,10,20,21,30,35,36,38,39,41],The:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42,43],Their:[13,34],Then:[9,19,41,42,43],There:[9,16,20,21,25,41],These:[4,19,20,21,24,25,28,29,32],To:[9,12,16,24,32,39],_0:[2,13,18,19,21],_1:[2,7,9,12,13,14,26,34,36,39,43],_2:[2,7,9,12,13,14,26,34,36,39,43],_3:13,_4:[13,34],_5:13,_6:13,_7:13,_8:[13,20,34],_9:13,_:[1,6,12,13,15,19,21,28,34,36,38],_e:20,_f32:[28,34],_f32x4:[1,6,12,28,34],_f64:[28,34],_f64x2:[1,6,12,28,34],_f:[1,18,21,28],_high:[6,12,34],_i16x8:[1,6,12,28,34],_i32:[28,34],_i32x4:[1,6,12,28,34],_i64:[28,34],_i8x16:[1,6,12,28,34],_i:[1,3,9,19,26,28,34,36,41,42],_if:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_indirect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_low:[1,6,12,28,34],_m:[18,20,21],_n:[2,13,18,21,31,34,38,39],_null:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_pairwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_s:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_splat:[1,6,12,28,34],_t:[18,20,21],_tabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_true:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_x:18,_y:18,_zero:[1,6,12,28,34],a0:[6,12],a1:[6,12],a2:[6,12],a3:[6,12],a4:[6,12],a5:[6,12],a6:[6,12],a7:[6,12],a8:[6,12],a9:[6,12],a_1:[10,26,32],a_2:26,a_i:[10,26,32],a_n:[10,26,32],aa:[6,12],ab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],abbrevi:[21,24,33,38],abil:1,abl:[9,13],abort:[16,18,25,28],about:[3,9,16,21,24,39],abov:[0,4,9,18,31,35],abrupt:21,absent:[9,39,41],absolut:34,ac:[6,12],accept:30,access:[0,1,3,9,18,24,25,26,28,29,34,39,42],accord:[3,18,28,35,39],accordingli:[39,41],accumul:[0,21,41],acm:[9,16,39],acronym:24,across:24,activ:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],actual:[0,2,10,12,13,18,19,25,32,42],ad:[1,6,9,12,13,19,20,28],add:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],addit:[0,1,3,4,9,10,12,13,15,21,24,25,28,29,30,32,34,36,39],addition:[0,28],addr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],address:[3,9,17,19,25,28],adher:[9,18],admin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],administr:[5,17,18],adopt:[3,10,16,26,32,39],advantag:24,ae:[6,12],af:[6,12],affect:[2,18,19,28,35],aforement:24,after:[0,2,13,16,18,28,29,34],afterward:[0,16],again:20,against:[0,18,19,28,43],ahead:[24,35],akin:41,algorithm:[5,22,39,41],align:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alik:24,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocglob:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allochostfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmodul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloct:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocx:19,allow:[0,1,4,9,10,12,14,15,18,20,21,24,25,28,29,32,34,35,36,38,39,41,43],alon:[9,16,24,39],along:0,alreadi:[4,18,38],also:[1,3,9,10,12,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41],alter:25,altern:[10,20,28],alwai:[9,20,21,25,28,35,38,39,43],ambient:24,ambigu:21,amen:[16,39],among:[20,31],an:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,42,43],analog:34,andnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],andrea:[9,16,22,39],ani:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],annot:[12,18,28,34,39,41],anonym:[25,36,37],anoth:[28,36,41],anyth:41,anywher:[21,34,37],aot:24,api:[19,24,25],appear:[2,10,18,26,32,34,36,42],append:[19,26,39],appendix:[0,1,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],appli:[9,16,18,20,21,32,36,39,43],applic:[4,10,16,20,24,32],approach:[16,39],appropri:[9,16,19,28],ar:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42,43],arbitrari:[1,20,31,32,38],arbitrarili:[21,41],architectur:24,argument:[3,9,12,18,19,20,21,25,28,34],arithmet:[20,31],ariti:[0,18,21],around:[25,34],arrai:[2,3,9,10,12,13,14,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42],articl:[9,16,39],ascii:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ascrib:18,aspect:[0,4,24],assembl:25,assert:[3,16,18,19],assign:[2,21,32,35],associ:[0,2,9,18,19,21,28,30,32],assum:[3,4,9,16,19,20,21,26,32,35,39,41],assumpt:[9,24,39],ast:[6,7,8,10,12,13,14,15,16,19,20,21,26,28,29,30,31,32,34,35,36,37,38,39,43],ast_i:19,atom:[19,26],attach:2,attack:24,attribut:[10,20,32,36],augment:[10,26,32,36],authorit:24,automat:[3,9,25,29,36],aux:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],auxiliari:[0,3,11,15,18,19,20,21,27,29,30,31,34,36,41],avail:[18,24,25,28,29,39],averylonginstructionnameforvectext:34,avgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],avoid:[1,12,16,21,32],awai:28,axiom:39,b0:[6,12],b1:[6,12],b2:[6,12],b3:[6,12],b4:[6,12],b5:[6,12],b6:[6,12],b7:[6,12],b8:[6,12],b9:[6,12],b:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],b_1:[9,10,15,26],b_2:[9,15,26],b_3:15,b_4:15,b_:12,b_i:10,b_n:10,ba:[6,12],back:[0,18,25,28,41],backslash0asm:13,backslash:38,backward:[13,18,28,34,36],base:[18,20,25,28,29,31,34],basic:[10,21,25,28],bastien:[9,16,39],bb:[6,12],bc:[6,12],bd:[6,12],becaus:[18,19,20,21,24,41],becom:29,been:[0,1,16,19,21,24,29],befor:[4,13,19,24,29,32,36],beforehand:19,begin:[2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,26,28,29,30,31,32,34,35,36,37,38,39,41,42],behav:[9,21,28],behavior:[9,16,18,21,24,28],being:[13,24,28,41],below:[9,19,42],ben:[9,16,39],benjamin:[16,39],besid:[20,21],between:[3,20,25,31,32],beyond:[24,25],bf:[6,12],big:39,bigoplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bigwedg:18,biject:20,binari:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bind:[10,32,34,36],binop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitfield:13,bitmask:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitwidth:28,bitwis:[20,28],block:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],blockchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockcom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blocktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],book:[16,21,39],bool:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bot:[9,18,41],both:[9,14,15,16,20,26,28,29,34,36,38,39,41,43],bottom:41,bound:[10,13,15,25,26,28,31,32,34,36,43],boundari:1,br:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],br_if:0,br_tabl:0,bracket:[12,28,30,34,35,38],branch:[0,18,21,25,28,34],breach:24,brief:[16,39],bring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],broadli:24,browser:24,bt:[6,12,18,34],bubbl:21,bytes_:[12,20],c0:[6,12,15],c1:[6,12],c2:[6,12,18],c3:[6,12],c4:[6,12],c5:6,c6:6,c7:6,c8:6,c9:6,c:[3,7,9,15,28,34,35,38,39,42,43],c_0:20,c_1:[18,20],c_2:18,c_3:18,c_:20,c_i:20,c_k:20,ca:6,cach:24,calcul:19,call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],calle:28,can:[0,1,2,3,9,10,12,13,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42],candid:20,candidatepair:20,cannot:[0,12,19,24,25,28,29,35,37],canon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cap:[20,24],capabl:24,carri:[3,21],carriag:35,categori:[8,21,25,28,35],caught:25,caus:28,cb:6,cc:6,ccc:9,cd:6,cdot2:31,cdot64:18,cdot:[3,9,15,16,18,19,20,31,38,41],ce:6,ceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],certain:[9,16,20,21,25],certifi:9,cf:6,chang:[0,5,9,13,22,39],channel:24,chapter:35,charact:[4,15,24,31,32,33,38],check:[0,1,13,18,19,25,28,30,34,39,41,42,43],choic:[18,21,36,41],chosen:[20,41],clamp:20,classif:3,classifi:[9,19,30,39,41,42,43],claus:[20,36],clear:[21,30,31],clll:36,cllll:36,close:[10,28,32,42],closest:20,closur:[19,21],clutter:[16,32],clz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],code:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codifi:9,coexist:14,coincid:[9,16,18],collect:[21,29,39],collid:12,com:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],combin:[1,20,36,37,41],combinatori:[10,26,32],come:28,comma:38,comment:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],common:[4,21,24,26],commun:24,compact:24,comparison:28,compat:[13,34,36],compil:[1,2,4,13,24,25,29],complement:[15,20,24,25,28,31],complementari:25,complet:[0,3,10,25,29,32,39],complex:[26,31],compon:[9,13,16,21,26,29,32,39,42],compos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],composit:[26,36],compound:[9,41],compress:[10,12,13],comput:[4,9,16,18,20,21,24,25,28,30,32],concat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],concaten:[3,9,13,18,19,26,42],concept:23,conceptu:25,concern:[24,28],concis:[16,26,39],conclus:39,concret:[4,26,32,39],condit:[5,9,10,15,18,19,20,25,26,28,32,34,36,39],confer:[9,16,39],config:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],configur:[5,7,16],conform:4,conjunct:20,connect:3,conrad:9,consecut:[0,4,21,36],consequ:[0,9,10,28,29,35,36,41,42],consid:[20,21,24,32,34,35],consider:23,consist:[0,2,9,12,13,16,18,19,20,21,25,28,29,34,35,36],constant:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],constitut:18,constrain:[30,41],constraint:[0,4,9,15,21,39,41],construct:[16,21,25,26,28,29,31,32,36,39,42],constructor:[8,14],consum:[18,24,28,39,41],cont:13,contain:[0,9,10,13,15,16,18,19,21,24,25,28,29,32,34,35,36,38,39,41,42],contemporari:24,content:[2,13,18,19,21,26,29,39,42],context:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,40,41,42,43],contigu:25,continu:[18,21,26,28],contract:24,contrast:[21,41],contribut:2,control:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],conveni:[16,20,21,28,32],convent:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,22,23,24,25,27,33,34,35,36,37,40,41,42,43],convers:[17,18,21,25,28],convert:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],copi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],copysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],corollari:9,correct:9,correctli:38,correspond:[3,12,13,14,18,19,20,21,26,29,30,31,32,34,35,38,39,41],corrupt:24,could:25,count:[1,11,18,20,21],cours:24,courtesi:21,cover:9,cpp:9,crash:9,creat:[3,21,25],crucial:16,ctrl:0,ctrl_frame:0,ctrl_stack:0,ctxt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ctz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cup:20,current:[0,2,9,10,13,16,18,21,25,28,29,36,39,41],custom:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],customsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],d0:[6,12],d1:[6,12],d2:[6,12],d3:6,d4:6,d5:6,d6:6,d7:6,d7ff:[31,35],d800:[15,38],d8:6,d9:6,d:[13,18,20,36,38],d_0:20,d_1:[18,20],d_2:[18,20],d_:20,da:[6,18,36],dan:[9,16,39],data:[1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,43],dataaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datacountsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dataidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datainst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datamod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],datasec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datastr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],db:6,dc:6,dd:6,de:6,deal:[10,26],debug:[13,24],debugg:2,decim:38,declar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],decod:[0,10,13,24,25],decompos:21,decreas:20,dedic:2,deduct:39,def:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],defer:[4,13],defin:[1,2,3,9,10,13,15,16,18,19,20,21,24,25,26,29,30,31,32,34,35,36,38,39,41,42,43],definit:[2,3,9,13,16,18,19,20,21,24,25,26,29,31,35,36,39,41,42],degre:41,delimit:[34,35],delta:28,demot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],denot:[10,13,14,18,20,21,26,28,29,30,31,32,38,39],dens:10,depend:[2,4,13,18,19,20,23,28,29,31,38,39,42],deploy:29,depth:[4,28],derek:[9,16,39],deriv:[3,9,10,16,39],desc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],describ:[0,9,13,16,21,24,26,28,29,31,39,41],descript:[3,7,13,16,29,32,36,39,42],descriptor:[29,34,36],design:[4,9,16,23,39],desktop:24,destin:28,detail:25,detect:0,determin:[0,16,19,20,28,30,31,34,42],determinist:[16,18,20,21],develop:24,devic:[19,24,42],df:6,diagnost:3,differ:[0,3,9,10,12,18,19,20,21,24,25,26,28,29,31,41,42],digit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dim:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dimens:[4,41],dimension:2,dinstr:19,direct:[20,28],directli:[0,1,3,9,15,18,24,25,32,34,36],disallow:35,disambigu:35,discrep:24,disjoint:[9,42],disjunct:20,distinct:[25,31,32],distinguish:[10,13,21,28,29,31,32,34,41],distribut:25,div:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],diverg:[9,18],divid:[3,18,19,20,21,25,28,35,41],dividend:20,divis:[19,20],dmode:19,document:[24,37],documentari:36,doe:[0,3,9,13,18,19,20,24,28,35,38,39,42],dot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],doubl:[30,35],draft:[22,24],drawn:32,drop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],due:[3,18,19,31],dummi:19,dup:0,duplic:[0,28,32,36],dure:[4,9,18,21,29,30,43],dynam:[9,19,21,25,28],e000:[15,31,35,38],e0:[6,15],e1:6,e2:6,e3:6,e4:6,e5:6,e6:6,e7:6,e8:6,e9:6,e:[0,2,9,10,13,18,19,20,21,24,28,31,36,38],e_i:[13,42],ea:[6,18],each:[0,2,3,9,10,12,13,16,18,19,20,21,24,25,26,28,29,32,36,38,39,41,42,43],earlier:[18,36],eas:43,easi:[0,24],easili:[19,42],eb:6,ec:6,ed:6,editor:22,ee:6,ef:6,effect:[0,16,18,21,28,34,35,41,42],effector:35,effici:[24,41],einit:19,einstr:19,either:[0,9,10,12,15,16,18,19,20,21,24,25,26,28,29,30,31,32,35,36,38,41,43],el:[13,36],elem:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],elemaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],element:[0,1,3,4,7,10,11,14,17,18,20,25,26,27,28,30,33,38,39,40,41],elemexpr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],eleminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemkind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemmod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],elemsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elimin:21,ellips:26,els:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],elsewher:39,emb:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embed:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embedd:[3,4,9,18,19,21,24,25,29,30],embodi:39,emploi:[24,26],empti:[0,3,9,10,12,13,16,18,19,20,21,26,29,32,34,36,39,42,43],emptyset:[9,13],emul:25,enabl:[4,13,21,24],encapsul:9,enclos:[28,32,35,38],encod:[2,10,12,13,14,15,21,24,25,31,32,38,39],encompass:24,end:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],end_typ:0,endian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],enforc:[15,28,34,36,39,41],enough:28,enrich:1,ensur:[0,9,18,19,21,25,36],enter:[0,16,28],entir:[16,21,29,36,41,42],entiti:[21,25,29,30],entri:[1,3,13,18,19,21,28,30,32,34,39],enumer:0,environ:[3,4,24,25,29],eof:35,epsilon:[3,8,9,10,12,13,14,16,18,19,20,21,26,32,34,36,37,38,42,43],eq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],equal:[3,9,10,19,20,21,24,26,41,43],equat:20,equiv:[32,34,36,37],equival:[13,16,29,39],eqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],err:18,error:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],error_if:0,escap:38,especi:24,establish:24,et:[13,14,19,36,37,42],ev:3,evalu:[9,16,18,19],even:[0,3,20,21,29],event:4,ever:13,everi:[3,4,9,13,16,18,29,31,39],ex:[3,13,19,36],exact:[20,28],exactli:[10,20,21],exampl:[0,3,9,10,15,16,18,20,21,25,28,29,32,34,35,39,41],exce:[15,21],exceed:[4,18],except:[9,10,12,13,16,20,26,32,35,38,41,42],exclud:20,exclus:[20,35],exec:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],execut:[5,6,9,16,18,19,21,22,24,25,28,30,41],exist:[0,3,9,18,19,20,21,24,34,36,39],exit:[0,16],expand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expans:[10,20,26,32,36,38],expect:[0,3,4,9,13,18,19,28,41],experi:2,explan:[16,39],explanatori:0,explicit:[9,12,13,21,26,34,36,38],explicitli:[3,9,16,18,39],expon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],exportinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],express:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],extadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extend16:34,extend32:34,extend8:34,extend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extens:[0,5,10,12,13,18,20,28,32,39],extern:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42],externaddr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],externv:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extra:9,extract:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],f0:[6,15],f1:6,f2:6,f32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f3:6,f4:6,f5:6,f64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f6:6,f7:6,f8:6,f9:6,f:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f_:19,fa:6,fab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fact:[0,18,34,35],fadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fail:[18,19],failur:[3,18,19],fall:[18,25,35],fals:0,farther:28,fashion:[21,29,30],fast:24,fb:6,fbia:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fc:[6,12],fceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fcopysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fd:[6,12],fdiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fe:[6,15],featur:[4,24],feed:35,feq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],few:[10,16,32],ff:[6,15,31],ffloor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],field:[13,19,26,36,39,42],file:[10,32,36],fill:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],filter:[21,29,30],finit:9,first:[0,4,19,20,26,28,29,30,36,41],fit:19,fix:[4,26,31],flag:[0,14,20],flat:[0,26],flavor:28,fle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],floor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],flow:[25,28],flt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fn:36,fne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fnearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fneg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fold:[4,33],foldedinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],follow:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,32,34,35,36,38,39,43],font:[10,26,32],foral:[9,20],foreach:0,forev:9,form:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],formal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],format:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,37,38,39,40,41,42,43],formed:[25,36,42],former:[0,10,32],formul:39,forth:10,forward:[13,28,29],found:[16,39],four:[21,25,28],fpmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fpmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],frac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fraction:38,frame:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],free:[19,29,39],freed:28,frelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fresh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],from:[0,3,4,9,10,13,16,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,39,41,42],front:39,fshape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ft:[3,13,18,36,42],ftestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ftrunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],full:25,fulli:[4,24,41],func:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],funcaddr:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],functyp:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],funop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],further:[13,15,16,25,28,41],furthermor:[9,13,16,18,36,38,42],futur:[4,9,12,13,14,18,20,21,24,28,29,30,41,42],g:[0,2,9,19,24,31],gap:12,garbag:21,ge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gener:[0,1,9,10,13,16,18,20,26,32,39],geq:[10,12,15,20,26,31,32,38,43],get:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],gi:3,ginit:19,github:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],give:[16,39],given:[2,4,9,10,16,18,19,20,21,24,25,26,28,29,30,32,34,36,38,39,41,43],gl:36,glob:[13,18],global:[0,1,2,4,5,6,7,8,10,11,12,15,16,17,20,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],globaladdr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globaltyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],go:29,goal:23,gohman:[9,16,39],grammar:[3,11,13,27,28,31,33,34,35,36,38],grave:38,greater:20,group:[2,24,28,34],grow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],growmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],grown:25,growtabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],guarante:[3,16,24,25],h:38,ha:[0,1,2,3,9,10,13,16,18,19,20,21,24,25,26,29,31,32,39,41],haa:[9,16,39],had:10,half:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],hand:[3,21],handl:[0,20,21,25,34],happen:19,hardwar:[18,24,28],hat:38,have:[1,4,10,12,13,18,20,21,24,26,28,29,31,32,34,37,39,41,43],head:34,heap:37,heaptyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],height:[0,21,25,28],help:20,henc:[3,20,21,24,38,39],here:[0,3,10,13,18,19,21,35,39,41,43],heterogen:28,hexadecim:[10,31,38],hexdigit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfloat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfrac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexnum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hf:18,hfill:19,hh:38,high:[18,24,28],hint:[2,18,28],histori:[5,22],hold:[9,18,20,21,30,39],hole:21,holman:[9,16,39],hookrightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hop:21,horizont:35,host:[3,21,24,25,29],hostcod:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hostfunc:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],how:[19,24,25,28,29,34,41],howev:[0,2,4,10,13,15,18,19,21,24,25,28,29,31,32,34,36,39,42,43],hspace:34,http:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16x8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i2:20,i32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8x16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],i:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i_1:18,i_2:18,iab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iandnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iclz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ictz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],id:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idc:36,idchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ident:21,identifi:[4,13,20,21,29,32,33,34,36,37],idiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextendn_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ift:42,ig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ignor:[2,13,35],igt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ij:[19,41],il:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ill:39,ilt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],im:[3,13,19,36],imax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],immateri:36,immedi:[1,12,25,28,34,39],immin:21,immut:[9,21,25,29,30,31],implement:[0,2,3,5,9,10,13,16,18,19,21,22,25,29,39,41],impli:[9,28,34],implic:39,implicit:[3,16,21,25,28],implicitli:[9,10,16,25,26,28,29,32,35,39],importdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],importsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],impos:[4,36,41],improv:2,imt:42,imul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],includ:[4,9,14,16,19,20,21,25,28,29,31,34,36,39],incompat:13,increas:[2,13,28],increment:[13,24],independ:[24,39],index:[0,1,2,3,4,5,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indic:[0,2,3,4,11,12,14,18,21,25,26,27,28,32,33,34,35,38,39,41,42],indirect:[2,21,28],indirectli:[3,25,28],indirectnameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indirectnamemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],individu:[2,4,18,19,21,28,30,36,39,41],ine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ineg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],inf:38,infer:36,infin:[20,31,38],infinit:30,inform:[13,24,39],infrequ:13,infti:[20,31,38],inher:[9,30],inherit:32,init:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],initi:[0,3,13,16,18,19,25,28,29,36,41,42],inject:1,inlin:[28,34,36],inner:21,innermost:28,inot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],input:[20,28,30,35,41],insert:[13,34,36,38,41],insid:[9,21,24,29,35,39],inspect:24,instanc:[4,5,7,16,17,18,19,25],instanti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],instead:[0,1,13,16,24,25,35,42],instr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],instruct:[0,2,3,4,5,7,8,10,11,13,14,15,16,17,20,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,43],instrument:9,integ:[1,10,11,12,17,18,21,25,27,28,30,32,33],integr:[0,1,20,21,24],intend:[0,3,13,18,24,28,29],interact:[3,21,24],interchang:31,interdepend:[4,21],interest:[16,39],interfac:[3,24],interleav:[19,21],intern:[25,42],interoper:24,interpret:[3,4,13,16,21,25,26,28,30,31,38],introduc:[1,10,28,30,39],introduct:[16,22,39],intuit:[16,21,28,39],invalid:[0,4,13,41],invari:[0,9,16,21],invers:20,invert:20,invoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],invok:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],involv:28,io:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ior:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ipopcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],is_empti:0,is_num:0,is_ref:0,is_vec:0,isa:24,ishap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],ishl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isol:24,issu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ital:26,item:[4,36],iter:[10,18,26,32],itestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],its:[0,3,4,9,12,13,16,18,19,20,21,24,25,26,28,29,31,34,36,38,39,42],itself:[2,9,16,19,21,25,28,29,38,39,42],itt:42,iunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ixor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],j:[18,19,20],j_1:20,j_2:20,j_3:20,jf:[9,16,39],jit:24,judgement:[7,9,39],judgment:39,jump:[16,18,28],just:[4,19,20,24,36,42],k:[7,18,19,20,21,43],keep:21,keyword:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ki:[3,9,18,19,21,36],kind:[9,13,19,21,29,30],known:[0,1,21,25,28,30,31],l:[6,9,10,12,13,14,15,19,20,21,29,32,34,35,36,37,38,39,42],l_i:[18,41],l_n:[12,34],label:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43],label_typ:0,labelbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],labelidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],laneidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],languag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],larg:[4,21,26],larger:[3,18,19,20,28,41,42,43],largest:20,last:[0,4],later:[16,29],latest:22,latter:[0,18,31,32,36],layer:[10,24],layout:24,lcl:[15,18,19,21,36],lcll:[20,34],lclll:3,lclllllcl:31,le:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lead:[10,20,31],least:[16,18],leav:[4,21],leb128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],left:[20,21,35,39],leftrightarrow:20,len:19,length:[3,4,9,10,12,13,15,18,19,20,21,26,31,32,36,41,42],leq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],less:20,let:[0,3,9,18,19,20,41,42],level:[24,25,29],lexic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],li:[20,28],lie:38,lieu:38,life:21,lift:[20,28,29,42],like:[0,2,3,4,13,20,21,24,25,28,29,30,31,32,34,39,41],likewis:[0,2],lim:[14,37],limit:[0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,39,40,41,42],line:35,linear:[9,10,21,24,25,28,29,30],linechar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],linecom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],list:[0,4,18,19,21,29,32,34,36,39],liter:[4,12,31,32,35,36,38],littl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],littleendian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],live:19,ll:[16,21,32,39],llcl:[21,28,29],llcll:[2,10,15,31,32,36,37],llclll:[2,10,12,13,14,15,31,32,34,35,36,37,38],llcllll:[12,13,34,36],llclllll:15,llcllllllll:36,lll:[18,20,21,36,41],llll:[3,21,28,29,30,31,32,35,39,41],lllll:[26,29,34],load16:34,load16x4:34,load32:34,load32x2:34,load64:34,load8:34,load8x8:34,load:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],local:[0,1,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],localbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],locat:9,logic:[0,21],longer:[1,21,28],longest:35,longrightarrow:[3,9],look:[21,35,36,39],lookup:41,loop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],loss:12,low:[18,24,25,28],lower:20,lt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],luke:[9,16,39],m:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],m_0:[18,31],m_1:[36,43],m_1m_2:31,m_2:[36,43],m_:18,m_k:18,m_m:31,ma:18,machin:[3,9,16,21,24,25,28],made:[13,18,21,31,32],mag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magnitud:[20,31,38],mai:[0,1,2,3,4,10,12,13,16,18,19,20,21,24,25,26,28,29,30,31,34,35,36,37,38,41,42,43],main:[0,1,3,24,25,31],maintain:[0,21,25,36],make:[2,9,21,24,41],malform:[13,15],mandatori:34,mani:[10,24,26,32],manipul:[0,1,3,21,25,26,28,39,41],manner:[0,4,20,24,39,41],mantissa:31,map:[18,26,30,36,41,42],mark:[0,18,21,38],marker:[21,28],match:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbb:20,mathbf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathdef1000:6,mathdef1001:6,mathdef1002:6,mathdef1003:6,mathdef1004:6,mathdef1005:6,mathdef1006:6,mathdef1007:6,mathdef1008:6,mathdef1009:6,mathdef100:2,mathdef1010:6,mathdef1011:6,mathdef1012:6,mathdef1013:6,mathdef1014:6,mathdef1015:6,mathdef1016:6,mathdef1017:6,mathdef1018:6,mathdef1019:6,mathdef101:2,mathdef1020:6,mathdef1021:6,mathdef1022:6,mathdef1023:6,mathdef1024:6,mathdef1025:6,mathdef1026:6,mathdef1027:6,mathdef1028:6,mathdef1029:6,mathdef102:2,mathdef1030:6,mathdef1031:6,mathdef1032:6,mathdef1033:6,mathdef1034:6,mathdef1035:6,mathdef1036:7,mathdef1037:7,mathdef1038:7,mathdef1039:7,mathdef103:2,mathdef1040:7,mathdef1041:7,mathdef1042:7,mathdef1043:7,mathdef1044:7,mathdef1045:7,mathdef1046:7,mathdef1047:7,mathdef1048:7,mathdef1049:7,mathdef104:2,mathdef1050:7,mathdef1051:7,mathdef1052:7,mathdef1053:7,mathdef1054:7,mathdef1055:7,mathdef1056:7,mathdef1057:7,mathdef1058:7,mathdef1059:7,mathdef105:2,mathdef1060:7,mathdef1061:7,mathdef1062:7,mathdef1063:7,mathdef1064:7,mathdef1065:7,mathdef1066:7,mathdef1067:7,mathdef1068:7,mathdef1069:7,mathdef106:2,mathdef1070:7,mathdef1071:7,mathdef1072:7,mathdef1073:7,mathdef1074:7,mathdef1075:8,mathdef1076:8,mathdef1077:8,mathdef1078:8,mathdef1079:8,mathdef107:2,mathdef1080:8,mathdef1081:8,mathdef1082:8,mathdef1083:8,mathdef1084:8,mathdef1085:8,mathdef1086:8,mathdef1087:8,mathdef1088:8,mathdef1089:8,mathdef108:2,mathdef1090:8,mathdef1091:8,mathdef1092:8,mathdef1093:8,mathdef1094:8,mathdef1095:8,mathdef1096:8,mathdef1097:8,mathdef1098:8,mathdef1099:8,mathdef109:2,mathdef10:0,mathdef1100:8,mathdef1101:8,mathdef1102:8,mathdef1103:8,mathdef1104:8,mathdef1105:8,mathdef1106:8,mathdef1107:8,mathdef1108:8,mathdef1109:8,mathdef110:2,mathdef1110:8,mathdef1111:8,mathdef1112:8,mathdef1113:8,mathdef1114:8,mathdef1115:8,mathdef1116:8,mathdef1117:8,mathdef1118:8,mathdef1119:8,mathdef111:2,mathdef1120:8,mathdef1121:8,mathdef1122:8,mathdef1123:8,mathdef1124:8,mathdef1125:8,mathdef1126:8,mathdef1127:8,mathdef1128:8,mathdef1129:9,mathdef112:2,mathdef1130:9,mathdef1131:9,mathdef1132:9,mathdef1133:9,mathdef1134:9,mathdef1135:9,mathdef1136:9,mathdef1137:9,mathdef1138:9,mathdef1139:9,mathdef113:2,mathdef1140:9,mathdef1141:9,mathdef1142:9,mathdef1143:9,mathdef1144:9,mathdef1145:9,mathdef1146:9,mathdef1147:9,mathdef1148:9,mathdef1149:9,mathdef114:2,mathdef1150:9,mathdef1151:9,mathdef1152:9,mathdef1153:9,mathdef1154:9,mathdef1155:9,mathdef1156:9,mathdef1157:9,mathdef1158:9,mathdef1159:9,mathdef115:2,mathdef1160:9,mathdef1161:9,mathdef1162:9,mathdef1163:9,mathdef1164:9,mathdef1165:9,mathdef1166:9,mathdef1167:9,mathdef1168:10,mathdef1169:10,mathdef116:2,mathdef1170:10,mathdef1171:10,mathdef1172:10,mathdef1173:10,mathdef1174:10,mathdef1175:10,mathdef1176:10,mathdef1177:10,mathdef1178:10,mathdef1179:10,mathdef117:2,mathdef1180:10,mathdef1181:10,mathdef1182:10,mathdef1183:10,mathdef1184:10,mathdef1185:10,mathdef1186:10,mathdef1187:10,mathdef1188:10,mathdef1189:10,mathdef118:2,mathdef1190:10,mathdef1191:10,mathdef1192:10,mathdef1193:10,mathdef1194:10,mathdef1195:10,mathdef1196:10,mathdef1197:10,mathdef1198:10,mathdef1199:10,mathdef119:2,mathdef11:0,mathdef1200:10,mathdef1201:10,mathdef1202:10,mathdef1203:10,mathdef1204:10,mathdef1205:10,mathdef1206:10,mathdef1207:10,mathdef1208:10,mathdef1209:10,mathdef120:3,mathdef1210:10,mathdef1211:10,mathdef1212:10,mathdef1213:10,mathdef1214:10,mathdef1215:10,mathdef1216:10,mathdef1217:10,mathdef1218:11,mathdef1219:11,mathdef121:3,mathdef1220:11,mathdef1221:11,mathdef1222:11,mathdef1223:11,mathdef1224:11,mathdef1225:11,mathdef1226:11,mathdef1227:11,mathdef1228:11,mathdef1229:11,mathdef122:3,mathdef1230:11,mathdef1231:11,mathdef1232:11,mathdef1233:11,mathdef1234:11,mathdef1235:11,mathdef1236:11,mathdef1237:11,mathdef1238:11,mathdef1239:11,mathdef123:3,mathdef1240:11,mathdef1241:11,mathdef1242:11,mathdef1243:11,mathdef1244:11,mathdef1245:11,mathdef1246:11,mathdef1247:11,mathdef1248:11,mathdef1249:11,mathdef124:3,mathdef1250:11,mathdef1251:11,mathdef1252:11,mathdef1253:11,mathdef1254:11,mathdef1255:11,mathdef1256:11,mathdef1257:12,mathdef1258:12,mathdef1259:12,mathdef125:3,mathdef1260:12,mathdef1261:12,mathdef1262:12,mathdef1263:12,mathdef1264:12,mathdef1265:12,mathdef1266:12,mathdef1267:12,mathdef1268:12,mathdef1269:12,mathdef126:3,mathdef1270:12,mathdef1271:12,mathdef1272:12,mathdef1273:12,mathdef1274:12,mathdef1275:12,mathdef1276:12,mathdef1277:12,mathdef1278:12,mathdef1279:12,mathdef127:3,mathdef1280:12,mathdef1281:12,mathdef1282:12,mathdef1283:12,mathdef1284:12,mathdef1285:12,mathdef1286:12,mathdef1287:12,mathdef1288:12,mathdef1289:12,mathdef128:3,mathdef1290:12,mathdef1291:12,mathdef1292:12,mathdef1293:12,mathdef1294:12,mathdef1295:12,mathdef1296:12,mathdef1297:12,mathdef1298:12,mathdef1299:12,mathdef129:3,mathdef12:0,mathdef1300:12,mathdef1301:12,mathdef1302:12,mathdef1303:12,mathdef1304:12,mathdef1305:12,mathdef1306:12,mathdef1307:12,mathdef1308:12,mathdef1309:12,mathdef130:3,mathdef1310:12,mathdef1311:12,mathdef1312:12,mathdef1313:12,mathdef1314:12,mathdef1315:12,mathdef1316:12,mathdef1317:12,mathdef1318:12,mathdef1319:12,mathdef131:3,mathdef1320:12,mathdef1321:12,mathdef1322:12,mathdef1323:12,mathdef1324:12,mathdef1325:12,mathdef1326:12,mathdef1327:12,mathdef1328:12,mathdef1329:12,mathdef132:3,mathdef1330:12,mathdef1331:12,mathdef1332:12,mathdef1333:12,mathdef1334:12,mathdef1335:12,mathdef1336:12,mathdef1337:12,mathdef1338:12,mathdef1339:12,mathdef133:3,mathdef1340:12,mathdef1341:12,mathdef1342:12,mathdef1343:12,mathdef1344:12,mathdef1345:12,mathdef1346:12,mathdef1347:12,mathdef1348:12,mathdef1349:12,mathdef134:3,mathdef1350:12,mathdef1351:12,mathdef1352:12,mathdef1353:12,mathdef1354:12,mathdef1355:12,mathdef1356:12,mathdef1357:12,mathdef1358:12,mathdef1359:12,mathdef135:3,mathdef1360:12,mathdef1361:12,mathdef1362:12,mathdef1363:12,mathdef1364:12,mathdef1365:12,mathdef1366:12,mathdef1367:12,mathdef1368:12,mathdef1369:12,mathdef136:3,mathdef1370:12,mathdef1371:12,mathdef1372:12,mathdef1373:12,mathdef1374:12,mathdef1375:12,mathdef1376:12,mathdef1377:12,mathdef1378:12,mathdef1379:12,mathdef137:3,mathdef1380:12,mathdef1381:12,mathdef1382:12,mathdef1383:12,mathdef1384:12,mathdef1385:12,mathdef1386:12,mathdef1387:12,mathdef1388:12,mathdef1389:12,mathdef138:3,mathdef1390:12,mathdef1391:12,mathdef1392:12,mathdef1393:12,mathdef1394:12,mathdef1395:12,mathdef1396:12,mathdef1397:12,mathdef1398:12,mathdef1399:12,mathdef139:3,mathdef13:0,mathdef1400:12,mathdef1401:12,mathdef1402:12,mathdef1403:12,mathdef1404:12,mathdef1405:12,mathdef1406:12,mathdef1407:12,mathdef1408:12,mathdef1409:12,mathdef140:3,mathdef1410:12,mathdef1411:12,mathdef1412:12,mathdef1413:12,mathdef1414:12,mathdef1415:12,mathdef1416:12,mathdef1417:12,mathdef1418:12,mathdef1419:12,mathdef141:3,mathdef1420:12,mathdef1421:12,mathdef1422:12,mathdef1423:12,mathdef1424:12,mathdef1425:12,mathdef1426:12,mathdef1427:12,mathdef1428:12,mathdef1429:12,mathdef142:3,mathdef1430:12,mathdef1431:12,mathdef1432:12,mathdef1433:12,mathdef1434:12,mathdef1435:12,mathdef1436:12,mathdef1437:12,mathdef1438:12,mathdef1439:12,mathdef143:3,mathdef1440:12,mathdef1441:12,mathdef1442:12,mathdef1443:12,mathdef1444:12,mathdef1445:12,mathdef1446:12,mathdef1447:12,mathdef1448:12,mathdef1449:12,mathdef144:3,mathdef1450:12,mathdef1451:12,mathdef1452:12,mathdef1453:12,mathdef1454:12,mathdef1455:12,mathdef1456:12,mathdef1457:12,mathdef1458:12,mathdef1459:12,mathdef145:3,mathdef1460:12,mathdef1461:12,mathdef1462:12,mathdef1463:12,mathdef1464:12,mathdef1465:12,mathdef1466:12,mathdef1467:12,mathdef1468:12,mathdef1469:12,mathdef146:3,mathdef1470:12,mathdef1471:12,mathdef1472:12,mathdef1473:12,mathdef1474:12,mathdef1475:12,mathdef1476:12,mathdef1477:12,mathdef1478:12,mathdef1479:12,mathdef147:3,mathdef1480:12,mathdef1481:12,mathdef1482:12,mathdef1483:12,mathdef1484:12,mathdef1485:12,mathdef1486:12,mathdef1487:12,mathdef1488:12,mathdef1489:12,mathdef148:3,mathdef1490:12,mathdef1491:12,mathdef1492:12,mathdef1493:12,mathdef1494:12,mathdef1495:12,mathdef1496:12,mathdef1497:12,mathdef1498:12,mathdef1499:12,mathdef149:3,mathdef14:0,mathdef1500:12,mathdef1501:12,mathdef1502:12,mathdef1503:12,mathdef1504:12,mathdef1505:12,mathdef1506:12,mathdef1507:12,mathdef1508:12,mathdef1509:12,mathdef150:3,mathdef1510:12,mathdef1511:12,mathdef1512:12,mathdef1513:12,mathdef1514:12,mathdef1515:12,mathdef1516:12,mathdef1517:12,mathdef1518:12,mathdef1519:12,mathdef151:3,mathdef1520:12,mathdef1521:12,mathdef1522:12,mathdef1523:12,mathdef1524:12,mathdef1525:12,mathdef1526:12,mathdef1527:12,mathdef1528:12,mathdef1529:12,mathdef152:3,mathdef1530:12,mathdef1531:12,mathdef1532:12,mathdef1533:12,mathdef1534:12,mathdef1535:12,mathdef1536:12,mathdef1537:12,mathdef1538:12,mathdef1539:12,mathdef153:3,mathdef1540:12,mathdef1541:12,mathdef1542:12,mathdef1543:12,mathdef1544:12,mathdef1545:12,mathdef1546:12,mathdef1547:12,mathdef1548:12,mathdef1549:12,mathdef154:3,mathdef1550:12,mathdef1551:12,mathdef1552:12,mathdef1553:12,mathdef1554:12,mathdef1555:12,mathdef1556:12,mathdef1557:12,mathdef1558:12,mathdef1559:12,mathdef155:3,mathdef1560:12,mathdef1561:12,mathdef1562:12,mathdef1563:12,mathdef1564:12,mathdef1565:12,mathdef1566:12,mathdef1567:12,mathdef1568:12,mathdef1569:12,mathdef156:3,mathdef1570:12,mathdef1571:12,mathdef1572:12,mathdef1573:12,mathdef1574:12,mathdef1575:12,mathdef1576:12,mathdef1577:12,mathdef1578:12,mathdef1579:12,mathdef157:3,mathdef1580:12,mathdef1581:12,mathdef1582:12,mathdef1583:12,mathdef1584:12,mathdef1585:12,mathdef1586:12,mathdef1587:12,mathdef1588:12,mathdef1589:12,mathdef158:3,mathdef1590:12,mathdef1591:12,mathdef1592:12,mathdef1593:12,mathdef1594:12,mathdef1595:12,mathdef1596:12,mathdef1597:12,mathdef1598:12,mathdef1599:12,mathdef159:4,mathdef15:0,mathdef1600:12,mathdef1601:12,mathdef1602:12,mathdef1603:12,mathdef1604:12,mathdef1605:12,mathdef1606:12,mathdef1607:12,mathdef1608:12,mathdef1609:12,mathdef160:4,mathdef1610:12,mathdef1611:12,mathdef1612:12,mathdef1613:12,mathdef1614:12,mathdef1615:12,mathdef1616:12,mathdef1617:12,mathdef1618:12,mathdef1619:12,mathdef161:4,mathdef1620:12,mathdef1621:12,mathdef1622:12,mathdef1623:12,mathdef1624:12,mathdef1625:12,mathdef1626:12,mathdef1627:12,mathdef1628:12,mathdef1629:12,mathdef162:4,mathdef1630:12,mathdef1631:12,mathdef1632:12,mathdef1633:12,mathdef1634:12,mathdef1635:12,mathdef1636:12,mathdef1637:12,mathdef1638:12,mathdef1639:12,mathdef163:4,mathdef1640:12,mathdef1641:12,mathdef1642:12,mathdef1643:12,mathdef1644:12,mathdef1645:12,mathdef1646:12,mathdef1647:12,mathdef1648:12,mathdef1649:12,mathdef164:4,mathdef1650:12,mathdef1651:12,mathdef1652:12,mathdef1653:12,mathdef1654:12,mathdef1655:12,mathdef1656:12,mathdef1657:12,mathdef1658:12,mathdef1659:12,mathdef165:4,mathdef1660:12,mathdef1661:12,mathdef1662:12,mathdef1663:12,mathdef1664:12,mathdef1665:12,mathdef1666:12,mathdef1667:12,mathdef1668:12,mathdef1669:12,mathdef166:4,mathdef1670:12,mathdef1671:12,mathdef1672:12,mathdef1673:12,mathdef1674:12,mathdef1675:12,mathdef1676:12,mathdef1677:12,mathdef1678:12,mathdef1679:12,mathdef167:4,mathdef1680:12,mathdef1681:12,mathdef1682:12,mathdef1683:12,mathdef1684:12,mathdef1685:12,mathdef1686:12,mathdef1687:12,mathdef1688:12,mathdef1689:12,mathdef168:4,mathdef1690:12,mathdef1691:12,mathdef1692:12,mathdef1693:12,mathdef1694:12,mathdef1695:12,mathdef1696:12,mathdef1697:12,mathdef1698:12,mathdef1699:12,mathdef169:4,mathdef16:0,mathdef1700:12,mathdef1701:12,mathdef1702:12,mathdef1703:12,mathdef1704:12,mathdef1705:12,mathdef1706:12,mathdef1707:12,mathdef1708:12,mathdef1709:12,mathdef170:4,mathdef1710:12,mathdef1711:12,mathdef1712:12,mathdef1713:12,mathdef1714:12,mathdef1715:12,mathdef1716:12,mathdef1717:12,mathdef1718:12,mathdef1719:12,mathdef171:4,mathdef1720:12,mathdef1721:12,mathdef1722:12,mathdef1723:12,mathdef1724:12,mathdef1725:12,mathdef1726:12,mathdef1727:12,mathdef1728:12,mathdef1729:12,mathdef172:4,mathdef1730:12,mathdef1731:12,mathdef1732:12,mathdef1733:12,mathdef1734:12,mathdef1735:12,mathdef1736:12,mathdef1737:12,mathdef1738:12,mathdef1739:12,mathdef173:4,mathdef1740:12,mathdef1741:12,mathdef1742:12,mathdef1743:12,mathdef1744:12,mathdef1745:12,mathdef1746:12,mathdef1747:12,mathdef1748:12,mathdef1749:13,mathdef174:4,mathdef1750:13,mathdef1751:13,mathdef1752:13,mathdef1753:13,mathdef1754:13,mathdef1755:13,mathdef1756:13,mathdef1757:13,mathdef1758:13,mathdef1759:13,mathdef175:4,mathdef1760:13,mathdef1761:13,mathdef1762:13,mathdef1763:13,mathdef1764:13,mathdef1765:13,mathdef1766:13,mathdef1767:13,mathdef1768:13,mathdef1769:13,mathdef176:4,mathdef1770:13,mathdef1771:13,mathdef1772:13,mathdef1773:13,mathdef1774:13,mathdef1775:13,mathdef1776:13,mathdef1777:13,mathdef1778:13,mathdef1779:13,mathdef177:4,mathdef1780:13,mathdef1781:13,mathdef1782:13,mathdef1783:13,mathdef1784:13,mathdef1785:13,mathdef1786:13,mathdef1787:13,mathdef1788:13,mathdef1789:13,mathdef178:4,mathdef1790:13,mathdef1791:13,mathdef1792:13,mathdef1793:13,mathdef1794:13,mathdef1795:13,mathdef1796:13,mathdef1797:13,mathdef1798:13,mathdef1799:13,mathdef179:4,mathdef17:0,mathdef1800:13,mathdef1801:13,mathdef1802:13,mathdef1803:13,mathdef1804:13,mathdef1805:13,mathdef1806:13,mathdef1807:13,mathdef1808:13,mathdef1809:13,mathdef180:4,mathdef1810:13,mathdef1811:13,mathdef1812:13,mathdef1813:13,mathdef1814:13,mathdef1815:13,mathdef1816:13,mathdef1817:14,mathdef1818:14,mathdef1819:14,mathdef181:4,mathdef1820:14,mathdef1821:14,mathdef1822:14,mathdef1823:14,mathdef1824:14,mathdef1825:14,mathdef1826:14,mathdef1827:14,mathdef1828:14,mathdef1829:14,mathdef182:4,mathdef1830:14,mathdef1831:14,mathdef1832:14,mathdef1833:14,mathdef1834:14,mathdef1835:14,mathdef1836:14,mathdef1837:14,mathdef1838:14,mathdef1839:14,mathdef183:4,mathdef1840:14,mathdef1841:14,mathdef1842:14,mathdef1843:14,mathdef1844:14,mathdef1845:14,mathdef1846:14,mathdef1847:14,mathdef1848:14,mathdef1849:14,mathdef184:4,mathdef1850:14,mathdef1851:14,mathdef1852:14,mathdef1853:14,mathdef1854:14,mathdef1855:14,mathdef1856:14,mathdef1857:14,mathdef1858:14,mathdef1859:14,mathdef185:4,mathdef1860:14,mathdef1861:14,mathdef1862:14,mathdef1863:14,mathdef1864:14,mathdef1865:14,mathdef1866:14,mathdef1867:14,mathdef1868:14,mathdef1869:15,mathdef186:4,mathdef1870:15,mathdef1871:15,mathdef1872:15,mathdef1873:15,mathdef1874:15,mathdef1875:15,mathdef1876:15,mathdef1877:15,mathdef1878:15,mathdef1879:15,mathdef187:4,mathdef1880:15,mathdef1881:15,mathdef1882:15,mathdef1883:15,mathdef1884:15,mathdef1885:15,mathdef1886:15,mathdef1887:15,mathdef1888:15,mathdef1889:15,mathdef188:4,mathdef1890:15,mathdef1891:15,mathdef1892:15,mathdef1893:15,mathdef1894:15,mathdef1895:15,mathdef1896:15,mathdef1897:15,mathdef1898:15,mathdef1899:15,mathdef189:4,mathdef18:0,mathdef1900:15,mathdef1901:15,mathdef1902:15,mathdef1903:15,mathdef1904:15,mathdef1905:15,mathdef1906:15,mathdef1907:15,mathdef1908:15,mathdef1909:15,mathdef190:4,mathdef1910:15,mathdef1911:15,mathdef1912:15,mathdef1913:15,mathdef1914:15,mathdef1915:15,mathdef1916:15,mathdef1917:15,mathdef1918:15,mathdef1919:15,mathdef191:4,mathdef1920:15,mathdef1921:15,mathdef1922:15,mathdef1923:15,mathdef1924:15,mathdef1925:15,mathdef1926:15,mathdef1927:15,mathdef1928:15,mathdef1929:15,mathdef192:4,mathdef1930:15,mathdef1931:15,mathdef1932:15,mathdef1933:15,mathdef1934:15,mathdef1935:15,mathdef1936:15,mathdef1937:15,mathdef1938:15,mathdef1939:15,mathdef193:4,mathdef1940:15,mathdef1941:15,mathdef1942:15,mathdef1943:15,mathdef1944:15,mathdef1945:15,mathdef1946:15,mathdef1947:15,mathdef1948:15,mathdef1949:15,mathdef194:4,mathdef1950:16,mathdef1951:16,mathdef1952:16,mathdef1953:16,mathdef1954:16,mathdef1955:16,mathdef1956:16,mathdef1957:16,mathdef1958:16,mathdef1959:16,mathdef195:4,mathdef1960:16,mathdef1961:16,mathdef1962:16,mathdef1963:16,mathdef1964:16,mathdef1965:16,mathdef1966:16,mathdef1967:16,mathdef1968:16,mathdef1969:16,mathdef196:4,mathdef1970:16,mathdef1971:16,mathdef1972:16,mathdef1973:16,mathdef1974:16,mathdef1975:16,mathdef1976:16,mathdef1977:16,mathdef1978:16,mathdef1979:16,mathdef197:4,mathdef1980:16,mathdef1981:16,mathdef1982:16,mathdef1983:16,mathdef1984:16,mathdef1985:16,mathdef1986:16,mathdef1987:16,mathdef1988:16,mathdef1989:17,mathdef198:5,mathdef1990:17,mathdef1991:17,mathdef1992:17,mathdef1993:17,mathdef1994:17,mathdef1995:17,mathdef1996:17,mathdef1997:17,mathdef1998:17,mathdef1999:17,mathdef199:5,mathdef19:0,mathdef1:0,mathdef2000:17,mathdef2001:17,mathdef2002:17,mathdef2003:17,mathdef2004:17,mathdef2005:17,mathdef2006:17,mathdef2007:17,mathdef2008:17,mathdef2009:17,mathdef200:5,mathdef2010:17,mathdef2011:17,mathdef2012:17,mathdef2013:17,mathdef2014:17,mathdef2015:17,mathdef2016:17,mathdef2017:17,mathdef2018:17,mathdef2019:17,mathdef201:5,mathdef2020:17,mathdef2021:17,mathdef2022:17,mathdef2023:17,mathdef2024:17,mathdef2025:17,mathdef2026:17,mathdef2027:17,mathdef2028:18,mathdef2029:18,mathdef202:5,mathdef2030:18,mathdef2031:18,mathdef2032:18,mathdef2033:18,mathdef2034:18,mathdef2035:18,mathdef2036:18,mathdef2037:18,mathdef2038:18,mathdef2039:18,mathdef203:5,mathdef2040:18,mathdef2041:18,mathdef2042:18,mathdef2043:18,mathdef2044:18,mathdef2045:18,mathdef2046:18,mathdef2047:18,mathdef2048:18,mathdef2049:18,mathdef204:5,mathdef2050:18,mathdef2051:18,mathdef2052:18,mathdef2053:18,mathdef2054:18,mathdef2055:18,mathdef2056:18,mathdef2057:18,mathdef2058:18,mathdef2059:18,mathdef205:5,mathdef2060:18,mathdef2061:18,mathdef2062:18,mathdef2063:18,mathdef2064:18,mathdef2065:18,mathdef2066:18,mathdef2067:19,mathdef2068:19,mathdef2069:19,mathdef206:5,mathdef2070:19,mathdef2071:19,mathdef2072:19,mathdef2073:19,mathdef2074:19,mathdef2075:19,mathdef2076:19,mathdef2077:19,mathdef2078:19,mathdef2079:19,mathdef207:5,mathdef2080:19,mathdef2081:19,mathdef2082:19,mathdef2083:19,mathdef2084:19,mathdef2085:19,mathdef2086:19,mathdef2087:19,mathdef2088:19,mathdef2089:19,mathdef208:5,mathdef2090:19,mathdef2091:19,mathdef2092:19,mathdef2093:19,mathdef2094:19,mathdef2095:19,mathdef2096:19,mathdef2097:19,mathdef2098:19,mathdef2099:19,mathdef209:5,mathdef20:0,mathdef2100:19,mathdef2101:19,mathdef2102:19,mathdef2103:19,mathdef2104:19,mathdef2105:19,mathdef2106:19,mathdef2107:19,mathdef2108:19,mathdef2109:19,mathdef210:5,mathdef2110:20,mathdef2111:20,mathdef2112:20,mathdef2113:20,mathdef2114:20,mathdef2115:20,mathdef2116:20,mathdef2117:20,mathdef2118:20,mathdef2119:20,mathdef211:5,mathdef2120:20,mathdef2121:20,mathdef2122:20,mathdef2123:20,mathdef2124:20,mathdef2125:20,mathdef2126:20,mathdef2127:20,mathdef2128:20,mathdef2129:20,mathdef212:5,mathdef2130:20,mathdef2131:20,mathdef2132:20,mathdef2133:20,mathdef2134:20,mathdef2135:20,mathdef2136:20,mathdef2137:20,mathdef2138:20,mathdef2139:20,mathdef213:5,mathdef2140:20,mathdef2141:20,mathdef2142:20,mathdef2143:20,mathdef2144:20,mathdef2145:20,mathdef2146:20,mathdef2147:20,mathdef2148:20,mathdef2149:21,mathdef214:5,mathdef2150:21,mathdef2151:21,mathdef2152:21,mathdef2153:21,mathdef2154:21,mathdef2155:21,mathdef2156:21,mathdef2157:21,mathdef2158:21,mathdef2159:21,mathdef215:5,mathdef2160:21,mathdef2161:21,mathdef2162:21,mathdef2163:21,mathdef2164:21,mathdef2165:21,mathdef2166:21,mathdef2167:21,mathdef2168:21,mathdef2169:21,mathdef216:5,mathdef2170:21,mathdef2171:21,mathdef2172:21,mathdef2173:21,mathdef2174:21,mathdef2175:21,mathdef2176:21,mathdef2177:21,mathdef2178:21,mathdef2179:21,mathdef217:5,mathdef2180:21,mathdef2181:21,mathdef2182:21,mathdef2183:21,mathdef2184:21,mathdef2185:21,mathdef2186:21,mathdef2187:21,mathdef2188:22,mathdef2189:22,mathdef218:5,mathdef2190:22,mathdef2191:22,mathdef2192:22,mathdef2193:22,mathdef2194:22,mathdef2195:22,mathdef2196:22,mathdef2197:22,mathdef2198:22,mathdef2199:22,mathdef219:5,mathdef21:0,mathdef2200:22,mathdef2201:22,mathdef2202:22,mathdef2203:22,mathdef2204:22,mathdef2205:22,mathdef2206:22,mathdef2207:22,mathdef2208:22,mathdef2209:22,mathdef220:5,mathdef2210:22,mathdef2211:22,mathdef2212:22,mathdef2213:22,mathdef2214:22,mathdef2215:22,mathdef2216:22,mathdef2217:22,mathdef2218:22,mathdef2219:22,mathdef221:5,mathdef2220:22,mathdef2221:22,mathdef2222:22,mathdef2223:22,mathdef2224:22,mathdef2225:22,mathdef2226:22,mathdef2227:23,mathdef2228:23,mathdef2229:23,mathdef222:5,mathdef2230:23,mathdef2231:23,mathdef2232:23,mathdef2233:23,mathdef2234:23,mathdef2235:23,mathdef2236:23,mathdef2237:23,mathdef2238:23,mathdef2239:23,mathdef223:5,mathdef2240:23,mathdef2241:23,mathdef2242:23,mathdef2243:23,mathdef2244:23,mathdef2245:23,mathdef2246:23,mathdef2247:23,mathdef2248:23,mathdef2249:23,mathdef224:5,mathdef2250:23,mathdef2251:23,mathdef2252:23,mathdef2253:23,mathdef2254:23,mathdef2255:23,mathdef2256:23,mathdef2257:23,mathdef2258:23,mathdef2259:23,mathdef225:5,mathdef2260:23,mathdef2261:23,mathdef2262:23,mathdef2263:23,mathdef2264:23,mathdef2265:23,mathdef2266:24,mathdef2267:24,mathdef2268:24,mathdef2269:24,mathdef226:5,mathdef2270:24,mathdef2271:24,mathdef2272:24,mathdef2273:24,mathdef2274:24,mathdef2275:24,mathdef2276:24,mathdef2277:24,mathdef2278:24,mathdef2279:24,mathdef227:5,mathdef2280:24,mathdef2281:24,mathdef2282:24,mathdef2283:24,mathdef2284:24,mathdef2285:24,mathdef2286:24,mathdef2287:24,mathdef2288:24,mathdef2289:24,mathdef228:5,mathdef2290:24,mathdef2291:24,mathdef2292:24,mathdef2293:24,mathdef2294:24,mathdef2295:24,mathdef2296:24,mathdef2297:24,mathdef2298:24,mathdef2299:24,mathdef229:5,mathdef22:0,mathdef2300:24,mathdef2301:24,mathdef2302:24,mathdef2303:24,mathdef2304:24,mathdef2305:25,mathdef2306:25,mathdef2307:25,mathdef2308:25,mathdef2309:25,mathdef230:5,mathdef2310:25,mathdef2311:25,mathdef2312:25,mathdef2313:25,mathdef2314:25,mathdef2315:25,mathdef2316:25,mathdef2317:25,mathdef2318:25,mathdef2319:25,mathdef231:5,mathdef2320:25,mathdef2321:25,mathdef2322:25,mathdef2323:25,mathdef2324:25,mathdef2325:25,mathdef2326:25,mathdef2327:25,mathdef2328:25,mathdef2329:25,mathdef232:5,mathdef2330:25,mathdef2331:25,mathdef2332:25,mathdef2333:25,mathdef2334:25,mathdef2335:25,mathdef2336:25,mathdef2337:25,mathdef2338:25,mathdef2339:25,mathdef233:5,mathdef2340:25,mathdef2341:25,mathdef2342:25,mathdef2343:25,mathdef2344:26,mathdef2345:26,mathdef2346:26,mathdef2347:26,mathdef2348:26,mathdef2349:26,mathdef234:5,mathdef2350:26,mathdef2351:26,mathdef2352:26,mathdef2353:26,mathdef2354:26,mathdef2355:26,mathdef2356:26,mathdef2357:26,mathdef2358:26,mathdef2359:26,mathdef235:5,mathdef2360:26,mathdef2361:26,mathdef2362:26,mathdef2363:26,mathdef2364:26,mathdef2365:26,mathdef2366:26,mathdef2367:26,mathdef2368:26,mathdef2369:26,mathdef236:5,mathdef2370:26,mathdef2371:26,mathdef2372:26,mathdef2373:26,mathdef2374:26,mathdef2375:26,mathdef2376:26,mathdef2377:26,mathdef2378:26,mathdef2379:26,mathdef237:6,mathdef2380:26,mathdef2381:26,mathdef2382:26,mathdef2383:27,mathdef2384:27,mathdef2385:27,mathdef2386:27,mathdef2387:27,mathdef2388:27,mathdef2389:27,mathdef238:6,mathdef2390:27,mathdef2391:27,mathdef2392:27,mathdef2393:27,mathdef2394:27,mathdef2395:27,mathdef2396:27,mathdef2397:27,mathdef2398:27,mathdef2399:27,mathdef239:6,mathdef23:0,mathdef2400:27,mathdef2401:27,mathdef2402:27,mathdef2403:27,mathdef2404:27,mathdef2405:27,mathdef2406:27,mathdef2407:27,mathdef2408:27,mathdef2409:27,mathdef240:6,mathdef2410:27,mathdef2411:27,mathdef2412:27,mathdef2413:27,mathdef2414:27,mathdef2415:27,mathdef2416:27,mathdef2417:27,mathdef2418:27,mathdef2419:27,mathdef241:6,mathdef2420:27,mathdef2421:27,mathdef2422:28,mathdef2423:28,mathdef2424:28,mathdef2425:28,mathdef2426:28,mathdef2427:28,mathdef2428:28,mathdef2429:28,mathdef242:6,mathdef2430:28,mathdef2431:28,mathdef2432:28,mathdef2433:28,mathdef2434:28,mathdef2435:28,mathdef2436:28,mathdef2437:28,mathdef2438:28,mathdef2439:28,mathdef243:6,mathdef2440:28,mathdef2441:28,mathdef2442:28,mathdef2443:28,mathdef2444:28,mathdef2445:28,mathdef2446:28,mathdef2447:28,mathdef2448:28,mathdef2449:28,mathdef244:6,mathdef2450:28,mathdef2451:28,mathdef2452:28,mathdef2453:28,mathdef2454:28,mathdef2455:28,mathdef2456:28,mathdef2457:28,mathdef2458:28,mathdef2459:28,mathdef245:6,mathdef2460:28,mathdef2461:28,mathdef2462:28,mathdef2463:29,mathdef2464:29,mathdef2465:29,mathdef2466:29,mathdef2467:29,mathdef2468:29,mathdef2469:29,mathdef246:6,mathdef2470:29,mathdef2471:29,mathdef2472:29,mathdef2473:29,mathdef2474:29,mathdef2475:29,mathdef2476:29,mathdef2477:29,mathdef2478:29,mathdef2479:29,mathdef247:6,mathdef2480:29,mathdef2481:29,mathdef2482:29,mathdef2483:29,mathdef2484:29,mathdef2485:29,mathdef2486:29,mathdef2487:29,mathdef2488:29,mathdef2489:29,mathdef248:6,mathdef2490:29,mathdef2491:29,mathdef2492:29,mathdef2493:29,mathdef2494:29,mathdef2495:29,mathdef2496:29,mathdef2497:29,mathdef2498:29,mathdef2499:29,mathdef249:6,mathdef24:0,mathdef2500:29,mathdef2501:29,mathdef2502:30,mathdef2503:30,mathdef2504:30,mathdef2505:30,mathdef2506:30,mathdef2507:30,mathdef2508:30,mathdef2509:30,mathdef250:6,mathdef2510:30,mathdef2511:30,mathdef2512:30,mathdef2513:30,mathdef2514:30,mathdef2515:30,mathdef2516:30,mathdef2517:30,mathdef2518:30,mathdef2519:30,mathdef251:6,mathdef2520:30,mathdef2521:30,mathdef2522:30,mathdef2523:30,mathdef2524:30,mathdef2525:30,mathdef2526:30,mathdef2527:30,mathdef2528:30,mathdef2529:30,mathdef252:6,mathdef2530:30,mathdef2531:30,mathdef2532:30,mathdef2533:30,mathdef2534:30,mathdef2535:30,mathdef2536:30,mathdef2537:30,mathdef2538:30,mathdef2539:30,mathdef253:6,mathdef2540:30,mathdef2541:31,mathdef2542:31,mathdef2543:31,mathdef2544:31,mathdef2545:31,mathdef2546:31,mathdef2547:31,mathdef2548:31,mathdef2549:31,mathdef254:6,mathdef2550:31,mathdef2551:31,mathdef2552:31,mathdef2553:31,mathdef2554:31,mathdef2555:31,mathdef2556:31,mathdef2557:31,mathdef2558:31,mathdef2559:31,mathdef255:6,mathdef2560:31,mathdef2561:31,mathdef2562:31,mathdef2563:31,mathdef2564:31,mathdef2565:31,mathdef2566:31,mathdef2567:31,mathdef2568:31,mathdef2569:31,mathdef256:6,mathdef2570:31,mathdef2571:31,mathdef2572:31,mathdef2573:31,mathdef2574:31,mathdef2575:31,mathdef2576:31,mathdef2577:31,mathdef2578:31,mathdef2579:31,mathdef257:6,mathdef2580:31,mathdef2581:31,mathdef2582:31,mathdef2583:31,mathdef2584:31,mathdef2585:31,mathdef2586:32,mathdef2587:32,mathdef2588:32,mathdef2589:32,mathdef258:6,mathdef2590:32,mathdef2591:32,mathdef2592:32,mathdef2593:32,mathdef2594:32,mathdef2595:32,mathdef2596:32,mathdef2597:32,mathdef2598:32,mathdef2599:32,mathdef259:6,mathdef25:0,mathdef2600:32,mathdef2601:32,mathdef2602:32,mathdef2603:32,mathdef2604:32,mathdef2605:32,mathdef2606:32,mathdef2607:32,mathdef2608:32,mathdef2609:32,mathdef260:6,mathdef2610:32,mathdef2611:32,mathdef2612:32,mathdef2613:32,mathdef2614:32,mathdef2615:32,mathdef2616:32,mathdef2617:32,mathdef2618:32,mathdef2619:32,mathdef261:6,mathdef2620:32,mathdef2621:32,mathdef2622:32,mathdef2623:32,mathdef2624:32,mathdef2625:32,mathdef2626:32,mathdef2627:32,mathdef2628:32,mathdef2629:32,mathdef262:6,mathdef2630:32,mathdef2631:33,mathdef2632:33,mathdef2633:33,mathdef2634:33,mathdef2635:33,mathdef2636:33,mathdef2637:33,mathdef2638:33,mathdef2639:33,mathdef263:6,mathdef2640:33,mathdef2641:33,mathdef2642:33,mathdef2643:33,mathdef2644:33,mathdef2645:33,mathdef2646:33,mathdef2647:33,mathdef2648:33,mathdef2649:33,mathdef264:6,mathdef2650:33,mathdef2651:33,mathdef2652:33,mathdef2653:33,mathdef2654:33,mathdef2655:33,mathdef2656:33,mathdef2657:33,mathdef2658:33,mathdef2659:33,mathdef265:6,mathdef2660:33,mathdef2661:33,mathdef2662:33,mathdef2663:33,mathdef2664:33,mathdef2665:33,mathdef2666:33,mathdef2667:33,mathdef2668:33,mathdef2669:33,mathdef266:6,mathdef2670:34,mathdef2671:34,mathdef2672:34,mathdef2673:34,mathdef2674:34,mathdef2675:34,mathdef2676:34,mathdef2677:34,mathdef2678:34,mathdef2679:34,mathdef267:6,mathdef2680:34,mathdef2681:34,mathdef2682:34,mathdef2683:34,mathdef2684:34,mathdef2685:34,mathdef2686:34,mathdef2687:34,mathdef2688:34,mathdef2689:34,mathdef268:6,mathdef2690:34,mathdef2691:34,mathdef2692:34,mathdef2693:34,mathdef2694:34,mathdef2695:34,mathdef2696:34,mathdef2697:34,mathdef2698:34,mathdef2699:34,mathdef269:6,mathdef26:0,mathdef2700:34,mathdef2701:34,mathdef2702:34,mathdef2703:34,mathdef2704:34,mathdef2705:34,mathdef2706:34,mathdef2707:34,mathdef2708:34,mathdef2709:34,mathdef270:6,mathdef2710:34,mathdef2711:34,mathdef2712:34,mathdef2713:34,mathdef2714:34,mathdef2715:34,mathdef2716:34,mathdef2717:34,mathdef2718:34,mathdef2719:34,mathdef271:6,mathdef2720:34,mathdef2721:34,mathdef2722:34,mathdef2723:34,mathdef2724:34,mathdef2725:34,mathdef2726:34,mathdef2727:34,mathdef2728:34,mathdef2729:34,mathdef272:6,mathdef2730:34,mathdef2731:34,mathdef2732:34,mathdef2733:34,mathdef2734:34,mathdef2735:34,mathdef2736:34,mathdef2737:34,mathdef2738:34,mathdef2739:34,mathdef273:6,mathdef2740:34,mathdef2741:34,mathdef2742:34,mathdef2743:34,mathdef2744:34,mathdef2745:34,mathdef2746:34,mathdef2747:34,mathdef2748:34,mathdef2749:34,mathdef274:6,mathdef2750:34,mathdef2751:34,mathdef2752:34,mathdef2753:34,mathdef2754:34,mathdef2755:34,mathdef2756:34,mathdef2757:34,mathdef2758:34,mathdef2759:34,mathdef275:6,mathdef2760:34,mathdef2761:34,mathdef2762:34,mathdef2763:34,mathdef2764:34,mathdef2765:34,mathdef2766:34,mathdef2767:34,mathdef2768:34,mathdef2769:34,mathdef276:6,mathdef2770:34,mathdef2771:34,mathdef2772:34,mathdef2773:34,mathdef2774:34,mathdef2775:34,mathdef2776:34,mathdef2777:34,mathdef2778:34,mathdef2779:34,mathdef277:6,mathdef2780:34,mathdef2781:34,mathdef2782:34,mathdef2783:34,mathdef2784:34,mathdef2785:34,mathdef2786:34,mathdef2787:34,mathdef2788:34,mathdef2789:34,mathdef278:6,mathdef2790:34,mathdef2791:34,mathdef2792:34,mathdef2793:34,mathdef2794:34,mathdef2795:34,mathdef2796:34,mathdef2797:34,mathdef2798:34,mathdef2799:34,mathdef279:6,mathdef27:0,mathdef2800:34,mathdef2801:34,mathdef2802:34,mathdef2803:34,mathdef2804:34,mathdef2805:34,mathdef2806:34,mathdef2807:34,mathdef2808:34,mathdef2809:34,mathdef280:6,mathdef2810:34,mathdef2811:34,mathdef2812:34,mathdef2813:34,mathdef2814:34,mathdef2815:34,mathdef2816:34,mathdef2817:34,mathdef2818:34,mathdef2819:34,mathdef281:6,mathdef2820:34,mathdef2821:34,mathdef2822:34,mathdef2823:34,mathdef2824:34,mathdef2825:34,mathdef2826:34,mathdef2827:34,mathdef2828:34,mathdef2829:34,mathdef282:6,mathdef2830:34,mathdef2831:34,mathdef2832:34,mathdef2833:34,mathdef2834:34,mathdef2835:34,mathdef2836:34,mathdef2837:34,mathdef2838:34,mathdef2839:34,mathdef283:6,mathdef2840:34,mathdef2841:34,mathdef2842:34,mathdef2843:34,mathdef2844:34,mathdef2845:34,mathdef2846:34,mathdef2847:34,mathdef2848:34,mathdef2849:34,mathdef284:6,mathdef2850:34,mathdef2851:34,mathdef2852:34,mathdef2853:34,mathdef2854:34,mathdef2855:34,mathdef2856:34,mathdef2857:34,mathdef2858:34,mathdef2859:34,mathdef285:6,mathdef2860:34,mathdef2861:34,mathdef2862:34,mathdef2863:34,mathdef2864:34,mathdef2865:34,mathdef2866:34,mathdef2867:34,mathdef2868:34,mathdef2869:34,mathdef286:6,mathdef2870:34,mathdef2871:34,mathdef2872:34,mathdef2873:34,mathdef2874:34,mathdef2875:34,mathdef2876:34,mathdef2877:34,mathdef2878:34,mathdef2879:34,mathdef287:6,mathdef2880:34,mathdef2881:34,mathdef2882:34,mathdef2883:34,mathdef2884:34,mathdef2885:34,mathdef2886:34,mathdef2887:34,mathdef2888:34,mathdef2889:34,mathdef288:6,mathdef2890:34,mathdef2891:34,mathdef2892:34,mathdef2893:34,mathdef2894:34,mathdef2895:34,mathdef2896:34,mathdef2897:34,mathdef2898:34,mathdef2899:34,mathdef289:6,mathdef28:0,mathdef2900:34,mathdef2901:34,mathdef2902:34,mathdef2903:34,mathdef2904:34,mathdef2905:34,mathdef2906:34,mathdef2907:34,mathdef2908:34,mathdef2909:34,mathdef290:6,mathdef2910:34,mathdef2911:34,mathdef2912:34,mathdef2913:34,mathdef2914:34,mathdef2915:34,mathdef2916:34,mathdef2917:34,mathdef2918:34,mathdef2919:34,mathdef291:6,mathdef2920:34,mathdef2921:34,mathdef2922:34,mathdef2923:34,mathdef2924:34,mathdef2925:34,mathdef2926:34,mathdef2927:34,mathdef2928:34,mathdef2929:34,mathdef292:6,mathdef2930:34,mathdef2931:34,mathdef2932:34,mathdef2933:34,mathdef2934:34,mathdef2935:34,mathdef2936:34,mathdef2937:34,mathdef2938:34,mathdef2939:34,mathdef293:6,mathdef2940:34,mathdef2941:34,mathdef2942:34,mathdef2943:34,mathdef2944:34,mathdef2945:34,mathdef2946:34,mathdef2947:34,mathdef2948:34,mathdef2949:34,mathdef294:6,mathdef2950:34,mathdef2951:34,mathdef2952:34,mathdef2953:34,mathdef2954:34,mathdef2955:34,mathdef2956:34,mathdef2957:34,mathdef2958:34,mathdef2959:34,mathdef295:6,mathdef2960:34,mathdef2961:34,mathdef2962:34,mathdef2963:34,mathdef2964:34,mathdef2965:34,mathdef2966:34,mathdef2967:34,mathdef2968:34,mathdef2969:34,mathdef296:6,mathdef2970:34,mathdef2971:34,mathdef2972:34,mathdef2973:34,mathdef2974:34,mathdef2975:34,mathdef2976:34,mathdef2977:34,mathdef2978:34,mathdef2979:34,mathdef297:6,mathdef2980:34,mathdef2981:34,mathdef2982:34,mathdef2983:34,mathdef2984:34,mathdef2985:34,mathdef2986:34,mathdef2987:34,mathdef2988:34,mathdef2989:34,mathdef298:6,mathdef2990:34,mathdef2991:34,mathdef2992:34,mathdef2993:34,mathdef2994:34,mathdef2995:34,mathdef2996:34,mathdef2997:34,mathdef2998:34,mathdef2999:34,mathdef299:6,mathdef29:0,mathdef2:0,mathdef3000:34,mathdef3001:34,mathdef3002:34,mathdef3003:34,mathdef3004:34,mathdef3005:34,mathdef3006:34,mathdef3007:34,mathdef3008:34,mathdef3009:34,mathdef300:6,mathdef3010:34,mathdef3011:34,mathdef3012:34,mathdef3013:34,mathdef3014:34,mathdef3015:34,mathdef3016:34,mathdef3017:34,mathdef3018:34,mathdef3019:34,mathdef301:6,mathdef3020:34,mathdef3021:34,mathdef3022:34,mathdef3023:34,mathdef3024:34,mathdef3025:34,mathdef3026:34,mathdef3027:34,mathdef3028:34,mathdef3029:34,mathdef302:6,mathdef3030:34,mathdef3031:34,mathdef3032:34,mathdef3033:34,mathdef3034:34,mathdef3035:34,mathdef3036:34,mathdef3037:34,mathdef3038:34,mathdef3039:34,mathdef303:6,mathdef3040:34,mathdef3041:34,mathdef3042:34,mathdef3043:34,mathdef3044:34,mathdef3045:34,mathdef3046:34,mathdef3047:34,mathdef3048:34,mathdef3049:34,mathdef304:6,mathdef3050:34,mathdef3051:34,mathdef3052:34,mathdef3053:34,mathdef3054:34,mathdef3055:34,mathdef3056:34,mathdef3057:34,mathdef3058:34,mathdef3059:34,mathdef305:6,mathdef3060:34,mathdef3061:34,mathdef3062:34,mathdef3063:34,mathdef3064:34,mathdef3065:34,mathdef3066:34,mathdef3067:34,mathdef3068:34,mathdef3069:34,mathdef306:6,mathdef3070:34,mathdef3071:34,mathdef3072:34,mathdef3073:34,mathdef3074:34,mathdef3075:34,mathdef3076:34,mathdef3077:34,mathdef3078:34,mathdef3079:34,mathdef307:6,mathdef3080:34,mathdef3081:34,mathdef3082:34,mathdef3083:34,mathdef3084:34,mathdef3085:34,mathdef3086:34,mathdef3087:34,mathdef3088:34,mathdef3089:34,mathdef308:6,mathdef3090:34,mathdef3091:34,mathdef3092:34,mathdef3093:34,mathdef3094:34,mathdef3095:34,mathdef3096:34,mathdef3097:34,mathdef3098:34,mathdef3099:34,mathdef309:6,mathdef30:0,mathdef3100:34,mathdef3101:34,mathdef3102:34,mathdef3103:34,mathdef3104:34,mathdef3105:34,mathdef3106:34,mathdef3107:34,mathdef3108:34,mathdef3109:34,mathdef310:6,mathdef3110:34,mathdef3111:34,mathdef3112:34,mathdef3113:34,mathdef3114:34,mathdef3115:34,mathdef3116:34,mathdef3117:34,mathdef3118:34,mathdef3119:34,mathdef311:6,mathdef3120:34,mathdef3121:34,mathdef3122:34,mathdef3123:34,mathdef3124:34,mathdef3125:34,mathdef3126:34,mathdef3127:34,mathdef3128:34,mathdef3129:34,mathdef312:6,mathdef3130:34,mathdef3131:34,mathdef3132:34,mathdef3133:34,mathdef3134:34,mathdef3135:34,mathdef3136:34,mathdef3137:34,mathdef3138:34,mathdef3139:34,mathdef313:6,mathdef3140:34,mathdef3141:34,mathdef3142:34,mathdef3143:34,mathdef3144:34,mathdef3145:34,mathdef3146:34,mathdef3147:34,mathdef3148:34,mathdef3149:34,mathdef314:6,mathdef3150:34,mathdef3151:34,mathdef3152:34,mathdef3153:34,mathdef3154:34,mathdef3155:34,mathdef3156:34,mathdef3157:34,mathdef3158:34,mathdef3159:34,mathdef315:6,mathdef3160:34,mathdef3161:34,mathdef3162:34,mathdef3163:34,mathdef3164:34,mathdef3165:34,mathdef3166:34,mathdef3167:34,mathdef3168:34,mathdef3169:34,mathdef316:6,mathdef3170:34,mathdef3171:34,mathdef3172:34,mathdef3173:34,mathdef3174:34,mathdef3175:34,mathdef3176:34,mathdef3177:34,mathdef3178:34,mathdef3179:34,mathdef317:6,mathdef3180:34,mathdef3181:34,mathdef3182:34,mathdef3183:34,mathdef3184:34,mathdef3185:34,mathdef3186:34,mathdef3187:34,mathdef3188:34,mathdef3189:34,mathdef318:6,mathdef3190:34,mathdef3191:34,mathdef3192:34,mathdef3193:34,mathdef3194:34,mathdef3195:34,mathdef3196:34,mathdef3197:34,mathdef3198:34,mathdef3199:34,mathdef319:6,mathdef31:0,mathdef3200:34,mathdef3201:34,mathdef3202:34,mathdef3203:34,mathdef3204:34,mathdef3205:34,mathdef3206:34,mathdef3207:34,mathdef3208:34,mathdef3209:34,mathdef320:6,mathdef3210:34,mathdef3211:34,mathdef3212:35,mathdef3213:35,mathdef3214:35,mathdef3215:35,mathdef3216:35,mathdef3217:35,mathdef3218:35,mathdef3219:35,mathdef321:6,mathdef3220:35,mathdef3221:35,mathdef3222:35,mathdef3223:35,mathdef3224:35,mathdef3225:35,mathdef3226:35,mathdef3227:35,mathdef3228:35,mathdef3229:35,mathdef322:6,mathdef3230:35,mathdef3231:35,mathdef3232:35,mathdef3233:35,mathdef3234:35,mathdef3235:35,mathdef3236:35,mathdef3237:35,mathdef3238:35,mathdef3239:35,mathdef323:6,mathdef3240:35,mathdef3241:35,mathdef3242:35,mathdef3243:35,mathdef3244:35,mathdef3245:35,mathdef3246:35,mathdef3247:35,mathdef3248:35,mathdef3249:35,mathdef324:6,mathdef3250:35,mathdef3251:35,mathdef3252:35,mathdef3253:35,mathdef3254:35,mathdef3255:35,mathdef3256:35,mathdef3257:35,mathdef3258:35,mathdef3259:35,mathdef325:6,mathdef3260:35,mathdef3261:35,mathdef3262:35,mathdef3263:35,mathdef3264:35,mathdef3265:35,mathdef3266:35,mathdef3267:35,mathdef3268:35,mathdef3269:35,mathdef326:6,mathdef3270:35,mathdef3271:35,mathdef3272:35,mathdef3273:35,mathdef3274:35,mathdef3275:35,mathdef3276:35,mathdef3277:35,mathdef3278:36,mathdef3279:36,mathdef327:6,mathdef3280:36,mathdef3281:36,mathdef3282:36,mathdef3283:36,mathdef3284:36,mathdef3285:36,mathdef3286:36,mathdef3287:36,mathdef3288:36,mathdef3289:36,mathdef328:6,mathdef3290:36,mathdef3291:36,mathdef3292:36,mathdef3293:36,mathdef3294:36,mathdef3295:36,mathdef3296:36,mathdef3297:36,mathdef3298:36,mathdef3299:36,mathdef329:6,mathdef32:0,mathdef3300:36,mathdef3301:36,mathdef3302:36,mathdef3303:36,mathdef3304:36,mathdef3305:36,mathdef3306:36,mathdef3307:36,mathdef3308:36,mathdef3309:36,mathdef330:6,mathdef3310:36,mathdef3311:36,mathdef3312:36,mathdef3313:36,mathdef3314:36,mathdef3315:36,mathdef3316:36,mathdef3317:36,mathdef3318:36,mathdef3319:36,mathdef331:6,mathdef3320:36,mathdef3321:36,mathdef3322:36,mathdef3323:36,mathdef3324:36,mathdef3325:36,mathdef3326:36,mathdef3327:36,mathdef3328:36,mathdef3329:36,mathdef332:6,mathdef3330:36,mathdef3331:36,mathdef3332:36,mathdef3333:36,mathdef3334:36,mathdef3335:36,mathdef3336:36,mathdef3337:36,mathdef3338:36,mathdef3339:36,mathdef333:6,mathdef3340:36,mathdef3341:36,mathdef3342:36,mathdef3343:36,mathdef3344:36,mathdef3345:36,mathdef3346:36,mathdef3347:36,mathdef3348:36,mathdef3349:36,mathdef334:6,mathdef3350:36,mathdef3351:36,mathdef3352:36,mathdef3353:36,mathdef3354:36,mathdef3355:36,mathdef3356:36,mathdef3357:36,mathdef3358:36,mathdef3359:36,mathdef335:6,mathdef3360:36,mathdef3361:36,mathdef3362:36,mathdef3363:36,mathdef3364:36,mathdef3365:36,mathdef3366:36,mathdef3367:36,mathdef3368:36,mathdef3369:36,mathdef336:6,mathdef3370:36,mathdef3371:36,mathdef3372:36,mathdef3373:36,mathdef3374:36,mathdef3375:36,mathdef3376:36,mathdef3377:36,mathdef3378:36,mathdef3379:36,mathdef337:6,mathdef3380:36,mathdef3381:36,mathdef3382:36,mathdef3383:36,mathdef3384:36,mathdef3385:36,mathdef3386:36,mathdef3387:36,mathdef3388:36,mathdef3389:36,mathdef338:6,mathdef3390:36,mathdef3391:36,mathdef3392:36,mathdef3393:36,mathdef3394:36,mathdef3395:36,mathdef3396:36,mathdef3397:36,mathdef3398:36,mathdef3399:36,mathdef339:6,mathdef33:0,mathdef3400:36,mathdef3401:36,mathdef3402:36,mathdef3403:36,mathdef3404:36,mathdef3405:36,mathdef3406:36,mathdef3407:36,mathdef3408:36,mathdef3409:36,mathdef340:6,mathdef3410:36,mathdef3411:36,mathdef3412:36,mathdef3413:36,mathdef3414:36,mathdef3415:36,mathdef3416:36,mathdef3417:36,mathdef3418:36,mathdef3419:36,mathdef341:6,mathdef3420:36,mathdef3421:36,mathdef3422:36,mathdef3423:36,mathdef3424:36,mathdef3425:36,mathdef3426:36,mathdef3427:36,mathdef3428:36,mathdef3429:36,mathdef342:6,mathdef3430:36,mathdef3431:36,mathdef3432:36,mathdef3433:36,mathdef3434:36,mathdef3435:36,mathdef3436:36,mathdef3437:36,mathdef3438:36,mathdef3439:36,mathdef343:6,mathdef3440:36,mathdef3441:36,mathdef3442:36,mathdef3443:36,mathdef3444:36,mathdef3445:36,mathdef3446:36,mathdef3447:36,mathdef3448:36,mathdef3449:36,mathdef344:6,mathdef3450:36,mathdef3451:36,mathdef3452:36,mathdef3453:36,mathdef3454:36,mathdef3455:36,mathdef3456:36,mathdef3457:36,mathdef3458:36,mathdef3459:36,mathdef345:6,mathdef3460:36,mathdef3461:36,mathdef3462:36,mathdef3463:36,mathdef3464:36,mathdef3465:36,mathdef3466:36,mathdef3467:36,mathdef3468:36,mathdef3469:36,mathdef346:6,mathdef3470:36,mathdef3471:36,mathdef3472:36,mathdef3473:36,mathdef3474:36,mathdef3475:36,mathdef3476:36,mathdef3477:36,mathdef3478:36,mathdef3479:36,mathdef347:6,mathdef3480:36,mathdef3481:36,mathdef3482:36,mathdef3483:36,mathdef3484:36,mathdef3485:36,mathdef3486:36,mathdef3487:36,mathdef3488:36,mathdef3489:36,mathdef348:6,mathdef3490:36,mathdef3491:36,mathdef3492:36,mathdef3493:36,mathdef3494:36,mathdef3495:36,mathdef3496:36,mathdef3497:36,mathdef3498:36,mathdef3499:36,mathdef349:6,mathdef34:0,mathdef3500:36,mathdef3501:36,mathdef3502:36,mathdef3503:36,mathdef3504:36,mathdef3505:36,mathdef3506:36,mathdef3507:36,mathdef3508:36,mathdef3509:36,mathdef350:6,mathdef3510:36,mathdef3511:36,mathdef3512:36,mathdef3513:36,mathdef3514:36,mathdef3515:36,mathdef3516:36,mathdef3517:36,mathdef3518:36,mathdef3519:36,mathdef351:6,mathdef3520:36,mathdef3521:36,mathdef3522:36,mathdef3523:36,mathdef3524:36,mathdef3525:36,mathdef3526:36,mathdef3527:36,mathdef3528:36,mathdef3529:36,mathdef352:6,mathdef3530:36,mathdef3531:36,mathdef3532:36,mathdef3533:36,mathdef3534:36,mathdef3535:36,mathdef3536:36,mathdef3537:36,mathdef3538:36,mathdef3539:36,mathdef353:6,mathdef3540:36,mathdef3541:36,mathdef3542:36,mathdef3543:36,mathdef3544:36,mathdef3545:36,mathdef3546:36,mathdef3547:36,mathdef3548:36,mathdef3549:36,mathdef354:6,mathdef3550:36,mathdef3551:36,mathdef3552:36,mathdef3553:36,mathdef3554:36,mathdef3555:36,mathdef3556:36,mathdef3557:36,mathdef3558:36,mathdef3559:36,mathdef355:6,mathdef3560:36,mathdef3561:36,mathdef3562:36,mathdef3563:36,mathdef3564:36,mathdef3565:36,mathdef3566:36,mathdef3567:36,mathdef3568:36,mathdef3569:36,mathdef356:6,mathdef3570:36,mathdef3571:36,mathdef3572:36,mathdef3573:36,mathdef3574:36,mathdef3575:36,mathdef3576:36,mathdef3577:36,mathdef3578:36,mathdef3579:36,mathdef357:6,mathdef3580:36,mathdef3581:36,mathdef3582:36,mathdef3583:36,mathdef3584:36,mathdef3585:36,mathdef3586:36,mathdef3587:36,mathdef3588:36,mathdef3589:36,mathdef358:6,mathdef3590:36,mathdef3591:36,mathdef3592:36,mathdef3593:36,mathdef3594:36,mathdef3595:36,mathdef3596:36,mathdef3597:36,mathdef3598:36,mathdef3599:36,mathdef359:6,mathdef35:0,mathdef3600:36,mathdef3601:36,mathdef3602:36,mathdef3603:36,mathdef3604:36,mathdef3605:36,mathdef3606:36,mathdef3607:36,mathdef3608:36,mathdef3609:36,mathdef360:6,mathdef3610:36,mathdef3611:36,mathdef3612:36,mathdef3613:36,mathdef3614:36,mathdef3615:36,mathdef3616:36,mathdef3617:36,mathdef3618:36,mathdef3619:36,mathdef361:6,mathdef3620:36,mathdef3621:36,mathdef3622:36,mathdef3623:36,mathdef3624:36,mathdef3625:36,mathdef3626:36,mathdef3627:36,mathdef3628:36,mathdef3629:36,mathdef362:6,mathdef3630:36,mathdef3631:36,mathdef3632:36,mathdef3633:36,mathdef3634:36,mathdef3635:36,mathdef3636:36,mathdef3637:36,mathdef3638:36,mathdef3639:36,mathdef363:6,mathdef3640:36,mathdef3641:36,mathdef3642:36,mathdef3643:36,mathdef3644:36,mathdef3645:36,mathdef3646:36,mathdef3647:36,mathdef3648:36,mathdef3649:36,mathdef364:6,mathdef3650:36,mathdef3651:36,mathdef3652:36,mathdef3653:36,mathdef3654:36,mathdef3655:36,mathdef3656:36,mathdef3657:36,mathdef3658:36,mathdef3659:36,mathdef365:6,mathdef3660:36,mathdef3661:36,mathdef3662:36,mathdef3663:36,mathdef3664:36,mathdef3665:36,mathdef3666:36,mathdef3667:36,mathdef3668:36,mathdef3669:36,mathdef366:6,mathdef3670:36,mathdef3671:36,mathdef3672:36,mathdef3673:36,mathdef3674:36,mathdef3675:36,mathdef3676:36,mathdef3677:36,mathdef3678:36,mathdef3679:36,mathdef367:6,mathdef3680:36,mathdef3681:36,mathdef3682:36,mathdef3683:36,mathdef3684:36,mathdef3685:36,mathdef3686:36,mathdef3687:36,mathdef3688:36,mathdef3689:37,mathdef368:6,mathdef3690:37,mathdef3691:37,mathdef3692:37,mathdef3693:37,mathdef3694:37,mathdef3695:37,mathdef3696:37,mathdef3697:37,mathdef3698:37,mathdef3699:37,mathdef369:6,mathdef36:0,mathdef3700:37,mathdef3701:37,mathdef3702:37,mathdef3703:37,mathdef3704:37,mathdef3705:37,mathdef3706:37,mathdef3707:37,mathdef3708:37,mathdef3709:37,mathdef370:6,mathdef3710:37,mathdef3711:37,mathdef3712:37,mathdef3713:37,mathdef3714:37,mathdef3715:37,mathdef3716:37,mathdef3717:37,mathdef3718:37,mathdef3719:37,mathdef371:6,mathdef3720:37,mathdef3721:37,mathdef3722:37,mathdef3723:37,mathdef3724:37,mathdef3725:37,mathdef3726:37,mathdef3727:37,mathdef3728:37,mathdef3729:37,mathdef372:6,mathdef3730:37,mathdef3731:37,mathdef3732:37,mathdef3733:37,mathdef3734:37,mathdef3735:37,mathdef3736:37,mathdef3737:37,mathdef3738:37,mathdef3739:37,mathdef373:6,mathdef3740:37,mathdef3741:37,mathdef3742:37,mathdef3743:37,mathdef3744:37,mathdef3745:37,mathdef3746:37,mathdef3747:37,mathdef3748:37,mathdef3749:37,mathdef374:6,mathdef3750:37,mathdef3751:37,mathdef3752:37,mathdef3753:37,mathdef3754:37,mathdef3755:37,mathdef3756:37,mathdef3757:37,mathdef3758:37,mathdef3759:37,mathdef375:6,mathdef3760:37,mathdef3761:38,mathdef3762:38,mathdef3763:38,mathdef3764:38,mathdef3765:38,mathdef3766:38,mathdef3767:38,mathdef3768:38,mathdef3769:38,mathdef376:6,mathdef3770:38,mathdef3771:38,mathdef3772:38,mathdef3773:38,mathdef3774:38,mathdef3775:38,mathdef3776:38,mathdef3777:38,mathdef3778:38,mathdef3779:38,mathdef377:6,mathdef3780:38,mathdef3781:38,mathdef3782:38,mathdef3783:38,mathdef3784:38,mathdef3785:38,mathdef3786:38,mathdef3787:38,mathdef3788:38,mathdef3789:38,mathdef378:6,mathdef3790:38,mathdef3791:38,mathdef3792:38,mathdef3793:38,mathdef3794:38,mathdef3795:38,mathdef3796:38,mathdef3797:38,mathdef3798:38,mathdef3799:38,mathdef379:6,mathdef37:0,mathdef3800:38,mathdef3801:38,mathdef3802:38,mathdef3803:38,mathdef3804:38,mathdef3805:38,mathdef3806:38,mathdef3807:38,mathdef3808:38,mathdef3809:38,mathdef380:6,mathdef3810:38,mathdef3811:38,mathdef3812:38,mathdef3813:38,mathdef3814:38,mathdef3815:38,mathdef3816:38,mathdef3817:38,mathdef3818:38,mathdef3819:38,mathdef381:6,mathdef3820:38,mathdef3821:38,mathdef3822:38,mathdef3823:38,mathdef3824:38,mathdef3825:38,mathdef3826:38,mathdef3827:38,mathdef3828:38,mathdef3829:38,mathdef382:6,mathdef3830:38,mathdef3831:38,mathdef3832:38,mathdef3833:38,mathdef3834:38,mathdef3835:38,mathdef3836:38,mathdef3837:38,mathdef3838:38,mathdef3839:38,mathdef383:6,mathdef3840:38,mathdef3841:38,mathdef3842:38,mathdef3843:38,mathdef3844:38,mathdef3845:38,mathdef3846:38,mathdef3847:38,mathdef3848:38,mathdef3849:38,mathdef384:6,mathdef3850:38,mathdef3851:38,mathdef3852:38,mathdef3853:38,mathdef3854:38,mathdef3855:38,mathdef3856:38,mathdef3857:38,mathdef3858:38,mathdef3859:38,mathdef385:6,mathdef3860:38,mathdef3861:38,mathdef3862:38,mathdef3863:38,mathdef3864:38,mathdef3865:38,mathdef3866:38,mathdef3867:38,mathdef3868:38,mathdef3869:38,mathdef386:6,mathdef3870:38,mathdef3871:38,mathdef3872:38,mathdef3873:38,mathdef3874:38,mathdef3875:38,mathdef3876:38,mathdef3877:38,mathdef3878:38,mathdef3879:38,mathdef387:6,mathdef3880:38,mathdef3881:38,mathdef3882:38,mathdef3883:38,mathdef3884:38,mathdef3885:38,mathdef3886:38,mathdef3887:38,mathdef3888:38,mathdef3889:38,mathdef388:6,mathdef3890:38,mathdef3891:38,mathdef3892:38,mathdef3893:38,mathdef3894:38,mathdef3895:39,mathdef3896:39,mathdef3897:39,mathdef3898:39,mathdef3899:39,mathdef389:6,mathdef38:0,mathdef3900:39,mathdef3901:39,mathdef3902:39,mathdef3903:39,mathdef3904:39,mathdef3905:39,mathdef3906:39,mathdef3907:39,mathdef3908:39,mathdef3909:39,mathdef390:6,mathdef3910:39,mathdef3911:39,mathdef3912:39,mathdef3913:39,mathdef3914:39,mathdef3915:39,mathdef3916:39,mathdef3917:39,mathdef3918:39,mathdef3919:39,mathdef391:6,mathdef3920:39,mathdef3921:39,mathdef3922:39,mathdef3923:39,mathdef3924:39,mathdef3925:39,mathdef3926:39,mathdef3927:39,mathdef3928:39,mathdef3929:39,mathdef392:6,mathdef3930:39,mathdef3931:39,mathdef3932:39,mathdef3933:39,mathdef3934:40,mathdef3935:40,mathdef3936:40,mathdef3937:40,mathdef3938:40,mathdef3939:40,mathdef393:6,mathdef3940:40,mathdef3941:40,mathdef3942:40,mathdef3943:40,mathdef3944:40,mathdef3945:40,mathdef3946:40,mathdef3947:40,mathdef3948:40,mathdef3949:40,mathdef394:6,mathdef3950:40,mathdef3951:40,mathdef3952:40,mathdef3953:40,mathdef3954:40,mathdef3955:40,mathdef3956:40,mathdef3957:40,mathdef3958:40,mathdef3959:40,mathdef395:6,mathdef3960:40,mathdef3961:40,mathdef3962:40,mathdef3963:40,mathdef3964:40,mathdef3965:40,mathdef3966:40,mathdef3967:40,mathdef3968:40,mathdef3969:40,mathdef396:6,mathdef3970:40,mathdef3971:40,mathdef3972:40,mathdef3973:41,mathdef3974:41,mathdef3975:41,mathdef3976:41,mathdef3977:41,mathdef3978:41,mathdef3979:41,mathdef397:6,mathdef3980:41,mathdef3981:41,mathdef3982:41,mathdef3983:41,mathdef3984:41,mathdef3985:41,mathdef3986:41,mathdef3987:41,mathdef3988:41,mathdef3989:41,mathdef398:6,mathdef3990:41,mathdef3991:41,mathdef3992:41,mathdef3993:41,mathdef3994:41,mathdef3995:41,mathdef3996:41,mathdef3997:41,mathdef3998:41,mathdef3999:41,mathdef399:6,mathdef39:0,mathdef3:0,mathdef4000:41,mathdef4001:41,mathdef4002:41,mathdef4003:41,mathdef4004:41,mathdef4005:41,mathdef4006:41,mathdef4007:41,mathdef4008:41,mathdef4009:41,mathdef400:6,mathdef4010:41,mathdef4011:41,mathdef4012:42,mathdef4013:42,mathdef4014:42,mathdef4015:42,mathdef4016:42,mathdef4017:42,mathdef4018:42,mathdef4019:42,mathdef401:6,mathdef4020:42,mathdef4021:42,mathdef4022:42,mathdef4023:42,mathdef4024:42,mathdef4025:42,mathdef4026:42,mathdef4027:42,mathdef4028:42,mathdef4029:42,mathdef402:6,mathdef4030:42,mathdef4031:42,mathdef4032:42,mathdef4033:42,mathdef4034:42,mathdef4035:42,mathdef4036:42,mathdef4037:42,mathdef4038:42,mathdef4039:42,mathdef403:6,mathdef4040:42,mathdef4041:42,mathdef4042:42,mathdef4043:42,mathdef4044:42,mathdef4045:42,mathdef4046:42,mathdef4047:42,mathdef4048:42,mathdef4049:42,mathdef404:6,mathdef4050:42,mathdef4051:43,mathdef4052:43,mathdef4053:43,mathdef4054:43,mathdef4055:43,mathdef4056:43,mathdef4057:43,mathdef4058:43,mathdef4059:43,mathdef405:6,mathdef4060:43,mathdef4061:43,mathdef4062:43,mathdef4063:43,mathdef4064:43,mathdef4065:43,mathdef4066:43,mathdef4067:43,mathdef4068:43,mathdef4069:43,mathdef406:6,mathdef4070:43,mathdef4071:43,mathdef4072:43,mathdef4073:43,mathdef4074:43,mathdef4075:43,mathdef4076:43,mathdef4077:43,mathdef4078:43,mathdef4079:43,mathdef407:6,mathdef4080:43,mathdef4081:43,mathdef4082:43,mathdef4083:43,mathdef4084:43,mathdef4085:43,mathdef4086:43,mathdef4087:43,mathdef4088:43,mathdef4089:43,mathdef408:6,mathdef409:6,mathdef40:1,mathdef410:6,mathdef411:6,mathdef412:6,mathdef413:6,mathdef414:6,mathdef415:6,mathdef416:6,mathdef417:6,mathdef418:6,mathdef419:6,mathdef41:1,mathdef420:6,mathdef421:6,mathdef422:6,mathdef423:6,mathdef424:6,mathdef425:6,mathdef426:6,mathdef427:6,mathdef428:6,mathdef429:6,mathdef42:1,mathdef430:6,mathdef431:6,mathdef432:6,mathdef433:6,mathdef434:6,mathdef435:6,mathdef436:6,mathdef437:6,mathdef438:6,mathdef439:6,mathdef43:1,mathdef440:6,mathdef441:6,mathdef442:6,mathdef443:6,mathdef444:6,mathdef445:6,mathdef446:6,mathdef447:6,mathdef448:6,mathdef449:6,mathdef44:1,mathdef450:6,mathdef451:6,mathdef452:6,mathdef453:6,mathdef454:6,mathdef455:6,mathdef456:6,mathdef457:6,mathdef458:6,mathdef459:6,mathdef45:1,mathdef460:6,mathdef461:6,mathdef462:6,mathdef463:6,mathdef464:6,mathdef465:6,mathdef466:6,mathdef467:6,mathdef468:6,mathdef469:6,mathdef46:1,mathdef470:6,mathdef471:6,mathdef472:6,mathdef473:6,mathdef474:6,mathdef475:6,mathdef476:6,mathdef477:6,mathdef478:6,mathdef479:6,mathdef47:1,mathdef480:6,mathdef481:6,mathdef482:6,mathdef483:6,mathdef484:6,mathdef485:6,mathdef486:6,mathdef487:6,mathdef488:6,mathdef489:6,mathdef48:1,mathdef490:6,mathdef491:6,mathdef492:6,mathdef493:6,mathdef494:6,mathdef495:6,mathdef496:6,mathdef497:6,mathdef498:6,mathdef499:6,mathdef49:1,mathdef4:0,mathdef500:6,mathdef501:6,mathdef502:6,mathdef503:6,mathdef504:6,mathdef505:6,mathdef506:6,mathdef507:6,mathdef508:6,mathdef509:6,mathdef50:1,mathdef510:6,mathdef511:6,mathdef512:6,mathdef513:6,mathdef514:6,mathdef515:6,mathdef516:6,mathdef517:6,mathdef518:6,mathdef519:6,mathdef51:1,mathdef520:6,mathdef521:6,mathdef522:6,mathdef523:6,mathdef524:6,mathdef525:6,mathdef526:6,mathdef527:6,mathdef528:6,mathdef529:6,mathdef52:1,mathdef530:6,mathdef531:6,mathdef532:6,mathdef533:6,mathdef534:6,mathdef535:6,mathdef536:6,mathdef537:6,mathdef538:6,mathdef539:6,mathdef53:1,mathdef540:6,mathdef541:6,mathdef542:6,mathdef543:6,mathdef544:6,mathdef545:6,mathdef546:6,mathdef547:6,mathdef548:6,mathdef549:6,mathdef54:1,mathdef550:6,mathdef551:6,mathdef552:6,mathdef553:6,mathdef554:6,mathdef555:6,mathdef556:6,mathdef557:6,mathdef558:6,mathdef559:6,mathdef55:1,mathdef560:6,mathdef561:6,mathdef562:6,mathdef563:6,mathdef564:6,mathdef565:6,mathdef566:6,mathdef567:6,mathdef568:6,mathdef569:6,mathdef56:1,mathdef570:6,mathdef571:6,mathdef572:6,mathdef573:6,mathdef574:6,mathdef575:6,mathdef576:6,mathdef577:6,mathdef578:6,mathdef579:6,mathdef57:1,mathdef580:6,mathdef581:6,mathdef582:6,mathdef583:6,mathdef584:6,mathdef585:6,mathdef586:6,mathdef587:6,mathdef588:6,mathdef589:6,mathdef58:1,mathdef590:6,mathdef591:6,mathdef592:6,mathdef593:6,mathdef594:6,mathdef595:6,mathdef596:6,mathdef597:6,mathdef598:6,mathdef599:6,mathdef59:1,mathdef5:0,mathdef600:6,mathdef601:6,mathdef602:6,mathdef603:6,mathdef604:6,mathdef605:6,mathdef606:6,mathdef607:6,mathdef608:6,mathdef609:6,mathdef60:1,mathdef610:6,mathdef611:6,mathdef612:6,mathdef613:6,mathdef614:6,mathdef615:6,mathdef616:6,mathdef617:6,mathdef618:6,mathdef619:6,mathdef61:1,mathdef620:6,mathdef621:6,mathdef622:6,mathdef623:6,mathdef624:6,mathdef625:6,mathdef626:6,mathdef627:6,mathdef628:6,mathdef629:6,mathdef62:1,mathdef630:6,mathdef631:6,mathdef632:6,mathdef633:6,mathdef634:6,mathdef635:6,mathdef636:6,mathdef637:6,mathdef638:6,mathdef639:6,mathdef63:1,mathdef640:6,mathdef641:6,mathdef642:6,mathdef643:6,mathdef644:6,mathdef645:6,mathdef646:6,mathdef647:6,mathdef648:6,mathdef649:6,mathdef64:1,mathdef650:6,mathdef651:6,mathdef652:6,mathdef653:6,mathdef654:6,mathdef655:6,mathdef656:6,mathdef657:6,mathdef658:6,mathdef659:6,mathdef65:1,mathdef660:6,mathdef661:6,mathdef662:6,mathdef663:6,mathdef664:6,mathdef665:6,mathdef666:6,mathdef667:6,mathdef668:6,mathdef669:6,mathdef66:1,mathdef670:6,mathdef671:6,mathdef672:6,mathdef673:6,mathdef674:6,mathdef675:6,mathdef676:6,mathdef677:6,mathdef678:6,mathdef679:6,mathdef67:1,mathdef680:6,mathdef681:6,mathdef682:6,mathdef683:6,mathdef684:6,mathdef685:6,mathdef686:6,mathdef687:6,mathdef688:6,mathdef689:6,mathdef68:1,mathdef690:6,mathdef691:6,mathdef692:6,mathdef693:6,mathdef694:6,mathdef695:6,mathdef696:6,mathdef697:6,mathdef698:6,mathdef699:6,mathdef69:1,mathdef6:0,mathdef700:6,mathdef701:6,mathdef702:6,mathdef703:6,mathdef704:6,mathdef705:6,mathdef706:6,mathdef707:6,mathdef708:6,mathdef709:6,mathdef70:1,mathdef710:6,mathdef711:6,mathdef712:6,mathdef713:6,mathdef714:6,mathdef715:6,mathdef716:6,mathdef717:6,mathdef718:6,mathdef719:6,mathdef71:1,mathdef720:6,mathdef721:6,mathdef722:6,mathdef723:6,mathdef724:6,mathdef725:6,mathdef726:6,mathdef727:6,mathdef728:6,mathdef729:6,mathdef72:1,mathdef730:6,mathdef731:6,mathdef732:6,mathdef733:6,mathdef734:6,mathdef735:6,mathdef736:6,mathdef737:6,mathdef738:6,mathdef739:6,mathdef73:1,mathdef740:6,mathdef741:6,mathdef742:6,mathdef743:6,mathdef744:6,mathdef745:6,mathdef746:6,mathdef747:6,mathdef748:6,mathdef749:6,mathdef74:1,mathdef750:6,mathdef751:6,mathdef752:6,mathdef753:6,mathdef754:6,mathdef755:6,mathdef756:6,mathdef757:6,mathdef758:6,mathdef759:6,mathdef75:1,mathdef760:6,mathdef761:6,mathdef762:6,mathdef763:6,mathdef764:6,mathdef765:6,mathdef766:6,mathdef767:6,mathdef768:6,mathdef769:6,mathdef76:1,mathdef770:6,mathdef771:6,mathdef772:6,mathdef773:6,mathdef774:6,mathdef775:6,mathdef776:6,mathdef777:6,mathdef778:6,mathdef779:6,mathdef77:1,mathdef780:6,mathdef781:6,mathdef782:6,mathdef783:6,mathdef784:6,mathdef785:6,mathdef786:6,mathdef787:6,mathdef788:6,mathdef789:6,mathdef78:1,mathdef790:6,mathdef791:6,mathdef792:6,mathdef793:6,mathdef794:6,mathdef795:6,mathdef796:6,mathdef797:6,mathdef798:6,mathdef799:6,mathdef79:2,mathdef7:0,mathdef800:6,mathdef801:6,mathdef802:6,mathdef803:6,mathdef804:6,mathdef805:6,mathdef806:6,mathdef807:6,mathdef808:6,mathdef809:6,mathdef80:2,mathdef810:6,mathdef811:6,mathdef812:6,mathdef813:6,mathdef814:6,mathdef815:6,mathdef816:6,mathdef817:6,mathdef818:6,mathdef819:6,mathdef81:2,mathdef820:6,mathdef821:6,mathdef822:6,mathdef823:6,mathdef824:6,mathdef825:6,mathdef826:6,mathdef827:6,mathdef828:6,mathdef829:6,mathdef82:2,mathdef830:6,mathdef831:6,mathdef832:6,mathdef833:6,mathdef834:6,mathdef835:6,mathdef836:6,mathdef837:6,mathdef838:6,mathdef839:6,mathdef83:2,mathdef840:6,mathdef841:6,mathdef842:6,mathdef843:6,mathdef844:6,mathdef845:6,mathdef846:6,mathdef847:6,mathdef848:6,mathdef849:6,mathdef84:2,mathdef850:6,mathdef851:6,mathdef852:6,mathdef853:6,mathdef854:6,mathdef855:6,mathdef856:6,mathdef857:6,mathdef858:6,mathdef859:6,mathdef85:2,mathdef860:6,mathdef861:6,mathdef862:6,mathdef863:6,mathdef864:6,mathdef865:6,mathdef866:6,mathdef867:6,mathdef868:6,mathdef869:6,mathdef86:2,mathdef870:6,mathdef871:6,mathdef872:6,mathdef873:6,mathdef874:6,mathdef875:6,mathdef876:6,mathdef877:6,mathdef878:6,mathdef879:6,mathdef87:2,mathdef880:6,mathdef881:6,mathdef882:6,mathdef883:6,mathdef884:6,mathdef885:6,mathdef886:6,mathdef887:6,mathdef888:6,mathdef889:6,mathdef88:2,mathdef890:6,mathdef891:6,mathdef892:6,mathdef893:6,mathdef894:6,mathdef895:6,mathdef896:6,mathdef897:6,mathdef898:6,mathdef899:6,mathdef89:2,mathdef8:0,mathdef900:6,mathdef901:6,mathdef902:6,mathdef903:6,mathdef904:6,mathdef905:6,mathdef906:6,mathdef907:6,mathdef908:6,mathdef909:6,mathdef90:2,mathdef910:6,mathdef911:6,mathdef912:6,mathdef913:6,mathdef914:6,mathdef915:6,mathdef916:6,mathdef917:6,mathdef918:6,mathdef919:6,mathdef91:2,mathdef920:6,mathdef921:6,mathdef922:6,mathdef923:6,mathdef924:6,mathdef925:6,mathdef926:6,mathdef927:6,mathdef928:6,mathdef929:6,mathdef92:2,mathdef930:6,mathdef931:6,mathdef932:6,mathdef933:6,mathdef934:6,mathdef935:6,mathdef936:6,mathdef937:6,mathdef938:6,mathdef939:6,mathdef93:2,mathdef940:6,mathdef941:6,mathdef942:6,mathdef943:6,mathdef944:6,mathdef945:6,mathdef946:6,mathdef947:6,mathdef948:6,mathdef949:6,mathdef94:2,mathdef950:6,mathdef951:6,mathdef952:6,mathdef953:6,mathdef954:6,mathdef955:6,mathdef956:6,mathdef957:6,mathdef958:6,mathdef959:6,mathdef95:2,mathdef960:6,mathdef961:6,mathdef962:6,mathdef963:6,mathdef964:6,mathdef965:6,mathdef966:6,mathdef967:6,mathdef968:6,mathdef969:6,mathdef96:2,mathdef970:6,mathdef971:6,mathdef972:6,mathdef973:6,mathdef974:6,mathdef975:6,mathdef976:6,mathdef977:6,mathdef978:6,mathdef979:6,mathdef97:2,mathdef980:6,mathdef981:6,mathdef982:6,mathdef983:6,mathdef984:6,mathdef985:6,mathdef986:6,mathdef987:6,mathdef988:6,mathdef989:6,mathdef98:2,mathdef990:6,mathdef991:6,mathdef992:6,mathdef993:6,mathdef994:6,mathdef995:6,mathdef996:6,mathdef997:6,mathdef998:6,mathdef999:6,mathdef99:2,mathdef9:0,mathemat:[16,20,39],mathit:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathrel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathrm:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathsf:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathtt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],matrix:25,max:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],maximum:[13,14,18,21,24,30,43],mbox:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],me:36,mean:[18,21,25,28,30,35,39],meaning:[25,43],meant:0,mechanis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],media:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meet:[3,41],mem:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memarg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],membind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memori:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],memsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mere:[29,42],messag:3,met:[0,3,39],meta:[2,10,13,20,21,26,29,30,31,32],mi:[3,9],michael:[9,16,39],might:[21,28],min:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],minimum:[4,30],mirror:[10,32,34,36],miss:28,mit:[16,39],mitig:24,mm:[1,28],mobil:24,mod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mode:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],model:[16,21,24,25,28],modern:24,modif:[9,16,18],modifi:[1,3,9,16,18],modul:[0,1,4,5,6,7,8,10,11,12,14,15,16,17,18,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],modular:24,modulebodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulefield:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],moduleinst:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulo:20,more:[1,16,18,25,28,31,32,38,39,41],moreov:[19,21,26,29,31,38,39,43],most:[2,9,13,16,18,20,21,26,28,29,31,32,36,41,42,43],mp:20,mt:[3,9,13,36,42],mul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],multi:1,multipl:[0,10,18,19,20,21,26,28,29,30,31,32,36,37,41],multipli:[9,20],must:[0,2,3,4,9,10,13,15,18,19,20,21,26,28,29,32,34,35,36,38,39,41,42,43],mut:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],mutabl:[14,18,21,25,29,30,41],mutat:[9,16,18,19,21],mutual:[9,19,42],n:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],n_0:18,n_1:[9,16,18,43],n_2:[9,16,43],n_:18,n_k:18,name:[0,1,4,5,6,7,8,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,43],nameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namedata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namespac:36,namesubsect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nan:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],narrow_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nat:0,nativ:24,natur:[21,31,34],navig:13,ne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],necessari:[0,9,19,28],necessarili:29,need:[0,2,3,13,18,25,42],neg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],negat:20,neither:[20,30],neq:[13,18,20,21,35,36,38],nest:[4,12,21,25,26,28,34,35],never:[0,9,19,21],newli:28,next:[16,21,35],nj:41,nm:[13,36],nmag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nn:[1,28],non:[3,9,10,15,18,20,21,26,32,42,43],none:8,nontermin:[10,26,32],nontrap:1,nop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],nor:[4,20,24,30],normal:[31,38],notabl:9,notat:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],note:16,noth:[3,18,28,42],notin:34,notion:[9,18,19,41],now:[18,19],num:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],number:[0,1,4,8,9,10,11,13,15,18,19,20,21,25,27,28,31,32,33,36,38,41,42],numer:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],numtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],o:[12,24,34],object:[3,19,21,24,30],observ:[19,20,21,25,30],occasion:28,occur:[0,2,9,12,13,14,16,18,19,20,21,25,29,31,34,35,36,38,39,41,42],occurr:[10,12,21,26,32,35],off:[0,16,18,41],offer:[16,39],offset:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],ok:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],old:[9,18],omit:[0,12,13,16,32,34,36,39],onc:[2,13,19,25,29],one:[0,1,2,9,10,12,13,16,18,19,20,21,25,26,28,29,32,34,36,39,41,43],ones:[9,15,20,39],onli:[0,2,3,9,10,12,16,18,19,21,24,25,28,29,31,32,34,35,36,37,39,41,42,43],onto:18,op:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],op_t:18,opaqu:[25,29,30],opcod:[5,6,8,12],opdtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],open:24,oper:[1,3,4,6,16,17,18,21,24,25,28,30,31],operand:[0,9,16,18,20,21,25,28,34,41],oplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],opposit:20,optim:[18,28],option:[1,10,13,25,26,28,30,32,34,36,37,38,39],order:[0,2,3,9,10,12,13,15,16,19,20,21,25,28,29,30,31,32,36,42],organ:[13,25,29],origin:[0,1,9,16,18,20,21],other:[0,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,31,32,34,35,38,39,41,42],otherwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],out:[0,4,13,20,21,28,29,30,32,39],outcom:[9,18,21,42],outer:21,outermost:28,output:[20,28,30,41],outsid:[9,10,21,25,28,38,39],outward:28,over:[0,3,4,13,20,21,26,28,29,30,31,32,36,39,42],overflow:38,overlap:[28,35,36],overload:29,overview:[1,22,23],own:[9,19,21,24,25,29,30],p:[20,38],p_1:20,p_2:20,pack:[20,25,28,30,41],page:[3,9,18,19,21,28,29,30,36],pair:[2,3,10,13,18,20,25,29,36],parallel:[1,13,24],paralleliz:24,param:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],paramet:[1,3,4,14,18,19,25,29,30,32,36,37,39,42],parameter:13,parametr:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],parenthes:[10,26,31,32,34,35],pars:[3,10,32,34],part:[2,3,16,18,21,24,25,26,28,39,41],parti:13,partial:[18,20],particular:[16,20,24,25,29],particularli:42,pass:[0,3,13,19,21,24,30,42],passiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],path:26,pattern:[12,15,30],payload:[20,31,38],per:[1,2,3,16,18,32,41],perform:[0,1,16,18,19,21,24,25,28,41,42],permit:20,phantom:[12,34],phase:23,phrase:[10,34,39],physic:4,pick:[10,20,41],piec:39,pierc:[16,39],place:[13,14,16,19,21,24,28,32,36,39],placehold:20,placement:13,plain:[12,20,32,34,43],plaininstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],platform:24,pldi:[9,16,39],pm:[20,31,38],pmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],pmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],point:[1,3,11,17,18,21,24,26,27,28,30,33,41],pointer:25,pointwis:[19,20],polici:24,polymorph:[0,41],pop:[0,16,18,19,25,28,41],pop_ctrl:0,pop_val:0,popcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],portabl:24,posit:[8,12,14,15,18,20,31,34,39],possibl:[3,9,10,12,13,14,18,19,20,21,24,26,28,29,30,31,32,35,36,41],post:[5,9,18],potenti:24,power:[20,28],practic:[18,19,21,25],pre:[5,9,18,19,42],preambl:13,preced:[14,20,29,36],preceq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],precis:[9,16,18,21,24,30],predic:20,prefix:[12,28,41],premis:39,prepend:[0,9,39,41],prescrib:[13,28,41],presenc:[0,13,16,18],present:[0,12,13,14,19,21,29,41],preserv:[9,21,29,30],press:[16,39],presum:38,prevent:[24,28,38],previou:[9,28],previous:36,primari:2,primarili:[19,39],primit:[20,31],printabl:[2,38],privileg:24,proce:[21,39],proceed:[9,16,39],process:[25,30,31,43],produc:[13,16,18,19,20,21,25,28,29,36,39,41],product:[10,15,26,32,35,36,38],program:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],progress:9,project:1,promot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],proof:[9,16,39],prop:9,propag:21,proper:0,properti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],propos:1,proposit:39,prose:[17,40],prove:9,provid:[1,2,3,10,19,21,24,25,26,28,29,32,38,39,41,43],pseudo:[0,28,34,35],pth:26,pure:0,purg:0,purpos:[0,2,19,21,37],push:[0,16,18,19,21,25,28,41],push_ctrl:0,push_val:0,put:24,q15mulr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],q:[20,38],q_1:20,q_2:20,qquad:[3,9,10,13,14,15,18,19,20,21,31,32,34,35,36,37,38,39,41,42,43],quad:[9,13,16,18,19,21,29,32,34,36,42,43],qualif:20,quiet:[20,31],quot:32,quotat:38,r:[3,9,18,19,20,21,26,38],r_1:26,r_2:26,rang:[1,3,4,12,13,20,21,24,26,28,29,30,31,38,43],rather:21,ration:20,raw:[25,29,31,36,38],rcl:21,rcll:19,re:19,reach:[3,9,18,21],reachabl:0,read:[9,13,16,20,28,39],readabl:32,reader:[16,39],readili:[16,39],real:[20,25],reason:[4,24],recent:[16,41],recogn:35,recommend:[10,20,32],record:[0,13,16,21,26,32,39],rectifi:20,recurs:[19,25,26,32,34,39,41,42],reduc:[16,18,21],reduct:[16,18,21],ref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],refer:[3,8,9,11,16,17,21,25,27,29,33,36,39,40,42],referenc:[18,19,21,25,28,29,36,37],refin:[0,3],reftyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],regard:[20,34],regardless:[18,28,30],region:28,regist:25,regular:[3,9,34,36],regularli:18,reinterpret:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],reject:4,rel:[9,18,19,20,21,28,34,39,41],relat:[1,9,19,20,28],releas:[5,22,24],relev:[10,21,24,26,32,35,36,39],relop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],rem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],remain:9,remaind:[0,20],remov:[0,9,16,18,21],render:[2,16,32,39],reorder:1,repeat:[18,34],repeatedli:36,replac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],report:[4,19,25],repres:[0,2,12,13,16,20,21,25,28,31,34,35,38,39],represent:[0,1,10,15,16,17,21,24,25,26,30,31,38],repurpos:9,requir:[0,3,4,9,10,13,16,18,19,20,21,25,26,28,29,38,39,41,42],reserv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resiz:[0,30],resolv:[20,21,29,32,36],resourc:[4,18,24],respect:[0,1,3,9,10,12,13,14,16,18,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,43],respons:[3,24],rest:[19,35],restart:[21,28],restrict:[4,10,15,21,28,29,32,35,36,42,43],result:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43],resulttyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resum:28,retriev:28,reus:[21,24,36],revers:0,rewrit:32,right:[0,9,16,18,20,35],rightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],rlll:19,rllll:19,role:36,root:20,rossberg:[9,16,22,39],rotat:20,rotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],rotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],round:[24,36,38],rt:[14,42],rule:[9,10,13,16,18,19,21,22,26,32,34,35,38,39,41,42,43],run:[9,21,24],rundata:19,runelem:19,runtim:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s_0:19,s_1:[9,19],s_2:[9,19],s_3:19,s_4:19,s_5:19,s_:19,s_i:[19,26],s_n:19,safe:[24,25],safeti:9,sai:39,said:39,same:[4,9,10,13,14,18,20,21,26,28,29,31,32,34,36,39,41,42,43],san:26,sandbox:24,sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],satisfi:[3,9,18],satur:[12,20,28],scalar:[31,32,35,38],schuff:[9,16,39],scope:[9,10,21,23,25,36,39],second:[0,28,36],secondari:[2,19],section:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],secur:23,see:36,seen:24,seg:13,segment:[1,4,7,13,18,21,25,27,28,33,39,40,41],select:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],self:[0,24],semant:[0,2,3,9,13,16,18,19,21,22,23,24,39],semicolon:[35,38],sens:3,separ:[0,9,10,12,13,16,20,21,24,25,26,28,32,35,38],seq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sequenc:[2,3,5,7,9,10,12,13,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,38,39,40,42],serif:26,serv:[25,29,36],set:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sever:[12,20,24,28,41],shape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],share:21,shift:[20,28,34,39,41],shl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shortcut:28,shorten:26,shorthand:[10,19,20,26,28,32],should:2,show:0,shown:0,shr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shrink:9,shrunk:0,shuffl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],side:[10,15,21,24,25,26,32,34,36,39],sign:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signal:[20,21,31],signatur:[29,30],signed:[28,31,38],signif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signific:[20,31,38],significand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signless:20,sigplan:[9,16,39],simd:[1,28,30,31],similar:[0,20],similarli:[13,15,16,18,21,26,31],simpl:[21,24,25,31,42,43],simpler:21,simplest:31,simpli:[0,2,21,28],simplifi:13,sinc:[1,13,18,28,31,34],singl:[0,1,2,12,13,14,20,21,24,25,28,29,30,31,34,35,36,37],singleton:20,singular:[18,36,42],sint:14,situat:4,size:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],skeleton:[0,39],sketch:0,skip:13,slice:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],slower:18,small:14,smaller:[18,20,24,25,28,41,43],smallest:[20,29,31,36],so:[0,10,12,13,14,16,18,20,24,28,32,34,36,39,41],sole:34,some:[3,4,9,10,14,15,16,18,20,25,26,28,31,32,38,39,41,43],sometim:[29,31],soon:24,sort:25,sound:[0,5,16,18,22,39],sourc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],space:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],spec:1,special:[0,12,18,31,34],specif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],specifi:[3,4,9,16,19,20,21,25,28,29,32,36,39],speed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],spell:39,splat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],split:[1,13,24,26,36],sqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],squar:20,st:[13,36],stack:[0,4,16,17,18,19,25,28,29,39,41],stackrel:3,stacktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stage:19,stand:[24,38,39],standard:[9,16,20,24,30,31,39],start:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],start_typ:0,startsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],state:[3,9,16,21,25,29,34,39],statement:[28,39],statu:20,stem:4,step:[9,16,18,19,21],still:[0,4,15,16,18,29],stop:20,storag:[25,28,30,34],storagetyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],store16:34,store32:34,store64:34,store8:34,store:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],straightforward:0,strategi:4,stream:[13,16,35],streamabl:24,string:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43],stringchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],structur:[2,3,5,9,12,13,17,18,19,22,25,26,28,29,34,39],stylis:[16,39],sub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],subcategori:28,subclass:30,subject:24,subnorm:31,subrang:29,subset:[4,32,35],substanti:18,subsum:18,subtract:20,subtyp:40,succe:[3,18],suffici:9,sugar:[32,34],suitabl:[3,18,19,24,25,28,36,39,42],supersed:24,suppli:[19,21,29],support:[3,4,10,20,21,24,25,29,35,38],supset:9,surround:[0,21,36,39,41],swizzl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sym:[10,26,32],symbol:[3,4,10,26,32,34,35,36,38],syntact:[3,5,16,21,26,32,34,35,38],syntax:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],synthes:[10,32,36],system:[9,16,24,25,39],sz:18,t1:0,t2:0,t:[0,3,6,12,13,14,15,20,21,28,30,32,34,36,37,38,39],t_0:41,t_1:[6,9,19,32,36,37,39,42],t_2:[6,9,19,36,37,39,42],t_3:41,t_i:[9,13,19,32,41],t_j:41,t_n:32,ta:[18,36],tab:[13,18],tabl:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],tableaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabletyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],tableus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabul:35,take:[0,1,2,4,9,19,20,21,24,25,28,32],taken:21,target:[16,20,21,25,28],task:24,technic:20,techniqu:21,tee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],term:[10,16,18,21,26,32,36],termin:[4,9,10,12,15,16,18,21,26,28,29,32,35],ternari:[1,28],test:[1,20,28],testop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],text:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43],textual:[24,32,38],th:[18,26],than:[1,3,13,18,19,20,21,24,25,28,31,38,41,42,43],thei:[2,4,9,10,12,13,14,18,20,21,24,25,28,29,30,31,32,34,35,36,37,38,39,41,42],them:[0,3,9,16,20,21,25,28,29,31,34,36,39],themselv:[9,15,21,28,35,42],theorem:5,therebi:[16,25,36],therefor:[0,18,21,41],thereof:30,thi:[0,2,3,4,9,10,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,38,39,41,42,43],third:[13,28],thisisenough:34,thisshouldbeenough:[12,34],thorough:[16,39],those:[9,10,26,28,32,42],thread:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],three:[16,18,21,25,28],through:[0,3,13,18,21,25,28,29],thu:[10,14,20,25,29,32],ti:[3,20],tild:38,time:[1,4,9,10,18,19,21,24,26,28,29,32],titzer:[9,16,39],togeth:28,token:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],tool:36,top:[0,10,18,19],toplevel:36,total:15,touch:16,toward:[20,25],track:0,tracker:22,trail:[15,20],transfer:41,translat:24,transmit:24,transpar:30,trap:[0,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],treat:[3,12,26,28],tree:1,tripl:3,trunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],truncat:[12,20],tt:[3,9,13,36,42],tupl:16,turn:[2,4,13],two:[0,2,10,13,15,16,18,20,24,25,26,28,29,31,35,39,41,43],ty:36,type:[0,2,4,5,6,10,11,12,15,16,17,20,21,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],typebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typedef:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],typesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typewrit:[10,32],typic:[3,4,16,24,25,28],u16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u1:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u32:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ultim:21,unalign:[18,25],unambigu:[14,32],unari:[1,20,28],unchang:9,uncondit:[0,28,41],uncondition:39,unconstrain:41,undefin:[9,20],under:[0,9,18,21,25,30,39,41,42],underflow:0,underli:[18,20,31],underscor:38,understand:[16,39],unicod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unifi:21,uniniti:29,uninterpret:[13,15,21,29,31,38],union:30,uniqu:[2,21,29],unit:[28,29,30],univers:[24,43],unknown:[0,13],unless:[9,16,18],unlik:[12,15,25,28,29],unnam:[32,34],unnecessari:[16,32],unop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unravel:19,unreach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unsaf:24,unsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unspecif:3,unspecifi:20,until:[4,13,18],untyp:25,unus:15,unwind:28,up:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],updat:[3,19,26,34,36],upon:29,upper:20,us:[0,1,2,3,4,10,12,13,15,16,18,20,21,24,25,26,28,29,30,31,32,33,34,35,38,39],usabl:25,user:2,usual:[4,10,20,25,28,32],utf8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],utf:[2,15,24,31,32,38],v128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],v:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val_i:19,val_stack:0,val_typ:0,valid:[1,2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43],valtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],valu:[0,2,4,5,6,7,8,10,11,12,13,16,17,18,20,22,23,24,25,26,27,28,29,32,33,34,35,36,39,40,41,43],vari:[4,12,31],variabl:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],variant:[12,15],varieti:24,variou:[0,16,30],vbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vcvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vdash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vechaslongerinstructionnam:12,vechasreallylonginstructionnam:34,vector:[2,8,9,11,13,15,17,19,21,25,27,29,33,40,42],vectyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vee:[9,13,15,18,20,34,36,38],veebar:20,verbatim:34,veri:[13,16],verifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],version:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vextmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],via:[18,19],vibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],view:25,viminmaxop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],violat:18,virelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],virtual:[24,25],visatbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vishiftop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],visual:34,vitestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],viunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vm:24,vrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vulner:24,vunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],w3c:24,w:18,wa:28,wagner:[9,16,39],wai:[3,9,21,24,25],wasm:[10,24],wat:32,watt:9,we:[29,39,41],web:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],webassembl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wedg:[3,9,15,18,19,20,35,36,38],well:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],were:0,wf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],what:[1,39],when:[0,1,2,3,9,10,13,16,18,20,21,26,29,32,36,38,39,41,42,43],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wherea:12,whether:[0,9,13,14,21,28,29,31],which:[0,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,30,31,32,34,35,36,38,39,41,42,43],white:[32,33,34,38],whitespac:35,whose:[0,2,9,10,13,18,19,20,31,32,36,39,43],wide:[16,25,39],width:[18,20,21,25,28,30,31,41],wise:[16,18,20,26,28,41],within:[1,9,15,20,21,25,28,29,30,38,43],without:[4,12,13,18,41],word:[9,39],would:[0,13,18,21,41],wrap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],write:32,written:[9,10,20,26,28,30,32,34,36,38,39],ww:28,x:[1,6,8,10,12,13,19,20,26,28,29,32,34,35,36,39],x_1:[16,21],x_2:[16,21],x_3:[16,21],x_4:16,x_5:16,x_6:16,x_i:18,xor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],xref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],y:[6,12,13,29,34,36],yield:[3,18,28],z:[12,18,31,34,35,38],z_1:18,z_k:18,zakai:[9,16,39],zero:[10,12,15,18,19,20,28,29,31]},titles:["Validation Algorithm","Change History","Custom Sections","Embedding","Implementation Limitations","Appendix","Index of Instructions","Index of Semantic Rules","Index of Types","Soundness","Conventions","Binary Format","Instructions","Modules","Types","Values","Conventions","Execution","Instructions","Modules","Numerics","Runtime Structure","WebAssembly Specification","Introduction","Introduction","Overview","Conventions","Structure","Instructions","Modules","Types","Values","Conventions","Text Format","Instructions","Lexical Format","Modules","Types","Values","Conventions","Validation","Instructions","Modules","Types"],titleterms:{"0":1,"16":41,"2":1,"boolean":20,"byte":[3,15,31],"char":3,"const":[18,19,41],"export":[9,13,21,29,36,42],"float":[1,15,20,31,38],"function":[2,3,9,13,14,18,19,21,29,30,36,37,42,43],"import":[13,29,36,42,43],"int":[1,3],"null":[18,19,41],"return":[18,41],"static":7,_0:9,_1:[18,41,42],_2:[18,41,42],_:[18,20,41],_alloc:3,_decod:3,_export:3,_grow:3,_i16x8:18,_if:[18,41],_import:3,_indirect:[18,41],_init:3,_instanti:3,_invok:3,_lane:[18,41],_n:[9,20,41],_null:[18,41],_pairwis:[18,41],_pars:3,_read:3,_s:[18,20,41],_sat:20,_size:3,_splat:[18,41],_t_1:18,_tabl:[18,41],_true:18,_type:3,_u:20,_valid:3,_write:3,_zero:[18,41],abbrevi:[32,34,36,37],activ:[21,42],address:[18,21],administr:[9,21],algorithm:0,all:18,alloc:19,ani:18,appendix:[3,5],ast:[3,9,18,41,42],auxiliari:[10,26],b:[9,42],binari:[4,11],binop:[18,41],bitmask:[18,41],block:[18,21,41,43],blocktyp:[18,41],bodi:42,br:[18,41],bulk:1,c:[18,19,20,41],call:[18,41],chang:1,charact:35,code:[9,13],comment:35,concept:25,condit:3,configur:[9,21],consider:24,constant:[7,41],construct:7,context:[21,32,39],control:[9,12,18,28,34,41],convent:[10,16,21,26,28,29,30,31,32,38,39],convers:[1,20],convert:20,convert_:20,convert_u:20,copi:[18,41],count:13,custom:[2,13],cvtop:[18,41],data:[0,9,13,18,19,21,29,36,41,42],datainst:9,datamod:42,declar:42,demot:20,depend:24,desc:42,design:24,dot:[18,41],drop:[18,41],e:42,elem:[9,18,41,42],element:[9,13,19,21,29,36,42],eleminst:9,elemmod:42,els:[18,41],emb:3,embed:3,empti:41,end:[9,18,41],enter:18,epsilon:41,error:3,evalu:21,exec:[3,9,19,20],execut:[4,7,17],exit:18,exportdesc:42,exportinst:9,expr:42,express:[12,18,28,34,41],extadd:[18,41],extend:20,extend_:20,extend_u:20,extens:[1,7,9],extern:[9,19,21,30,43],externaddr:9,externtyp:[3,43],externv:[3,9,19],extmul:[18,41],extract:[18,41],f:9,fa:9,fab:20,fadd:20,fceil:20,fcopysign:20,fdiv:20,feq:20,ffloor:20,fge:20,fgt:20,fill:[18,41],fle:20,flt:20,fmax:20,fmin:20,fmul:20,fne:20,fnearest:20,fneg:20,fold:34,formal:[16,39],format:[4,11,33,35],fpmax:20,fpmin:20,frame:[9,21],from:18,fsqrt:20,fsub:20,ftrunc:20,func:[3,9,18,19,41,42,43],funcaddr:[3,9],funcinst:9,functyp:[3,9,43],get:[18,41],global:[3,9,13,14,18,19,21,29,30,36,37,41,42,43],globaladdr:3,globalinst:9,globaltyp:[3,42,43],goal:24,grammar:[10,26,32],grow:[18,19,41],half:[18,41],hf:9,histori:1,host:[9,18,19],hostcod:9,hostfunc:3,i32x4:18,i8x16:[18,41],i:[3,20],i_1:20,i_2:20,i_3:20,iab:20,iadd:20,iaddsat:20,iaddsat_:20,iaddsat_u:20,iand:20,iandnot:20,iavgr:20,iavgr_u:20,ibitselect:20,iclz:20,ictz:20,identifi:38,idiv:20,idiv_:20,idiv_u:20,ieq:20,ieqz:20,iextend:20,iextendn_:20,ig:20,ige_:20,ige_u:20,igt:20,igt_:20,igt_u:20,il:20,ile_:20,ile_u:20,ilt:20,ilt_:20,ilt_u:20,imax:20,imax_:20,imax_u:20,imin:20,imin_:20,imin_u:20,implement:4,importdesc:42,imul:20,index:[6,7,8],indic:[13,29,36],ine:20,ineg:20,init:[18,41,42],inot:20,instanc:[3,9,21],instanti:19,instr:[9,18,19,41],instruct:[1,6,9,12,18,19,21,28,34,41,42],integ:[15,20,31,38],interpret:20,introduct:[23,24],invoc:[18,19],invok:9,ior:20,ipopcnt:20,iq15mulrsat:20,iq15mulrsat_:20,irem:20,irem_:20,irem_u:20,irotl:20,irotr:20,ishap:41,ishl:20,ishr:20,ishr_:20,ishr_u:20,isub:20,isubsat:20,isubsat_:20,isubsat_u:20,ixor:20,l:[18,41],l_n:[18,41],label:[9,18,21,34],laneidx:41,lexic:35,limit:[4,9,14,30,37,43],load:[18,41],local:[2,9,18,41,42],loop:[18,41],m:[18,20,41,43],map:2,match:7,mathit:[3,9,18,41,42,43],mathrm:[3,20],mathsf:[9,18,19,20,41,42,43],max:43,mem:[3,19,42,43],memaddr:3,memarg:[18,41],meminst:9,memori:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],memtyp:[3,42,43],min:43,mode:42,modul:[2,3,9,13,19,21,29,36,42,43],moduleinst:[3,9],multipl:1,mut:[9,42,43],n:[3,18,20,41,43],name:[2,3,9,15,31,38,42],nan:20,narrow:[18,20,41],narrow_:20,narrow_u:20,non:[1,41],nop:[18,41],notat:[10,16,26,39],number:[14,30,37],numer:[12,18,19,20,28,34,41],offset:42,op:20,opcod:0,oper:20,overview:25,parametr:[12,18,28,34,41],passiv:42,phase:25,point:[15,20,31,38],post:3,pre:3,promot:20,propag:20,prose:[16,39],ref:[3,9,18,19,41],refer:[1,12,14,18,19,28,30,34,37,41],reftyp:43,reinterpret:20,releas:1,relop:[18,41],replac:[18,41],represent:20,result:[9,14,21,30],rightarrow:43,round:20,rule:7,runtim:[3,7,9,19,21],s:[9,20],scope:24,section:[2,13],secur:24,segment:[19,29,36,42],select:[18,41],semant:[7,25],sequenc:[0,41],set:[18,41],shape:[18,41],shuffl:[18,41],sign:[1,20],size:[18,41],sound:9,space:35,specif:22,splat:[18,41],stack:21,start:[13,29,36,42],storag:20,store:[3,7,9,18,21,41],string:38,structur:[0,4,21,27],subsect:2,subtyp:43,swizzl:[18,41],sx:[18,41],syntact:4,syntax:[3,9,18,19,41,42,43],t:[9,18,19,41,42],t_1:[18,20,41,43],t_2:[18,20,41,43],tabl:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],tableaddr:3,tableinst:9,tabletyp:[3,42,43],tee:[18,41],testop:[18,41],text:[4,33],theorem:9,thread:9,token:35,trap:[1,9],trunc:20,trunc_:20,trunc_sat_:20,trunc_sat_u:20,trunc_u:20,type:[1,3,7,8,9,13,14,18,19,29,30,36,37,41,42,43],typeidx:43,u32:3,u:20,unop:[18,41],unreach:[18,41],us:36,v128:[18,41],val:[3,9],valid:[0,4,9,40],valtyp:[18,41,43],valu:[1,3,9,14,15,19,21,30,31,37,38,42],variabl:[12,18,28,34,41],vbinop:[18,41],vcvtop:[18,41],vec:[18,41],vector:[1,10,12,14,18,20,26,28,30,31,32,34,37,41],vishiftop:[18,41],vrelop:[18,41],vtestop:41,vunop:[18,41],vvbinop:[18,41],vvternop:[18,41],vvtestop:41,vvunop:[18,41],webassembl:22,white:35,wrap:20,x:[18,41,42],xref:[3,9,18,19,20,41,42,43],y:[18,41],z:20,z_1:20,z_2:20}}) \ No newline at end of file diff --git a/core/syntax/conventions.html b/core/syntax/conventions.html new file mode 100644 index 00000000..87e171b0 --- /dev/null +++ b/core/syntax/conventions.html @@ -0,0 +1,186 @@ + + + + + + + + + Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Conventions

    +

    WebAssembly is a programming language that has multiple concrete representations +(its binary format and the text format). +Both map to a common structure. +For conciseness, this structure is described in the form of an abstract syntax. +All parts of this specification are defined in terms of this abstract syntax.

    +
    +

    Grammar Notation

    +

    The following conventions are adopted in defining grammar rules for abstract syntax.

    +
      +
    • Terminal symbols (atoms) are written in sans-serif font: \(\mathsf{i32}, \mathsf{end}\).

    • +
    • Nonterminal symbols are written in italic font: \(\mathit{valtype}, \mathit{instr}\).

    • +
    • \(A^n\) is a sequence of \(n\geq 0\) iterations of \(A\).

    • +
    • \(A^\ast\) is a possibly empty sequence of iterations of \(A\). +(This is a shorthand for \(A^n\) used where \(n\) is not relevant.)

    • +
    • \(A^+\) is a non-empty sequence of iterations of \(A\). +(This is a shorthand for \(A^n\) where \(n \geq 1\).)

    • +
    • \(A^?\) is an optional occurrence of \(A\). +(This is a shorthand for \(A^n\) where \(n \leq 1\).)

    • +
    • Productions are written \(\mathit{sym} ::= A_1 ~|~ \dots ~|~ A_n\).

    • +
    • Large productions may be split into multiple definitions, indicated by ending the first one with explicit ellipses, \(\mathit{sym} ::= A_1 ~|~ \dots\), and starting continuations with ellipses, \(\mathit{sym} ::= \dots ~|~ A_2\).

    • +
    • Some productions are augmented with side conditions in parentheses, “\((\mathrel{\mbox{if}} \mathit{condition})\)”, that provide a shorthand for a combinatorial expansion of the production into many separate cases.

    • +
    • If the same meta variable or non-terminal symbol appears multiple times in a production, then all those occurrences must have the same instantiation. +(This is a shorthand for a side condition requiring multiple different variables to be equal.)

    • +
    +
    +
    +

    Auxiliary Notation

    +

    When dealing with syntactic constructs the following notation is also used:

    +
      +
    • \(\epsilon\) denotes the empty sequence.

    • +
    • \(|s|\) denotes the length of a sequence \(s\).

    • +
    • \(s[i]\) denotes the \(i\)-th element of a sequence \(s\), starting from \(0\).

    • +
    • \(s[i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n]\) denotes the sub-sequence \(s[i]~\dots~s[i+n-1]\) of a sequence \(s\).

    • +
    • \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i] = A\) denotes the same sequence as \(s\), +except that the \(i\)-th element is replaced with \(A\).

    • +
    • \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n] = A^n\) denotes the same sequence as \(s\), +except that the sub-sequence \(s[i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n]\) is replaced with \(A^n\).

    • +
    • \(\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}(s^\ast)\) denotes the flat sequence formed by concatenating all sequences \(s_i\) in \(s^\ast\).

    • +
    +

    Moreover, the following conventions are employed:

    +
      +
    • The notation \(x^n\), where \(x\) is a non-terminal symbol, is treated as a meta variable ranging over respective sequences of \(x\) (similarly for \(x^\ast\), \(x^+\), \(x^?\)).

    • +
    • When given a sequence \(x^n\), +then the occurrences of \(x\) in a sequence written \((A_1~x~A_2)^n\) are assumed to be in point-wise correspondence with \(x^n\) +(similarly for \(x^\ast\), \(x^+\), \(x^?\)). +This implicitly expresses a form of mapping syntactic constructions over a sequence.

    • +
    +

    Productions of the following form are interpreted as records that map a fixed set of fields \(\mathsf{field}_i\) to “values” \(A_i\), respectively:

    +
    +\[\mathit{r} ~::=~ \{ \mathsf{field}_1~A_1, \mathsf{field}_2~A_2, \dots \}\]
    +

    The following notation is adopted for manipulating such records:

    +
      +
    • \(r.\mathsf{field}\) denotes the contents of the \(\mathsf{field}\) component of \(r\).

    • +
    • \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = A\) denotes the same record as \(r\), +except that the contents of the \(\mathsf{field}\) component is replaced with \(A\).

    • +
    • \(r_1 \href{../syntax/conventions.html#notation-compose}{\oplus} r_2\) denotes the composition of two records with the same fields of sequences by appending each sequence point-wise:

      +
      +\[\{ \mathsf{field}_1\,A_1^\ast, \mathsf{field}_2\,A_2^\ast, \dots \} \href{../syntax/conventions.html#notation-compose}{\oplus} \{ \mathsf{field}_1\,B_1^\ast, \mathsf{field}_2\,B_2^\ast, \dots \} = \{ \mathsf{field}_1\,A_1^\ast~B_1^\ast, \mathsf{field}_2\,A_2^\ast~B_2^\ast, \dots \}\]
      +
    • +
    • \(\href{../syntax/conventions.html#notation-compose}{\bigoplus} r^\ast\) denotes the composition of a sequence of records, respectively; if the sequence is empty, then all fields of the resulting record are empty.

    • +
    +

    The update notation for sequences and records generalizes recursively to nested components accessed by “paths” \(\mathit{pth} ::= ([\dots] \;| \;.\mathsf{field})^+\):

    +
      +
    • \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i]\,\mathit{pth} = A\) is short for \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i] = (s[i] \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathit{pth} = A)\).

    • +
    • \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field}\,\mathit{pth} = A\) is short for \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = (r.\mathsf{field} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathit{pth} = A)\).

    • +
    +

    where \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}}~.\mathsf{field} = A\) is shortened to \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = A\).

    +
    +
    +

    Vectors

    +

    Vectors are bounded sequences of the form \(A^n\) (or \(A^\ast\)), +where the \(A\) can either be values or complex constructions. +A vector can have at most \(2^{32}-1\) elements.

    +
    +\[\begin{split}\begin{array}{lllll} +\def\mathdef2344#1{{}}\mathdef2344{vector} & \href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(A) &::=& + A^n + & (\mathrel{\mbox{if}} n < 2^{32})\\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/syntax/index.html b/core/syntax/index.html new file mode 100644 index 00000000..1ea446c5 --- /dev/null +++ b/core/syntax/index.html @@ -0,0 +1,164 @@ + + + + + + + + + Structure — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/syntax/instructions.html b/core/syntax/instructions.html new file mode 100644 index 00000000..227af43b --- /dev/null +++ b/core/syntax/instructions.html @@ -0,0 +1,634 @@ + + + + + + + + + Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Instructions

    +

    WebAssembly code consists of sequences of instructions. +Its computational model is based on a stack machine in that instructions manipulate values on an implicit operand stack, +consuming (popping) argument values and producing or returning (pushing) result values.

    +

    In addition to dynamic operands from the stack, some instructions also have static immediate arguments, +typically indices or type annotations, +which are part of the instruction itself.

    +

    Some instructions are structured in that they bracket nested sequences of instructions.

    +

    The following sections group instructions into a number of different categories.

    +
    +

    Numeric Instructions

    +

    Numeric instructions provide basic operations over numeric values of specific type. +These operations closely match respective operations available in hardware.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{width} & \mathit{nn}, \mathit{mm} &::=& + \mathsf{32} ~|~ \mathsf{64} \\ +\def\mathdef2422#1{{}}\mathdef2422{signedness} & \href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} &::=& + \mathsf{u} ~|~ \mathsf{s} \\ +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\def\mathdef2461#1{{\mathit{i#1}}}\mathdef2461{\mathit{nn}}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~\href{../syntax/values.html#syntax-float}{\def\mathdef2462#1{{\mathit{f#1}}}\mathdef2462{\mathit{nn}}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-iunop}{\mathit{iunop}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-funop}{\mathit{funop}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-ibinop}{\mathit{ibinop}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-fbinop}{\mathit{fbinop}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-itestop}{\mathit{itestop}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-irelop}{\mathit{irelop}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-frelop}{\mathit{frelop}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} ~|~ + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} ~|~ + \mathsf{i64.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{32\_s} \\&&|& + \mathsf{i32.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}}\mathsf{\_i64} ~|~ + \mathsf{i64.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_i32}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_f}\mathit{mm}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_f}\mathit{mm}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{f32.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}}\mathsf{\_f64} ~|~ + \mathsf{f64.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}}\mathsf{\_f32} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_i}\mathit{mm}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_f}\mathit{nn} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_i}\mathit{nn} \\&&|& + \dots \\ +\def\mathdef2422#1{{}}\mathdef2422{integer unary operator} & \href{../syntax/instructions.html#syntax-iunop}{\mathit{iunop}} &::=& + \mathsf{clz} ~|~ + \mathsf{ctz} ~|~ + \mathsf{popcnt} \\ +\def\mathdef2422#1{{}}\mathdef2422{integer binary operator} & \href{../syntax/instructions.html#syntax-ibinop}{\mathit{ibinop}} &::=& + \mathsf{add} ~|~ + \mathsf{sub} ~|~ + \mathsf{mul} ~|~ + \mathsf{div\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{rem\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{and} ~|~ + \mathsf{or} ~|~ + \mathsf{xor} ~|~ + \mathsf{shl} ~|~ + \mathsf{shr\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{rotl} ~|~ + \mathsf{rotr} \\ +\def\mathdef2422#1{{}}\mathdef2422{floating-point unary operator} & \href{../syntax/instructions.html#syntax-funop}{\mathit{funop}} &::=& + \mathsf{abs} ~|~ + \mathsf{neg} ~|~ + \mathsf{sqrt} ~|~ + \mathsf{ceil} ~|~ + \mathsf{floor} ~|~ + \mathsf{trunc} ~|~ + \mathsf{nearest} \\ +\def\mathdef2422#1{{}}\mathdef2422{floating-point binary operator} & \href{../syntax/instructions.html#syntax-fbinop}{\mathit{fbinop}} &::=& + \mathsf{add} ~|~ + \mathsf{sub} ~|~ + \mathsf{mul} ~|~ + \mathsf{div} ~|~ + \mathsf{min} ~|~ + \mathsf{max} ~|~ + \mathsf{copysign} \\ +\def\mathdef2422#1{{}}\mathdef2422{integer test operator} & \href{../syntax/instructions.html#syntax-itestop}{\mathit{itestop}} &::=& + \mathsf{eqz} \\ +\def\mathdef2422#1{{}}\mathdef2422{integer relational operator} & \href{../syntax/instructions.html#syntax-irelop}{\mathit{irelop}} &::=& + \mathsf{eq} ~|~ + \mathsf{ne} ~|~ + \mathsf{lt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{gt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{le\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{ge\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ +\def\mathdef2422#1{{}}\mathdef2422{floating-point relational operator} & \href{../syntax/instructions.html#syntax-frelop}{\mathit{frelop}} &::=& + \mathsf{eq} ~|~ + \mathsf{ne} ~|~ + \mathsf{lt} ~|~ + \mathsf{gt} ~|~ + \mathsf{le} ~|~ + \mathsf{ge} \\ +\end{array}\end{split}\]
    +

    Numeric instructions are divided by number type. +For each type, several subcategories can be distinguished:

    +
      +
    • Constants: return a static constant.

    • +
    • Unary Operations: consume one operand and produce one result of the respective type.

    • +
    • Binary Operations: consume two operands and produce one result of the respective type.

    • +
    • Tests: consume one operand of the respective type and produce a Boolean integer result.

    • +
    • Comparisons: consume two operands of the respective type and produce a Boolean integer result.

    • +
    • Conversions: consume a value of one type and produce a result of another +(the source type of the conversion is the one after the “\(\mathsf{\_}\)”).

    • +
    +

    Some integer instructions come in two flavors, +where a signedness annotation \(\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\) distinguishes whether the operands are to be interpreted as unsigned or signed integers. +For the other integer instructions, the use of two’s complement for the signed interpretation means that they behave the same regardless of signedness.

    +
    +

    Conventions

    +

    Occasionally, it is convenient to group operators together according to the following grammar shorthands:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2422#1{{}}\mathdef2422{unary operator} & \href{../syntax/instructions.html#syntax-unop}{\mathit{unop}} &::=& + \href{../syntax/instructions.html#syntax-iunop}{\mathit{iunop}} ~|~ + \href{../syntax/instructions.html#syntax-funop}{\mathit{funop}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}{N}\mathsf{\_s} \\ +\def\mathdef2422#1{{}}\mathdef2422{binary operator} & \href{../syntax/instructions.html#syntax-binop}{\mathit{binop}} &::=& \href{../syntax/instructions.html#syntax-ibinop}{\mathit{ibinop}} ~|~ \href{../syntax/instructions.html#syntax-fbinop}{\mathit{fbinop}} \\ +\def\mathdef2422#1{{}}\mathdef2422{test operator} & \href{../syntax/instructions.html#syntax-testop}{\mathit{testop}} &::=& \href{../syntax/instructions.html#syntax-itestop}{\mathit{itestop}} \\ +\def\mathdef2422#1{{}}\mathdef2422{relational operator} & \href{../syntax/instructions.html#syntax-relop}{\mathit{relop}} &::=& \href{../syntax/instructions.html#syntax-irelop}{\mathit{irelop}} ~|~ \href{../syntax/instructions.html#syntax-frelop}{\mathit{frelop}} \\ +\def\mathdef2422#1{{}}\mathdef2422{conversion operator} & \href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}} &::=& + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}} ~|~ + \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}} \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Vector Instructions

    +

    Vector instructions (also known as SIMD instructions, single data multiple value) provide basic operations over values of vector type.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{ishape} & \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}} &::=& + \mathsf{i8x16} ~|~ \mathsf{i16x8} ~|~ \mathsf{i32x4} ~|~ \mathsf{i64x2} \\ +\def\mathdef2422#1{{}}\mathdef2422{fshape} & \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}} &::=& + \mathsf{f32x4} ~|~ \mathsf{f64x2} \\ +\def\mathdef2422#1{{}}\mathdef2422{shape} & \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}} &::=& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}} ~|~ \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}} \\ +\def\mathdef2422#1{{}}\mathdef2422{half} & \href{../syntax/instructions.html#syntax-half}{\mathit{half}} &::=& + \mathsf{low} ~|~ \mathsf{high} \\ +\def\mathdef2422#1{{}}\mathdef2422{lane index} & \href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u8}} \\ +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../syntax/values.html#syntax-int}{\mathit{i128}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-vvtestop}{\mathit{vvtestop}} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}^{16} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} ~|~ + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} \\&&|& + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} ~|~ + \mathsf{i64x2.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} \\&&|& + \mathsf{i8x16}\mathsf{.}\href{../syntax/instructions.html#syntax-virelop}{\mathit{virelop}} ~|~ + \mathsf{i16x8}\mathsf{.}\href{../syntax/instructions.html#syntax-virelop}{\mathit{virelop}} ~|~ + \mathsf{i32x4}\mathsf{.}\href{../syntax/instructions.html#syntax-virelop}{\mathit{virelop}} \\&&|& + \mathsf{i64x2.}\mathsf{eq} ~|~ + \mathsf{i64x2.}\mathsf{ne} ~|~ + \mathsf{i64x2.}\mathsf{lt\_s} ~|~ + \mathsf{i64x2.}\mathsf{gt\_s} ~|~ + \mathsf{i64x2.}\mathsf{le\_s} ~|~ + \mathsf{i64x2.}\mathsf{ge\_s} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vfrelop}{\mathit{vfrelop}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-viunop}{\mathit{viunop}} ~|~ + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{popcnt}} \\&&|& + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{q15mulr\_sat}}\mathsf{\_s} \\ &&|& + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s} \\ &&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vfunop}{\mathit{vfunop}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vitestop}{\mathit{vitestop}} \\ &&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} \\ &&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i8x16\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \mathsf{i64x2.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}} \\&&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vibinop}{\mathit{vibinop}} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-viminmaxop}{\mathit{viminmaxop}} ~|~ + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-viminmaxop}{\mathit{viminmaxop}} ~|~ + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-viminmaxop}{\mathit{viminmaxop}} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-visatbinop}{\mathit{visatbinop}} ~|~ + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-visatbinop}{\mathit{visatbinop}} \\&&|& + \mathsf{i16x8.}\mathsf{mul} ~|~ + \mathsf{i32x4.}\mathsf{mul} ~|~ + \mathsf{i64x2.}\mathsf{mul} \\&&|& + \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u} ~|~ + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u} \\&&|& + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i8x16\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i64x2.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ &&|& + \mathsf{i16x8.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ &&|& + \href{../syntax/instructions.html#syntax-shape}{\mathit{fshape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vfbinop}{\mathit{vfbinop}} \\&&|& + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{i32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\mathsf{\_zero} \\&&|& + \mathsf{f32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{f32x4.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{demote}}\mathsf{\_f64x2\_zero} \\&&|& + \mathsf{f64x2.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{f64x2.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{promote}}\mathsf{\_low\_f32x4} \\&&|& + \dots \\ +\def\mathdef2422#1{{}}\mathdef2422{vector bitwise unary operator} & \href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}} &::=& + \mathsf{not} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector bitwise binary operator} & \href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}} &::=& + \mathsf{and} ~|~ + \mathsf{andnot} ~|~ + \mathsf{or} ~|~ + \mathsf{xor} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector bitwise ternary operator} & \href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}} &::=& + \mathsf{bitselect} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector bitwise test operator} & \href{../syntax/instructions.html#syntax-vvtestop}{\mathit{vvtestop}} &::=& + \mathsf{any\_true} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer test operator} & \href{../syntax/instructions.html#syntax-vitestop}{\mathit{vitestop}} &::=& + \mathsf{all\_true} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer relational operator} & \href{../syntax/instructions.html#syntax-virelop}{\mathit{virelop}} &::=& + \mathsf{eq} ~|~ + \mathsf{ne} ~|~ + \mathsf{lt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{gt\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{le\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{ge\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector floating-point relational operator} & \href{../syntax/instructions.html#syntax-vfrelop}{\mathit{vfrelop}} &::=& + \mathsf{eq} ~|~ + \mathsf{ne} ~|~ + \mathsf{lt} ~|~ + \mathsf{gt} ~|~ + \mathsf{le} ~|~ + \mathsf{ge} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer unary operator} & \href{../syntax/instructions.html#syntax-viunop}{\mathit{viunop}} &::=& + \mathsf{abs} ~|~ + \mathsf{neg} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer binary operator} & \href{../syntax/instructions.html#syntax-vibinop}{\mathit{vibinop}} &::=& + \mathsf{add} ~|~ + \mathsf{sub} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer binary min/max operator} & \href{../syntax/instructions.html#syntax-viminmaxop}{\mathit{viminmaxop}} &::=& + \mathsf{min\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{max\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer saturating binary operator} & \href{../syntax/instructions.html#syntax-visatbinop}{\mathit{visatbinop}} &::=& + \mathsf{add\_sat\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} ~|~ + \mathsf{sub\_sat\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector integer shift operator} & \href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}} &::=& + \mathsf{shl} ~|~ + \mathsf{shr\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector floating-point unary operator} & \href{../syntax/instructions.html#syntax-vfunop}{\mathit{vfunop}} &::=& + \mathsf{abs} ~|~ + \mathsf{neg} ~|~ + \mathsf{sqrt} ~|~ + \mathsf{ceil} ~|~ + \mathsf{floor} ~|~ + \mathsf{trunc} ~|~ + \mathsf{nearest} \\ +\def\mathdef2422#1{{}}\mathdef2422{vector floating-point binary operator} & \href{../syntax/instructions.html#syntax-vfbinop}{\mathit{vfbinop}} &::=& + \mathsf{add} ~|~ + \mathsf{sub} ~|~ + \mathsf{mul} ~|~ + \mathsf{div} ~|~ + \mathsf{min} ~|~ + \mathsf{max} ~|~ + \mathsf{pmin} ~|~ + \mathsf{pmax} \\ +\end{array}\end{split}\]
    +

    Vector instructions have a naming convention involving a prefix that +determines how their operands will be interpreted. +This prefix describes the shape of the operand, +written \(t\mathsf{x}N\), and consisting of a packed numeric type \(t\) and the number of lanes \(N\) of that type. +Operations are performed point-wise on the values of each lane.

    +
    +

    Note

    +

    For example, the shape \(\mathsf{i32x4}\) interprets the operand +as four \(\href{../syntax/values.html#syntax-int}{\mathit{i32}}\) values, packed into an \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\). +The bitwidth of the numeric type \(t\) times \(N\) always is 128.

    +
    +

    Instructions prefixed with \(\mathsf{v128}\) do not involve a specific interpretation, and treat the \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) as an \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\) value or a vector of 128 individual bits.

    +

    Vector instructions can be grouped into several subcategories:

    +
      +
    • Constants: return a static constant.

    • +
    • Unary Operations: consume one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operand and produce one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result.

    • +
    • Binary Operations: consume two \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operands and produce one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result.

    • +
    • Ternary Operations: consume three \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operands and produce one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result.

    • +
    • Tests: consume one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operand and produce a Boolean integer result.

    • +
    • Shifts: consume a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operand and a \(\href{../syntax/values.html#syntax-int}{\mathit{i32}}\) operand, producing one \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result.

    • +
    • Splats: consume a value of numeric type and produce a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result of a specified shape.

    • +
    • Extract lanes: consume a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operand and return the numeric value in a given lane.

    • +
    • Replace lanes: consume a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) operand and a numeric value for a given lane, and produce a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) result.

    • +
    +

    Some vector instructions have a signedness annotation \(\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\) which distinguishes whether the elements in the operands are to be interpreted as unsigned or signed integers. +For the other vector instructions, the use of two’s complement for the signed interpretation means that they behave the same regardless of signedness.

    +
    +

    Conventions

    +

    Occasionally, it is convenient to group operators together according to the following grammar shorthands:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2422#1{{}}\mathdef2422{unary operator} & \href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}} &::=& + \href{../syntax/instructions.html#syntax-viunop}{\mathit{viunop}} ~|~ + \href{../syntax/instructions.html#syntax-vfunop}{\mathit{vfunop}} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{popcnt}} \\ +\def\mathdef2422#1{{}}\mathdef2422{binary operator} & \href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}} &::=& + \href{../syntax/instructions.html#syntax-vibinop}{\mathit{vibinop}} ~|~ \href{../syntax/instructions.html#syntax-vfbinop}{\mathit{vfbinop}} \\&&|& + \href{../syntax/instructions.html#syntax-viminmaxop}{\mathit{viminmaxop}} ~|~ \href{../syntax/instructions.html#syntax-visatbinop}{\mathit{visatbinop}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{q15mulr\_sat}}\mathsf{\_s} \\ +\def\mathdef2422#1{{}}\mathdef2422{test operator} & \href{../syntax/instructions.html#syntax-vtestop}{\mathit{vtestop}} &::=& + \href{../syntax/instructions.html#syntax-vitestop}{\mathit{vitestop}} \\ +\def\mathdef2422#1{{}}\mathdef2422{relational operator} & \href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}} &::=& + \href{../syntax/instructions.html#syntax-virelop}{\mathit{virelop}} ~|~ \href{../syntax/instructions.html#syntax-vfrelop}{\mathit{vfrelop}} \\ +\def\mathdef2422#1{{}}\mathdef2422{conversion operator} & \href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}} &::=& + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{demote}} ~|~ + \href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{promote}} \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Reference Instructions

    +

    Instructions in this group are concerned with accessing references.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} \\ +\end{array}\end{split}\]
    +

    These instruction produce a null value, check for a null value, or produce a reference to a given function, respectively.

    +
    +
    +

    Parametric Instructions

    +

    Instructions in this group can operate on operands of any value type.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~(\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^\ast)^? \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\) instruction simply throws away a single operand.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) instruction selects one of its first two operands based on whether its third operand is zero or not. +It may include a value type determining the type of these operands. If missing, the operands must be of numeric type.

    +
    +

    Note

    +

    In future versions of WebAssembly, the type annotation on \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) may allow for more than a single value being selected at the same time.

    +
    +
    +
    +

    Variable Instructions

    +

    Variable instructions are concerned with access to local or global variables.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~\href{../syntax/modules.html#syntax-localidx}{\mathit{localidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~\href{../syntax/modules.html#syntax-localidx}{\mathit{localidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~\href{../syntax/modules.html#syntax-localidx}{\mathit{localidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~\href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~\href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} \\ +\end{array}\end{split}\]
    +

    These instructions get or set the values of variables, respectively. +The \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}\) instruction is like \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}\) but also returns its argument.

    +
    +
    +

    Table Instructions

    +

    Instructions in this group are concerned with tables table.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}~\href{../syntax/modules.html#syntax-elemidx}{\mathit{elemidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~\href{../syntax/modules.html#syntax-elemidx}{\mathit{elemidx}} \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}\) and \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}\) instructions load or store an element in a table, respectively.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}\) instruction returns the current size of a table. +The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}\) instruction grows table by a given delta and returns the previous size, or \(-1\) if enough space cannot be allocated. +It also takes an initialization value for the newly allocated entries.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}\) instruction sets all entries in a range to a given value.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}\) instruction copies elements from a source table region to a possibly overlapping destination region; the first index denotes the destination. +The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}\) instruction copies elements from a passive element segment into a table. +The \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}\) instruction prevents further use of a passive element segment. This instruction is intended to be used as an optimization hint. After an element segment is dropped its elements can no longer be retrieved, so the memory used by this segment may be freed.

    +

    An additional instruction that accesses a table is the control instruction \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}\).

    +
    +
    +

    Memory Instructions

    +

    Instructions in this group are concerned with linear memory.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{memory immediate} & \href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} &::=& + \{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~\href{../syntax/values.html#syntax-int}{\mathit{u32}}, \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~\href{../syntax/values.html#syntax-int}{\mathit{u32}} \} \\ +\def\mathdef2422#1{{}}\mathdef2422{lane width} & \mathit{ww} &::=& + 8 ~|~ 16 ~|~ 32 ~|~ 64 \\ +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{f}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{i64.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{i}\mathit{nn}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{i64.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathit{ww}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} \\&&|& + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathit{ww}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} ~|~ + \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathit{ww}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~\href{../syntax/modules.html#syntax-dataidx}{\mathit{dataidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~\href{../syntax/modules.html#syntax-dataidx}{\mathit{dataidx}} \\ +\end{array}\end{split}\]
    +

    Memory is accessed with \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\) and \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\) instructions for the different number types. +They all take a memory immediate \(\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\) that contains an address offset and the expected alignment (expressed as the exponent of a power of 2). +Integer loads and stores can optionally specify a storage size that is smaller than the bit width of the respective value type. +In the case of loads, a sign extension mode \(\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\) is then required to select appropriate behavior.

    +

    Vector loads can specify a shape that is half the bit width of \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\). Each lane is half its usual size, and the sign extension mode \(\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\) then specifies how the smaller lane is extended to the larger lane. +Alternatively, vector loads can perform a splat, such that only a single lane of the specified storage size is loaded, and the result is duplicated to all lanes.

    +

    The static address offset is added to the dynamic address operand, yielding a 33 bit effective address that is the zero-based index at which the memory is accessed. +All values are read and written in little endian byte order. +A trap results if any of the accessed memory bytes lies outside the address range implied by the memory’s current size.

    +
    +

    Note

    +

    Future version of WebAssembly might provide memory instructions with 64 bit address ranges.

    +
    +

    The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\) instruction returns the current size of a memory. +The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\) instruction grows memory by a given delta and returns the previous size, or \(-1\) if enough memory cannot be allocated. +Both instructions operate in units of page size.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\) instruction sets all values in a region to a given byte. +The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\) instruction copies data from a source memory region to a possibly overlapping destination region. +The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}\) instruction copies data from a passive data segment into a memory. +The \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}\) instruction prevents further use of a passive data segment. This instruction is intended to be used as an optimization hint. After a data segment is dropped its data can no longer be retrieved, so the memory used by this segment may be freed.

    +
    +

    Note

    +

    In the current version of WebAssembly, +all memory instructions implicitly operate on memory index \(0\). +This restriction may be lifted in future versions.

    +
    +
    +
    +

    Control Instructions

    +

    Instructions in this group affect the flow of control.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2422#1{{}}\mathdef2422{block type} & \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} &::=& + \href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}} ~|~ \href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^? \\ +\def\mathdef2422#1{{}}\mathdef2422{instruction} & \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} &::=& + \dots \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~\href{../syntax/modules.html#syntax-labelidx}{\mathit{labelidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~\href{../syntax/modules.html#syntax-labelidx}{\mathit{labelidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-labelidx}{\mathit{labelidx}})~\href{../syntax/modules.html#syntax-labelidx}{\mathit{labelidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} \\&&|& + \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}~\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}} \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}}\) instruction does nothing.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\) instruction causes an unconditional trap.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}\) and \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) instructions are structured instructions. +They bracket nested sequences of instructions, called blocks, terminated with, or separated by, \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) or \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}\) pseudo-instructions. +As the grammar prescribes, they must be well-nested.

    +

    A structured instruction can consume input and produce output on the operand stack according to its annotated block type. +It is given either as a type index that refers to a suitable function type, or as an optional value type inline, which is a shorthand for the function type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?]\).

    +

    Each structured control instruction introduces an implicit label. +Labels are targets for branch instructions that reference them with label indices. +Unlike with other index spaces, indexing of labels is relative by nesting depth, +that is, label \(0\) refers to the innermost structured control instruction enclosing the referring branch instruction, +while increasing indices refer to those farther out. +Consequently, labels can only be referenced from within the associated structured control instruction. +This also implies that branches can only be directed outwards, +“breaking” from the block of the control construct they target. +The exact effect depends on that control construct. +In case of \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\) or \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) it is a forward jump, +resuming execution after the matching \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\). +In case of \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}\) it is a backward jump to the beginning of the loop.

    +
    +

    Note

    +

    This enforces structured control flow. +Intuitively, a branch targeting a \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\) or \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) behaves like a \(\mathsf{break}\) statement in most C-like languages, +while a branch targeting a \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}\) behaves like a \(\mathsf{continue}\) statement.

    +
    +

    Branch instructions come in several flavors: +\(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}\) performs an unconditional branch, +\(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}\) performs a conditional branch, +and \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}\) performs an indirect branch through an operand indexing into the label vector that is an immediate to the instruction, or to a default target if the operand is out of bounds. +The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\) instruction is a shortcut for an unconditional branch to the outermost block, which implicitly is the body of the current function. +Taking a branch unwinds the operand stack up to the height where the targeted structured control instruction was entered. +However, branches may additionally consume operands themselves, which they push back on the operand stack after unwinding. +Forward branches require operands according to the output of the targeted block’s type, i.e., represent the values produced by the terminated block. +Backward branches require operands according to the input of the targeted block’s type, i.e., represent the values consumed by the restarted block.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}\) instruction invokes another function, consuming the necessary arguments from the stack and returning the result values of the call. +The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}\) instruction calls a function indirectly through an operand indexing into a table that is denoted by a table index and must have type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\). +Since it may contain functions of heterogeneous type, +the callee is dynamically checked against the function type indexed by the instruction’s second immediate, and the call is aborted with a trap if it does not match.

    +
    +
    +

    Expressions

    +

    Function bodies, initialization values for globals, and offsets of element or data segments are given as expressions, which are sequences of instructions terminated by an \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) marker.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2422#1{{}}\mathdef2422{expression} & \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} &::=& + \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ +\end{array}\end{split}\]
    +

    In some places, validation restricts expressions to be constant, which limits the set of allowable instructions.

    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/syntax/modules.html b/core/syntax/modules.html new file mode 100644 index 00000000..9b41c91f --- /dev/null +++ b/core/syntax/modules.html @@ -0,0 +1,355 @@ + + + + + + + + + Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Modules

    +

    WebAssembly programs are organized into modules, +which are the unit of deployment, loading, and compilation. +A module collects definitions for types, functions, tables, memories, and globals. +In addition, it can declare imports and exports +and provide initialization in the form of data and element segments, or a start function.

    +
    +\[\begin{split}\begin{array}{lllll} +\def\mathdef2463#1{{}}\mathdef2463{module} & \href{../syntax/modules.html#syntax-module}{\mathit{module}} &::=& \{ & + \href{../syntax/modules.html#syntax-module}{\mathsf{types}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-func}{\mathit{func}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{tables}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-table}{\mathit{table}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{mems}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{globals}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-global}{\mathit{global}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{elems}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{datas}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-data}{\mathit{data}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{start}}~\href{../syntax/modules.html#syntax-start}{\mathit{start}}^?, \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{imports}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-import}{\mathit{import}}), \\&&&& + \href{../syntax/modules.html#syntax-module}{\mathsf{exports}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}) \quad\} \\ +\end{array}\end{split}\]
    +

    Each of the vectors – and thus the entire module – may be empty.

    +
    +

    Indices

    +

    Definitions are referenced with zero-based indices. +Each class of definition has its own index space, as distinguished by the following classes.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{type index} & \href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{function index} & \href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{table index} & \href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{memory index} & \href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{global index} & \href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{element index} & \href{../syntax/modules.html#syntax-elemidx}{\mathit{elemidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{data index} & \href{../syntax/modules.html#syntax-dataidx}{\mathit{dataidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{local index} & \href{../syntax/modules.html#syntax-localidx}{\mathit{localidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\def\mathdef2463#1{{}}\mathdef2463{label index} & \href{../syntax/modules.html#syntax-labelidx}{\mathit{labelidx}} &::=& \href{../syntax/values.html#syntax-int}{\mathit{u32}} \\ +\end{array}\end{split}\]
    +

    The index space for functions, tables, memories and globals includes respective imports declared in the same module. +The indices of these imports precede the indices of other definitions in the same index space.

    +

    Element indices reference element segments and data indices reference data segments.

    +

    The index space for locals is only accessible inside a function and includes the parameters of that function, which precede the local variables.

    +

    Label indices reference structured control instructions inside an instruction sequence.

    +
    +

    Conventions

    +
      +
    • The meta variable \(l\) ranges over label indices.

    • +
    • The meta variables \(x, y\) range over indices in any of the other index spaces.

    • +
    • The notation \(\mathrm{idx}(A)\) denotes the set of indices from index space \(\mathit{idx}\) occurring free in \(A\). We sometimes reinterpret this set as the vector of its elements.

    • +
    +
    +

    Note

    +

    For example, if \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) is \((\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x) (\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~y)\), then \(\href{../syntax/modules.html#syntax-dataidx}{\mathrm{dataidx}}(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast) = \{x, y\}\), or equivalently, the vector \(x~y\).

    +
    +
    +
    +
    +

    Types

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{types}}\) component of a module defines a vector of function types.

    +

    All function types used in a module must be defined in this component. +They are referenced by type indices.

    +
    +

    Note

    +

    Future versions of WebAssembly may add additional forms of type definitions.

    +
    +
    +
    +

    Functions

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}\) component of a module defines a vector of functions with the following structure:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{function} & \href{../syntax/modules.html#syntax-func}{\mathit{func}} &::=& + \{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}, \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}), \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/modules.html#syntax-func}{\mathsf{type}}\) of a function declares its signature by reference to a type defined in the module. +The parameters of the function are referenced through 0-based local indices in the function’s body; they are mutable.

    +

    The \(\href{../syntax/modules.html#syntax-func}{\mathsf{locals}}\) declare a vector of mutable local variables and their types. +These variables are referenced through local indices in the function’s body. +The index of the first local is the smallest index not referencing a parameter.

    +

    The \(\href{../syntax/modules.html#syntax-func}{\mathsf{body}}\) is an instruction sequence that upon termination must produce a stack matching the function type’s result type.

    +

    Functions are referenced through function indices, +starting with the smallest index not referencing a function import.

    +
    +
    +

    Tables

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{tables}}\) component of a module defines a vector of tables described by their table type:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{table} & \href{../syntax/modules.html#syntax-table}{\mathit{table}} &::=& + \{ \href{../syntax/modules.html#syntax-table}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \} \\ +\end{array}\end{split}\]
    +

    A table is a vector of opaque values of a particular reference type. +The \(\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\) size in the limits of the table type specifies the initial size of that table, while its \(\href{../syntax/types.html#syntax-limits}{\mathsf{max}}\), if present, restricts the size to which it can grow later.

    +

    Tables can be initialized through element segments.

    +

    Tables are referenced through table indices, +starting with the smallest index not referencing a table import. +Most constructs implicitly reference table index \(0\).

    +
    +
    +

    Memories

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{mems}}\) component of a module defines a vector of linear memories (or memories for short) as described by their memory type:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{memory} & \href{../syntax/modules.html#syntax-mem}{\mathit{mem}} &::=& + \{ \href{../syntax/modules.html#syntax-mem}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \} \\ +\end{array}\end{split}\]
    +

    A memory is a vector of raw uninterpreted bytes. +The \(\href{../syntax/types.html#syntax-limits}{\mathsf{min}}\) size in the limits of the memory type specifies the initial size of that memory, while its \(\href{../syntax/types.html#syntax-limits}{\mathsf{max}}\), if present, restricts the size to which it can grow later. +Both are in units of page size.

    +

    Memories can be initialized through data segments.

    +

    Memories are referenced through memory indices, +starting with the smallest index not referencing a memory import. +Most constructs implicitly reference memory index \(0\).

    +
    +

    Note

    +

    In the current version of WebAssembly, at most one memory may be defined or imported in a single module, +and all constructs implicitly reference this memory \(0\). +This restriction may be lifted in future versions.

    +
    +
    +
    +

    Globals

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}\) component of a module defines a vector of global variables (or globals for short):

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{global} & \href{../syntax/modules.html#syntax-global}{\mathit{global}} &::=& + \{ \href{../syntax/modules.html#syntax-global}{\mathsf{type}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}, \href{../syntax/modules.html#syntax-global}{\mathsf{init}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} \\ +\end{array}\end{split}\]
    +

    Each global stores a single value of the given global type. +Its \(\href{../syntax/modules.html#syntax-global}{\mathsf{type}}\) also specifies whether a global is immutable or mutable. +Moreover, each global is initialized with an \(\href{../syntax/modules.html#syntax-global}{\mathsf{init}}\) value given by a constant initializer expression.

    +

    Globals are referenced through global indices, +starting with the smallest index not referencing a global import.

    +
    +
    +

    Element Segments

    +

    The initial contents of a table is uninitialized. Element segments can be used to initialize a subrange of a table from a static vector of elements.

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\) component of a module defines a vector of element segments. +Each element segment defines a reference type and a corresponding list of constant element expressions.

    +

    Element segments have a mode that identifies them as either passive, active, or declarative. +A passive element segment’s elements can be copied to a table using the \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}\) instruction. +An active element segment copies its elements into a table during instantiation, as specified by a table index and a constant expression defining an offset into that table. +A declarative element segment is not available at runtime but merely serves to forward-declare references that are formed in code with instructions like \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}\).

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{element segment} & \href{../syntax/modules.html#syntax-elem}{\mathit{elem}} &::=& + \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}), \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} \} \\ +\def\mathdef2463#1{{}}\mathdef2463{element segment mode} & \href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} &::=& + \href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}} \\&&|& + \href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}}, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} \\&&|& + \href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}} \\ +\end{array}\end{split}\]
    +

    The \(\href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}\) is given by a constant expression.

    +

    Element segments are referenced through element indices.

    +
    +

    Note

    +

    In the current version of WebAssembly, only tables of element type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\) can be initialized with an element segment. +This limitation may be lifted in the future.

    +
    +
    +
    +

    Data Segments

    +

    The initial contents of a memory are zero bytes. Data segments can be used to initialize a range of memory from a static vector of bytes.

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\) component of a module defines a vector of data segments.

    +

    Like element segments, data segments have a mode that identifies them as either passive or active. +A passive data segment’s contents can be copied into a memory using the \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}\) instruction. +An active data segment copies its contents into a memory during instantiation, as specified by a memory index and a constant expression defining an offset into that memory.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{data segment} & \href{../syntax/modules.html#syntax-data}{\mathit{data}} &::=& + \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/values.html#syntax-byte}{\mathit{byte}}), \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} \} \\ +\def\mathdef2463#1{{}}\mathdef2463{data segment mode} & \href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} &::=& + \href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}} \\&&|& + \href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}}, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} \\ +\end{array}\end{split}\]
    +

    Data segments are referenced through data indices.

    +
    +

    Note

    +

    In the current version of WebAssembly, at most one memory is allowed in a module. +Consequently, the only valid \(\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}}\) is \(0\).

    +
    +
    +
    +

    Start Function

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\) component of a module declares the function index of a start function that is automatically invoked when the module is instantiated, after tables and memories have been initialized.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{start function} & \href{../syntax/modules.html#syntax-start}{\mathit{start}} &::=& + \{ \href{../syntax/modules.html#syntax-start}{\mathsf{func}}~\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} \} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The start function is intended for initializing the state of a module. +The module and its exports are not accessible before this initialization has completed.

    +
    +
    +
    +

    Exports

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}\) component of a module defines a set of exports that become accessible to the host environment once the module has been instantiated.

    +
    +\[\begin{split}\begin{array}{llcl} +\def\mathdef2463#1{{}}\mathdef2463{export} & \href{../syntax/modules.html#syntax-export}{\mathit{export}} &::=& + \{ \href{../syntax/modules.html#syntax-export}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/modules.html#syntax-export}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} \} \\ +\def\mathdef2463#1{{}}\mathdef2463{export description} & \href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} &::=& + \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} \\&&|& + \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \\&&|& + \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}} \\&&|& + \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~\href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} \\ +\end{array}\end{split}\]
    +

    Each export is labeled by a unique name. +Exportable definitions are functions, tables, memories, and globals, +which are referenced through a respective descriptor.

    +
    +

    Conventions

    +

    The following auxiliary notation is defined for sequences of exports, filtering out indices of a specific kind in an order-preserving fashion:

    +
      +
    • \(\href{../syntax/modules.html#syntax-exportdesc}{\mathrm{funcs}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast) = [\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} ~|~ \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~\href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}} \in (\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{desc}})^\ast]\)

    • +
    • \(\href{../syntax/modules.html#syntax-exportdesc}{\mathrm{tables}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast) = [\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} ~|~ \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~\href{../syntax/modules.html#syntax-tableidx}{\mathit{tableidx}} \in (\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{desc}})^\ast]\)

    • +
    • \(\href{../syntax/modules.html#syntax-exportdesc}{\mathrm{mems}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast) = [\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}} ~|~ \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~\href{../syntax/modules.html#syntax-memidx}{\mathit{memidx}} \in (\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{desc}})^\ast]\)

    • +
    • \(\href{../syntax/modules.html#syntax-exportdesc}{\mathrm{globals}}(\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast) = [\href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} ~|~ \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~\href{../syntax/modules.html#syntax-globalidx}{\mathit{globalidx}} \in (\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{desc}})^\ast]\)

    • +
    +
    +
    +
    +

    Imports

    +

    The \(\href{../syntax/modules.html#syntax-module}{\mathsf{imports}}\) component of a module defines a set of imports that are required for instantiation.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2463#1{{}}\mathdef2463{import} & \href{../syntax/modules.html#syntax-import}{\mathit{import}} &::=& + \{ \href{../syntax/modules.html#syntax-import}{\mathsf{module}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/modules.html#syntax-import}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/modules.html#syntax-import}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} \} \\ +\def\mathdef2463#1{{}}\mathdef2463{import description} & \href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} &::=& + \href{../syntax/modules.html#syntax-importdesc}{\mathsf{func}}~\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}} \\&&|& + \href{../syntax/modules.html#syntax-importdesc}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \\&&|& + \href{../syntax/modules.html#syntax-importdesc}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \\&&|& + \href{../syntax/modules.html#syntax-importdesc}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \\ +\end{array}\end{split}\]
    +

    Each import is labeled by a two-level name space, consisting of a \(\href{../syntax/modules.html#syntax-import}{\mathsf{module}}\) name and a \(\href{../syntax/modules.html#syntax-import}{\mathsf{name}}\) for an entity within that module. +Importable definitions are functions, tables, memories, and globals. +Each import is specified by a descriptor with a respective type that a definition provided during instantiation is required to match.

    +

    Every import defines an index in the respective index space. +In each index space, the indices of imports go before the first index of any definition contained in the module itself.

    +
    +

    Note

    +

    Unlike export names, import names are not necessarily unique. +It is possible to import the same \(\href{../syntax/modules.html#syntax-import}{\mathsf{module}}\)/\(\href{../syntax/modules.html#syntax-import}{\mathsf{name}}\) pair multiple times; +such imports may even have different type descriptions, including different kinds of entities. +A module with such imports can still be instantiated depending on the specifics of how an embedder allows resolving and supplying imports. +However, embedders are not required to support such overloading, +and a WebAssembly module itself cannot implement an overloaded name.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/syntax/types.html b/core/syntax/types.html new file mode 100644 index 00000000..76ece205 --- /dev/null +++ b/core/syntax/types.html @@ -0,0 +1,271 @@ + + + + + + + + + Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Types

    +

    Various entities in WebAssembly are classified by types. +Types are checked during validation, instantiation, and possibly execution.

    +
    +

    Number Types

    +

    Number types classify numeric values.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{number type} & \href{../syntax/types.html#syntax-numtype}{\mathit{numtype}} &::=& + \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} ~|~ \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} ~|~ \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} ~|~ \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ +\end{array}\end{split}\]
    +

    The types \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) and \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\) classify 32 and 64 bit integers, respectively. +Integers are not inherently signed or unsigned, their interpretation is determined by individual operations.

    +

    The types \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\) and \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\) classify 32 and 64 bit floating-point data, respectively. +They correspond to the respective binary floating-point representations, also known as single and double precision, as defined by the IEEE 754-2019 standard (Section 3.3).

    +

    Number types are transparent, meaning that their bit patterns can be observed. +Values of number type can be stored in memories.

    +
    +

    Conventions

    +
      +
    • The notation \(|t|\) denotes the bit width of a number type \(t\). +That is, \(|\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}| = |\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}| = 32\) and \(|\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}| = |\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}| = 64\).

    • +
    +
    +
    +
    +

    Vector Types

    +

    Vector types classify vectors of numeric values processed by vector instructions (also known as SIMD instructions, single instruction multiple data).

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{vector type} & \href{../syntax/types.html#syntax-vectype}{\mathit{vectype}} &::=& + \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}} \\ +\end{array}\end{split}\]
    +

    The type \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\) corresponds to a 128 bit vector of packed integer or floating-point data. The packed data +can be interpreted as signed or unsigned integers, single or double precision floating-point +values, or a single 128 bit type. The interpretation is determined by individual operations.

    +

    Vector types, like number types are transparent, meaning that their bit patterns can be observed. +Values of vector type can be stored in memories.

    +
    +

    Conventions

    +
      +
    • The notation \(|t|\) for bit width extends to vector types as well, that is, \(|\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}| = 128\).

    • +
    +
    +
    +
    +

    Reference Types

    +

    Reference types classify first-class references to objects in the runtime store.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{reference type} & \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} &::=& + \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} ~|~ \href{../syntax/types.html#syntax-reftype}{\mathsf{externref}} \\ +\end{array}\end{split}\]
    +

    The type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\) denotes the infinite union of all references to functions, regardless of their function types.

    +

    The type \(\href{../syntax/types.html#syntax-reftype}{\mathsf{externref}}\) denotes the infinite union of all references to objects owned by the embedder and that can be passed into WebAssembly under this type.

    +

    Reference types are opaque, meaning that neither their size nor their bit pattern can be observed. +Values of reference type can be stored in tables.

    +
    +
    +

    Value Types

    +

    Value types classify the individual values that WebAssembly code can compute with and the values that a variable accepts. +They are either number types, vector types, or reference types.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{value type} & \href{../syntax/types.html#syntax-valtype}{\mathit{valtype}} &::=& + \href{../syntax/types.html#syntax-numtype}{\mathit{numtype}} ~|~ \href{../syntax/types.html#syntax-vectype}{\mathit{vectype}} ~|~ \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} \\ +\end{array}\end{split}\]
    +
    +

    Conventions

    +
      +
    • The meta variable \(t\) ranges over value types or subclasses thereof where clear from context.

    • +
    +
    +
    +
    +

    Result Types

    +

    Result types classify the result of executing instructions or functions, +which is a sequence of values, written with brackets.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{result type} & \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}} &::=& + [\href{../syntax/conventions.html#syntax-vec}{\mathit{vec}}(\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}})] \\ +\end{array}\end{split}\]
    +
    +
    +

    Function Types

    +

    Function types classify the signature of functions, +mapping a vector of parameters to a vector of results. +They are also used to classify the inputs and outputs of instructions.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{function type} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}} &::=& + \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}} \href{../syntax/types.html#syntax-functype}{\rightarrow} \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Limits

    +

    Limits classify the size range of resizeable storage associated with memory types and table types.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{limits} & \href{../syntax/types.html#syntax-limits}{\mathit{limits}} &::=& + \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~\href{../syntax/values.html#syntax-int}{\mathit{u32}}, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\href{../syntax/values.html#syntax-int}{\mathit{u32}}^? \} \\ +\end{array}\end{split}\]
    +

    If no maximum is given, the respective storage can grow to any size.

    +
    +
    +

    Memory Types

    +

    Memory types classify linear memories and their size range.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{memory type} & \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} &::=& + \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \\ +\end{array}\end{split}\]
    +

    The limits constrain the minimum and optionally the maximum size of a memory. +The limits are given in units of page size.

    +
    +
    +

    Table Types

    +

    Table types classify tables over elements of reference type within a size range.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{table type} & \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} &::=& + \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} \\ +\end{array}\end{split}\]
    +

    Like memories, tables are constrained by limits for their minimum and optionally maximum size. +The limits are given in numbers of entries.

    +
    +

    Note

    +

    In future versions of WebAssembly, additional element types may be introduced.

    +
    +
    +
    +

    Global Types

    +

    Global types classify global variables, which hold a value and can either be mutable or immutable.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{global type} & \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} &::=& + \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}} \\ +\def\mathdef2502#1{{}}\mathdef2502{mutability} & \href{../syntax/types.html#syntax-mut}{\mathit{mut}} &::=& + \href{../syntax/types.html#syntax-mut}{\mathsf{const}} ~|~ + \href{../syntax/types.html#syntax-mut}{\mathsf{var}} \\ +\end{array}\end{split}\]
    +
    +
    +

    External Types

    +

    External types classify imports and external values with their respective types.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2502#1{{}}\mathdef2502{external types} & \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} &::=& + \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} ~|~ + \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} ~|~ + \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} ~|~ + \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \\ +\end{array}\end{split}\]
    +
    +

    Conventions

    +

    The following auxiliary notation is defined for sequences of external types. +It filters out entries of a specific kind in an order-preserving fashion:

    +
      +
    • \(\href{../syntax/types.html#syntax-externtype}{\mathrm{funcs}}(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast) = [\href{../syntax/types.html#syntax-functype}{\mathit{functype}} ~|~ (\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}) \in \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast]\)

    • +
    • \(\href{../syntax/types.html#syntax-externtype}{\mathrm{tables}}(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast) = [\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} ~|~ (\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}) \in \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast]\)

    • +
    • \(\href{../syntax/types.html#syntax-externtype}{\mathrm{mems}}(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast) = [\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} ~|~ (\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}) \in \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast]\)

    • +
    • \(\href{../syntax/types.html#syntax-externtype}{\mathrm{globals}}(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast) = [\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} ~|~ (\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}) \in \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}^\ast]\)

    • +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/syntax/values.html b/core/syntax/values.html new file mode 100644 index 00000000..ab13c1fc --- /dev/null +++ b/core/syntax/values.html @@ -0,0 +1,222 @@ + + + + + + + + + Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Values

    +

    WebAssembly programs operate on primitive numeric values. +Moreover, in the definition of programs, immutable sequences of values occur to represent more complex data, such as text strings or other vectors.

    +
    +

    Bytes

    +

    The simplest form of value are raw uninterpreted bytes. +In the abstract syntax they are represented as hexadecimal literals.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2541#1{{}}\mathdef2541{byte} & \href{../syntax/values.html#syntax-byte}{\mathit{byte}} &::=& + \def\mathdef2580#1{\mathtt{0x#1}}\mathdef2580{00} ~|~ \dots ~|~ \def\mathdef2581#1{\mathtt{0x#1}}\mathdef2581{FF} \\ +\end{array}\end{split}\]
    +
    +

    Conventions

    +
      +
    • The meta variable \(b\) ranges over bytes.

    • +
    • Bytes are sometimes interpreted as natural numbers \(n < 256\).

    • +
    +
    +
    +
    +

    Integers

    +

    Different classes of integers with different value ranges are distinguished by their bit width \(N\) and by whether they are unsigned or signed.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2541#1{{}}\mathdef2541{unsigned integer} & \href{../syntax/values.html#syntax-int}{\mathit{u}N} &::=& + 0 ~|~ 1 ~|~ \dots ~|~ 2^N{-}1 \\ +\def\mathdef2541#1{{}}\mathdef2541{signed integer} & \href{../syntax/values.html#syntax-int}{\mathit{s}N} &::=& + -2^{N-1} ~|~ \dots ~|~ {-}1 ~|~ 0 ~|~ 1 ~|~ \dots ~|~ 2^{N-1}{-}1 \\ +\def\mathdef2541#1{{}}\mathdef2541{uninterpreted integer} & \href{../syntax/values.html#syntax-int}{\mathit{i}N} &::=& + \href{../syntax/values.html#syntax-int}{\mathit{u}N} \\ +\end{array}\end{split}\]
    +

    The latter class defines uninterpreted integers, whose signedness interpretation can vary depending on context. +In the abstract syntax, they are represented as unsigned values. +However, some operations convert them to signed based on a two’s complement interpretation.

    +
    +

    Note

    +

    The main integer types occurring in this specification are \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{u64}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{s32}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{s64}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{i8}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{i16}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{i32}}\), \(\href{../syntax/values.html#syntax-int}{\mathit{i64}}\). +However, other sizes occur as auxiliary constructions, e.g., in the definition of floating-point numbers.

    +
    +
    +

    Conventions

    +
      +
    • The meta variables \(m, n, i\) range over integers.

    • +
    • Numbers may be denoted by simple arithmetics, as in the grammar above. +In order to distinguish arithmetics like \(2^N\) from sequences like \((1)^N\), the latter is distinguished with parentheses.

    • +
    +
    +
    +
    +

    Floating-Point

    +

    Floating-point data represents 32 or 64 bit values that correspond to the respective binary formats of the IEEE 754-2019 standard (Section 3.3).

    +

    Every value has a sign and a magnitude. +Magnitudes can either be expressed as normal numbers of the form \(m_0.m_1m_2\dots m_M \cdot2^e\), where \(e\) is the exponent and \(m\) is the significand whose most significant bit \(m_0\) is \(1\), +or as a subnormal number where the exponent is fixed to the smallest possible value and \(m_0\) is \(0\); among the subnormals are positive and negative zero values. +Since the significands are binary values, normals are represented in the form \((1 + m\cdot 2^{-M}) \cdot 2^e\), where \(M\) is the bit width of \(m\); similarly for subnormals.

    +

    Possible magnitudes also include the special values \(\infty\) (infinity) and \(\href{../syntax/values.html#syntax-float}{\mathsf{nan}}\) (NaN, not a number). +NaN values have a payload that describes the mantissa bits in the underlying binary representation. +No distinction is made between signalling and quiet NaNs.

    +
    +\[\begin{split}\begin{array}{llcll} +\def\mathdef2541#1{{}}\mathdef2541{floating-point value} & \href{../syntax/values.html#syntax-float}{\mathit{f}N} &::=& + {+} \href{../syntax/values.html#syntax-float}{\mathit{f}\mathit{Nmag}} ~|~ {-} \href{../syntax/values.html#syntax-float}{\mathit{f}\mathit{Nmag}} \\ +\def\mathdef2541#1{{}}\mathdef2541{floating-point magnitude} & \href{../syntax/values.html#syntax-float}{\mathit{f}\mathit{Nmag}} &::=& + (1 + \href{../syntax/values.html#syntax-int}{\mathit{u}M}\cdot 2^{-M}) \cdot 2^e & (\mathrel{\mbox{if}} -2^{E-1}+2 \leq e \leq 2^{E-1}-1) \\ &&|& + (0 + \href{../syntax/values.html#syntax-int}{\mathit{u}M}\cdot 2^{-M}) \cdot 2^e & (\mathrel{\mbox{if}} e = -2^{E-1}+2) \\ &&|& + \infty \\ &&|& + \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) & (\mathrel{\mbox{if}} 1 \leq n < 2^M) \\ +\end{array}\end{split}\]
    +

    where \(M = \href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)\) and \(E = \href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(N)\) with

    +
    +\[\begin{split}\begin{array}{lclllllcl} +\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(32) &=& 23 &&&& +\href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(32) &=& 8 \\ +\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(64) &=& 52 &&&& +\href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(64) &=& 11 \\ +\end{array}\end{split}\]
    +

    A canonical NaN is a floating-point value \(\pm\href{../syntax/values.html#syntax-float}{\mathsf{nan}}(\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N)\) where \(\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N\) is a payload whose most significant bit is \(1\) while all others are \(0\):

    +
    +\[\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N = 2^{\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)-1}\]
    +

    An arithmetic NaN is a floating-point value \(\pm\href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\) with \(n \geq \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N\), such that the most significant bit is \(1\) while all others are arbitrary.

    +
    +

    Note

    +

    In the abstract syntax, subnormals are distinguished by the leading 0 of the significand. The exponent of subnormals has the same value as the smallest possible exponent of a normal number. Only in the binary representation the exponent of a subnormal is encoded differently than the exponent of any normal number.

    +
    +
    +

    Conventions

    +
      +
    • The meta variable \(z\) ranges over floating-point values where clear from context.

    • +
    +
    +
    +
    +

    Vectors

    +

    Numeric vectors are 128-bit values that are processed by vector instructions (also known as SIMD instructions, single instruction multiple data). +They are represented in the abstract syntax using \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\). The interpretation of lane types (integer or floating-point numbers) and lane sizes are determined by the specific instruction operating on them.

    +
    +
    +

    Names

    +

    Names are sequences of characters, which are scalar values as defined by Unicode (Section 2.4).

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2541#1{{}}\mathdef2541{name} & \href{../syntax/values.html#syntax-name}{\mathit{name}} &::=& + \href{../syntax/values.html#syntax-name}{\mathit{char}}^\ast \qquad\qquad (\mathrel{\mbox{if}} |\href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(\href{../syntax/values.html#syntax-name}{\mathit{char}}^\ast)| < 2^{32}) \\ +\def\mathdef2541#1{{}}\mathdef2541{character} & \href{../syntax/values.html#syntax-name}{\mathit{char}} &::=& + \def\mathdef2582#1{\mathrm{U{+}#1}}\mathdef2582{00} ~|~ \dots ~|~ \def\mathdef2583#1{\mathrm{U{+}#1}}\mathdef2583{D7FF} ~|~ + \def\mathdef2584#1{\mathrm{U{+}#1}}\mathdef2584{E000} ~|~ \dots ~|~ \def\mathdef2585#1{\mathrm{U{+}#1}}\mathdef2585{10FFFF} \\ +\end{array}\end{split}\]
    +

    Due to the limitations of the binary format, +the length of a name is bounded by the length of its UTF-8 encoding.

    +
    +

    Convention

    +
      +
    • Characters (Unicode scalar values) are sometimes used interchangeably with natural numbers \(n < 1114112\).

    • +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/conventions.html b/core/text/conventions.html new file mode 100644 index 00000000..2896d4b5 --- /dev/null +++ b/core/text/conventions.html @@ -0,0 +1,214 @@ + + + + + + + + + Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Conventions

    +

    The textual format for WebAssembly modules is a rendering of their abstract syntax into S-expressions.

    +

    Like the binary format, the text format is defined by an attribute grammar. +A text string is a well-formed description of a module if and only if it is generated by the grammar. +Each production of this grammar has at most one synthesized attribute: the abstract syntax that the respective character sequence expresses. +Thus, the attribute grammar implicitly defines a parsing function. +Some productions also take a context as an inherited attribute +that records bound identifiers.

    +

    Except for a few exceptions, the core of the text grammar closely mirrors the grammar of the abstract syntax. +However, it also defines a number of abbreviations that are “syntactic sugar” over the core syntax.

    +

    The recommended extension for files containing WebAssembly modules in text format is “\(\mathtt{.wat}\)”. +Files with this extension are assumed to be encoded in UTF-8, as per Unicode (Section 2.5).

    +
    +

    Grammar

    +

    The following conventions are adopted in defining grammar rules of the text format. +They mirror the conventions used for abstract syntax and for the binary format. +In order to distinguish symbols of the textual syntax from symbols of the abstract syntax, \(\mathtt{typewriter}\) font is adopted for the former.

    +
      +
    • Terminal symbols are either literal strings of characters enclosed in quotes +or expressed as Unicode scalar values: \(\def\mathdef2625#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2625{module}\), \(\def\mathdef2626#1{\mathrm{U{+}#1}}\mathdef2626{0A}\). +(All characters written literally are unambiguously drawn from the 7-bit ASCII subset of Unicode.)

    • +
    • Nonterminal symbols are written in typewriter font: \(\mathtt{valtype}, \mathtt{instr}\).

    • +
    • \(T^n\) is a sequence of \(n\geq 0\) iterations of \(T\).

    • +
    • \(T^\ast\) is a possibly empty sequence of iterations of \(T\). +(This is a shorthand for \(T^n\) used where \(n\) is not relevant.)

    • +
    • \(T^+\) is a sequence of one or more iterations of \(T\). +(This is a shorthand for \(T^n\) where \(n \geq 1\).)

    • +
    • \(T^?\) is an optional occurrence of \(T\). +(This is a shorthand for \(T^n\) where \(n \leq 1\).)

    • +
    • \(x{:}T\) denotes the same language as the nonterminal \(T\), but also binds the variable \(x\) to the attribute synthesized for \(T\).

    • +
    • Productions are written \(\mathtt{sym} ::= T_1 \Rightarrow A_1 ~|~ \dots ~|~ T_n \Rightarrow A_n\), where each \(A_i\) is the attribute that is synthesized for \(\mathtt{sym}\) in the given case, usually from attribute variables bound in \(T_i\).

    • +
    • Some productions are augmented by side conditions in parentheses, which restrict the applicability of the production. They provide a shorthand for a combinatorial expansion of the production into many separate cases.

    • +
    • If the same meta variable or non-terminal symbol appears multiple times in a production (in the syntax or in an attribute), then all those occurrences must have the same instantiation.

    • +
    +
      +
    • A distinction is made between lexical and syntactic productions. For the latter, arbitrary white space is allowed in any place where the grammar contains spaces. The productions defining lexical syntax and the syntax of values are considered lexical, all others are syntactic.

    • +
    +
    +

    Note

    +

    For example, the textual grammar for number types is given as follows:

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef2586#1{{}}\mathdef2586{number types} & \href{../text/types.html#text-numtype}{\mathtt{numtype}} &::=& + \def\mathdef2627#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2627{i32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef2628#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2628{i64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef2629#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2629{f32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef2630#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2630{f64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ +\end{array}\end{split}\]
    +

    The textual grammar for limits is defined as follows:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2586#1{{}}\mathdef2586{limits} & \href{../text/types.html#text-limits}{\mathtt{limits}} &::=& + n{:}\href{../text/values.html#text-int}{\def\mathdef2611#1{{\mathtt{u}#1}}\mathdef2611{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\epsilon \} \\ &&|& + n{:}\href{../text/values.html#text-int}{\def\mathdef2611#1{{\mathtt{u}#1}}\mathdef2611{\mathtt{32}}}~~m{:}\href{../text/values.html#text-int}{\def\mathdef2611#1{{\mathtt{u}#1}}\mathdef2611{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m \} \\ +\end{array}\end{split}\]
    +

    The variables \(n\) and \(m\) name the attributes of the respective \(\href{../text/values.html#text-int}{\def\mathdef2611#1{{\mathtt{u}#1}}\mathdef2611{\mathtt{32}}}\) nonterminals, which in this case are the actual unsigned integers those parse into. +The attribute of the complete production then is the abstract syntax for the limit, expressed in terms of the former values.

    +
    +
    +
    +

    Abbreviations

    +

    In addition to the core grammar, which corresponds directly to the abstract syntax, the textual syntax also defines a number of abbreviations that can be used for convenience and readability.

    +

    Abbreviations are defined by rewrite rules specifying their expansion into the core syntax:

    +
    +\[\mathit{abbreviation~syntax} \quad\equiv\quad \mathit{expanded~syntax}\]
    +

    These expansions are assumed to be applied, recursively and in order of appearance, before applying the core grammar rules to construct the abstract syntax.

    +
    +
    +

    Contexts

    +

    The text format allows the use of symbolic identifiers in place of indices. +To resolve these identifiers into concrete indices, +some grammar production are indexed by an identifier context \(I\) as a synthesized attribute that records the declared identifiers in each index space. +In addition, the context records the types defined in the module, so that parameter indices can be computed for functions.

    +

    It is convenient to define identifier contexts as records \(I\) with abstract syntax as follows:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef2586#1{{}}\mathdef2586{(identifier context)} & I &::=& + \begin{array}[t]{l@{~}ll} + \{ & \href{../text/conventions.html#text-context}{\mathsf{types}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{funcs}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{tables}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{mems}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{globals}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{elem}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{data}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{locals}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{labels}} & (\href{../text/values.html#text-id}{\mathtt{id}}^?)^\ast, \\ + & \href{../text/conventions.html#text-context}{\mathsf{typedefs}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast ~\} \\ + \end{array} +\end{array}\end{split}\]
    +

    For each index space, such a context contains the list of identifiers assigned to the defined indices. +Unnamed indices are associated with empty (\(\epsilon\)) entries in these lists.

    +

    An identifier context is well-formed if no index space contains duplicate identifiers.

    +
    +

    Conventions

    +

    To avoid unnecessary clutter, empty components are omitted when writing out identifier contexts. +For example, the record \(\{\}\) is shorthand for an identifier context whose components are all empty.

    +
    +
    +
    +

    Vectors

    +

    Vectors are written as plain sequences, but with a restriction on the length of these sequence.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef2586#1{{}}\mathdef2586{vector} & \href{../text/conventions.html#text-vec}{\mathtt{vec}}(\mathtt{A}) &::=& + (x{:}\mathtt{A})^n &\Rightarrow& x^n & (\mathrel{\mbox{if}} n < 2^{32}) \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/index.html b/core/text/index.html new file mode 100644 index 00000000..269f9248 --- /dev/null +++ b/core/text/index.html @@ -0,0 +1,175 @@ + + + + + + + + + Text Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/text/instructions.html b/core/text/instructions.html new file mode 100644 index 00000000..4589d9c7 --- /dev/null +++ b/core/text/instructions.html @@ -0,0 +1,857 @@ + + + + + + + + + Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Instructions

    +

    Instructions are syntactically distinguished into plain and structured instructions.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-instr}{\mathtt{instr}}_I &::=& + \mathit{in}{:}\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I + &\Rightarrow& \mathit{in} \\ &&|& + \mathit{in}{:}\href{../text/instructions.html#text-blockinstr}{\mathtt{blockinstr}}_I + &\Rightarrow& \mathit{in} \\ +\end{array}\end{split}\]
    +

    In addition, as a syntactic abbreviation, instructions can be written as S-expressions in folded form, to group them visually.

    +
    +

    Labels

    +

    Structured control instructions can be annotated with a symbolic label identifier. +They are the only symbolic identifiers that can be bound locally in an instruction sequence. +The following grammar handles the corresponding update to the identifier context by composing the context with an additional label entry.

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef2670#1{{}}\mathdef2670{label} & \href{../text/instructions.html#text-label}{\mathtt{label}}_I &::=& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& \{\href{../text/conventions.html#text-context}{\mathsf{labels}}~v\} \href{../syntax/conventions.html#notation-compose}{\oplus} I + & (\mathrel{\mbox{if}} v \notin I.\href{../text/conventions.html#text-context}{\mathsf{labels}}) \\ &&|& + \epsilon &\Rightarrow& \{\href{../text/conventions.html#text-context}{\mathsf{labels}}~(\epsilon)\} \href{../syntax/conventions.html#notation-compose}{\oplus} I \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The new label entry is inserted at the beginning of the label list in the identifier context. +This effectively shifts all existing labels up by one, +mirroring the fact that control instructions are indexed relatively not absolutely.

    +
    +
    +
    +

    Control Instructions

    +

    Structured control instructions can bind an optional symbolic label identifier. +The same label identifier may optionally be repeated after the corresponding \(\mathtt{end}\) and \(\mathtt{else}\) pseudo instructions, to indicate the matching delimiters.

    +

    Their block type is given as a type use, analogous to the type of functions. +However, the special case of a type use that is syntactically empty or consists of only a single result is not regarded as an abbreviation for an inline function type, but is parsed directly into an optional value type.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{block type} & \href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}_I & +\begin{array}[t]{@{}c@{}} ::= \\ | \\ \end{array} +& +\begin{array}[t]{@{}lcll@{}} + (t{:}\href{../text/types.html#text-functype}{\mathtt{result}})^? &\Rightarrow& t^? \\ + x,I'{:}\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}_I &\Rightarrow& x & (\mathrel{\mbox{if}} I' = \{\href{../text/conventions.html#text-context}{\mathsf{locals}}~(\epsilon)^\ast\}) \\ +\end{array} \\ +\def\mathdef2670#1{{}}\mathdef2670{block instruction} & \href{../text/instructions.html#text-blockinstr}{\mathtt{blockinstr}}_I &::=& + \def\mathdef2709#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2709{block}~~I'{:}\href{../text/instructions.html#text-label}{\mathtt{label}}_I~~\mathit{bt}{:}\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}_I~~(\mathit{in}{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_{I'})^\ast~~\def\mathdef2710#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2710{end}~~\href{../text/values.html#text-id}{\mathtt{id}}^? + \\ &&&\qquad \Rightarrow\quad \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \qquad\quad~~ (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \href{../text/instructions.html#text-label}{\mathtt{label}}) \\ &&|& + \def\mathdef2711#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2711{loop}~~I'{:}\href{../text/instructions.html#text-label}{\mathtt{label}}_I~~\mathit{bt}{:}\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}_I~~(\mathit{in}{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_{I'})^\ast~~\def\mathdef2712#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2712{end}~~\href{../text/values.html#text-id}{\mathtt{id}}^? + \\ &&&\qquad \Rightarrow\quad \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\mathit{bt}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \qquad\qquad (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \href{../text/instructions.html#text-label}{\mathtt{label}}) \\ &&|& + \def\mathdef2713#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2713{if}~~I'{:}\href{../text/instructions.html#text-label}{\mathtt{label}}_I~~\mathit{bt}{:}\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}_I~~(\mathit{in}_1{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_{I'})^\ast~~ + \def\mathdef2714#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2714{else}~~\href{../text/values.html#text-id}{\mathtt{id}}_1^?~~(\mathit{in}_2{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_{I'})^\ast~~\def\mathdef2715#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2715{end}~~\href{../text/values.html#text-id}{\mathtt{id}}_2^? + \\ &&&\qquad \Rightarrow\quad \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\mathit{bt}~\mathit{in}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\mathit{in}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} + \qquad (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}_1^? = \epsilon \vee \href{../text/values.html#text-id}{\mathtt{id}}_1^? = \href{../text/instructions.html#text-label}{\mathtt{label}}, \href{../text/values.html#text-id}{\mathtt{id}}_2^? = \epsilon \vee \href{../text/values.html#text-id}{\mathtt{id}}_2^? = \href{../text/instructions.html#text-label}{\mathtt{label}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The side condition stating that the identifier context \(I'\) must only contain unnamed entries in the rule for \(\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}\) block types enforces that no identifier can be bound in any \(\href{../text/types.html#text-functype}{\mathtt{param}}\) declaration for a block type.

    +
    +

    All other control instruction are represented verbatim.

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef2670#1{{}}\mathdef2670{plain instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& + \def\mathdef2716#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2716{unreachable} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} \\ &&|& + \def\mathdef2717#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2717{nop} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} \\ &&|& + \def\mathdef2718#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2718{br}~~l{:}\href{../text/modules.html#text-labelidx}{\mathtt{labelidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l \\ &&|& + \def\mathdef2719#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2719{br\_if}~~l{:}\href{../text/modules.html#text-labelidx}{\mathtt{labelidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l \\ &&|& + \def\mathdef2720#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2720{br\_table}~~l^\ast{:}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-labelidx}{\mathtt{labelidx}}_I)~~l_N{:}\href{../text/modules.html#text-labelidx}{\mathtt{labelidx}}_I + &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N \\ &&|& + \def\mathdef2721#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2721{return} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}} \\ &&|& + \def\mathdef2722#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2722{call}~~x{:}\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x \\ &&|& + \def\mathdef2723#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2723{call\_indirect}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}~~y,I'{:}\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y + & (\mathrel{\mbox{if}} I' = \{\href{../text/conventions.html#text-context}{\mathsf{locals}}~(\epsilon)^\ast\}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The side condition stating that the identifier context \(I'\) must only contain unnamed entries in the rule for \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}\) enforces that no identifier can be bound in any \(\href{../text/types.html#text-functype}{\mathtt{param}}\) declaration appearing in the type annotation.

    +
    +
    +

    Abbreviations

    +

    The \(\def\mathdef2724#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2724{else}\) keyword of an \(\def\mathdef2725#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2725{if}\) instruction can be omitted if the following instruction sequence is empty.

    +
    +\[\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{block instruction} & + \def\mathdef2726#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2726{if}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~~\def\mathdef2727#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2727{end} + &\equiv& + \def\mathdef2728#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2728{if}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~~\def\mathdef2729#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2729{else}~~\def\mathdef2730#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2730{end} +\end{array}\]
    +

    Also, for backwards compatibility, the table index to \(\def\mathdef2731#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2731{call\_indirect}\) can be omitted, defaulting to \(0\).

    +
    +\[\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{plain instruction} & + \def\mathdef2732#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2732{call\_indirect}~~\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}} + &\equiv& + \def\mathdef2733#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2733{call\_indirect}~~0~~\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}} +\end{array}\]
    +
    +
    +
    +

    Reference Instructions

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\ &&|& + \def\mathdef2734#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2734{ref.null}~~t{:}\href{../text/types.html#text-heaptype}{\mathtt{heaptype}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t \\ &&|& + \def\mathdef2735#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2735{ref.is\_null} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} \\ &&|& + \def\mathdef2736#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2736{ref.func}~~x{:}\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x \\ &&|& +\end{array}\end{split}\]
    +
    +
    +

    Parametric Instructions

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\ &&|& + \def\mathdef2737#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2737{drop} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} \\ &&|& + \def\mathdef2738#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2738{select}~((t{:}\href{../text/types.html#text-functype}{\mathtt{result}})^\ast)^? &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~(t^\ast)^? \\ +\end{array}\end{split}\]
    +
    +
    +

    Variable Instructions

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\ &&|& + \def\mathdef2739#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2739{local.get}~~x{:}\href{../text/modules.html#text-localidx}{\mathtt{localidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x \\ &&|& + \def\mathdef2740#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2740{local.set}~~x{:}\href{../text/modules.html#text-localidx}{\mathtt{localidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x \\ &&|& + \def\mathdef2741#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2741{local.tee}~~x{:}\href{../text/modules.html#text-localidx}{\mathtt{localidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x \\ &&|& + \def\mathdef2742#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2742{global.get}~~x{:}\href{../text/modules.html#text-globalidx}{\mathtt{globalidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x \\ &&|& + \def\mathdef2743#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2743{global.set}~~x{:}\href{../text/modules.html#text-globalidx}{\mathtt{globalidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Table Instructions

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\ &&|& + \def\mathdef2744#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2744{table.get}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x \\ &&|& + \def\mathdef2745#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2745{table.set}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x \\ &&|& + \def\mathdef2746#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2746{table.size}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x \\ &&|& + \def\mathdef2747#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2747{table.grow}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x \\ &&|& + \def\mathdef2748#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2748{table.fill}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x \\ &&|& + \def\mathdef2749#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2749{table.copy}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I~~y{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y \\ &&|& + \def\mathdef2750#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2750{table.init}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I~~y{:}\href{../text/modules.html#text-elemidx}{\mathtt{elemidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y \\ &&|& + \def\mathdef2751#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2751{elem.drop}~~x{:}\href{../text/modules.html#text-elemidx}{\mathtt{elemidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    For backwards compatibility, all \(table indices <syntax-tableidx>\) may be omitted from table instructions, defaulting to \(0\).

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & + \def\mathdef2752#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2752{table.get} &\equiv& \def\mathdef2753#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2753{table.get}~~\def\mathdef2754#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2754{0} \\ &&|& + \def\mathdef2755#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2755{table.set} &\equiv& \def\mathdef2756#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2756{table.set}~~\def\mathdef2757#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2757{0} \\ &&|& + \def\mathdef2758#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2758{table.size} &\equiv& \def\mathdef2759#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2759{table.size}~~\def\mathdef2760#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2760{0} \\ &&|& + \def\mathdef2761#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2761{table.grow} &\equiv& \def\mathdef2762#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2762{table.grow}~~\def\mathdef2763#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2763{0} \\ &&|& + \def\mathdef2764#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2764{table.fill} &\equiv& \def\mathdef2765#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2765{table.fill}~~\def\mathdef2766#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2766{0} \\ &&|& + \def\mathdef2767#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2767{table.copy} &\equiv& \def\mathdef2768#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2768{table.copy}~~\def\mathdef2769#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2769{0}~~\def\mathdef2770#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2770{0} \\ &&|& + \def\mathdef2771#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2771{table.init}~~x{:}\href{../text/modules.html#text-elemidx}{\mathtt{elemidx}}_I &\equiv& \def\mathdef2772#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2772{table.init}~~\def\mathdef2773#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2773{0}~~x{:}\href{../text/modules.html#text-elemidx}{\mathtt{elemidx}}_I \\ &&|& +\end{array}\end{split}\]
    +
    +
    +
    +

    Memory Instructions

    +

    The offset and alignment immediates to memory instructions are optional. +The offset defaults to \(\mathtt{0}\), the alignment to the storage size of the respective memory access, which is its natural alignment. +Lexically, an \(\href{../text/instructions.html#text-memarg}{\mathtt{offset}}\) or \(\href{../text/instructions.html#text-memarg}{\mathtt{align}}\) phrase is considered a single keyword token, so no white space is allowed around the \(\def\mathdef2774#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2774{=}\).

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef2670#1{{}}\mathdef2670{memory argument} & \href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_N &::=& + o{:}\href{../text/instructions.html#text-memarg}{\mathtt{offset}}~~a{:}\href{../text/instructions.html#text-memarg}{\mathtt{align}}_N &\Rightarrow& \{ \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}~n,~\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{offset}}~o \} & (\mathrel{\mbox{if}} a = 2^n) \\ +\def\mathdef2670#1{{}}\mathdef2670{memory offset} & \href{../text/instructions.html#text-memarg}{\mathtt{offset}} &::=& + \def\mathdef2775#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2775{offset{=}}o{:}\href{../text/values.html#text-int}{\def\mathdef2695#1{{\mathtt{u}#1}}\mathdef2695{\mathtt{32}}} &\Rightarrow& o \\ &&|& + \epsilon &\Rightarrow& 0 \\ +\def\mathdef2670#1{{}}\mathdef2670{memory alignment} & \href{../text/instructions.html#text-memarg}{\mathtt{align}}_N &::=& + \def\mathdef2776#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2776{align{=}}a{:}\href{../text/values.html#text-int}{\def\mathdef2695#1{{\mathtt{u}#1}}\mathdef2695{\mathtt{32}}} &\Rightarrow& a \\ &&|& + \epsilon &\Rightarrow& N \\ +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\ &&|& + \def\mathdef2777#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2777{i32.load}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef2778#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2778{i64.load}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef2779#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2779{f32.load}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef2780#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2780{f64.load}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef2781#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2781{i32.load8\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& + \def\mathdef2782#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2782{i32.load8\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& + \def\mathdef2783#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2783{i32.load16\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& + \def\mathdef2784#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2784{i32.load16\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& + \def\mathdef2785#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2785{i64.load8\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_s}~m \\ &&|& + \def\mathdef2786#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2786{i64.load8\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_u}~m \\ &&|& + \def\mathdef2787#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2787{i64.load16\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_s}~m \\ &&|& + \def\mathdef2788#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2788{i64.load16\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_u}~m \\ &&|& + \def\mathdef2789#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2789{i64.load32\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_s}~m \\ &&|& + \def\mathdef2790#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2790{i64.load32\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_u}~m \\ &&|& + \def\mathdef2791#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2791{i32.store}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef2792#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2792{i64.store}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef2793#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2793{f32.store}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef2794#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2794{f64.store}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef2795#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2795{i32.store8}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& + \def\mathdef2796#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2796{i32.store16}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& + \def\mathdef2797#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2797{i64.store8}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8}~m \\ &&|& + \def\mathdef2798#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2798{i64.store16}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16}~m \\ &&|& + \def\mathdef2799#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2799{i64.store32}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32}~m \\ &&|& + \def\mathdef2800#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2800{memory.size} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} \\ &&|& + \def\mathdef2801#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2801{memory.grow} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} \\ &&|& + \def\mathdef2802#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2802{memory.fill} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} \\ &&|& + \def\mathdef2803#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2803{memory.copy} &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} \\ &&|& + \def\mathdef2804#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2804{memory.init}~~x{:}\href{../text/modules.html#text-dataidx}{\mathtt{dataidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x \\ &&|& + \def\mathdef2805#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2805{data.drop}~~x{:}\href{../text/modules.html#text-dataidx}{\mathtt{dataidx}}_I &\Rightarrow& \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x \\ +\end{array}\end{split}\]
    +
    +
    +

    Numeric Instructions

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \\&&|& + \def\mathdef2806#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2806{i32.const}~~n{:}\href{../text/values.html#text-int}{\def\mathdef2703#1{{\mathtt{i}#1}}\mathdef2703{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& + \def\mathdef2807#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2807{i64.const}~~n{:}\href{../text/values.html#text-int}{\def\mathdef2704#1{{\mathtt{i}#1}}\mathdef2704{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~n \\ &&|& + \def\mathdef2808#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2808{f32.const}~~z{:}\href{../text/values.html#text-float}{\def\mathdef2707#1{{\mathtt{f}#1}}\mathdef2707{\mathtt{32}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ &&|& + \def\mathdef2809#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2809{f64.const}~~z{:}\href{../text/values.html#text-float}{\def\mathdef2708#1{{\mathtt{f}#1}}\mathdef2708{\mathtt{64}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~z \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2810#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2810{i32.clz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& + \def\mathdef2811#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2811{i32.ctz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& + \def\mathdef2812#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2812{i32.popcnt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& + \def\mathdef2813#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2813{i32.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef2814#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2814{i32.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef2815#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2815{i32.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef2816#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2816{i32.div\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& + \def\mathdef2817#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2817{i32.div\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& + \def\mathdef2818#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2818{i32.rem\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& + \def\mathdef2819#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2819{i32.rem\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& + \def\mathdef2820#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2820{i32.and} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& + \def\mathdef2821#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2821{i32.or} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& + \def\mathdef2822#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2822{i32.xor} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& + \def\mathdef2823#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2823{i32.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& + \def\mathdef2824#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2824{i32.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef2825#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2825{i32.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef2826#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2826{i32.rotl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& + \def\mathdef2827#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2827{i32.rotr} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2828#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2828{i64.clz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{clz}} \\ &&|& + \def\mathdef2829#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2829{i64.ctz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ctz}} \\ &&|& + \def\mathdef2830#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2830{i64.popcnt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{popcnt}} \\ &&|& + \def\mathdef2831#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2831{i64.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef2832#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2832{i64.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef2833#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2833{i64.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef2834#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2834{i64.div\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_s} \\ &&|& + \def\mathdef2835#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2835{i64.div\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}}\mathsf{\_u} \\ &&|& + \def\mathdef2836#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2836{i64.rem\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_s} \\ &&|& + \def\mathdef2837#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2837{i64.rem\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rem}}\mathsf{\_u} \\ &&|& + \def\mathdef2838#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2838{i64.and} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{and}} \\ &&|& + \def\mathdef2839#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2839{i64.or} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{or}} \\ &&|& + \def\mathdef2840#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2840{i64.xor} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{xor}} \\ &&|& + \def\mathdef2841#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2841{i64.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shl}} \\ &&|& + \def\mathdef2842#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2842{i64.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_s} \\ &&|& + \def\mathdef2843#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2843{i64.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{shr}}\mathsf{\_u} \\ &&|& + \def\mathdef2844#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2844{i64.rotl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotl}} \\ &&|& + \def\mathdef2845#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2845{i64.rotr} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{rotr}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2846#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2846{f32.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& + \def\mathdef2847#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2847{f32.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& + \def\mathdef2848#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2848{f32.ceil} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& + \def\mathdef2849#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2849{f32.floor} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& + \def\mathdef2850#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2850{f32.trunc} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& + \def\mathdef2851#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2851{f32.nearest} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& + \def\mathdef2852#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2852{f32.sqrt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& + \def\mathdef2853#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2853{f32.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef2854#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2854{f32.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef2855#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2855{f32.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef2856#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2856{f32.div} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& + \def\mathdef2857#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2857{f32.min} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& + \def\mathdef2858#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2858{f32.max} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& + \def\mathdef2859#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2859{f32.copysign} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2860#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2860{f64.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{abs}} \\ &&|& + \def\mathdef2861#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2861{f64.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{neg}} \\ &&|& + \def\mathdef2862#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2862{f64.ceil} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ceil}} \\ &&|& + \def\mathdef2863#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2863{f64.floor} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{floor}} \\ &&|& + \def\mathdef2864#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2864{f64.trunc} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}} \\ &&|& + \def\mathdef2865#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2865{f64.nearest} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{nearest}} \\ &&|& + \def\mathdef2866#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2866{f64.sqrt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sqrt}} \\ &&|& + \def\mathdef2867#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2867{f64.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} \\ &&|& + \def\mathdef2868#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2868{f64.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{sub}} \\ &&|& + \def\mathdef2869#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2869{f64.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{mul}} \\ &&|& + \def\mathdef2870#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2870{f64.div} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{div}} \\ &&|& + \def\mathdef2871#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2871{f64.min} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{min}} \\ &&|& + \def\mathdef2872#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2872{f64.max} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{max}} \\ &&|& + \def\mathdef2873#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2873{f64.copysign} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{copysign}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2874#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2874{i32.eqz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& + \def\mathdef2875#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2875{i32.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef2876#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2876{i32.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef2877#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2877{i32.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef2878#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2878{i32.lt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef2879#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2879{i32.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef2880#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2880{i32.gt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef2881#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2881{i32.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef2882#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2882{i32.le\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef2883#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2883{i32.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef2884#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2884{i32.ge\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2885#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2885{i64.eqz} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eqz}} \\ &&|& + \def\mathdef2886#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2886{i64.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef2887#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2887{i64.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef2888#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2888{i64.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_s} \\ &&|& + \def\mathdef2889#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2889{i64.lt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}}\mathsf{\_u} \\ &&|& + \def\mathdef2890#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2890{i64.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_s} \\ &&|& + \def\mathdef2891#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2891{i64.gt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}}\mathsf{\_u} \\ &&|& + \def\mathdef2892#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2892{i64.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_s} \\ &&|& + \def\mathdef2893#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2893{i64.le\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}}\mathsf{\_u} \\ &&|& + \def\mathdef2894#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2894{i64.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_s} \\ &&|& + \def\mathdef2895#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2895{i64.ge\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}}\mathsf{\_u} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2896#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2896{f32.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef2897#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2897{f32.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef2898#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2898{f32.lt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& + \def\mathdef2899#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2899{f32.gt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& + \def\mathdef2900#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2900{f32.le} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& + \def\mathdef2901#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2901{f32.ge} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2902#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2902{f64.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{eq}} \\ &&|& + \def\mathdef2903#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2903{f64.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ne}} \\ &&|& + \def\mathdef2904#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2904{f64.lt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{lt}} \\ &&|& + \def\mathdef2905#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2905{f64.gt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{gt}} \\ &&|& + \def\mathdef2906#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2906{f64.le} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{le}} \\ &&|& + \def\mathdef2907#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2907{f64.ge} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{ge}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2908#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2908{i32.wrap\_i64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{wrap}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef2909#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2909{i32.trunc\_f32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef2910#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2910{i32.trunc\_f32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef2911#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2911{i32.trunc\_f64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef2912#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2912{i32.trunc\_f64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef2913#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2913{i32.trunc\_sat\_f32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef2914#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2914{i32.trunc\_sat\_f32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef2915#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2915{i32.trunc\_sat\_f64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef2916#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2916{i32.trunc\_sat\_f64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef2917#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2917{i64.extend\_i32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef2918#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2918{i64.extend\_i32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef2919#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2919{i64.trunc\_f32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef2920#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2920{i64.trunc\_f32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef2921#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2921{i64.trunc\_f64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef2922#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2922{i64.trunc\_f64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef2923#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2923{i64.trunc\_sat\_f32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_s} \\ &&|& + \def\mathdef2924#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2924{i64.trunc\_sat\_f32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}\mathsf{\_u} \\ &&|& + \def\mathdef2925#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2925{i64.trunc\_sat\_f64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_s} \\ &&|& + \def\mathdef2926#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2926{i64.trunc\_sat\_f64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{trunc}}\mathsf{\_sat\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\mathsf{\_u} \\ &&|& + \def\mathdef2927#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2927{f32.convert\_i32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef2928#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2928{f32.convert\_i32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef2929#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2929{f32.convert\_i64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& + \def\mathdef2930#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2930{f32.convert\_i64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& + \def\mathdef2931#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2931{f32.demote\_f64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{demote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& + \def\mathdef2932#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2932{f64.convert\_i32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_s} \\ &&|& + \def\mathdef2933#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2933{f64.convert\_i32\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\mathsf{\_u} \\ &&|& + \def\mathdef2934#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2934{f64.convert\_i64\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_s} \\ &&|& + \def\mathdef2935#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2935{f64.convert\_i64\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}\mathsf{\_u} \\ &&|& + \def\mathdef2936#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2936{f64.promote\_f32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{promote}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef2937#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2937{i32.reinterpret\_f32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef2938#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2938{i64.reinterpret\_f64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ &&|& + \def\mathdef2939#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2939{f32.reinterpret\_i32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef2940#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2940{f64.reinterpret\_i64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{reinterpret}}\mathsf{\_}\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{thisisenough} && \phantom{thisshouldbeenough} \\[-2ex] &&|& + \def\mathdef2941#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2941{i32.extend8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& + \def\mathdef2942#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2942{i32.extend16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& + \def\mathdef2943#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2943{i64.extend8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{8\_s} \\ &&|& + \def\mathdef2944#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2944{i64.extend16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{16\_s} \\ &&|& + \def\mathdef2945#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2945{i64.extend32\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{extend}}\mathsf{32\_s} \\ +\end{array}\end{split}\]
    +
    +
    +

    Vector Instructions

    +

    Vector memory instructions have optional offset and alignment immediates, like the memory instructions.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & \href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I &::=& \dots \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\ &&|& + \def\mathdef2946#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2946{v128.load}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~m \\ &&|& + \def\mathdef2947#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2947{v128.load8x8\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_s}~m \\ &&|& + \def\mathdef2948#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2948{v128.load8x8\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8x8\_u}~m \\ &&|& + \def\mathdef2949#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2949{v128.load16x4\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_s}~m \\ &&|& + \def\mathdef2950#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2950{v128.load16x4\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16x4\_u}~m \\ &&|& + \def\mathdef2951#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2951{v128.load32x2\_s}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_s}~m \\ &&|& + \def\mathdef2952#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2952{v128.load32x2\_u}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32x2\_u}~m \\ &&|& + \def\mathdef2953#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2953{v128.load8\_splat}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_splat}~m \\ &&|& + \def\mathdef2954#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2954{v128.load16\_splat}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_splat}~m \\ &&|& + \def\mathdef2955#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2955{v128.load32\_splat}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_splat}~m \\ &&|& + \def\mathdef2956#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2956{v128.load64\_splat}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_splat}~m \\ &&|& + \def\mathdef2957#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2957{v128.load32\_zero}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_zero}~m \\ &&|& + \def\mathdef2958#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2958{v128.load64\_zero}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8 &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_zero}~m \\ &&|& + \def\mathdef2959#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2959{v128.store}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~m \\ &&|& + \def\mathdef2960#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2960{v128.load8\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{8\_lane}~m~laneidx \\ &&|& + \def\mathdef2961#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2961{v128.load16\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{16\_lane}~m~laneidx \\ &&|& + \def\mathdef2962#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2962{v128.load32\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{32\_lane}~m~laneidx \\ &&|& + \def\mathdef2963#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2963{v128.load64\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}\mathsf{64\_lane}~m~laneidx \\ &&|& + \def\mathdef2964#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2964{v128.store8\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_1~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{8\_lane}~m~laneidx \\ &&|& + \def\mathdef2965#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2965{v128.store16\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_2~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{16\_lane}~m~laneidx \\ &&|& + \def\mathdef2966#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2966{v128.store32\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_4~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{32\_lane}~m~laneidx \\ &&|& + \def\mathdef2967#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2967{v128.store64\_lane}~~m{:}\href{../text/instructions.html#text-memarg}{\mathtt{memarg}}_8~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}\mathsf{64\_lane}~m~laneidx \\ +\end{array}\end{split}\]
    +

    Vector constant instructions have a mandatory shape descriptor, which determines how the following values are parsed.

    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef2968#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2968{v128.const}~~\def\mathdef2969#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2969{i8x16}~~(n{:}\href{../text/values.html#text-int}{\def\mathdef2701#1{{\mathtt{i}#1}}\mathdef2701{\mathtt{8}}})^{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i8}(n)^{16}) \\ &&|& + \def\mathdef2970#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2970{v128.const}~~\def\mathdef2971#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2971{i16x8}~~(n{:}\href{../text/values.html#text-int}{\def\mathdef2702#1{{\mathtt{i}#1}}\mathdef2702{\mathtt{16}}})^{8} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i16}(n)^8) \\ &&|& + \def\mathdef2972#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2972{v128.const}~~\def\mathdef2973#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2973{i32x4}~~(n{:}\href{../text/values.html#text-int}{\def\mathdef2703#1{{\mathtt{i}#1}}\mathdef2703{\mathtt{32}}})^{4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i32}(n)^4) \\ &&|& + \def\mathdef2974#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2974{v128.const}~~\def\mathdef2975#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2975{i64x2}~~(n{:}\href{../text/values.html#text-int}{\def\mathdef2704#1{{\mathtt{i}#1}}\mathdef2704{\mathtt{64}}})^{2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i64}(n)^2) \\ &&|& + \def\mathdef2976#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2976{v128.const}~~\def\mathdef2977#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2977{f32x4}~~(z{:}\href{../text/values.html#text-float}{\def\mathdef2707#1{{\mathtt{f}#1}}\mathdef2707{\mathtt{32}}})^{4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{f32}(z)^4) \\ &&|& + \def\mathdef2978#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2978{v128.const}~~\def\mathdef2979#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2979{f64x2}~~(z{:}\href{../text/values.html#text-float}{\def\mathdef2708#1{{\mathtt{f}#1}}\mathdef2708{\mathtt{64}}})^{2} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{i128}^{-1}(\href{../exec/numerics.html#aux-bytes}{\mathrm{bytes}}_{f64}(z)^2) +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef2980#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2980{i8x16.shuffle}~~(laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}})^{16} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~laneidx^{16} \\ &&|& + \def\mathdef2981#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2981{i8x16.swizzle} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}} +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef2982#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2982{i8x16.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ &&|& + \def\mathdef2983#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2983{i16x8.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ &&|& + \def\mathdef2984#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2984{i32x4.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ &&|& + \def\mathdef2985#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2985{i64x2.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ &&|& + \def\mathdef2986#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2986{f32x4.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ &&|& + \def\mathdef2987#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2987{f64x2.splat} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef2988#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2988{i8x16.extract\_lane\_s}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~laneidx \\ &&|& + \def\mathdef2989#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2989{i8x16.extract\_lane\_u}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~laneidx \\ &&|& + \def\mathdef2990#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2990{i8x16.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ &&|& + \def\mathdef2991#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2991{i16x8.extract\_lane\_s}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_s}~laneidx \\ &&|& + \def\mathdef2992#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2992{i16x8.extract\_lane\_u}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_u}~laneidx \\ &&|& + \def\mathdef2993#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2993{i16x8.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ &&|& + \def\mathdef2994#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2994{i32x4.extract\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~laneidx \\ &&|& + \def\mathdef2995#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2995{i32x4.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ &&|& + \def\mathdef2996#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2996{i64x2.extract\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~laneidx \\ &&|& + \def\mathdef2997#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2997{i64x2.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ &&|& + \def\mathdef2998#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2998{f32x4.extract\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~laneidx \\ &&|& + \def\mathdef2999#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef2999{f32x4.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ &&|& + \def\mathdef3000#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3000{f64x2.extract\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}~laneidx \\ &&|& + \def\mathdef3001#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3001{f64x2.replace\_lane}~~laneidx{:}\href{../text/values.html#text-int}{\def\mathdef2693#1{{\mathtt{u}#1}}\mathdef2693{\mathtt{8}}} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~laneidx \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3002#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3002{i8x16.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3003#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3003{i8x16.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3004#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3004{i8x16.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\\ &&|& + \def\mathdef3005#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3005{i8x16.lt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\\ &&|& + \def\mathdef3006#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3006{i8x16.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\\ &&|& + \def\mathdef3007#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3007{i8x16.gt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\\ &&|& + \def\mathdef3008#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3008{i8x16.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\\ &&|& + \def\mathdef3009#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3009{i8x16.le\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\\ &&|& + \def\mathdef3010#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3010{i8x16.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\\ &&|& + \def\mathdef3011#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3011{i8x16.ge\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3012#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3012{i16x8.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3013#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3013{i16x8.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3014#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3014{i16x8.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\\ &&|& + \def\mathdef3015#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3015{i16x8.lt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\\ &&|& + \def\mathdef3016#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3016{i16x8.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\\ &&|& + \def\mathdef3017#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3017{i16x8.gt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\\ &&|& + \def\mathdef3018#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3018{i16x8.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\\ &&|& + \def\mathdef3019#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3019{i16x8.le\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\\ &&|& + \def\mathdef3020#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3020{i16x8.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\\ &&|& + \def\mathdef3021#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3021{i16x8.ge\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3022#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3022{i32x4.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3023#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3023{i32x4.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3024#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3024{i32x4.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\\ &&|& + \def\mathdef3025#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3025{i32x4.lt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_u}\\ &&|& + \def\mathdef3026#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3026{i32x4.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\\ &&|& + \def\mathdef3027#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3027{i32x4.gt\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_u}\\ &&|& + \def\mathdef3028#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3028{i32x4.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\\ &&|& + \def\mathdef3029#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3029{i32x4.le\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_u}\\ &&|& + \def\mathdef3030#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3030{i32x4.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\\ &&|& + \def\mathdef3031#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3031{i32x4.ge\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3032#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3032{i64x2.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3033#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3033{i64x2.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3034#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3034{i64x2.lt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\mathsf{\_s}\\ &&|& + \def\mathdef3035#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3035{i64x2.gt\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\mathsf{\_s}\\ &&|& + \def\mathdef3036#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3036{i64x2.le\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\mathsf{\_s}\\ &&|& + \def\mathdef3037#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3037{i64x2.ge\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\mathsf{\_s}\\ &&|& +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3038#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3038{f32x4.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3039#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3039{f32x4.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3040#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3040{f32x4.lt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\\ &&|& + \def\mathdef3041#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3041{f32x4.gt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\\ &&|& + \def\mathdef3042#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3042{f32x4.le} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\\ &&|& + \def\mathdef3043#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3043{f32x4.ge} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3044#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3044{f64x2.eq} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{eq}}\\ &&|& + \def\mathdef3045#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3045{f64x2.ne} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ne}}\\ &&|& + \def\mathdef3046#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3046{f64x2.lt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{lt}}\\ &&|& + \def\mathdef3047#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3047{f64x2.gt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{gt}}\\ &&|& + \def\mathdef3048#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3048{f64x2.le} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{le}}\\ &&|& + \def\mathdef3049#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3049{f64x2.ge} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{ge}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3050#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3050{v128.not} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{not}}\\ &&|& + \def\mathdef3051#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3051{v128.and} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{and}}\\ &&|& + \def\mathdef3052#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3052{v128.andnot} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{andnot}}\\ &&|& + \def\mathdef3053#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3053{v128.or} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{or}}\\ &&|& + \def\mathdef3054#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3054{v128.xor} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{xor}}\\ &&|& + \def\mathdef3055#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3055{v128.bitselect} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitselect}}\\ &&|& + \def\mathdef3056#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3056{v128.any\_true} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{any\_true}} +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3057#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3057{i8x16.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3058#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3058{i8x16.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3059#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3059{i8x16.all\_true} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\\ &&|& + \def\mathdef3060#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3060{i8x16.bitmask} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\\ &&|& + \def\mathdef3061#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3061{i8x16.narrow\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_s}\\ &&|& + \def\mathdef3062#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3062{i8x16.narrow\_i16x8\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i16x8\_u}\\ &&|& + \def\mathdef3063#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3063{i8x16.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\\ &&|& + \def\mathdef3064#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3064{i8x16.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\\ &&|& + \def\mathdef3065#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3065{i8x16.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\\ &&|& + \def\mathdef3066#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3066{i8x16.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3067#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3067{i8x16.add\_sat\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s}\\ &&|& + \def\mathdef3068#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3068{i8x16.add\_sat\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u}\\ &&|& + \def\mathdef3069#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3069{i8x16.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3070#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3070{i8x16.sub\_sat\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s}\\ &&|& + \def\mathdef3071#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3071{i8x16.sub\_sat\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u}\\ &&|& + \def\mathdef3072#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3072{i8x16.min\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\\ &&|& + \def\mathdef3073#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3073{i8x16.min\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\\ &&|& + \def\mathdef3074#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3074{i8x16.max\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\\ &&|& + \def\mathdef3075#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3075{i8x16.max\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\\ &&|& + \def\mathdef3076#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3076{i8x16.avgr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u}\\ &&|& + \def\mathdef3077#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3077{i8x16.popcnt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i8x16}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{popcnt}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3078#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3078{i16x8.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3079#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3079{i16x8.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3080#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3080{i16x8.all\_true} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\\ &&|& + \def\mathdef3081#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3081{i16x8.bitmask} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\\ &&|& + \def\mathdef3082#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3082{i16x8.narrow\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_s}\\ &&|& + \def\mathdef3083#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3083{i16x8.narrow\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_i32x4\_u}\\ &&|& + \def\mathdef3084#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3084{i16x8.extend\_low\_i8x16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_s}\\ &&|& + \def\mathdef3085#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3085{i16x8.extend\_high\_i8x16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_s}\\ &&|& + \def\mathdef3086#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3086{i16x8.extend\_low\_i8x16\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i8x16\_u}\\ &&|& + \def\mathdef3087#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3087{i16x8.extend\_high\_i8x16\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i8x16\_u}\\ &&|& + \def\mathdef3088#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3088{i16x8.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\\ &&|& + \def\mathdef3089#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3089{i16x8.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\\ &&|& + \def\mathdef3090#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3090{i16x8.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\\ &&|& + \def\mathdef3091#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3091{i16x8.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3092#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3092{i16x8.add\_sat\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_s}\\ &&|& + \def\mathdef3093#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3093{i16x8.add\_sat\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\mathsf{\_sat\_u}\\ &&|& + \def\mathdef3094#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3094{i16x8.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3095#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3095{i16x8.sub\_sat\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_s}\\ &&|& + \def\mathdef3096#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3096{i16x8.sub\_sat\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\mathsf{\_sat\_u}\\ &&|& + \def\mathdef3097#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3097{i16x8.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\\ &&|& + \def\mathdef3098#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3098{i16x8.min\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\\ &&|& + \def\mathdef3099#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3099{i16x8.min\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\\ &&|& + \def\mathdef3100#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3100{i16x8.max\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\\ &&|& + \def\mathdef3101#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3101{i16x8.max\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\\ &&|& + \def\mathdef3102#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3102{i16x8.avgr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{avgr}}\mathsf{\_u}\\ &&|& + \def\mathdef3103#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3103{i16x8.q15mulr\_sat\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{q15mulr\_sat}}\mathsf{\_s}\\ &&|& + \def\mathdef3104#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3104{i16x8.extmul\_low\_i8x16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_s}\\ &&|& + \def\mathdef3105#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3105{i16x8.extmul\_high\_i8x16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_s}\\ &&|& + \def\mathdef3106#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3106{i16x8.extmul\_low\_i8x16\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i8x16\_u}\\ &&|& + \def\mathdef3107#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3107{i16x8.extmul\_high\_i8x16\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i8x16\_u}\\ &&|& + \def\mathdef3108#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3108{i16x8.extadd\_pairwise\_i8x16\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_s}\\ &&|& + \def\mathdef3109#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3109{i16x8.extadd\_pairwise\_i8x16\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i16x8}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i8x16\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} + \phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3110#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3110{i32x4.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3111#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3111{i32x4.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3112#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3112{i32x4.all\_true} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\\ &&|& + \def\mathdef3113#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3113{i32x4.bitmask} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\\ &&|& + \def\mathdef3114#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3114{i32x4.extadd\_pairwise\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_i16x8\_s}\\ &&|& + \def\mathdef3115#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3115{i32x4.extend\_low\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_s}\\ &&|& + \def\mathdef3116#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3116{i32x4.extend\_high\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_s}\\ &&|& + \def\mathdef3117#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3117{i32x4.extend\_low\_i16x8\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i16x8\_u}\\ &&|& + \def\mathdef3118#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3118{i32x4.extend\_high\_i16x8\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i16x8\_u}\\ &&|& + \def\mathdef3119#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3119{i32x4.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\\ &&|& + \def\mathdef3120#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3120{i32x4.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\\ &&|& + \def\mathdef3121#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3121{i32x4.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\\ &&|& + \def\mathdef3122#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3122{i32x4.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3123#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3123{i32x4.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3124#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3124{i32x4.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\\ &&|& + \def\mathdef3125#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3125{i32x4.min\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_s}\\ &&|& + \def\mathdef3126#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3126{i32x4.min\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\mathsf{\_u}\\ &&|& + \def\mathdef3127#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3127{i32x4.max\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_s}\\ &&|& + \def\mathdef3128#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3128{i32x4.max\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\mathsf{\_u}\\ &&|& + \def\mathdef3129#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3129{i32x4.dot\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_i16x8\_s}\\ &&|& + \def\mathdef3130#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3130{i32x4.extmul\_low\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_s}\\ &&|& + \def\mathdef3131#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3131{i32x4.extmul\_high\_i16x8\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_s}\\ &&|& + \def\mathdef3132#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3132{i32x4.extmul\_low\_i16x8\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i16x8\_u}\\ &&|& + \def\mathdef3133#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3133{i32x4.extmul\_high\_i16x8\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i16x8\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} + \phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3134#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3134{i64x2.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3135#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3135{i64x2.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3136#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3136{i64x2.all\_true} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{all\_true}}\\ &&|& + \def\mathdef3137#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3137{i64x2.bitmask} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\\ &&|& + \def\mathdef3138#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3138{i64x2.extend\_low\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_s} \\ &&|& + \def\mathdef3139#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3139{i64x2.extend\_high\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_s} \\ &&|& + \def\mathdef3140#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3140{i64x2.extend\_low\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_low\_i32x4\_u} \\ &&|& + \def\mathdef3141#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3141{i64x2.extend\_high\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extend}}\mathsf{\_high\_i32x4\_u} \\ &&|& + \def\mathdef3142#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3142{i64x2.shl} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shl}}\\ &&|& + \def\mathdef3143#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3143{i64x2.shr\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_s}\\ &&|& + \def\mathdef3144#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3144{i64x2.shr\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shr}}\mathsf{\_u}\\ &&|& + \def\mathdef3145#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3145{i64x2.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3146#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3146{i64x2.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3147#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3147{i64x2.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\\ &&|& + \def\mathdef3148#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3148{i64x2.extmul\_low\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_s}\\ &&|& + \def\mathdef3149#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3149{i64x2.extmul\_high\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_s}\\ &&|& + \def\mathdef3150#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3150{i64x2.extmul\_low\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_low\_i32x4\_u}\\ &&|& + \def\mathdef3151#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3151{i64x2.extmul\_high\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_high\_i32x4\_u}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3152#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3152{f32x4.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3153#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3153{f32x4.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3154#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3154{f32x4.sqrt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}}\\ &&|& + \def\mathdef3155#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3155{f32x4.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3156#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3156{f32x4.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3157#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3157{f32x4.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\\ &&|& + \def\mathdef3158#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3158{f32x4.div} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}}\\ &&|& + \def\mathdef3159#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3159{f32x4.min} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\\ &&|& + \def\mathdef3160#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3160{f32x4.max} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\\ &&|& + \def\mathdef3161#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3161{f32x4.pmin} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}}\\ &&|& + \def\mathdef3162#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3162{f32x4.pmax} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3163#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3163{f64x2.abs} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{abs}}\\ &&|& + \def\mathdef3164#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3164{f64x2.neg} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{neg}}\\ &&|& + \def\mathdef3165#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3165{f64x2.sqrt} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sqrt}}\\ &&|& + \def\mathdef3166#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3166{f64x2.add} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{add}}\\ &&|& + \def\mathdef3167#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3167{f64x2.sub} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{sub}}\\ &&|& + \def\mathdef3168#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3168{f64x2.mul} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{mul}}\\ &&|& + \def\mathdef3169#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3169{f64x2.div} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{div}}\\ &&|& + \def\mathdef3170#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3170{f64x2.min} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{min}}\\ &&|& + \def\mathdef3171#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3171{f64x2.max} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{max}}\\ &&|& + \def\mathdef3172#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3172{f64x2.pmin} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmin}}\\ &&|& + \def\mathdef3173#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3173{f64x2.pmax} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{pmax}}\\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\phantom{\def\mathdef2670#1{{}}\mathdef2670{instruction}} & \phantom{\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}_I} &\phantom{::=}& \phantom{averylonginstructionnameforvectext} && \phantom{vechasreallylonginstructionnames} \\[-2ex] &&|& + \def\mathdef3174#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3174{i32x4.trunc\_sat\_f32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_s}\\ &&|& + \def\mathdef3175#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3175{i32x4.trunc\_sat\_f32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f32x4\_u}\\ &&|& + \def\mathdef3176#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3176{i32x4.trunc\_sat\_f64x2\_s\_zero} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_s\_zero}\\ &&|& + \def\mathdef3177#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3177{i32x4.trunc\_sat\_f64x2\_u\_zero} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{trunc}}\mathsf{\_sat\_f64x2\_u\_zero}\\ &&|& + \def\mathdef3178#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3178{f32x4.convert\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_i32x4\_s}\\ &&|& + \def\mathdef3179#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3179{f32x4.convert\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{convert}}\mathsf{\_i32x4\_u}\\ &&|& + \def\mathdef3180#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3180{f64x2.convert\_low\_i32x4\_s} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_s}\\ &&|& + \def\mathdef3181#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3181{f64x2.convert\_low\_i32x4\_u} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{convert}}\mathsf{\_low\_i32x4\_u}\\ &&|& + \def\mathdef3182#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3182{f32x4.demote\_f64x2\_zero} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32x4}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{demote}}\mathsf{\_f64x2\_zero}\\ &&|& + \def\mathdef3183#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3183{f64x2.promote\_low\_f32x4} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64x2}}.\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{promote}}\mathsf{\_low\_f32x4}\\ &&|& +\end{array}\end{split}\]
    +
    +
    +

    Folded Instructions

    +

    Instructions can be written as S-expressions by grouping them into folded form. In that notation, an instruction is wrapped in parentheses and optionally includes nested folded instructions to indicate its operands.

    +

    In the case of block instructions, the folded form omits the \(\def\mathdef3184#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3184{end}\) delimiter. +For \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}\) instructions, both branches have to be wrapped into nested S-expressions, headed by the keywords \(\def\mathdef3185#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3185{then}\) and \(\def\mathdef3186#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3186{else}\).

    +

    The set of all phrases defined by the following abbreviations recursively forms the auxiliary syntactic class \(\href{../text/instructions.html#text-foldedinstr}{\mathtt{foldedinstr}}\). +Such a folded instruction can appear anywhere a regular instruction can.

    +
    +\[\begin{split}\begin{array}{lllll} +\def\mathdef2670#1{{}}\mathdef2670{instruction} & + \def\mathdef3187#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3187{(}~\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}}~~\href{../text/instructions.html#text-foldedinstr}{\mathtt{foldedinstr}}^\ast~\def\mathdef3188#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3188{)} + &\equiv\quad \href{../text/instructions.html#text-foldedinstr}{\mathtt{foldedinstr}}^\ast~~\href{../text/instructions.html#text-plaininstr}{\mathtt{plaininstr}} \\ & + \def\mathdef3189#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3189{(}~\def\mathdef3190#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3190{block}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~\def\mathdef3191#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3191{)} + &\equiv\quad \def\mathdef3192#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3192{block}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~~\def\mathdef3193#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3193{end} \\ & + \def\mathdef3194#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3194{(}~\def\mathdef3195#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3195{loop}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~\def\mathdef3196#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3196{)} + &\equiv\quad \def\mathdef3197#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3197{loop}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}^\ast~~\def\mathdef3198#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3198{end} \\ & + \def\mathdef3199#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3199{(}~\def\mathdef3200#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3200{if}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}}~~\href{../text/instructions.html#text-foldedinstr}{\mathtt{foldedinstr}}^\ast + &\hspace{-3ex} \def\mathdef3201#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3201{(}~\def\mathdef3202#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3202{then}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}_1^\ast~\def\mathdef3203#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3203{)}~~\def\mathdef3204#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3204{(}~\def\mathdef3205#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3205{else}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}_2^\ast~\def\mathdef3206#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3206{)}^?~~\def\mathdef3207#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3207{)} + \quad\equiv \\ &\qquad + \href{../text/instructions.html#text-foldedinstr}{\mathtt{foldedinstr}}^\ast~~\def\mathdef3208#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3208{if}~~\href{../text/instructions.html#text-label}{\mathtt{label}}~~\href{../text/instructions.html#text-blocktype}{\mathtt{blocktype}} &\hspace{-1ex} \href{../text/instructions.html#text-instr}{\mathtt{instr}}_1^\ast~~\def\mathdef3209#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3209{else}~~(\href{../text/instructions.html#text-instr}{\mathtt{instr}}_2^\ast)^?~\def\mathdef3210#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3210{end} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    For example, the instruction sequence

    +
    +\[\mathtt{(local.get~\$x)~(i32.const~2)~i32.add~(i32.const~3)~i32.mul}\]
    +

    can be folded into

    +
    +\[\mathtt{(i32.mul~(i32.add~(local.get~\$x)~(i32.const~2))~(i32.const~3))}\]
    +

    Folded instructions are solely syntactic sugar, +no additional syntactic or type-based checking is implied.

    +
    +
    +
    +

    Expressions

    +

    Expressions are written as instruction sequences. +No explicit \(\def\mathdef3211#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3211{end}\) keyword is included, since they only occur in bracketed positions.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef2670#1{{}}\mathdef2670{expression} & \href{../text/instructions.html#text-expr}{\mathtt{expr}}_I &::=& + (\mathit{in}{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_I)^\ast &\Rightarrow& \mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/lexical.html b/core/text/lexical.html new file mode 100644 index 00000000..bbd962da --- /dev/null +++ b/core/text/lexical.html @@ -0,0 +1,193 @@ + + + + + + + + + Lexical Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Lexical Format

    +
    +

    Characters

    +

    The text format assigns meaning to source text, which consists of a sequence of characters. +Characters are assumed to be represented as valid Unicode (Section 2.4) scalar values.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef3212#1{{}}\mathdef3212{source} & \href{../text/lexical.html#text-source}{\mathtt{source}} &::=& + \href{../text/lexical.html#text-char}{\mathtt{char}}^\ast \\ +\def\mathdef3212#1{{}}\mathdef3212{character} & \href{../text/lexical.html#text-char}{\mathtt{char}} &::=& + \def\mathdef3251#1{\mathrm{U{+}#1}}\mathdef3251{00} ~|~ \dots ~|~ \def\mathdef3252#1{\mathrm{U{+}#1}}\mathdef3252{D7FF} ~|~ \def\mathdef3253#1{\mathrm{U{+}#1}}\mathdef3253{E000} ~|~ \dots ~|~ \def\mathdef3254#1{\mathrm{U{+}#1}}\mathdef3254{10FFFF} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    While source text may contain any Unicode character in comments or string literals, +the rest of the grammar is formed exclusively from the characters supported by the 7-bit ASCII subset of Unicode.

    +
    +
    +
    +

    Tokens

    +

    The character stream in the source text is divided, from left to right, into a sequence of tokens, as defined by the following grammar.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef3212#1{{}}\mathdef3212{token} & \href{../text/lexical.html#text-token}{\mathtt{token}} &::=& + \href{../text/lexical.html#text-keyword}{\mathtt{keyword}} ~|~ \href{../text/values.html#text-int}{\def\mathdef3233#1{{\mathtt{u}#1}}\mathdef3233{N}} ~|~ \href{../text/values.html#text-int}{\def\mathdef3239#1{{\mathtt{s}#1}}\mathdef3239{N}} ~|~ \href{../text/values.html#text-float}{\def\mathdef3247#1{{\mathtt{f}#1}}\mathdef3247{N}} ~|~ \href{../text/values.html#text-string}{\mathtt{string}} ~|~ \href{../text/values.html#text-id}{\mathtt{id}} ~|~ + \def\mathdef3255#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3255{(} ~|~ \def\mathdef3256#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3256{)} ~|~ \href{../text/lexical.html#text-reserved}{\mathtt{reserved}} \\ +\def\mathdef3212#1{{}}\mathdef3212{keyword} & \href{../text/lexical.html#text-keyword}{\mathtt{keyword}} &::=& + (\def\mathdef3257#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3257{a} ~|~ \dots ~|~ \def\mathdef3258#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3258{z})~\href{../text/values.html#text-idchar}{\mathtt{idchar}}^\ast + \qquad (\mbox{if occurring as a literal terminal in the grammar}) \\ +\def\mathdef3212#1{{}}\mathdef3212{reserved} & \href{../text/lexical.html#text-reserved}{\mathtt{reserved}} &::=& + \href{../text/values.html#text-idchar}{\mathtt{idchar}}^+ \\ +\end{array}\end{split}\]
    +

    Tokens are formed from the input character stream according to the longest match rule. +That is, the next token always consists of the longest possible sequence of characters that is recognized by the above lexical grammar. +Tokens can be separated by white space, +but except for strings, they cannot themselves contain whitespace.

    +

    The set of keyword tokens is defined implicitly, by all occurrences of a terminal symbol in literal form, such as \(\def\mathdef3259#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3259{keyword}\), in a syntactic production of this chapter.

    +

    Any token that does not fall into any of the other categories is considered reserved, and cannot occur in source text.

    +
    +

    Note

    +

    The effect of defining the set of reserved tokens is that all tokens must be separated by either parentheses or white space. +For example, \(\def\mathdef3260#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3260{0\$x}\) is a single reserved token. +Consequently, it is not recognized as two separate tokens \(\def\mathdef3261#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3261{0}\) and \(\def\mathdef3262#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3262{\$x}\), but instead disallowed. +This property of tokenization is not affected by the fact that the definition of reserved tokens overlaps with other token classes.

    +
    +
    +
    +

    White Space

    +

    White space is any sequence of literal space characters, formatting characters, or comments. +The allowed formatting characters correspond to a subset of the ASCII format effectors, namely, horizontal tabulation (\(\def\mathdef3263#1{\mathrm{U{+}#1}}\mathdef3263{09}\)), line feed (\(\def\mathdef3264#1{\mathrm{U{+}#1}}\mathdef3264{0A}\)), and carriage return (\(\def\mathdef3265#1{\mathrm{U{+}#1}}\mathdef3265{0D}\)).

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3212#1{{}}\mathdef3212{white space} & \href{../text/lexical.html#text-space}{\mathtt{space}} &::=& + (\def\mathdef3266#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3266{~~} ~|~ \href{../text/lexical.html#text-format}{\mathtt{format}} ~|~ \href{../text/lexical.html#text-comment}{\mathtt{comment}})^\ast \\ +\def\mathdef3212#1{{}}\mathdef3212{format} & \href{../text/lexical.html#text-format}{\mathtt{format}} &::=& + \def\mathdef3267#1{\mathrm{U{+}#1}}\mathdef3267{09} ~|~ \def\mathdef3268#1{\mathrm{U{+}#1}}\mathdef3268{0A} ~|~ \def\mathdef3269#1{\mathrm{U{+}#1}}\mathdef3269{0D} \\ +\end{array}\end{split}\]
    +

    The only relevance of white space is to separate tokens. It is otherwise ignored.

    +
    +
    +

    Comments

    +

    A comment can either be a line comment, started with a double semicolon \(\def\mathdef3232#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3232{{;}{;}}\) and extending to the end of the line, +or a block comment, enclosed in delimiters \(\def\mathdef3230#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3230{{(}{;}} \dots \def\mathdef3231#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3231{{;}{)}}\). +Block comments can be nested.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3212#1{{}}\mathdef3212{comment} & \href{../text/lexical.html#text-comment}{\mathtt{comment}} &::=& + \href{../text/lexical.html#text-comment}{\mathtt{linecomment}} ~|~ \href{../text/lexical.html#text-comment}{\mathtt{blockcomment}} \\ +\def\mathdef3212#1{{}}\mathdef3212{line comment} & \href{../text/lexical.html#text-comment}{\mathtt{linecomment}} &::=& + \def\mathdef3232#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3232{{;}{;}}~~\href{../text/lexical.html#text-comment}{\mathtt{linechar}}^\ast~~(\def\mathdef3270#1{\mathrm{U{+}#1}}\mathdef3270{0A} ~|~ \mathtt{eof}) \\ +\def\mathdef3212#1{{}}\mathdef3212{line character} & \href{../text/lexical.html#text-comment}{\mathtt{linechar}} &::=& + c{:}\href{../text/lexical.html#text-char}{\mathtt{char}} & (\mathrel{\mbox{if}} c \neq \def\mathdef3271#1{\mathrm{U{+}#1}}\mathdef3271{0A}) \\ +\def\mathdef3212#1{{}}\mathdef3212{block comment} & \href{../text/lexical.html#text-comment}{\mathtt{blockcomment}} &::=& + \def\mathdef3230#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3230{{(}{;}}~~\href{../text/lexical.html#text-comment}{\mathtt{blockchar}}^\ast~~\def\mathdef3231#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3231{{;}{)}} \\ +\def\mathdef3212#1{{}}\mathdef3212{block character} & \href{../text/lexical.html#text-comment}{\mathtt{blockchar}} &::=& + c{:}\href{../text/lexical.html#text-char}{\mathtt{char}} & (\mathrel{\mbox{if}} c \neq \def\mathdef3272#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3272{;} \wedge c \neq \def\mathdef3273#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3273{(}) \\ &&|& + \def\mathdef3274#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3274{;} & (\mathrel{\mbox{if}}~\mbox{the next character is not}~\def\mathdef3275#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3275{)}) \\ &&|& + \def\mathdef3276#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3276{(} & (\mathrel{\mbox{if}}~\mbox{the next character is not}~\def\mathdef3277#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3277{;}) \\ &&|& + \href{../text/lexical.html#text-comment}{\mathtt{blockcomment}} \\ +\end{array}\end{split}\]
    +

    Here, the pseudo token \(\mathtt{eof}\) indicates the end of the input. +The look-ahead restrictions on the productions for \(\href{../text/lexical.html#text-comment}{\mathtt{blockchar}}\) disambiguate the grammar such that only well-bracketed uses of block comment delimiters are allowed.

    +
    +

    Note

    +

    Any formatting and control characters are allowed inside comments.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/modules.html b/core/text/modules.html new file mode 100644 index 00000000..838660a9 --- /dev/null +++ b/core/text/modules.html @@ -0,0 +1,617 @@ + + + + + + + + + Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Modules

    +
    +

    Indices

    +

    Indices can be given either in raw numeric form or as symbolic identifiers when bound by a respective construct. +Such identifiers are looked up in the suitable space of the identifier context \(I\).

    +
    +\[\begin{split}\begin{array}{llcllllllll} +\def\mathdef3278#1{{}}\mathdef3278{type index} & \href{../text/modules.html#text-typeidx}{\mathtt{typeidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{types}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{function index} & \href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{funcs}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{table index} & \href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{tables}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{memory index} & \href{../text/modules.html#text-memidx}{\mathtt{memidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{mems}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{global index} & \href{../text/modules.html#text-globalidx}{\mathtt{globalidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{globals}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{element index} & \href{../text/modules.html#text-elemidx}{\mathtt{elemidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{elem}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{data index} & \href{../text/modules.html#text-dataidx}{\mathtt{dataidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{data}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{local index} & \href{../text/modules.html#text-localidx}{\mathtt{localidx}}_I &::=& + x{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& x \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& x & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{locals}}[x] = v) \\ +\def\mathdef3278#1{{}}\mathdef3278{label index} & \href{../text/modules.html#text-labelidx}{\mathtt{labelidx}}_I &::=& + l{:}\href{../text/values.html#text-int}{\def\mathdef3303#1{{\mathtt{u}#1}}\mathdef3303{\mathtt{32}}} &\Rightarrow& l \\&&|& + v{:}\href{../text/values.html#text-id}{\mathtt{id}} &\Rightarrow& l & (\mathrel{\mbox{if}} I.\href{../text/conventions.html#text-context}{\mathsf{labels}}[l] = v) \\ +\end{array}\end{split}\]
    +
    +
    +

    Types

    +

    Type definitions can bind a symbolic type identifier.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{type definition} & \href{../text/modules.html#text-typedef}{\mathtt{type}} &::=& + \def\mathdef3317#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3317{(}~\def\mathdef3318#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3318{type}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{ft}{:}\href{../text/types.html#text-functype}{\mathtt{functype}}~\def\mathdef3319#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3319{)} + &\Rightarrow& \mathit{ft} \\ +\end{array}\end{split}\]
    +
    +
    +

    Type Uses

    +

    A type use is a reference to a type definition. +It may optionally be augmented by explicit inlined parameter and result declarations. +That allows binding symbolic identifiers to name the local indices of parameters. +If inline declarations are given, then their types must match the referenced function type.

    +
    +\[\begin{split}\begin{array}{llcllll} +\def\mathdef3278#1{{}}\mathdef3278{type use} & \href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}_I &::=& + \def\mathdef3320#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3320{(}~\def\mathdef3321#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3321{type}~~x{:}\href{../text/modules.html#text-typeidx}{\mathtt{typeidx}}_I~\def\mathdef3322#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3322{)} + \quad\Rightarrow\quad x, I' \\ &&& \qquad + (\mathrel{\mbox{if}} \begin{array}[t]{@{}l@{}} + I.\href{../text/conventions.html#text-context}{\mathsf{typedefs}}[x] = [t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] \wedge + I' = \{\href{../text/conventions.html#text-context}{\mathsf{locals}}~(\epsilon)^n\}) \\ + \end{array} \\[1ex] &&|& + \def\mathdef3323#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3323{(}~\def\mathdef3324#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3324{type}~~x{:}\href{../text/modules.html#text-typeidx}{\mathtt{typeidx}}_I~\def\mathdef3325#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3325{)} + ~~(t_1{:}\href{../text/types.html#text-functype}{\mathtt{param}})^\ast~~(t_2{:}\href{../text/types.html#text-functype}{\mathtt{result}})^\ast + \quad\Rightarrow\quad x, I' \\ &&& \qquad + (\mathrel{\mbox{if}} \begin{array}[t]{@{}l@{}} + I.\href{../text/conventions.html#text-context}{\mathsf{typedefs}}[x] = [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] \wedge + I' = \{\href{../text/conventions.html#text-context}{\mathsf{locals}}~\mathrm{id}(\href{../text/types.html#text-functype}{\mathtt{param}})^\ast\} ~\href{../text/conventions.html#text-context-wf}{\mbox{well-formed}}) \\ + \end{array} \\ +\end{array}\end{split}\]
    +

    The synthesized attribute of a \(\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}\) is a pair consisting of both the used type index and the updated identifier context including possible parameter identifiers. +The following auxiliary function extracts optional identifiers from parameters:

    +
    +\[\begin{split}\begin{array}{lcl@{\qquad\qquad}l} +\mathrm{id}(\def\mathdef3326#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3326{(}~\def\mathdef3327#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3327{param}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3328#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3328{)}) &=& \href{../text/values.html#text-id}{\mathtt{id}}^? \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Both productions overlap for the case that the function type is \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\). +However, in that case, they also produce the same results, so that the choice is immaterial.

    +

    The well-formedness condition on \(I'\) ensures that the parameters do not contain duplicate identifier.

    +
    +
    +

    Abbreviations

    +

    A \(\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}\) may also be replaced entirely by inline parameter and result declarations. +In that case, a type index is automatically inserted:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{type use} & + (t_1{:}\href{../text/types.html#text-functype}{\mathtt{param}})^\ast~~(t_2{:}\href{../text/types.html#text-functype}{\mathtt{result}})^\ast &\equiv& + \def\mathdef3329#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3329{(}~\def\mathdef3330#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3330{type}~~x~\def\mathdef3331#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3331{)}~~\href{../text/types.html#text-functype}{\mathtt{param}}^\ast~~\href{../text/types.html#text-functype}{\mathtt{result}}^\ast \\ +\end{array}\end{split}\]
    +

    where \(x\) is the smallest existing type index whose definition in the current module is the function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\). +If no such index exists, then a new type definition of the form

    +
    +\[\def\mathdef3332#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3332{(}~\def\mathdef3333#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3333{type}~~\def\mathdef3334#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3334{(}~\def\mathdef3335#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3335{func}~~\href{../text/types.html#text-functype}{\mathtt{param}}^\ast~~\href{../text/types.html#text-functype}{\mathtt{result}}^\ast~\def\mathdef3336#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3336{)}~\def\mathdef3337#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3337{)}\]
    +

    is inserted at the end of the module.

    +

    Abbreviations are expanded in the order they appear, such that previously inserted type definitions are reused by consecutive expansions.

    +
    +
    +
    +

    Imports

    +

    The descriptors in imports can bind a symbolic function, table, memory, or global identifier.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{import} & \href{../text/modules.html#text-import}{\mathtt{import}}_I &::=& + \def\mathdef3338#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3338{(}~\def\mathdef3339#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3339{import}~~\mathit{mod}{:}\href{../text/values.html#text-name}{\mathtt{name}}~~\mathit{nm}{:}\href{../text/values.html#text-name}{\mathtt{name}}~~d{:}\href{../text/modules.html#text-importdesc}{\mathtt{importdesc}}_I~\def\mathdef3340#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3340{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-import}{\mathsf{module}}~\mathit{mod}, \href{../syntax/modules.html#syntax-import}{\mathsf{name}}~\mathit{nm}, \href{../syntax/modules.html#syntax-import}{\mathsf{desc}}~d \} \\[1ex] +\def\mathdef3278#1{{}}\mathdef3278{import description} & \href{../text/modules.html#text-importdesc}{\mathtt{importdesc}}_I &::=& + \def\mathdef3341#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3341{(}~\def\mathdef3342#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3342{func}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~x,I'{:}\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}_I~\def\mathdef3343#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3343{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{func}}~x \\ &&|& + \def\mathdef3344#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3344{(}~\def\mathdef3345#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3345{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{tt}{:}\href{../text/types.html#text-tabletype}{\mathtt{tabletype}}~\def\mathdef3346#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3346{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{table}}~\mathit{tt} \\ &&|& + \def\mathdef3347#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3347{(}~\def\mathdef3348#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3348{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{mt}{:}\href{../text/types.html#text-memtype}{\mathtt{memtype}}~\def\mathdef3349#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3349{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{mem}}~~\mathit{mt} \\ &&|& + \def\mathdef3350#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3350{(}~\def\mathdef3351#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3351{global}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{gt}{:}\href{../text/types.html#text-globaltype}{\mathtt{globaltype}}~\def\mathdef3352#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3352{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-importdesc}{\mathsf{global}}~\mathit{gt} \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    As an abbreviation, imports may also be specified inline with function, table, memory, or global definitions; see the respective sections.

    +
    +
    +
    +

    Functions

    +

    Function definitions can bind a symbolic function identifier, and local identifiers for its parameters and locals.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{function} & \href{../text/modules.html#text-func}{\mathtt{func}}_I &::=& + \def\mathdef3353#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3353{(}~\def\mathdef3354#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3354{func}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~x,I'{:}\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}_I~~ + (t{:}\href{../text/modules.html#text-local}{\mathtt{local}})^\ast~~(\mathit{in}{:}\href{../text/instructions.html#text-instr}{\mathtt{instr}}_{I''})^\ast~\def\mathdef3355#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3355{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~x, \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~t^\ast, \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~\mathit{in}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \} \\ &&& \qquad\qquad\qquad + (\mathrel{\mbox{if}} I'' = I' \href{../syntax/conventions.html#notation-compose}{\oplus} \{\href{../text/conventions.html#text-context}{\mathsf{locals}}~\mathrm{id}(\href{../text/modules.html#text-local}{\mathtt{local}})^\ast\} ~\href{../text/conventions.html#text-context-wf}{\mbox{well-formed}}) \\[1ex] +\def\mathdef3278#1{{}}\mathdef3278{local} & \href{../text/modules.html#text-local}{\mathtt{local}} &::=& + \def\mathdef3356#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3356{(}~\def\mathdef3357#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3357{local}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~t{:}\href{../text/types.html#text-valtype}{\mathtt{valtype}}~\def\mathdef3358#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3358{)} + \quad\Rightarrow\quad t \\ +\end{array}\end{split}\]
    +

    The definition of the local identifier context \(I''\) uses the following auxiliary function to extract optional identifiers from locals:

    +
    +\[\begin{split}\begin{array}{lcl@{\qquad\qquad}l} +\mathrm{id}(\def\mathdef3359#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3359{(}~\def\mathdef3360#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3360{local}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3361#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3361{)}) &=& \href{../text/values.html#text-id}{\mathtt{id}}^? \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The well-formedness condition on \(I''\) ensures that parameters and locals do not contain duplicate identifiers.

    +
    +
    +

    Abbreviations

    +

    Multiple anonymous locals may be combined into a single declaration:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{local} & + \def\mathdef3362#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3362{(}~~\def\mathdef3363#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3363{local}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}^\ast~~\def\mathdef3364#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3364{)} &\equiv& + (\def\mathdef3365#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3365{(}~~\def\mathdef3366#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3366{local}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}~~\def\mathdef3367#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3367{)})^\ast \\ +\end{array}\end{split}\]
    +

    Functions can be defined as imports or exports inline:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3368#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3368{(}~\def\mathdef3369#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3369{func}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3370#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3370{(}~\def\mathdef3371#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3371{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~\def\mathdef3372#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3372{)}~~\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}~\def\mathdef3373#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3373{)} \quad\equiv \\ & \qquad + \def\mathdef3374#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3374{(}~\def\mathdef3375#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3375{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~~\def\mathdef3376#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3376{(}~\def\mathdef3377#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3377{func}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/modules.html#text-typeuse}{\mathtt{typeuse}}~\def\mathdef3378#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3378{)}~\def\mathdef3379#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3379{)} \\[1ex] & + \def\mathdef3380#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3380{(}~\def\mathdef3381#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3381{func}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3382#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3382{(}~\def\mathdef3383#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3383{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~\def\mathdef3384#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3384{)}~~\dots~\def\mathdef3385#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3385{)} \quad\equiv \\ & \qquad + \def\mathdef3386#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3386{(}~\def\mathdef3387#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3387{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~~\def\mathdef3388#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3388{(}~\def\mathdef3389#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3389{func}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3390#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3390{)}~\def\mathdef3391#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3391{)}~~ + \def\mathdef3392#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3392{(}~\def\mathdef3393#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3393{func}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~\dots~\def\mathdef3394#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3394{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “\(\dots\)” contains additional export clauses. +Consequently, a function declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    +

    Tables

    +

    Table definitions can bind a symbolic table identifier.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{table} & \href{../text/modules.html#text-table}{\mathtt{table}}_I &::=& + \def\mathdef3395#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3395{(}~\def\mathdef3396#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3396{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{tt}{:}\href{../text/types.html#text-tabletype}{\mathtt{tabletype}}~\def\mathdef3397#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3397{)} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-table}{\mathsf{type}}~\mathit{tt} \} \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    An element segment can be given inline with a table definition, in which case its offset is \(0\) and the limits of the table type are inferred from the length of the given segment:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3398#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3398{(}~\def\mathdef3399#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3399{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/types.html#text-reftype}{\mathtt{reftype}}~~\def\mathdef3400#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3400{(}~\def\mathdef3401#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3401{elem}~~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}^n{:}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-elemexpr}{\mathtt{elemexpr}})~\def\mathdef3402#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3402{)}~~\def\mathdef3403#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3403{)} \quad\equiv \\ & \qquad + \def\mathdef3404#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3404{(}~\def\mathdef3405#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3405{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~n~~n~~\href{../text/types.html#text-reftype}{\mathtt{reftype}}~\def\mathdef3406#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3406{)} \\ & \qquad + \def\mathdef3407#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3407{(}~\def\mathdef3408#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3408{elem}~~\def\mathdef3409#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3409{(}~\def\mathdef3410#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3410{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3411#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3411{)}~~\def\mathdef3412#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3412{(}~\def\mathdef3413#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3413{i32.const}~~\def\mathdef3414#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3414{0}~\def\mathdef3415#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3415{)}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-elemexpr}{\mathtt{elemexpr}})~\def\mathdef3416#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3416{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3417#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3417{(}~\def\mathdef3418#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3418{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/types.html#text-reftype}{\mathtt{reftype}}~~\def\mathdef3419#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3419{(}~\def\mathdef3420#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3420{elem}~~x^n{:}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}})~\def\mathdef3421#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3421{)} \quad\equiv \\ & \qquad + \def\mathdef3422#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3422{(}~\def\mathdef3423#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3423{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~n~~n~~\href{../text/types.html#text-reftype}{\mathtt{reftype}}~\def\mathdef3424#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3424{)} \\ & \qquad + \def\mathdef3425#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3425{(}~\def\mathdef3426#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3426{elem}~~\def\mathdef3427#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3427{(}~\def\mathdef3428#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3428{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3429#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3429{)}~~\def\mathdef3430#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3430{(}~\def\mathdef3431#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3431{i32.const}~~\def\mathdef3432#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3432{0}~\def\mathdef3433#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3433{)}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}})~\def\mathdef3434#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3434{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +

    Tables can be defined as imports or exports inline:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3435#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3435{(}~\def\mathdef3436#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3436{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3437#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3437{(}~\def\mathdef3438#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3438{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~\def\mathdef3439#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3439{)}~~\href{../text/types.html#text-tabletype}{\mathtt{tabletype}}~\def\mathdef3440#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3440{)} \quad\equiv \\ & \qquad + \def\mathdef3441#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3441{(}~\def\mathdef3442#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3442{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~~\def\mathdef3443#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3443{(}~\def\mathdef3444#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3444{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/types.html#text-tabletype}{\mathtt{tabletype}}~\def\mathdef3445#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3445{)}~\def\mathdef3446#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3446{)} \\[1ex] & + \def\mathdef3447#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3447{(}~\def\mathdef3448#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3448{table}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3449#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3449{(}~\def\mathdef3450#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3450{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~\def\mathdef3451#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3451{)}~~\dots~\def\mathdef3452#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3452{)} \quad\equiv \\ & \qquad + \def\mathdef3453#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3453{(}~\def\mathdef3454#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3454{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~~\def\mathdef3455#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3455{(}~\def\mathdef3456#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3456{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3457#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3457{)}~\def\mathdef3458#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3458{)}~~ + \def\mathdef3459#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3459{(}~\def\mathdef3460#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3460{table}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~\dots~\def\mathdef3461#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3461{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “\(\dots\)” contains additional export clauses. +Consequently, a table declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    +

    Memories

    +

    Memory definitions can bind a symbolic memory identifier.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{memory} & \href{../text/modules.html#text-mem}{\mathtt{mem}}_I &::=& + \def\mathdef3462#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3462{(}~\def\mathdef3463#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3463{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{mt}{:}\href{../text/types.html#text-memtype}{\mathtt{memtype}}~\def\mathdef3464#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3464{)} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-mem}{\mathsf{type}}~\mathit{mt} \} \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    A data segment can be given inline with a memory definition, in which case its offset is \(0\) the limits of the memory type are inferred from the length of the data, rounded up to page size:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3465#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3465{(}~\def\mathdef3466#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3466{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3467#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3467{(}~\def\mathdef3468#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3468{data}~~b^n{:}\href{../text/modules.html#text-datastring}{\mathtt{datastring}}~\def\mathdef3469#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3469{)}~~\def\mathdef3470#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3470{)} \quad\equiv \\ & \qquad + \def\mathdef3471#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3471{(}~\def\mathdef3472#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3472{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~m~~m~\def\mathdef3473#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3473{)} \\ & \qquad + \def\mathdef3474#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3474{(}~\def\mathdef3475#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3475{data}~~\def\mathdef3476#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3476{(}~\def\mathdef3477#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3477{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3478#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3478{)}~~\def\mathdef3479#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3479{(}~\def\mathdef3480#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3480{i32.const}~~\def\mathdef3481#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3481{0}~\def\mathdef3482#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3482{)}~~\href{../text/modules.html#text-datastring}{\mathtt{datastring}}~\def\mathdef3483#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3483{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}, m = \mathrm{ceil}(n / 64\mathrm{Ki})) \\ +\end{array}\end{split}\]
    +

    Memories can be defined as imports or exports inline:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3484#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3484{(}~\def\mathdef3485#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3485{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3486#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3486{(}~\def\mathdef3487#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3487{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~\def\mathdef3488#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3488{)}~~\href{../text/types.html#text-memtype}{\mathtt{memtype}}~\def\mathdef3489#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3489{)} \quad\equiv \\ & \qquad + \def\mathdef3490#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3490{(}~\def\mathdef3491#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3491{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~~\def\mathdef3492#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3492{(}~\def\mathdef3493#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3493{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/types.html#text-memtype}{\mathtt{memtype}}~\def\mathdef3494#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3494{)}~\def\mathdef3495#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3495{)} + \\[1ex] & + \def\mathdef3496#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3496{(}~\def\mathdef3497#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3497{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3498#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3498{(}~\def\mathdef3499#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3499{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~\def\mathdef3500#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3500{)}~~\dots~\def\mathdef3501#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3501{)} \quad\equiv \\ & \qquad + \def\mathdef3502#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3502{(}~\def\mathdef3503#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3503{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~~\def\mathdef3504#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3504{(}~\def\mathdef3505#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3505{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3506#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3506{)}~\def\mathdef3507#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3507{)}~~ + \def\mathdef3508#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3508{(}~\def\mathdef3509#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3509{memory}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~\dots~\def\mathdef3510#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3510{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “\(\dots\)” contains additional export clauses. +Consequently, a memory declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    +

    Globals

    +

    Global definitions can bind a symbolic global identifier.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{global} & \href{../text/modules.html#text-global}{\mathtt{global}}_I &::=& + \def\mathdef3511#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3511{(}~\def\mathdef3512#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3512{global}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\mathit{gt}{:}\href{../text/types.html#text-globaltype}{\mathtt{globaltype}}~~e{:}\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3513#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3513{)} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-global}{\mathsf{type}}~\mathit{gt}, \href{../syntax/modules.html#syntax-global}{\mathsf{init}}~e \} \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    Globals can be defined as imports or exports inline:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{module field} & + \def\mathdef3514#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3514{(}~\def\mathdef3515#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3515{global}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3516#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3516{(}~\def\mathdef3517#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3517{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~\def\mathdef3518#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3518{)}~~\href{../text/types.html#text-globaltype}{\mathtt{globaltype}}~\def\mathdef3519#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3519{)} \quad\equiv \\ & \qquad + \def\mathdef3520#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3520{(}~\def\mathdef3521#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3521{import}~~\href{../text/values.html#text-name}{\mathtt{name}}_1~~\href{../text/values.html#text-name}{\mathtt{name}}_2~~\def\mathdef3522#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3522{(}~\def\mathdef3523#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3523{global}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\href{../text/types.html#text-globaltype}{\mathtt{globaltype}}~\def\mathdef3524#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3524{)}~\def\mathdef3525#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3525{)} + \\[1ex] & + \def\mathdef3526#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3526{(}~\def\mathdef3527#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3527{global}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3528#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3528{(}~\def\mathdef3529#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3529{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~\def\mathdef3530#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3530{)}~~\dots~\def\mathdef3531#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3531{)} \quad\equiv \\ & \qquad + \def\mathdef3532#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3532{(}~\def\mathdef3533#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3533{export}~~\href{../text/values.html#text-name}{\mathtt{name}}~~\def\mathdef3534#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3534{(}~\def\mathdef3535#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3535{global}~~\href{../text/values.html#text-id}{\mathtt{id}}'~\def\mathdef3536#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3536{)}~\def\mathdef3537#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3537{)}~~ + \def\mathdef3538#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3538{(}~\def\mathdef3539#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3539{global}~~\href{../text/values.html#text-id}{\mathtt{id}}'~~\dots~\def\mathdef3540#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3540{)} + \\ & \qquad\qquad + (\mathrel{\mbox{if}} \href{../text/values.html#text-id}{\mathtt{id}}^? \neq \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' = \href{../text/values.html#text-id}{\mathtt{id}}^? \vee \href{../text/values.html#text-id}{\mathtt{id}}^? = \epsilon \wedge \href{../text/values.html#text-id}{\mathtt{id}}' ~\href{../text/values.html#text-id-fresh}{\mbox{fresh}}) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The latter abbreviation can be applied repeatedly, if “\(\dots\)” contains additional export clauses. +Consequently, a global declaration can contain any number of exports, possibly followed by an import.

    +
    +
    +
    +
    +

    Exports

    +

    The syntax for exports mirrors their abstract syntax directly.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{export} & \href{../text/modules.html#text-export}{\mathtt{export}}_I &::=& + \def\mathdef3541#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3541{(}~\def\mathdef3542#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3542{export}~~\mathit{nm}{:}\href{../text/values.html#text-name}{\mathtt{name}}~~d{:}\href{../text/modules.html#text-exportdesc}{\mathtt{exportdesc}}_I~\def\mathdef3543#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3543{)} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-export}{\mathsf{name}}~\mathit{nm}, \href{../syntax/modules.html#syntax-export}{\mathsf{desc}}~d \} \\ +\def\mathdef3278#1{{}}\mathdef3278{export description} & \href{../text/modules.html#text-exportdesc}{\mathtt{exportdesc}}_I &::=& + \def\mathdef3544#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3544{(}~\def\mathdef3545#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3545{func}~~x{:}\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I~\def\mathdef3546#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3546{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~x \\ &&|& + \def\mathdef3547#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3547{(}~\def\mathdef3548#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3548{table}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I~\def\mathdef3549#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3549{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~x \\ &&|& + \def\mathdef3550#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3550{(}~\def\mathdef3551#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3551{memory}~~x{:}\href{../text/modules.html#text-memidx}{\mathtt{memidx}}_I~\def\mathdef3552#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3552{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~x \\ &&|& + \def\mathdef3553#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3553{(}~\def\mathdef3554#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3554{global}~~x{:}\href{../text/modules.html#text-globalidx}{\mathtt{globalidx}}_I~\def\mathdef3555#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3555{)} + &\Rightarrow& \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~x \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    As an abbreviation, exports may also be specified inline with function, table, memory, or global definitions; see the respective sections.

    +
    +
    +
    +

    Start Function

    +

    A start function is defined in terms of its index.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{start function} & \href{../text/modules.html#text-start}{\mathtt{start}}_I &::=& + \def\mathdef3556#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3556{(}~\def\mathdef3557#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3557{start}~~x{:}\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I~\def\mathdef3558#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3558{)} + &\Rightarrow& \{ \href{../syntax/modules.html#syntax-start}{\mathsf{func}}~x \} \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    At most one start function may occur in a module, +which is ensured by a suitable side condition on the \(\href{../text/modules.html#text-module}{\mathtt{module}}\) grammar.

    +
    +
    +
    +

    Element Segments

    +

    Element segments allow for an optional table index to identify the table to initialize.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{element segment} & \href{../text/modules.html#text-elem}{\mathtt{elem}}_I &::=& + \def\mathdef3559#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3559{(}~\def\mathdef3560#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3560{elem}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~(et, y^\ast){:}\href{../text/modules.html#text-elemlist}{\mathtt{elemlist}}_I~\def\mathdef3561#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3561{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~y^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}} \} \\ &&|& + \def\mathdef3562#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3562{(}~\def\mathdef3563#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3563{elem}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~x{:}\href{../text/modules.html#text-tableuse}{\mathtt{tableuse}}_I~~\def\mathdef3564#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3564{(}~\def\mathdef3565#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3565{offset}~~e{:}\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3566#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3566{)}~~(et, y^\ast){:}\href{../text/modules.html#text-elemlist}{\mathtt{elemlist}}_I~\def\mathdef3567#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3567{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~y^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~x, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~e \} \} \\ &&& + \def\mathdef3568#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3568{(}~\def\mathdef3569#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3569{elem}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3570#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3570{declare}~~(et, y^\ast){:}\href{../text/modules.html#text-elemlist}{\mathtt{elemlist}}_I~\def\mathdef3571#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3571{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~et, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~y^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}} \} \\ +\def\mathdef3278#1{{}}\mathdef3278{element list} & \href{../text/modules.html#text-elemlist}{\mathtt{elemlist}}_I &::=& + t{:}\href{../text/types.html#text-reftype}{\mathtt{reftype}}~~y^\ast{:}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-elemexpr}{\mathtt{elemexpr}}_I) \qquad\Rightarrow\quad ( \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~t, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~y^\ast ) \\ +\def\mathdef3278#1{{}}\mathdef3278{element expression} & \href{../text/modules.html#text-elemexpr}{\mathtt{elemexpr}}_I &::=& + \def\mathdef3572#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3572{(}~\def\mathdef3573#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3573{item}~~e{:}\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3574#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3574{)} + \quad\Rightarrow\quad e \\ +\def\mathdef3278#1{{}}\mathdef3278{table use} & \href{../text/modules.html#text-tableuse}{\mathtt{tableuse}}_I &::=& + \def\mathdef3575#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3575{(}~\def\mathdef3576#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3576{table}~~x{:}\href{../text/modules.html#text-tableidx}{\mathtt{tableidx}}_I ~\def\mathdef3577#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3577{)} + \quad\Rightarrow\quad x \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    As an abbreviation, a single instruction may occur in place of the offset of an active element segment or as an element expression:

    +
    +\[\begin{split}\begin{array}{llcll} +\def\mathdef3278#1{{}}\mathdef3278{element offset} & + \def\mathdef3578#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3578{(}~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3579#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3579{)} &\equiv& + \def\mathdef3580#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3580{(}~\def\mathdef3581#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3581{offset}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3582#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3582{)} \\ +\def\mathdef3278#1{{}}\mathdef3278{element item} & + \def\mathdef3583#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3583{(}~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3584#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3584{)} &\equiv& + \def\mathdef3585#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3585{(}~\def\mathdef3586#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3586{item}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3587#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3587{)} \\ +\end{array}\end{split}\]
    +

    Also, the element list may be written as just a sequence of function indices:

    +
    +\[\begin{array}{llcll} +\def\mathdef3278#1{{}}\mathdef3278{element list} & + \def\mathdef3588#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3588{func}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I) &\equiv& + \def\mathdef3589#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3589{funcref}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\def\mathdef3590#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3590{(}~\def\mathdef3591#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3591{ref.func}~~\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I~\def\mathdef3592#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3592{)}) +\end{array}\]
    +

    A table use can be omitted, defaulting to \(\mathtt{0}\). +Furthermore, for backwards compatibility with earlier versions of WebAssembly, if the table use is omitted, the \(\def\mathdef3593#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3593{func}\) keyword can be omitted as well.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{table use} & + \epsilon &\equiv& \def\mathdef3594#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3594{(}~\def\mathdef3595#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3595{table}~~\def\mathdef3596#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3596{0}~\def\mathdef3597#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3597{)} \\ +\def\mathdef3278#1{{}}\mathdef3278{element segment} & + \def\mathdef3598#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3598{(}~\def\mathdef3599#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3599{elem}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3600#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3600{(}~\def\mathdef3601#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3601{offset}~~\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3602#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3602{)}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I)~\def\mathdef3603#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3603{)} + &\equiv& + \def\mathdef3604#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3604{(}~\def\mathdef3605#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3605{elem}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~\def\mathdef3606#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3606{(}~\def\mathdef3607#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3607{table}~~\def\mathdef3608#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3608{0}~\def\mathdef3609#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3609{)}~~\def\mathdef3610#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3610{(}~\def\mathdef3611#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3611{offset}~~\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3612#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3612{)}~~\def\mathdef3613#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3613{func}~~\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/modules.html#text-funcidx}{\mathtt{funcidx}}_I)~\def\mathdef3614#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3614{)} +\end{array}\end{split}\]
    +

    As another abbreviation, element segments may also be specified inline with table definitions; see the respective section.

    +
    +
    +
    +

    Data Segments

    +

    Data segments allow for an optional memory index to identify the memory to initialize. +The data is written as a string, which may be split up into a possibly empty sequence of individual string literals.

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{data segment} & \href{../text/modules.html#text-data}{\mathtt{data}}_I &::=& + \def\mathdef3615#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3615{(}~\def\mathdef3616#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3616{data}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~b^\ast{:}\href{../text/modules.html#text-datastring}{\mathtt{datastring}}~\def\mathdef3617#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3617{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}} \} \\ &&|& + \def\mathdef3618#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3618{(}~\def\mathdef3619#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3619{data}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~x{:}\href{../text/modules.html#text-memuse}{\mathtt{memuse}}_I~~\def\mathdef3620#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3620{(}~\def\mathdef3621#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3621{offset}~~e{:}\href{../text/instructions.html#text-expr}{\mathtt{expr}}_I~\def\mathdef3622#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3622{)}~~b^\ast{:}\href{../text/modules.html#text-datastring}{\mathtt{datastring}}~\def\mathdef3623#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3623{)} \\ &&& \qquad + \Rightarrow\quad \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~x', \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~e \} \} \\ +\def\mathdef3278#1{{}}\mathdef3278{data string} & \href{../text/modules.html#text-datastring}{\mathtt{datastring}} &::=& + (b^\ast{:}\href{../text/values.html#text-string}{\mathtt{string}})^\ast \quad\Rightarrow\quad \href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((b^\ast)^\ast) \\ +\def\mathdef3278#1{{}}\mathdef3278{memory use} & \href{../text/modules.html#text-memuse}{\mathtt{memuse}}_I &::=& + \def\mathdef3624#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3624{(}~\def\mathdef3625#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3625{memory}~~x{:}\href{../text/modules.html#text-memidx}{\mathtt{memidx}}_I ~\def\mathdef3626#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3626{)} + \quad\Rightarrow\quad x \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    In the current version of WebAssembly, the only valid memory index is 0 +or a symbolic memory identifier resolving to the same value.

    +
    +
    +

    Abbreviations

    +

    As an abbreviation, a single instruction may occur in place of the offset of an active data segment:

    +
    +\[\begin{array}{llcll} +\def\mathdef3278#1{{}}\mathdef3278{data offset} & + \def\mathdef3627#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3627{(}~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3628#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3628{)} &\equiv& + \def\mathdef3629#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3629{(}~\def\mathdef3630#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3630{offset}~~\href{../text/instructions.html#text-instr}{\mathtt{instr}}~\def\mathdef3631#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3631{)} +\end{array}\]
    +

    Also, a memory use can be omitted, defaulting to \(\mathtt{0}\).

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3278#1{{}}\mathdef3278{memory use} & + \epsilon &\equiv& \def\mathdef3632#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3632{(}~\def\mathdef3633#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3633{memory}~~\def\mathdef3634#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3634{0}~\def\mathdef3635#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3635{)} \\ +\end{array}\end{split}\]
    +

    As another abbreviation, data segments may also be specified inline with memory definitions; see the respective section.

    +
    +
    +
    +

    Modules

    +

    A module consists of a sequence of fields that can occur in any order. +All definitions and their respective bound identifiers scope over the entire module, including the text preceding them.

    +

    A module may optionally bind an identifier that names the module. +The name serves a documentary role only.

    +
    +

    Note

    +

    Tools may include the module name in the name section of the binary format.

    +
    +
    +\[\begin{split}\begin{array}{lll} +\def\mathdef3278#1{{}}\mathdef3278{module} & \href{../text/modules.html#text-module}{\mathtt{module}} & +\begin{array}[t]{@{}cllll} +::=& + \def\mathdef3636#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3636{(}~\def\mathdef3637#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3637{module}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~(m{:}\href{../text/modules.html#text-modulefield}{\mathtt{modulefield}}_I)^\ast~\def\mathdef3638#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3638{)} + \quad\Rightarrow\quad \href{../syntax/conventions.html#notation-compose}{\bigoplus} m^\ast \\ + &\qquad (\mathrel{\mbox{if}} I = \href{../syntax/conventions.html#notation-compose}{\bigoplus} \mathrm{idc}(\href{../text/modules.html#text-modulefield}{\mathtt{modulefield}})^\ast ~\href{../text/conventions.html#text-context-wf}{\mbox{well-formed}}) \\ +\end{array} \\[1ex] +\def\mathdef3278#1{{}}\mathdef3278{module field} & \href{../text/modules.html#text-modulefield}{\mathtt{modulefield}}_I & +\begin{array}[t]{@{}clll} +::=& + \mathit{ty}{:}\href{../text/modules.html#text-typedef}{\mathtt{type}} &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{types}}~\mathit{ty}\} \\ |& + \mathit{im}{:}\href{../text/modules.html#text-import}{\mathtt{import}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{imports}}~\mathit{im}\} \\ |& + \mathit{fn}{:}\href{../text/modules.html#text-func}{\mathtt{func}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}~\mathit{fn}\} \\ |& + \mathit{ta}{:}\href{../text/modules.html#text-table}{\mathtt{table}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{tables}}~\mathit{ta}\} \\ |& + \mathit{me}{:}\href{../text/modules.html#text-mem}{\mathtt{mem}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{mems}}~\mathit{me}\} \\ |& + \mathit{gl}{:}\href{../text/modules.html#text-global}{\mathtt{global}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}~\mathit{gl}\} \\ |& + \mathit{ex}{:}\href{../text/modules.html#text-export}{\mathtt{export}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}~\mathit{ex}\} \\ |& + \mathit{st}{:}\href{../text/modules.html#text-start}{\mathtt{start}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{start}}~\mathit{st}\} \\ |& + \mathit{el}{:}\href{../text/modules.html#text-elem}{\mathtt{elem}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}~\mathit{el}\} \\ |& + \mathit{da}{:}\href{../text/modules.html#text-data}{\mathtt{data}}_I &\Rightarrow& \{\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}~\mathit{da}\} \\ +\end{array} +\end{array}\end{split}\]
    +

    The following restrictions are imposed on the composition of modules: \(m_1 \href{../syntax/conventions.html#notation-compose}{\oplus} m_2\) is defined if and only if

    +
      +
    • \(m_1.\href{../syntax/modules.html#syntax-module}{\mathsf{start}} = \epsilon \vee m_2.\href{../syntax/modules.html#syntax-module}{\mathsf{start}} = \epsilon\)

    • +
    • \(m_1.\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}} = m_1.\href{../syntax/modules.html#syntax-module}{\mathsf{tables}} = m_1.\href{../syntax/modules.html#syntax-module}{\mathsf{mems}} = m_1.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}} = \epsilon \vee m_2.\href{../syntax/modules.html#syntax-module}{\mathsf{imports}} = \epsilon\)

    • +
    +
    +

    Note

    +

    The first condition ensures that there is at most one start function. +The second condition enforces that all imports must occur before any regular definition of a function, table, memory, or global, +thereby maintaining the ordering of the respective index spaces.

    +

    The well-formedness condition on \(I\) in the grammar for \(\href{../text/modules.html#text-module}{\mathtt{module}}\) ensures that no namespace contains duplicate identifiers.

    +
    +

    The definition of the initial identifier context \(I\) uses the following auxiliary definition which maps each relevant definition to a singular context with one (possibly empty) identifier:

    +
    +\[\begin{split}\begin{array}{@{}lcl@{\qquad\qquad}l} +\mathrm{idc}(\def\mathdef3639#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3639{(}~\def\mathdef3640#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3640{type}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\mathit{ft}{:}\href{../text/types.html#text-functype}{\mathtt{functype}}~\def\mathdef3641#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3641{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{types}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?), \href{../text/conventions.html#text-context}{\mathsf{typedefs}}~\mathit{ft}\} \\ +\mathrm{idc}(\def\mathdef3642#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3642{(}~\def\mathdef3643#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3643{func}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3644#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3644{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{funcs}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3645#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3645{(}~\def\mathdef3646#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3646{table}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3647#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3647{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{tables}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3648#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3648{(}~\def\mathdef3649#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3649{memory}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3650#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3650{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{mems}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3651#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3651{(}~\def\mathdef3652#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3652{global}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3653#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3653{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{globals}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3654#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3654{(}~\def\mathdef3655#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3655{elem}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3656#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3656{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{elem}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3657#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3657{(}~\def\mathdef3658#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3658{data}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3659#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3659{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{data}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3660#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3660{(}~\def\mathdef3661#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3661{import}~\dots~\def\mathdef3662#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3662{(}~\def\mathdef3663#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3663{func}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3664#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3664{)}~\def\mathdef3665#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3665{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{funcs}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3666#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3666{(}~\def\mathdef3667#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3667{import}~\dots~\def\mathdef3668#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3668{(}~\def\mathdef3669#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3669{table}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3670#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3670{)}~\def\mathdef3671#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3671{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{tables}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3672#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3672{(}~\def\mathdef3673#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3673{import}~\dots~\def\mathdef3674#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3674{(}~\def\mathdef3675#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3675{memory}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3676#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3676{)}~\def\mathdef3677#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3677{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{mems}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3678#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3678{(}~\def\mathdef3679#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3679{import}~\dots~\def\mathdef3680#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3680{(}~\def\mathdef3681#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3681{global}~\href{../text/values.html#text-id}{\mathtt{id}}^?~\dots~\def\mathdef3682#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3682{)}~\def\mathdef3683#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3683{)}) &=& + \{\href{../text/conventions.html#text-context}{\mathsf{globals}}~(\href{../text/values.html#text-id}{\mathtt{id}}^?)\} \\ +\mathrm{idc}(\def\mathdef3684#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3684{(}~\dots~\def\mathdef3685#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3685{)}) &=& + \{\} \\ +\end{array}\end{split}\]
    +
    +

    Abbreviations

    +

    In a source file, the toplevel \(\mathtt{(module}~\dots\mathtt{)}\) surrounding the module body may be omitted.

    +
    +\[\begin{array}{llcll} +\def\mathdef3278#1{{}}\mathdef3278{module} & + \href{../text/modules.html#text-modulefield}{\mathtt{modulefield}}^\ast &\equiv& + \def\mathdef3686#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3686{(}~\def\mathdef3687#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3687{module}~~\href{../text/modules.html#text-modulefield}{\mathtt{modulefield}}^\ast~\def\mathdef3688#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3688{)} +\end{array}\]
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/types.html b/core/text/types.html new file mode 100644 index 00000000..45e17456 --- /dev/null +++ b/core/text/types.html @@ -0,0 +1,215 @@ + + + + + + + + + Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Types

    +
    +

    Number Types

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{number type} & \href{../text/types.html#text-numtype}{\mathtt{numtype}} &::=& + \def\mathdef3728#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3728{i32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ &&|& + \def\mathdef3729#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3729{i64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{i64}} \\ &&|& + \def\mathdef3730#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3730{f32} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f32}} \\ &&|& + \def\mathdef3731#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3731{f64} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{f64}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Vector Types

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{vector type} & \href{../text/types.html#text-vectype}{\mathtt{vectype}} &::=& + \def\mathdef3732#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3732{v128} &\Rightarrow& \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Reference Types

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{reference type} & \href{../text/types.html#text-reftype}{\mathtt{reftype}} &::=& + \def\mathdef3733#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3733{funcref} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} \\ &&|& + \def\mathdef3734#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3734{externref} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{externref}} \\ +\def\mathdef3689#1{{}}\mathdef3689{heap type} & \href{../text/types.html#text-heaptype}{\mathtt{heaptype}} &::=& + \def\mathdef3735#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3735{func} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} \\ &&|& + \def\mathdef3736#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3736{extern} &\Rightarrow& \href{../syntax/types.html#syntax-reftype}{\mathsf{externref}} \\ +\end{array}\end{split}\]
    +
    +
    +

    Value Types

    +
    +\[\begin{split}\begin{array}{llcll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{value type} & \href{../text/types.html#text-valtype}{\mathtt{valtype}} &::=& + t{:}\href{../text/types.html#text-numtype}{\mathtt{numtype}} &\Rightarrow& t \\ &&|& + t{:}\href{../text/types.html#text-vectype}{\mathtt{vectype}} &\Rightarrow& t \\ &&|& + t{:}\href{../text/types.html#text-reftype}{\mathtt{reftype}} &\Rightarrow& t \\ +\end{array}\end{split}\]
    +
    +
    +

    Function Types

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{function type} & \href{../text/types.html#text-functype}{\mathtt{functype}} &::=& + \def\mathdef3737#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3737{(}~\def\mathdef3738#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3738{func}~~t_1^\ast{:\,}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/types.html#text-functype}{\mathtt{param}})~~t_2^\ast{:\,}\href{../text/conventions.html#text-vec}{\mathtt{vec}}(\href{../text/types.html#text-functype}{\mathtt{result}})~\def\mathdef3739#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3739{)} + &\Rightarrow& [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] \\ +\def\mathdef3689#1{{}}\mathdef3689{parameter} & \href{../text/types.html#text-functype}{\mathtt{param}} &::=& + \def\mathdef3740#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3740{(}~\def\mathdef3741#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3741{param}~~\href{../text/values.html#text-id}{\mathtt{id}}^?~~t{:}\href{../text/types.html#text-valtype}{\mathtt{valtype}}~\def\mathdef3742#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3742{)} + &\Rightarrow& t \\ +\def\mathdef3689#1{{}}\mathdef3689{result} & \href{../text/types.html#text-functype}{\mathtt{result}} &::=& + \def\mathdef3743#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3743{(}~\def\mathdef3744#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3744{result}~~t{:}\href{../text/types.html#text-valtype}{\mathtt{valtype}}~\def\mathdef3745#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3745{)} + &\Rightarrow& t \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    The optional identifier names for parameters in a function type only have documentation purpose. +They cannot be referenced from anywhere.

    +
    +
    +

    Abbreviations

    +

    Multiple anonymous parameters or results may be combined into a single declaration:

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3689#1{{}}\mathdef3689{parameter} & + \def\mathdef3746#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3746{(}~~\def\mathdef3747#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3747{param}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}^\ast~~\def\mathdef3748#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3748{)} &\equiv& + (\def\mathdef3749#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3749{(}~~\def\mathdef3750#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3750{param}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}~~\def\mathdef3751#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3751{)})^\ast \\ +\def\mathdef3689#1{{}}\mathdef3689{result} & + \def\mathdef3752#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3752{(}~~\def\mathdef3753#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3753{result}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}^\ast~~\def\mathdef3754#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3754{)} &\equiv& + (\def\mathdef3755#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3755{(}~~\def\mathdef3756#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3756{result}~~\href{../text/types.html#text-valtype}{\mathtt{valtype}}~~\def\mathdef3757#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3757{)})^\ast \\ +\end{array}\end{split}\]
    +
    +
    +
    +

    Limits

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3689#1{{}}\mathdef3689{limits} & \href{../text/types.html#text-limits}{\mathtt{limits}} &::=& + n{:}\href{../text/values.html#text-int}{\def\mathdef3714#1{{\mathtt{u}#1}}\mathdef3714{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\epsilon \} \\ &&|& + n{:}\href{../text/values.html#text-int}{\def\mathdef3714#1{{\mathtt{u}#1}}\mathdef3714{\mathtt{32}}}~~m{:}\href{../text/values.html#text-int}{\def\mathdef3714#1{{\mathtt{u}#1}}\mathdef3714{\mathtt{32}}} &\Rightarrow& \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m \} \\ +\end{array}\end{split}\]
    +
    +
    +

    Memory Types

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3689#1{{}}\mathdef3689{memory type} & \href{../text/types.html#text-memtype}{\mathtt{memtype}} &::=& + \mathit{lim}{:}\href{../text/types.html#text-limits}{\mathtt{limits}} &\Rightarrow& \mathit{lim} \\ +\end{array}\end{split}\]
    +
    +
    +

    Table Types

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3689#1{{}}\mathdef3689{table type} & \href{../text/types.html#text-tabletype}{\mathtt{tabletype}} &::=& + \mathit{lim}{:}\href{../text/types.html#text-limits}{\mathtt{limits}}~~\mathit{et}{:}\href{../text/types.html#text-reftype}{\mathtt{reftype}} &\Rightarrow& \mathit{lim}~\mathit{et} \\ +\end{array}\end{split}\]
    +
    +
    +

    Global Types

    +
    +\[\begin{split}\begin{array}{llclll} +\def\mathdef3689#1{{}}\mathdef3689{global type} & \href{../text/types.html#text-globaltype}{\mathtt{globaltype}} &::=& + t{:}\href{../text/types.html#text-valtype}{\mathtt{valtype}} &\Rightarrow& \href{../syntax/types.html#syntax-mut}{\mathsf{const}}~t \\ &&|& + \def\mathdef3758#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3758{(}~\def\mathdef3759#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3759{mut}~~t{:}\href{../text/types.html#text-valtype}{\mathtt{valtype}}~\def\mathdef3760#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3760{)} &\Rightarrow& \href{../syntax/types.html#syntax-mut}{\mathsf{var}}~t \\ +\end{array}\end{split}\]
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/text/values.html b/core/text/values.html new file mode 100644 index 00000000..be60f715 --- /dev/null +++ b/core/text/values.html @@ -0,0 +1,294 @@ + + + + + + + + + Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Values

    +

    The grammar productions in this section define lexical syntax, +hence no white space is allowed.

    +
    +

    Integers

    +

    All integers can be written in either decimal or hexadecimal notation. +In both cases, digits can optionally be separated by underscores.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{sign} & \href{../text/values.html#text-sign}{\mathtt{sign}} &::=& + \epsilon \Rightarrow {+} ~~|~~ + \def\mathdef3800#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3800{+} \Rightarrow {+} ~~|~~ + \def\mathdef3801#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3801{-} \Rightarrow {-} \\ +\def\mathdef3761#1{{}}\mathdef3761{decimal digit} & \href{../text/values.html#text-digit}{\mathtt{digit}} &::=& + \def\mathdef3802#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3802{0} \Rightarrow 0 ~~|~~ \dots ~~|~~ \def\mathdef3803#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3803{9} \Rightarrow 9 \\ +\def\mathdef3761#1{{}}\mathdef3761{hexadecimal digit} & \href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &::=& + d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} \Rightarrow d \\ &&|& + \def\mathdef3804#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3804{A} \Rightarrow 10 ~~|~~ \dots ~~|~~ \def\mathdef3805#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3805{F} \Rightarrow 15 \\ &&|& + \def\mathdef3806#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3806{a} \Rightarrow 10 ~~|~~ \dots ~~|~~ \def\mathdef3807#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3807{f} \Rightarrow 15 +\\[1ex] +\def\mathdef3761#1{{}}\mathdef3761{decimal number} & \href{../text/values.html#text-num}{\mathtt{num}} &::=& + d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& d \\ &&|& + n{:}\href{../text/values.html#text-num}{\mathtt{num}}~~\def\mathdef3808#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3808{\_}^?~~d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& 10\cdot n + d \\ +\def\mathdef3761#1{{}}\mathdef3761{hexadecimal number} & \href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &::=& + h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& h \\ &&|& + n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~~\def\mathdef3809#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3809{\_}^?~~h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& 16\cdot n + h \\ +\end{array}\end{split}\]
    +

    The allowed syntax for integer literals depends on size and signedness. +Moreover, their value must lie within the range of the respective type.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{unsigned integer} & \href{../text/values.html#text-int}{\def\mathdef3782#1{{\mathtt{u}#1}}\mathdef3782{N}} &::=& + n{:}\href{../text/values.html#text-num}{\mathtt{num}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^N) \\ &&|& + \def\mathdef3810#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3810{0x}~~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^N) \\ +\def\mathdef3761#1{{}}\mathdef3761{signed integer} & \href{../text/values.html#text-int}{\def\mathdef3788#1{{\mathtt{s}#1}}\mathdef3788{N}} &::=& + {\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~~n{:}\href{../text/values.html#text-num}{\mathtt{num}} &\Rightarrow& \pm n & (\mathrel{\mbox{if}} -2^{N-1} \leq \pm n < 2^{N-1}) \\ &&|& + {\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~~\def\mathdef3811#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3811{0x}~~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& \pm n & (\mathrel{\mbox{if}} -2^{N-1} \leq \pm n < 2^{N-1}) \\ +\end{array}\end{split}\]
    +

    Uninterpreted integers can be written as either signed or unsigned, and are normalized to unsigned in the abstract syntax.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{uninterpreted integers} & \href{../text/values.html#text-int}{\def\mathdef3791#1{{\mathtt{i}#1}}\mathdef3791{N}} &::=& + n{:}\href{../text/values.html#text-int}{\def\mathdef3782#1{{\mathtt{u}#1}}\mathdef3782{N}} &\Rightarrow& n \\ &&|& + i{:}\href{../text/values.html#text-int}{\def\mathdef3788#1{{\mathtt{s}#1}}\mathdef3788{N}} &\Rightarrow& n & (\mathrel{\mbox{if}} i = \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}(n)) \\ +\end{array}\end{split}\]
    +
    +
    +

    Floating-Point

    +

    Floating-point values can be represented in either decimal or hexadecimal notation.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{decimal floating-point fraction} & \href{../text/values.html#text-frac}{\mathtt{frac}} &::=& + d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& d/10 \\ &&|& + d{:}\href{../text/values.html#text-digit}{\mathtt{digit}}~~\def\mathdef3812#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3812{\_}^?~~p{:}\href{../text/values.html#text-frac}{\mathtt{frac}} &\Rightarrow& (d+p/10)/10 \\ +\def\mathdef3761#1{{}}\mathdef3761{hexadecimal floating-point fraction} & \href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}} &::=& + h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& h/16 \\ &&|& + h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}}~~\def\mathdef3813#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3813{\_}^?~~p{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}} &\Rightarrow& (h+p/16)/16 \\ +\def\mathdef3761#1{{}}\mathdef3761{decimal floating-point number} & \href{../text/values.html#text-float}{\mathtt{float}} &::=& + p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3814#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3814{.}^? + &\Rightarrow& p \\ &&|& + p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3815#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3815{.}~q{:}\href{../text/values.html#text-frac}{\mathtt{frac}} + &\Rightarrow& p+q \\ &&|& + p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3816#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3816{.}^?~(\def\mathdef3817#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3817{E}~|~\def\mathdef3818#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3818{e})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}} + &\Rightarrow& p\cdot 10^{\pm e} \\ &&|& + p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3819#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3819{.}~q{:}\href{../text/values.html#text-frac}{\mathtt{frac}}~(\def\mathdef3820#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3820{E}~|~\def\mathdef3821#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3821{e})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}} + &\Rightarrow& (p+q)\cdot 10^{\pm e} \\ +\def\mathdef3761#1{{}}\mathdef3761{hexadecimal floating-point number} & \href{../text/values.html#text-hexfloat}{\mathtt{hexfloat}} &::=& + \def\mathdef3822#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3822{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3823#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3823{.}^? + &\Rightarrow& p \\ &&|& + \def\mathdef3824#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3824{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3825#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3825{.}~q{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}} + &\Rightarrow& p+q \\ &&|& + \def\mathdef3826#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3826{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3827#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3827{.}^?~(\def\mathdef3828#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3828{P}~|~\def\mathdef3829#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3829{p})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}} + &\Rightarrow& p\cdot 2^{\pm e} \\ &&|& + \def\mathdef3830#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3830{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3831#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3831{.}~q{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}}~(\def\mathdef3832#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3832{P}~|~\def\mathdef3833#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3833{p})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}} + &\Rightarrow& (p+q)\cdot 2^{\pm e} +\end{array}\end{split}\]
    +

    The value of a literal must not lie outside the representable range of the corresponding IEEE 754-2019 type +(that is, a numeric value must not overflow to \(\pm\mbox{infinity}\)), +but it may be rounded to the nearest representable value.

    +
    +

    Note

    +

    Rounding can be prevented by using hexadecimal notation with no more significant bits than supported by the required type.

    +
    +

    Floating-point values may also be written as constants for infinity or canonical NaN (not a number). +Furthermore, arbitrary NaN values may be expressed by providing an explicit payload value.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{floating-point value} & \href{../text/values.html#text-float}{\def\mathdef3796#1{{\mathtt{f}#1}}\mathdef3796{N}} &::=& + {\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~z{:}\href{../text/values.html#text-float}{\def\mathdef3797#1{{\mathtt{f}#1}}\mathdef3797{N}\mathtt{mag}} &\Rightarrow& \pm z \\ +\def\mathdef3761#1{{}}\mathdef3761{floating-point magnitude} & \href{../text/values.html#text-float}{\def\mathdef3797#1{{\mathtt{f}#1}}\mathdef3797{N}\mathtt{mag}} &::=& + z{:}\href{../text/values.html#text-float}{\mathtt{float}} &\Rightarrow& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) \neq \pm \infty) \\ &&|& + z{:}\href{../text/values.html#text-hexfloat}{\mathtt{hexfloat}} &\Rightarrow& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) \neq \pm \infty) \\ &&|& + \def\mathdef3834#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3834{inf} &\Rightarrow& \infty \\ &&|& + \def\mathdef3835#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3835{nan} &\Rightarrow& \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(2^{\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)-1}) \\ &&|& + \def\mathdef3836#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3836{nan{:}0x}~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) & (\mathrel{\mbox{if}} 1 \leq n < 2^{\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)}) \\ +\end{array}\end{split}\]
    +
    +
    +

    Strings

    +

    Strings denote sequences of bytes that can represent both textual and binary data. +They are enclosed in quotation marks +and may contain any character other than ASCII control characters, quotation marks (\(\def\mathdef3837#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3837{"}\)), or backslash (\(\def\mathdef3838#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3838{\backslash}\)), +except when expressed with an escape sequence.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{string} & \href{../text/values.html#text-string}{\mathtt{string}} &::=& + \def\mathdef3839#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3839{"}~(b^\ast{:}\href{../text/values.html#text-string}{\mathtt{stringelem}})^\ast~\def\mathdef3840#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3840{"} + &\Rightarrow& \href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((b^\ast)^\ast) + & (\mathrel{\mbox{if}} |\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((b^\ast)^\ast)| < 2^{32}) \\ +\def\mathdef3761#1{{}}\mathdef3761{string element} & \href{../text/values.html#text-string}{\mathtt{stringelem}} &::=& + c{:}\href{../text/values.html#text-string}{\mathtt{stringchar}} &\Rightarrow& \href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) \\ &&|& + \def\mathdef3841#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3841{\backslash}~n{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}}~m{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} + &\Rightarrow& 16\cdot n+m \\ +\end{array}\end{split}\]
    +

    Each character in a string literal represents the byte sequence corresponding to its UTF-8 Unicode (Section 2.5) encoding, +except for hexadecimal escape sequences \(\mbox{‘}\backslash hh\mbox{’}\), which represent raw bytes of the respective value.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{string character} & \href{../text/values.html#text-string}{\mathtt{stringchar}} &::=& + c{:}\href{../text/lexical.html#text-char}{\mathtt{char}} &\Rightarrow& c \qquad + & (\mathrel{\mbox{if}} c \geq \def\mathdef3842#1{\mathrm{U{+}#1}}\mathdef3842{20} \wedge c \neq \def\mathdef3843#1{\mathrm{U{+}#1}}\mathdef3843{7F} \wedge c \neq \def\mathdef3844#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3844{"} \wedge c \neq \def\mathdef3845#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3845{\backslash}) \\ &&|& + \def\mathdef3846#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3846{\backslash t} &\Rightarrow& \def\mathdef3847#1{\mathrm{U{+}#1}}\mathdef3847{09} \\ &&|& + \def\mathdef3848#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3848{\backslash n} &\Rightarrow& \def\mathdef3849#1{\mathrm{U{+}#1}}\mathdef3849{0A} \\ &&|& + \def\mathdef3850#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3850{\backslash r} &\Rightarrow& \def\mathdef3851#1{\mathrm{U{+}#1}}\mathdef3851{0D} \\ &&|& + \def\mathdef3852#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3852{\backslash{"}} &\Rightarrow& \def\mathdef3853#1{\mathrm{U{+}#1}}\mathdef3853{22} \\ &&|& + \def\mathdef3854#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3854{\backslash{'}} &\Rightarrow& \def\mathdef3855#1{\mathrm{U{+}#1}}\mathdef3855{27} \\ &&|& + \def\mathdef3856#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3856{\backslash\backslash} &\Rightarrow& \def\mathdef3857#1{\mathrm{U{+}#1}}\mathdef3857{5C} \\ &&|& + \def\mathdef3858#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3858{\backslash u\{}~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3859#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3859{\}} + &\Rightarrow& \def\mathdef3860#1{\mathrm{U{+}#1}}\mathdef3860{(n)} & (\mathrel{\mbox{if}} n < \def\mathdef3861#1{\mathtt{0x#1}}\mathdef3861{D800} \vee \def\mathdef3862#1{\mathtt{0x#1}}\mathdef3862{E000} \leq n < \def\mathdef3863#1{\mathtt{0x#1}}\mathdef3863{110000}) \\ +\end{array}\end{split}\]
    +
    +
    +

    Names

    +

    Names are strings denoting a literal character sequence. +A name string must form a valid UTF-8 encoding as defined by Unicode (Section 2.5) and is interpreted as a string of Unicode scalar values.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{name} & \href{../text/values.html#text-name}{\mathtt{name}} &::=& + b^\ast{:}\href{../text/values.html#text-string}{\mathtt{string}} &\Rightarrow& c^\ast & (\mathrel{\mbox{if}} b^\ast = \href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c^\ast)) \\ +\end{array}\end{split}\]
    +
    +

    Note

    +

    Presuming the source text is itself encoded correctly, +strings that do not contain any uses of hexadecimal byte escapes are always valid names.

    +
    +
    +
    +

    Identifiers

    +

    Indices can be given in both numeric and symbolic form. +Symbolic identifiers that stand in lieu of indices start with \(\def\mathdef3864#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3864{\$}\), followed by any sequence of printable ASCII characters that does not contain a space, quotation mark, comma, semicolon, or bracket.

    +
    +\[\begin{split}\begin{array}{llclll@{\qquad}l} +\def\mathdef3761#1{{}}\mathdef3761{identifier} & \href{../text/values.html#text-id}{\mathtt{id}} &::=& + \def\mathdef3865#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3865{\$}~\href{../text/values.html#text-idchar}{\mathtt{idchar}}^+ \\ +\def\mathdef3761#1{{}}\mathdef3761{identifier character} & \href{../text/values.html#text-idchar}{\mathtt{idchar}} &::=& + \def\mathdef3866#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3866{0} ~~|~~ \dots ~~|~~ \def\mathdef3867#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3867{9} \\ &&|& + \def\mathdef3868#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3868{A} ~~|~~ \dots ~~|~~ \def\mathdef3869#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3869{Z} \\ &&|& + \def\mathdef3870#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3870{a} ~~|~~ \dots ~~|~~ \def\mathdef3871#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3871{z} \\ &&|& + \def\mathdef3872#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3872{!} ~~|~~ + \def\mathdef3873#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3873{\#} ~~|~~ + \def\mathdef3874#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3874{\$} ~~|~~ + \def\mathdef3875#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3875{\%} ~~|~~ + \def\mathdef3876#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3876{\&} ~~|~~ + \def\mathdef3877#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3877{'} ~~|~~ + \def\mathdef3878#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3878{*} ~~|~~ + \def\mathdef3879#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3879{+} ~~|~~ + \def\mathdef3880#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3880{-} ~~|~~ + \def\mathdef3881#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3881{.} ~~|~~ + \def\mathdef3882#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3882{/} \\ &&|& + \def\mathdef3883#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3883{:} ~~|~~ + \def\mathdef3884#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3884{<} ~~|~~ + \def\mathdef3885#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3885{=} ~~|~~ + \def\mathdef3886#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3886{>} ~~|~~ + \def\mathdef3887#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3887{?} ~~|~~ + \def\mathdef3888#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3888{@} ~~|~~ + \def\mathdef3889#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3889{\backslash} ~~|~~ + \def\mathdef3890#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3890{\hat{~~}} ~~|~~ + \def\mathdef3891#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3891{\_} ~~|~~ + \def\mathdef3892#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3892{\grave{~~}} ~~|~~ + \def\mathdef3893#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3893{|} ~~|~~ + \def\mathdef3894#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3894{\tilde{~~}} \\ +\end{array}\end{split}\]
    +
    +

    Conventions

    +

    The expansion rules of some abbreviations require insertion of a fresh identifier. +That may be any syntactically valid identifier that does not already occur in the given source text.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/valid/conventions.html b/core/valid/conventions.html new file mode 100644 index 00000000..f2b18f4f --- /dev/null +++ b/core/valid/conventions.html @@ -0,0 +1,270 @@ + + + + + + + + + Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Conventions

    +

    Validation checks that a WebAssembly module is well-formed. +Only valid modules can be instantiated.

    +

    Validity is defined by a type system over the abstract syntax of a module and its contents. +For each piece of abstract syntax, there is a typing rule that specifies the constraints that apply to it. +All rules are given in two equivalent forms:

    +
      +
    1. In prose, describing the meaning in intuitive form.

    2. +
    3. In formal notation, describing the rule in mathematical form. 1

    4. +
    +
    +

    Note

    +

    The prose and formal rules are equivalent, +so that understanding of the formal notation is not required to read this specification. +The formalism offers a more concise description in notation that is used widely in programming languages semantics and is readily amenable to mathematical proof.

    +
    +

    In both cases, the rules are formulated in a declarative manner. +That is, they only formulate the constraints, they do not define an algorithm. +The skeleton of a sound and complete algorithm for type-checking instruction sequences according to this specification is provided in the appendix.

    +
    +

    Contexts

    +

    Validity of an individual definition is specified relative to a context, +which collects relevant information about the surrounding module and the definitions in scope:

    +
      +
    • Types: the list of types defined in the current module.

    • +
    • Functions: the list of functions declared in the current module, represented by their function type.

    • +
    • Tables: the list of tables declared in the current module, represented by their table type.

    • +
    • Memories: the list of memories declared in the current module, represented by their memory type.

    • +
    • Globals: the list of globals declared in the current module, represented by their global type.

    • +
    • Element Segments: the list of element segments declared in the current module, represented by their element type.

    • +
    • Data Segments: the list of data segments declared in the current module, each represented by an \(\mathrel{\mbox{ok}}\) entry.

    • +
    • Locals: the list of locals declared in the current function (including parameters), represented by their value type.

    • +
    • Labels: the stack of labels accessible from the current position, represented by their result type.

    • +
    • Return: the return type of the current function, represented as an optional result type that is absent when no return is allowed, as in free-standing expressions.

    • +
    • References: the list of function indices that occur in the module outside functions and can hence be used to form references inside them.

    • +
    +

    In other words, a context contains a sequence of suitable types for each index space, +describing each defined entry in that space. +Locals, labels and return type are only used for validating instructions in function bodies, and are left empty elsewhere. +The label stack is the only part of the context that changes as validation of an instruction sequence proceeds.

    +

    More concretely, contexts are defined as records \(C\) with abstract syntax:

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef3895#1{{}}\mathdef3895{(context)} & C &::=& + \begin{array}[t]{l@{~}ll} + \{ & \href{../valid/conventions.html#context}{\mathsf{types}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{funcs}} & \href{../syntax/types.html#syntax-functype}{\mathit{functype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{tables}} & \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{mems}} & \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{globals}} & \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{elems}} & \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{datas}} & {\mathrel{\mbox{ok}}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{locals}} & \href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{labels}} & \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^\ast, \\ + & \href{../valid/conventions.html#context}{\mathsf{return}} & \href{../syntax/types.html#syntax-resulttype}{\mathit{resulttype}}^?, \\ + & \href{../valid/conventions.html#context}{\mathsf{refs}} & \href{../syntax/modules.html#syntax-funcidx}{\mathit{funcidx}}^\ast ~\} \\ + \end{array} +\end{array}\end{split}\]
    +

    In addition to field access written \(C.\mathsf{field}\) the following notation is adopted for manipulating contexts:

    +
      +
    • When spelling out a context, empty fields are omitted.

    • +
    • \(C,\mathsf{field}\,A^\ast\) denotes the same context as \(C\) but with the elements \(A^\ast\) prepended to its \(\mathsf{field}\) component sequence.

    • +
    +
    +

    Note

    +

    We use indexing notation like \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[i]\) to look up indices in their respective index space in the context. +Context extension notation \(C,\mathsf{field}\,A\) is primarily used to locally extend relative index spaces, such as label indices. +Accordingly, the notation is defined to append at the front of the respective sequence, introducing a new relative index \(0\) and shifting the existing ones.

    +
    +
    +
    +

    Prose Notation

    +

    Validation is specified by stylised rules for each relevant part of the abstract syntax. +The rules not only state constraints defining when a phrase is valid, +they also classify it with a type. +The following conventions are adopted in stating these rules.

    +
      +
    • A phrase \(A\) is said to be “valid with type \(T\)” +if and only if all constraints expressed by the respective rules are met. +The form of \(T\) depends on what \(A\) is.

      +
      +

      Note

      +

      For example, if \(A\) is a function, +then \(T\) is a function type; +for an \(A\) that is a global, +\(T\) is a global type; +and so on.

      +
      +
    • +
    • The rules implicitly assume a given context \(C\).

    • +
    • In some places, this context is locally extended to a context \(C'\) with additional entries. +The formulation “Under context \(C'\), … statement …” is adopted to express that the following statement must apply under the assumptions embodied in the extended context.

    • +
    +
    +
    +

    Formal Notation

    +
    +

    Note

    +

    This section gives a brief explanation of the notation for specifying typing rules formally. +For the interested reader, a more thorough introduction can be found in respective text books. 2

    +
    +

    The proposition that a phrase \(A\) has a respective type \(T\) is written \(A : T\). +In general, however, typing is dependent on a context \(C\). +To express this explicitly, the complete form is a judgement \(C \vdash A : T\), +which says that \(A : T\) holds under the assumptions encoded in \(C\).

    +

    The formal typing rules use a standard approach for specifying type systems, rendering them into deduction rules. +Every rule has the following general form:

    +
    +\[\frac{ + \mathit{premise}_1 \qquad \mathit{premise}_2 \qquad \dots \qquad \mathit{premise}_n +}{ + \mathit{conclusion} +}\]
    +

    Such a rule is read as a big implication: if all premises hold, then the conclusion holds. +Some rules have no premises; they are axioms whose conclusion holds unconditionally. +The conclusion always is a judgment \(C \vdash A : T\), +and there is one respective rule for each relevant construct \(A\) of the abstract syntax.

    +
    +

    Note

    +

    For example, the typing rule for the \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) instruction can be given as an axiom:

    +
    +\[\frac{ +}{ + C \vdash \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +

    The instruction is always valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\)] +(saying that it consumes two \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) values and produces one), +independent of any side conditions.

    +

    An instruction like \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}\) can be typed as follows:

    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x] = t +}{ + C \vdash \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +

    Here, the premise enforces that the immediate local index \(x\) exists in the context. +The instruction produces a value of its respective type \(t\) +(and does not consume any values). +If \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\) does not exist then the premise does not hold, +and the instruction is ill-typed.

    +

    Finally, a structured instruction requires +a recursive rule, where the premise is itself a typing judgement:

    +
    +\[\frac{ + C \vdash \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../exec/runtime.html#syntax-label}{\mathsf{label}}\,[t_2^\ast] \vdash \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \vdash \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +

    A \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\) instruction is only valid when the instruction sequence in its body is. +Moreover, the result type must match the block’s annotation \(\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}\). +If so, then the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}\) instruction has the same type as the body. +Inside the body an additional label of the corresponding result type is available, +which is expressed by extending the context \(C\) with the additional label information for the premise.

    +
    +
    +
    1
    +

    The semantics is derived from the following article: +Andreas Haas, Andreas Rossberg, Derek Schuff, Ben Titzer, Dan Gohman, Luke Wagner, Alon Zakai, JF Bastien, Michael Holman. Bringing the Web up to Speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM 2017.

    +
    +
    2
    +

    For example: Benjamin Pierce. Types and Programming Languages. The MIT Press 2002

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/valid/index.html b/core/valid/index.html new file mode 100644 index 00000000..cf58ab56 --- /dev/null +++ b/core/valid/index.html @@ -0,0 +1,152 @@ + + + + + + + + + Validation — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/valid/instructions.html b/core/valid/instructions.html new file mode 100644 index 00000000..388e27c0 --- /dev/null +++ b/core/valid/instructions.html @@ -0,0 +1,1354 @@ + + + + + + + + + Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Instructions

    +

    Instructions are classified by stack types \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) that describe how instructions manipulate the operand stack.

    +
    +\[\begin{split}\begin{array}{llll} +\def\mathdef3973#1{{}}\mathdef3973{stack type} & \href{../syntax/types.html#syntax-stacktype}{\mathit{stacktype}} &::=& + [\href{../syntax/types.html#syntax-opdtype}{\mathit{opdtype}}^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-opdtype}{\mathit{opdtype}}^\ast] \\ +\def\mathdef3973#1{{}}\mathdef3973{operand type} & \href{../syntax/types.html#syntax-opdtype}{\mathit{opdtype}} &::=& + \href{../syntax/types.html#syntax-valtype}{\mathit{valtype}} ~|~ \bot \\ +\end{array}\end{split}\]
    +

    The types describe the required input stack with operand types \(t_1^\ast\) that an instruction pops off +and the provided output stack with result values of types \(t_2^\ast\) that it pushes back. +Stack types are akin to function types, +except that they allow individual operands to be classified as \(\bot\) (bottom), indicating that the type is unconstrained. +As an auxiliary notion, an operand type \(t_1\) matches another operand type \(t_2\), if \(t_1\) is either \(\bot\) or equal to \(t_2\). +This is extended to stack types in a point-wise manner.

    +
    +\[\frac{ +}{ + \vdash t \leq t +} +\qquad +\frac{ +}{ + \vdash \bot \leq t +}\]
    +
    +\[\frac{ + (\vdash t \leq t')^\ast +}{ + \vdash [t^\ast] \leq [{t'}^\ast] +}\]
    +
    +

    Note

    +

    For example, the instruction \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\) has type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\), +consuming two \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) values and producing one.

    +
    +

    Typing extends to instruction sequences \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\). +Such a sequence has a function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) if the accumulative effect of executing the instructions is consuming values of types \(t_1^\ast\) off the operand stack and pushing new values of types \(t_2^\ast\).

    +

    For some instructions, the typing rules do not fully constrain the type, +and therefore allow for multiple types. +Such instructions are called polymorphic. +Two degrees of polymorphism can be distinguished:

    +
      +
    • value-polymorphic: +the value type \(t\) of one or several individual operands is unconstrained. +That is the case for all parametric instructions like \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\) and \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\).

    • +
    • stack-polymorphic: +the entire (or most of the) function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) of the instruction is unconstrained. +That is the case for all control instructions that perform an unconditional control transfer, such as \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}\), \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}\), and \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\).

    • +
    +

    In both cases, the unconstrained types or type sequences can be chosen arbitrarily, as long as they meet the constraints imposed for the surrounding parts of the program.

    +
    +

    Note

    +

    For example, the \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) instruction is valid with type \([t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\), for any possible number type \(t\). Consequently, both instruction sequences

    +
    +\[(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~1)~~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~2)~~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~3)~~\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}{}\]
    +

    and

    +
    +\[(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~1.0)~~(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~2.0)~~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~3)~~\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}{}\]
    +

    are valid, with \(t\) in the typing of \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) being instantiated to \(\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}\) or \(\href{../syntax/types.html#syntax-valtype}{\mathsf{f64}}\), respectively.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\) instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) for any possible sequences of value types \(t_1^\ast\) and \(t_2^\ast\). +Consequently,

    +
    +\[\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}~~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\]
    +

    is valid by assuming type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\) for the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\) instruction. +In contrast,

    +
    +\[\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}~~(\href{../syntax/types.html#syntax-valtype}{\mathsf{i64}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~0)~~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{add}}\]
    +

    is invalid, because there is no possible type to pick for the \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\) instruction that would make the sequence well-typed.

    +
    +

    The Appendix describes a type checking algorithm that efficiently implements validation of instruction sequences as prescribed by the rules given here.

    +
    +

    Numeric Instructions

    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\)

    +
      +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}}\)

    +
      +
    • The instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.}\href{../syntax/instructions.html#syntax-unop}{\mathit{unop}} : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}}\)

    +
      +
    • The instruction is valid with type \([t~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.}\href{../syntax/instructions.html#syntax-binop}{\mathit{binop}} : [t~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-testop}{\mathit{testop}}\)

    +
      +
    • The instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.}\href{../syntax/instructions.html#syntax-testop}{\mathit{testop}} : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-relop}{\mathit{relop}}\)

    +
      +
    • The instruction is valid with type \([t~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.}\href{../syntax/instructions.html#syntax-relop}{\mathit{relop}} : [t~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(t_2\mathsf{.}\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}\mathsf{\_}t_1\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\)

    +
      +
    • The instruction is valid with type \([t_1] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t_2\mathsf{.}\href{../syntax/instructions.html#syntax-cvtop}{\mathit{cvtop}}\mathsf{\_}t_1\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^? : [t_1] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2] +}\]
    +
    +
    +
    +

    Reference Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t\)

    +
      +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}~t : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +

    Note

    +

    In future versions of WebAssembly, there may be reference types for which no null reference is allowed.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}}\)

    +
      +
    • The instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\), for any reference type \(t\).

    • +
    +
    +\[\frac{ + t = \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}is\_null}} : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x\)

    +
      +
    • The function \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\) must be defined in the context.

    • +
    • The function index \(x\) must be contained in \(C.\href{../valid/conventions.html#context}{\mathsf{refs}}\).

    • +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x] = \href{../syntax/types.html#syntax-functype}{\mathit{functype}} + \qquad + x \in C.\href{../valid/conventions.html#context}{\mathsf{refs}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}] +}\]
    +
    +
    +
    +

    Vector Instructions

    +

    Vector instructions can have a prefix to describe the shape of the operand. Packed numeric types, \(\href{../exec/runtime.html#syntax-storagetype}{\mathsf{i8}}\) and \(\href{../exec/runtime.html#syntax-storagetype}{\mathsf{i16}}\), are not value type, we define an auxiliary function to map such packed types into value types:

    +
    +\[\begin{split}\begin{array}{lll@{\qquad}l} +\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\mathsf{i8x16}) &=& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ +\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\mathsf{i16x8}) &=& \href{../syntax/types.html#syntax-valtype}{\mathsf{i32}} \\ +\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(t\mathsf{x}N) &=& t +\end{array}\end{split}\]
    +

    We also define an auxiliary function to get number of packed numeric types in a \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\), dimension:

    +
    +\[\begin{array}{lll@{\qquad}l} +\href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(t\mathsf{x}N) &=& N +\end{array}\]
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c\)

    +
      +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{const}}~c : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvunop}{\mathit{vvunop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvbinop}{\mathit{vvbinop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvternop}{\mathit{vvternop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvtestop}{\mathit{vvtestop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}\mathsf{.}\href{../syntax/instructions.html#syntax-vvtestop}{\mathit{vvtestop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{swizzle}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}^{16}\)

    +
      +
    • For all \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}_i\), in \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}^{16}\), \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}_i\) must be smaller than \(32\).

    • +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + (\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} < 32)^{16} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{i8x16.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{shuffle}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}^{16} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}}\)

    +
      +
    • Let \(t\) be \(\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    • +
    • The instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{splat}} : [\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    +
      +
    • The lane index \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) must be smaller than \(\href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    • +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})]\).

    • +
    +
    +\[\frac{ + \href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} < \href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}) +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{x}N\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extract\_lane}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    +
      +
    • The lane index \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) must be smaller than \(\href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    • +
    • Let \(t\) be \(\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})\).

    • +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + \href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} < \href{../valid/instructions.html#aux-dim}{\mathrm{dim}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}) +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{replace\_lane}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../valid/instructions.html#aux-unpacked}{\mathrm{unpacked}}(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}})] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vunop}{\mathit{vunop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vbinop}{\mathit{vbinop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vrelop}{\mathit{vrelop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vishiftop}{\mathit{vishiftop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vtestop}{\mathit{vtestop}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vtestop}{\mathit{vtestop}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}^?\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\mathsf{\_zero}^?\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{.}\href{../syntax/instructions.html#syntax-vcvtop}{\mathit{vcvtop}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}^?\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{shape}}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}^?\mathsf{\_zero}^? : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{narrow}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{bitmask}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_s}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{dot}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_s} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extmul}}\mathsf{\_}\href{../syntax/instructions.html#syntax-half}{\mathit{half}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}\)

    +
      +
    • The instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_1\mathsf{.}\href{../syntax/instructions.html#syntax-instr-vec}{\mathsf{extadd\_pairwise}}\mathsf{\_}\href{../syntax/instructions.html#syntax-shape}{\mathit{ishape}}_2\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +
    +

    Parametric Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\)

    +
      +
    • The instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\), for any value type \(t\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}} : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +

    Note

    +

    Both \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{drop}}\) and \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) without annotation are value-polymorphic instructions.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~(t^\ast)^?\)

    +
      +
    • If \(t^\ast\) is present, then:

      +
        +
      • The length of \(t^\ast\) must be \(1\).

      • +
      • Then the instruction is valid with type \([t^\ast~t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast]\).

      • +
      +
    • +
    • Else:

      +
        +
      • The instruction is valid with type \([t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\), for any operand type \(t\) that matches some number type or vector type.

      • +
      +
    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}~t : [t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +} +\qquad +\frac{ + \vdash t \leq \href{../syntax/types.html#syntax-numtype}{\mathit{numtype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}} : [t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +} +\qquad +\frac{ + \vdash t \leq \href{../syntax/types.html#syntax-vectype}{\mathit{vectype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}} : [t~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +

    Note

    +

    In future versions of WebAssembly, \(\href{../syntax/instructions.html#syntax-instr-parametric}{\mathsf{select}}\) may allow more than one value per choice.

    +
    +
    +
    +
    +

    Variable Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x\)

    +
      +
    • The local \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\) must be defined in the context.

    • +
    • Let \(t\) be the value type \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\).

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.get}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x\)

    +
      +
    • The local \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\) must be defined in the context.

    • +
    • Let \(t\) be the value type \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\).

    • +
    • Then the instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.set}}~x : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x\)

    +
      +
    • The local \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\) must be defined in the context.

    • +
    • Let \(t\) be the value type \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x]\).

    • +
    • Then the instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{locals}}[x] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{local.tee}}~x : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x\)

    +
      +
    • The global \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) be the global type \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\).

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x] = \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x\)

    +
      +
    • The global \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) be the global type \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\).

    • +
    • The mutability \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}\) must be \(\href{../syntax/types.html#syntax-mut}{\mathsf{var}}\).

    • +
    • Then the instruction is valid with type \([t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x] = \href{../syntax/types.html#syntax-mut}{\mathsf{var}}~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.set}}~x : [t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +
    +

    Table Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.get}}~x : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.set}}~x : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.size}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • Then the instruction is valid with type \([t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.grow}}~x : [t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.fill}}~x : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1~t_1\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[y]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2~t_2\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[y]\).

    • +
    • The reference type \(t_1\) must be the same as \(t_2\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1~t + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2~t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.copy}}~x~y : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t_1\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • The element segment \(C.\href{../valid/conventions.html#context}{\mathsf{elems}}[y]\) must be defined in the context.

    • +
    • Let \(t_2\) be the reference type \(C.\href{../valid/conventions.html#context}{\mathsf{elems}}[y]\).

    • +
    • The reference type \(t_1\) must be the same as \(t_2\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1~t + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{elems}}[y] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{table.init}}~x~y : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x\)

    +
      +
    • The element segment \(C.\href{../valid/conventions.html#context}{\mathsf{elems}}[x]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{elems}}[x] = t +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-table}{\mathsf{elem.drop}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +
    +

    Memory Instructions

    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than the bit width of \(t\) divided by \(8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq |t|/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.load}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.load}N\mathsf{\_}\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than the bit width of \(t\) divided by \(8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq |t|/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.store}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(t\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} t\mathsf{.store}N~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~t] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8 \cdot M\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq N/8 \cdot M +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{v128.}\mathsf{.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{x}M\_\href{../syntax/instructions.html#syntax-sx}{\mathit{sx}}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_splat}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} \leq N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_zero}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    +
      +
    • The lane index \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) must be smaller than \(128/N\).

    • +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + \href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} < 128/N + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} < N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{load}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] +}\]
    +
    +
    +

    \(\mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\)

    +
      +
    • The lane index \(\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}}\) must be smaller than \(128/N\).

    • +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The alignment \(2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}}\) must not be larger than \(N/8\).

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}]\).

    • +
    +
    +\[\frac{ + \href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} < 128/N + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + 2^{\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}.\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{align}}} < N/8 +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \mathsf{v128.}\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{store}}{N}\mathsf{\_lane}~\href{../syntax/instructions.html#syntax-memarg}{\mathit{memarg}}~\href{../syntax/instructions.html#syntax-laneidx}{\mathit{laneidx}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{v128}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.size}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.grow}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.fill}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.copy}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0]\) must be defined in the context.

    • +
    • The data segment \(C.\href{../valid/conventions.html#context}{\mathsf{datas}}[x]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[0] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{datas}}[x] = {\mathrel{\mbox{ok}}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{memory.init}}~x : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x\)

    +
      +
    • The data segment \(C.\href{../valid/conventions.html#context}{\mathsf{datas}}[x]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{datas}}[x] = {\mathrel{\mbox{ok}}} +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-memory}{\mathsf{data.drop}}~x : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +
    +

    Control Instructions

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}}\)

    +
      +
    • The instruction is valid with type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{nop}} : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\)

    +
      +
    • The instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), for any sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{unreachable}}\) instruction is stack-polymorphic.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • The block type must be valid as some function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Let \(C'\) be the same context as \(C\), but with the result type \([t_2^\ast]\) prepended to the \(\href{../valid/conventions.html#context}{\mathsf{labels}}\) vector.

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Then the compound instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C \href{../valid/types.html#valid-blocktype}{\vdash} \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t_2^\ast] \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{block}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The notation \(C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t^\ast]\) inserts the new label type at index \(0\), shifting all others.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • The block type must be valid as some function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Let \(C'\) be the same context as \(C\), but with the result type \([t_1^\ast]\) prepended to the \(\href{../valid/conventions.html#context}{\mathsf{labels}}\) vector.

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Then the compound instruction is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C \href{../valid/types.html#valid-blocktype}{\vdash} \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t_1^\ast] \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{loop}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The notation \(C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t^\ast]\) inserts the new label type at index \(0\), shifting all others.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • The block type must be valid as some function type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Let \(C'\) be the same context as \(C\), but with the result type \([t_2^\ast]\) prepended to the \(\href{../valid/conventions.html#context}{\mathsf{labels}}\) vector.

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast\) must be valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Under context \(C'\), +the instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast\) must be valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    • Then the compound instruction is valid with type \([t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C \href{../valid/types.html#valid-blocktype}{\vdash} \href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t_2^\ast] \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t_2^\ast] \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{if}}~\href{../syntax/instructions.html#syntax-blocktype}{\mathit{blocktype}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_1^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{else}}~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_2^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The notation \(C,\href{../valid/conventions.html#context}{\mathsf{labels}}\,[t^\ast]\) inserts the new label type at index \(0\), shifting all others.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l\)

    +
      +
    • The label \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\) must be defined in the context.

    • +
    • Let \([t^\ast]\) be the result type \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\).

    • +
    • Then the instruction is valid with type \([t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), for any sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l] = [t^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}~l : [t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The label index space in the context \(C\) contains the most recent label first, so that \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\) performs a relative lookup as expected.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br}}\) instruction is stack-polymorphic.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l\)

    +
      +
    • The label \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\) must be defined in the context.

    • +
    • Let \([t^\ast]\) be the result type \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\).

    • +
    • Then the instruction is valid with type \([t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l] = [t^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_if}}~l : [t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast] +}\]
    +
    +

    Note

    +

    The label index space in the context \(C\) contains the most recent label first, so that \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l]\) performs a relative lookup as expected.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N\)

    +
      +
    • The label \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_N]\) must be defined in the context.

    • +
    • For all \(l_i\) in \(l^\ast\), +the label \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_i]\) must be defined in the context.

    • +
    • There must be a result type \([t^\ast]\), such that:

      +
        +
      • For each operand type \(t_j\) in \(t^\ast\) and corresponding type \(t'_{Nj}\) in \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_N]\), \(t_j\) matches \(t'_{Nj}\).

      • +
      • For all \(l_i\) in \(l^\ast\), +and for each operand type \(t_j\) in \(t^\ast\) and corresponding type \(t'_{ij}\) in \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_i]\), \(t_j\) matches \(t'_{ij}\).

      • +
      +
    • +
    • Then the instruction is valid with type \([t_1^\ast~t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), for any sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    +
    +\[\frac{ + (\vdash [t^\ast] \leq C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l])^\ast + \qquad + \vdash [t^\ast] \leq C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_N] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}~l^\ast~l_N : [t_1^\ast~t^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The label index space in the context \(C\) contains the most recent label first, so that \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}[l_i]\) performs a relative lookup as expected.

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{br\_table}}\) instruction is stack-polymorphic.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\)

    +
      +
    • The return type \(C.\href{../valid/conventions.html#context}{\mathsf{return}}\) must not be absent in the context.

    • +
    • Let \([t^\ast]\) be the result type of \(C.\href{../valid/conventions.html#context}{\mathsf{return}}\).

    • +
    • Then the instruction is valid with type \([t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), for any sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{return}} = [t^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}} : [t_1^\ast~t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +

    Note

    +

    The \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{return}}\) instruction is stack-polymorphic.

    +

    \(C.\href{../valid/conventions.html#context}{\mathsf{return}}\) is absent (set to \(\epsilon\)) when validating an expression that is not a function body. +This differs from it being set to the empty result type (\([\epsilon]\)), +which is the case for functions not returning anything.

    +
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x\)

    +
      +
    • The function \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\) must be defined in the context.

    • +
    • Then the instruction is valid with type \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x] = [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call}}~x : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +

    \(\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • The reference type \(t\) must be \(\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}}\).

    • +
    • The type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[y]\) must be defined in the context.

    • +
    • Let \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) be the function type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[y]\).

    • +
    • Then the instruction is valid with type \([t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-reftype}{\mathsf{funcref}} + \qquad + C.\href{../valid/conventions.html#context}{\mathsf{types}}[y] = [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr-control}{\mathsf{call\_indirect}}~x~y : [t_1^\ast~\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +
    +

    Instruction Sequences

    +

    Typing of instruction sequences is defined recursively.

    +
    +

    Empty Instruction Sequence: \(\epsilon\)

    +
      +
    • The empty instruction sequence is valid with type \([t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast]\), +for any sequence of operand types \(t^\ast\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \epsilon : [t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t^\ast] +}\]
    +
    +
    +

    Non-empty Instruction Sequence: \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_N\)

    +
      +
    • The instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\), +for some sequences of value types \(t_1^\ast\) and \(t_2^\ast\).

    • +
    • The instruction \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_N\) must be valid with type \([t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_3^\ast]\), +for some sequences of value types \(t^\ast\) and \(t_3^\ast\).

    • +
    • There must be a sequence of value types \(t_0^\ast\), +such that \(t_2^\ast = t_0^\ast~{t'}^\ast\) where the type sequence \({t'}^\ast\) is as long as \(t^\ast\).

    • +
    • For each operand type \(t'_i\) in \({t'}^\ast\) and corresponding type \(t_i\) in \(t^\ast\), \(t'_i\) matches \(t_i\).

    • +
    • Then the combined instruction sequence is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_0^\ast~t_3^\ast]\).

    • +
    +
    +\[\frac{ + C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_0^\ast~{t'}^\ast] + \qquad + \vdash [{t'}^\ast] \leq [t^\ast] + \qquad + C \href{../valid/instructions.html#valid-instr}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_N : [t^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_3^\ast] +}{ + C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}_N : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_0^\ast~t_3^\ast] +}\]
    +
    +
    +
    +

    Expressions

    +

    Expressions \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) are classified by result types of the form \([t^\ast]\).

    +
    +

    \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\)

    +
      +
    • The instruction sequence \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be valid with some stack type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [{t'}^\ast]\).

    • +
    • For each operand type \(t'_i\) in \({t'}^\ast\) and corresponding value type type \(t_i\) in \(t^\ast\), \(t'_i\) matches \(t_i\).

    • +
    • Then the expression is valid with result type \([t^\ast]\).

    • +
    +
    +\[\frac{ + C \href{../valid/instructions.html#valid-instr-seq}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [{t'}^\ast] + \qquad + \vdash [{t'}^\ast] \leq [t^\ast] +}{ + C \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} : [t^\ast] +}\]
    +
    +
    +

    Constant Expressions

    +
      +
    • In a constant expression \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}}\) all instructions in \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast\) must be constant.

    • +
    • A constant instruction \(\href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}\) must be:

      +
        +
      • either of the form \(t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c\),

      • +
      • or of the form \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}}\),

      • +
      • or of the form \(\href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x\),

      • +
      • or of the form \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x\), in which case \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\) must be a global type of the form \(\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~t\).

      • +
      +
    • +
    +
    +\[\frac{ + (C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}})^\ast +}{ + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr}{\mathit{instr}}^\ast~\href{../syntax/instructions.html#syntax-instr-control}{\mathsf{end}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +}\]
    +
    +\[\frac{ +}{ + C \href{../valid/instructions.html#valid-constant}{\vdash} t.\href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~c \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +} +\qquad +\frac{ +}{ + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}null}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +} +\qquad +\frac{ +}{ + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr-ref}{\mathsf{ref{.}func}}~x \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +}\]
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x] = \href{../syntax/instructions.html#syntax-instr-numeric}{\mathsf{const}}~t +}{ + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}~x \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +}\]
    +
    +

    Note

    +

    Currently, constant expressions occurring as initializers of globals are further constrained in that contained \(\href{../syntax/instructions.html#syntax-instr-variable}{\mathsf{global.get}}\) instructions are only allowed to refer to imported globals. +This is enforced in the validation rule for modules by constraining the context \(C\) accordingly.

    +

    The definition of constant expression may be extended in future versions of WebAssembly.

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/valid/modules.html b/core/valid/modules.html new file mode 100644 index 00000000..bd150cca --- /dev/null +++ b/core/valid/modules.html @@ -0,0 +1,618 @@ + + + + + + + + + Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Modules

    +

    Modules are valid when all the components they contain are valid. +Furthermore, most definitions are themselves classified with a suitable type.

    +
    +

    Functions

    +

    Functions \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}\) are classified by function types of the form \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~x, \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~t^\ast, \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \}\)

    +
      +
    • The type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[x]\) must be defined in the context.

    • +
    • Let \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) be the function type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[x]\).

    • +
    • Let \(C'\) be the same context as \(C\), +but with:

      +
        +
      • \(\href{../valid/conventions.html#context}{\mathsf{locals}}\) set to the sequence of value types \(t_1^\ast~t^\ast\), concatenating parameters and locals,

      • +
      • \(\href{../valid/conventions.html#context}{\mathsf{labels}}\) set to the singular sequence containing only result type \([t_2^\ast]\).

      • +
      • \(\href{../valid/conventions.html#context}{\mathsf{return}}\) set to the result type \([t_2^\ast]\).

      • +
      +
    • +
    • Under the context \(C'\), +the expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be valid with type \([t_2^\ast]\).

    • +
    • Then the function definition is valid with type \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{types}}[x] = [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] + \qquad + C,\href{../valid/conventions.html#context}{\mathsf{locals}}\,t_1^\ast~t^\ast,\href{../valid/conventions.html#context}{\mathsf{labels}}~[t_2^\ast],\href{../valid/conventions.html#context}{\mathsf{return}}~[t_2^\ast] \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} : [t_2^\ast] +}{ + C \href{../valid/modules.html#valid-func}{\vdash} \{ \href{../syntax/modules.html#syntax-func}{\mathsf{type}}~x, \href{../syntax/modules.html#syntax-func}{\mathsf{locals}}~t^\ast, \href{../syntax/modules.html#syntax-func}{\mathsf{body}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} : [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +
    +

    Tables

    +

    Tables \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}\) are classified by table types.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-table}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \}\)

    +
      +
    • The table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) must be valid.

    • +
    • Then the table definition is valid with type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-table}{\vdash} \{ \href{../syntax/modules.html#syntax-table}{\mathsf{type}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \} : \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} +}\]
    +
    +
    +
    +

    Memories

    +

    Memories \(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}\) are classified by memory types.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-mem}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \}\)

    +
      +
    • The memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\) must be valid.

    • +
    • Then the memory definition is valid with type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-mem}{\vdash} \{ \href{../syntax/modules.html#syntax-mem}{\mathsf{type}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \} : \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}\]
    +
    +
    +
    +

    Globals

    +

    Globals \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}\) are classified by global types of the form \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\).

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-global}{\mathsf{type}}~\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t, \href{../syntax/modules.html#syntax-global}{\mathsf{init}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \}\)

    +
      +
    • The global type \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\) must be valid.

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be valid with result type \([t]\).

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be constant.

    • +
    • Then the global definition is valid with type \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t \mathrel{\mbox{ok}} + \qquad + C \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} : [t] + \qquad + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +}{ + C \href{../valid/modules.html#valid-global}{\vdash} \{ \href{../syntax/modules.html#syntax-global}{\mathsf{type}}~\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t, \href{../syntax/modules.html#syntax-global}{\mathsf{init}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} : \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~t +}\]
    +
    +
    +
    +

    Element Segments

    +

    Element segments \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}\) are classified by the reference type of their elements.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~t, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~e^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} \}\)

    +
      +
    • For each \(e_i\) in \(e^\ast\),

      +
        +
      • The expression \(e_i\) must be valid.

      • +
      • The expression \(e_i\) must be constant.

      • +
      +
    • +
    • The element mode \(\href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}}\) must be valid with reference type \(t\).

    • +
    • Then the element segment is valid with reference type \(t\).

    • +
    +
    +\[\frac{ + (C \href{../valid/instructions.html#valid-expr}{\vdash} e \mathrel{\mbox{ok}})^\ast + \qquad + (C \href{../valid/instructions.html#valid-constant}{\vdash} e \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}})^\ast + \qquad + C \href{../valid/modules.html#valid-elemmode}{\vdash} \href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} : t +}{ + C \href{../valid/modules.html#valid-elem}{\vdash} \{ \href{../syntax/modules.html#syntax-elem}{\mathsf{type}}~t, \href{../syntax/modules.html#syntax-elem}{\mathsf{init}}~e^\ast, \href{../syntax/modules.html#syntax-elem}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-elemmode}{\mathit{elemmode}} \} : t +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}}\)

    + +
    +\[\frac{ +}{ + C \href{../valid/modules.html#valid-elemmode}{\vdash} \href{../syntax/modules.html#syntax-elemmode}{\mathsf{passive}} : \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~x, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \}\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Let \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t\) be the table type \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be valid with result type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be constant.

    • +
    • Then the element mode is valid with reference type \(t\).

    • +
    +
    +\[\begin{split}\frac{ + \begin{array}{@{}c@{}} + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~t + \\ + C \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] + \qquad + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} + \end{array} +}{ + C \href{../valid/modules.html#valid-elemmode}{\vdash} \href{../syntax/modules.html#syntax-elemmode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-elem}{\mathsf{table}}~x, \href{../syntax/modules.html#syntax-elem}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} : t +}\end{split}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}}\)

    + +
    +\[\frac{ +}{ + C \href{../valid/modules.html#valid-elemmode}{\vdash} \href{../syntax/modules.html#syntax-elemmode}{\mathsf{declarative}} : \href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} +}\]
    +
    +
    +
    +

    Data Segments

    +

    Data segments \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}\) are not classified by any type but merely checked for well-formedness.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} \}\)

    +
      +
    • The data mode \(\href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}}\) must be valid.

    • +
    • Then the data segment is valid.

    • +
    +
    +\[\frac{ + C \href{../valid/modules.html#valid-datamode}{\vdash} \href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-data}{\vdash} \{ \href{../syntax/modules.html#syntax-data}{\mathsf{init}}~b^\ast, \href{../syntax/modules.html#syntax-data}{\mathsf{mode}}~\href{../syntax/modules.html#syntax-datamode}{\mathit{datamode}} \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}}\)

    +
      +
    • The data mode is valid.

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/modules.html#valid-datamode}{\vdash} \href{../syntax/modules.html#syntax-datamode}{\mathsf{passive}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~x, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \}\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[x]\) must be defined in the context.

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be valid with result type \([\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}]\).

    • +
    • The expression \(\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}}\) must be constant.

    • +
    • Then the data mode is valid.

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[x] = \href{../syntax/types.html#syntax-limits}{\mathit{limits}} + \qquad + C \href{../valid/instructions.html#valid-expr}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} : [\href{../syntax/types.html#syntax-valtype}{\mathsf{i32}}] + \qquad + C \href{../valid/instructions.html#valid-constant}{\vdash} \href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \href{../valid/instructions.html#valid-constant}{\mathrel{\mbox{const}}} +}{ + C \href{../valid/modules.html#valid-datamode}{\vdash} \href{../syntax/modules.html#syntax-datamode}{\mathsf{active}}~\{ \href{../syntax/modules.html#syntax-data}{\mathsf{memory}}~x, \href{../syntax/modules.html#syntax-data}{\mathsf{offset}}~\href{../syntax/instructions.html#syntax-expr}{\mathit{expr}} \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Start Function

    +

    Start function declarations \(\href{../syntax/modules.html#syntax-start}{\mathit{start}}\) are not classified by any type.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-start}{\mathsf{func}}~x \}\)

    +
      +
    • The function \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\) must be defined in the context.

    • +
    • The type of \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\) must be \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} []\).

    • +
    • Then the start function is valid.

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x] = [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [] +}{ + C \href{../valid/modules.html#valid-start}{\vdash} \{ \href{../syntax/modules.html#syntax-start}{\mathsf{func}}~x \} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Exports

    +

    Exports \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}\) and export descriptions \(\href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}}\) are classified by their external type.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-export}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/modules.html#syntax-export}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} \}\)

    +
      +
    • The export description \(\href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}}\) must be valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\).

    • +
    • Then the export is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\).

    • +
    +
    +\[\frac{ + C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} +}{ + C \href{../valid/modules.html#valid-export}{\vdash} \{ \href{../syntax/modules.html#syntax-export}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}, \href{../syntax/modules.html#syntax-export}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-exportdesc}{\mathit{exportdesc}} \} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~x\)

    +
      +
    • The function \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\) must be defined in the context.

    • +
    • Then the export description is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{funcs}}[x] = \href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}{ + C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{func}}~x : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~x\)

    +
      +
    • The table \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\) must be defined in the context.

    • +
    • Then the export description is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{tables}}[x] = \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} +}{ + C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{table}}~x : \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~x\)

    +
      +
    • The memory \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}[x]\) must be defined in the context.

    • +
    • Then the export description is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~C.\href{../valid/conventions.html#context}{\mathsf{mems}}[x]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{mems}}[x] = \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}{ + C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{mem}}~x : \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~x\)

    +
      +
    • The global \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\) must be defined in the context.

    • +
    • Then the export description is valid with external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{globals}}[x] = \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} +}{ + C \href{../valid/modules.html#valid-exportdesc}{\vdash} \href{../syntax/modules.html#syntax-exportdesc}{\mathsf{global}}~x : \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} +}\]
    +
    +
    +
    +

    Imports

    +

    Imports \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}\) and import descriptions \(\href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}}\) are classified by external types.

    +
    +

    \(\{ \href{../syntax/modules.html#syntax-import}{\mathsf{module}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}_1, \href{../syntax/modules.html#syntax-import}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}_2, \href{../syntax/modules.html#syntax-import}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} \}\)

    +
      +
    • The import description \(\href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}}\) must be valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\).

    • +
    • Then the import is valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathit{externtype}}\).

    • +
    +
    +\[\frac{ + C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} +}{ + C \href{../valid/modules.html#valid-import}{\vdash} \{ \href{../syntax/modules.html#syntax-import}{\mathsf{module}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}_1, \href{../syntax/modules.html#syntax-import}{\mathsf{name}}~\href{../syntax/values.html#syntax-name}{\mathit{name}}_2, \href{../syntax/modules.html#syntax-import}{\mathsf{desc}}~\href{../syntax/modules.html#syntax-importdesc}{\mathit{importdesc}} \} : \href{../syntax/types.html#syntax-externtype}{\mathit{externtype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-importdesc}{\mathsf{func}}~x\)

    +
      +
    • The function \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[x]\) must be defined in the context.

    • +
    • Let \([t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\) be the function type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[x]\).

    • +
    • Then the import description is valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~[t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{types}}[x] = [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}{ + C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathsf{func}}~x : \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~[t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-importdesc}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\)

    +
      +
    • The table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) must be valid.

    • +
    • Then the import description is valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/modules.html#valid-table}{\vdash} \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-importdesc}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\)

    +
      +
    • The memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\) must be valid.

    • +
    • Then the import description is valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} +}\]
    +
    +
    +

    \(\href{../syntax/modules.html#syntax-importdesc}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\)

    +
      +
    • The global type \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\) must be valid.

    • +
    • Then the import description is valid with type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\).

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \mathrel{\mbox{ok}} +}{ + C \href{../valid/modules.html#valid-importdesc}{\vdash} \href{../syntax/modules.html#syntax-importdesc}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} : \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} +}\]
    +
    +
    +
    +

    Modules

    +

    Modules are classified by their mapping from the external types of their imports to those of their exports.

    +

    A module is entirely closed, +that is, its components can only refer to definitions that appear in the module itself. +Consequently, no initial context is required. +Instead, the context \(C\) for validation of the module’s content is constructed from the definitions in the module.

    +
      +
    • Let \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}\) be the module to validate.

    • +
    • Let \(C\) be a context where:

      +
        +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{types}}\) is \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{types}}\),

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}\) is \(\href{../syntax/types.html#syntax-externtype}{\mathrm{funcs}}(\mathit{it}^\ast)\) concatenated with \(\mathit{ft}^\ast\), +with the import’s external types \(\mathit{it}^\ast\) and the internal function types \(\mathit{ft}^\ast\) as determined below,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{tables}}\) is \(\href{../syntax/types.html#syntax-externtype}{\mathrm{tables}}(\mathit{it}^\ast)\) concatenated with \(\mathit{tt}^\ast\), +with the import’s external types \(\mathit{it}^\ast\) and the internal table types \(\mathit{tt}^\ast\) as determined below,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}\) is \(\href{../syntax/types.html#syntax-externtype}{\mathrm{mems}}(\mathit{it}^\ast)\) concatenated with \(\mathit{mt}^\ast\), +with the import’s external types \(\mathit{it}^\ast\) and the internal memory types \(\mathit{mt}^\ast\) as determined below,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{globals}}\) is \(\href{../syntax/types.html#syntax-externtype}{\mathrm{globals}}(\mathit{it}^\ast)\) concatenated with \(\mathit{gt}^\ast\), +with the import’s external types \(\mathit{it}^\ast\) and the internal global types \(\mathit{gt}^\ast\) as determined below,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{elems}}\) is \({\mathit{rt}}^\ast\) as determined below,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{datas}}\) is \({\mathrel{\mbox{ok}}}^n\), where \(n\) is the length of the vector \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\),

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{locals}}\) is empty,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{labels}}\) is empty,

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{return}}\) is empty.

      • +
      • \(C.\href{../valid/conventions.html#context}{\mathsf{refs}}\) is the set \(\href{../syntax/modules.html#syntax-funcidx}{\mathrm{funcidx}}(\href{../syntax/modules.html#syntax-module}{\mathit{module}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/modules.html#syntax-module}{\mathsf{funcs}} = \epsilon \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/modules.html#syntax-module}{\mathsf{start}} = \epsilon)\), i.e., the set of function indices occurring in the module, except in its functions or start function.

      • +
      +
    • +
    • Let \(C'\) be the context where:

      +
        +
      • \(C'.\href{../valid/conventions.html#context}{\mathsf{globals}}\) is the sequence \(\href{../syntax/types.html#syntax-externtype}{\mathrm{globals}}(\mathit{it}^\ast)\),

      • +
      • \(C'.\href{../valid/conventions.html#context}{\mathsf{funcs}}\) is the same as \(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}\),

      • +
      • \(C'.\href{../valid/conventions.html#context}{\mathsf{refs}}\) is the same as \(C.\href{../valid/conventions.html#context}{\mathsf{refs}}\),

      • +
      • all other fields are empty.

      • +
      +
    • +
    • Under the context \(C\):

      +
        +
      • For each \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{types}}\), +the function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_i\) must be valid.

      • +
      • For each \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}\), +the definition \(\href{../syntax/modules.html#syntax-func}{\mathit{func}}_i\) must be valid with a function type \(\mathit{ft}_i\).

      • +
      • For each \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{tables}}\), +the definition \(\href{../syntax/modules.html#syntax-table}{\mathit{table}}_i\) must be valid with a table type \(\mathit{tt}_i\).

      • +
      • For each \(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{mems}}\), +the definition \(\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}_i\) must be valid with a memory type \(\mathit{mt}_i\).

      • +
      • For each \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{globals}}\):

        +
          +
        • Under the context \(C'\), +the definition \(\href{../syntax/modules.html#syntax-global}{\mathit{global}}_i\) must be valid with a global type \(\mathit{gt}_i\).

        • +
        +
      • +
      • For each \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{elems}}\), +the segment \(\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}_i\) must be valid with reference type \(\mathit{rt}_i\).

      • +
      • For each \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{datas}}\), +the segment \(\href{../syntax/modules.html#syntax-data}{\mathit{data}}_i\) must be valid.

      • +
      • If \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\) is non-empty, +then \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{start}}\) must be valid.

      • +
      • For each \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{imports}}\), +the segment \(\href{../syntax/modules.html#syntax-import}{\mathit{import}}_i\) must be valid with an external type \(\mathit{it}_i\).

      • +
      • For each \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) in \(\href{../syntax/modules.html#syntax-module}{\mathit{module}}.\href{../syntax/modules.html#syntax-module}{\mathsf{exports}}\), +the segment \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i\) must be valid with external type \(\mathit{et}_i\).

      • +
      +
    • +
    • The length of \(C.\href{../valid/conventions.html#context}{\mathsf{mems}}\) must not be larger than \(1\).

    • +
    • All export names \(\href{../syntax/modules.html#syntax-export}{\mathit{export}}_i.\href{../syntax/modules.html#syntax-export}{\mathsf{name}}\) must be different.

    • +
    • Let \(\mathit{ft}^\ast\) be the concatenation of the internal function types \(\mathit{ft}_i\), in index order.

    • +
    • Let \(\mathit{tt}^\ast\) be the concatenation of the internal table types \(\mathit{tt}_i\), in index order.

    • +
    • Let \(\mathit{mt}^\ast\) be the concatenation of the internal memory types \(\mathit{mt}_i\), in index order.

    • +
    • Let \(\mathit{gt}^\ast\) be the concatenation of the internal global types \(\mathit{gt}_i\), in index order.

    • +
    • Let \(\mathit{rt}^\ast\) be the concatenation of the reference types \(\mathit{rt}_i\), in index order.

    • +
    • Let \(\mathit{it}^\ast\) be the concatenation of external types \(\mathit{it}_i\) of the imports, in index order.

    • +
    • Let \(\mathit{et}^\ast\) be the concatenation of external types \(\mathit{et}_i\) of the exports, in index order.

    • +
    • Then the module is valid with external types \(\mathit{it}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} \mathit{et}^\ast\).

    • +
    +
    +\[\begin{split}\frac{ + \begin{array}{@{}c@{}} + (\href{../valid/types.html#valid-functype}{\vdash} \href{../syntax/types.html#syntax-functype}{\mathit{type}} \mathrel{\mbox{ok}})^\ast + \quad + (C \href{../valid/modules.html#valid-func}{\vdash} \href{../syntax/modules.html#syntax-func}{\mathit{func}} : \mathit{ft})^\ast + \quad + (C \href{../valid/modules.html#valid-table}{\vdash} \href{../syntax/modules.html#syntax-table}{\mathit{table}} : \mathit{tt})^\ast + \quad + (C \href{../valid/modules.html#valid-mem}{\vdash} \href{../syntax/modules.html#syntax-mem}{\mathit{mem}} : \mathit{mt})^\ast + \quad + (C' \href{../valid/modules.html#valid-global}{\vdash} \href{../syntax/modules.html#syntax-global}{\mathit{global}} : \mathit{gt})^\ast + \\ + (C \href{../valid/modules.html#valid-elem}{\vdash} \href{../syntax/modules.html#syntax-elem}{\mathit{elem}} : \mathit{rt})^\ast + \quad + (C \href{../valid/modules.html#valid-data}{\vdash} \href{../syntax/modules.html#syntax-data}{\mathit{data}} \mathrel{\mbox{ok}})^n + \quad + (C \href{../valid/modules.html#valid-start}{\vdash} \href{../syntax/modules.html#syntax-start}{\mathit{start}} \mathrel{\mbox{ok}})^? + \quad + (C \href{../valid/modules.html#valid-import}{\vdash} \href{../syntax/modules.html#syntax-import}{\mathit{import}} : \mathit{it})^\ast + \quad + (C \href{../valid/modules.html#valid-export}{\vdash} \href{../syntax/modules.html#syntax-export}{\mathit{export}} : \mathit{et})^\ast + \\ + \mathit{ift}^\ast = \href{../syntax/types.html#syntax-externtype}{\mathrm{funcs}}(\mathit{it}^\ast) + \qquad + \mathit{itt}^\ast = \href{../syntax/types.html#syntax-externtype}{\mathrm{tables}}(\mathit{it}^\ast) + \qquad + \mathit{imt}^\ast = \href{../syntax/types.html#syntax-externtype}{\mathrm{mems}}(\mathit{it}^\ast) + \qquad + \mathit{igt}^\ast = \href{../syntax/types.html#syntax-externtype}{\mathrm{globals}}(\mathit{it}^\ast) + \\ + x^\ast = \href{../syntax/modules.html#syntax-funcidx}{\mathrm{funcidx}}(\href{../syntax/modules.html#syntax-module}{\mathit{module}} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/modules.html#syntax-module}{\mathsf{funcs}} = \epsilon \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \href{../syntax/modules.html#syntax-module}{\mathsf{start}} = \epsilon) + \\ + C = \{ \href{../valid/conventions.html#context}{\mathsf{types}}~\href{../syntax/types.html#syntax-functype}{\mathit{type}}^\ast, \href{../valid/conventions.html#context}{\mathsf{funcs}}~\mathit{ift}^\ast\,\mathit{ft}^\ast, \href{../valid/conventions.html#context}{\mathsf{tables}}~\mathit{itt}^\ast\,\mathit{tt}^\ast, \href{../valid/conventions.html#context}{\mathsf{mems}}~\mathit{imt}^\ast\,\mathit{mt}^\ast, \href{../valid/conventions.html#context}{\mathsf{globals}}~\mathit{igt}^\ast\,\mathit{gt}^\ast, \href{../valid/conventions.html#context}{\mathsf{elems}}~\mathit{rt}^\ast, \href{../valid/conventions.html#context}{\mathsf{datas}}~{\mathrel{\mbox{ok}}}^n, \href{../valid/conventions.html#context}{\mathsf{refs}}~x^\ast \} + \\ + C' = \{ \href{../valid/conventions.html#context}{\mathsf{globals}}~\mathit{igt}^\ast, \href{../valid/conventions.html#context}{\mathsf{funcs}}~(C.\href{../valid/conventions.html#context}{\mathsf{funcs}}), \href{../valid/conventions.html#context}{\mathsf{refs}}~(C.\href{../valid/conventions.html#context}{\mathsf{refs}}) \} + \qquad + |C.\href{../valid/conventions.html#context}{\mathsf{mems}}| \leq 1 + \qquad + (\href{../syntax/modules.html#syntax-export}{\mathit{export}}.\href{../syntax/modules.html#syntax-export}{\mathsf{name}})^\ast ~\mathrm{disjoint} + \\ + \href{../syntax/modules.html#syntax-module}{\mathit{module}} = \{ + \begin{array}[t]{@{}l@{}} + \href{../syntax/modules.html#syntax-module}{\mathsf{types}}~\href{../syntax/types.html#syntax-functype}{\mathit{type}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{funcs}}~\href{../syntax/modules.html#syntax-func}{\mathit{func}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{tables}}~\href{../syntax/modules.html#syntax-table}{\mathit{table}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{mems}}~\href{../syntax/modules.html#syntax-mem}{\mathit{mem}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{globals}}~\href{../syntax/modules.html#syntax-global}{\mathit{global}}^\ast, \\ + \href{../syntax/modules.html#syntax-module}{\mathsf{elems}}~\href{../syntax/modules.html#syntax-elem}{\mathit{elem}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{datas}}~\href{../syntax/modules.html#syntax-data}{\mathit{data}}^n, + \href{../syntax/modules.html#syntax-module}{\mathsf{start}}~\href{../syntax/modules.html#syntax-start}{\mathit{start}}^?, + \href{../syntax/modules.html#syntax-module}{\mathsf{imports}}~\href{../syntax/modules.html#syntax-import}{\mathit{import}}^\ast, + \href{../syntax/modules.html#syntax-module}{\mathsf{exports}}~\href{../syntax/modules.html#syntax-export}{\mathit{export}}^\ast \} + \end{array} + \end{array} +}{ + \href{../valid/modules.html#valid-module}{\vdash} \href{../syntax/modules.html#syntax-module}{\mathit{module}} : \mathit{it}^\ast \href{../syntax/types.html#syntax-functype}{\rightarrow} \mathit{et}^\ast +}\end{split}\]
    +
    +

    Note

    +

    Most definitions in a module – particularly functions – are mutually recursive. +Consequently, the definition of the context \(C\) in this rule is recursive: +it depends on the outcome of validation of the function, table, memory, and global definitions contained in the module, +which itself depends on \(C\). +However, this recursion is just a specification device. +All types needed to construct \(C\) can easily be determined from a simple pre-pass over the module that does not perform any actual validation.

    +

    Globals, however, are not recursive. +The effect of defining the limited context \(C'\) for validating the module’s globals is that their initialization expressions can only access functions and imported globals and nothing else.

    +
    +
    +

    Note

    +

    The restriction on the number of memories may be lifted in future versions of WebAssembly.

    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/core/valid/types.html b/core/valid/types.html new file mode 100644 index 00000000..380c829f --- /dev/null +++ b/core/valid/types.html @@ -0,0 +1,371 @@ + + + + + + + + + Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + +
    +

    Types

    +

    Most types are universally valid. +However, restrictions apply to limits, which must be checked during validation. +Moreover, block types are converted to plain function types for ease of processing.

    +
    +

    Limits

    +

    Limits must have meaningful bounds that are within a given range.

    +
    +

    \(\{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^? \}\)

    +
      +
    • The value of \(n\) must not be larger than \(k\).

    • +
    • If the maximum \(m^?\) is not empty, then:

      +
        +
      • Its value must not be larger than \(k\).

      • +
      • Its value must not be smaller than \(n\).

      • +
      +
    • +
    • Then the limit is valid within range \(k\).

    • +
    +
    +\[\frac{ + n \leq k + \qquad + (m \leq k)^? + \qquad + (n \leq m)^? +}{ + \href{../valid/types.html#valid-limits}{\vdash} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^? \} : k +}\]
    +
    +
    +
    +

    Block Types

    +

    Block types may be expressed in one of two forms, both of which are converted to plain function types by the following rules.

    +
    +

    \(\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}\)

    +
      +
    • The type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}]\) must be defined in the context.

    • +
    • Then the block type is valid as function type \(C.\href{../valid/conventions.html#context}{\mathsf{types}}[\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}]\).

    • +
    +
    +\[\frac{ + C.\href{../valid/conventions.html#context}{\mathsf{types}}[\href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}}] = \href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}{ + C \href{../valid/types.html#valid-blocktype}{\vdash} \href{../syntax/modules.html#syntax-typeidx}{\mathit{typeidx}} : \href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}\]
    +
    +
    +

    \([\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?]\)

    +
      +
    • The block type is valid as function type \([] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?]\).

    • +
    +
    +\[\frac{ +}{ + C \href{../valid/types.html#valid-blocktype}{\vdash} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?] : [] \href{../syntax/types.html#syntax-functype}{\rightarrow} [\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}^?] +}\]
    +
    +
    +
    +

    Function Types

    +

    Function types are always valid.

    +
    +

    \([t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m]\)

    +
      +
    • The function type is valid.

    • +
    +
    +\[\frac{ +}{ + \href{../valid/types.html#valid-functype}{\vdash} [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^\ast] \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Table Types

    +
    +

    \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}\)

    +
      +
    • The limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) must be valid within range \(2^{32}-1\).

    • +
    • Then the table type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} : 2^{32} - 1 +}{ + \href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Memory Types

    +
    +

    \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\)

    +
      +
    • The limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) must be valid within range \(2^{16}\).

    • +
    • Then the memory type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} : 2^{16} +}{ + \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Global Types

    +
    +

    \(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}\)

    +
      +
    • The global type is valid.

    • +
    +
    +\[\frac{ +}{ + \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    External Types

    +
    +

    \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\)

    +
      +
    • The function type \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}\) must be valid.

    • +
    • Then the external type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-functype}{\vdash} \href{../syntax/types.html#syntax-functype}{\mathit{functype}} \mathrel{\mbox{ok}} +}{ + \href{../valid/types.html#valid-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\)

    +
      +
    • The table type \(\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}}\) must be valid.

    • +
    • Then the external type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \mathrel{\mbox{ok}} +}{ + \href{../valid/types.html#valid-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~\href{../syntax/types.html#syntax-tabletype}{\mathit{tabletype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\)

    +
      +
    • The memory type \(\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}}\) must be valid.

    • +
    • Then the external type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \mathrel{\mbox{ok}} +}{ + \href{../valid/types.html#valid-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-memtype}{\mathit{memtype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +

    \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\)

    +
      +
    • The global type \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}\) must be valid.

    • +
    • Then the external type is valid.

    • +
    +
    +\[\frac{ + \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \mathrel{\mbox{ok}} +}{ + \href{../valid/types.html#valid-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \mathrel{\mbox{ok}} +}\]
    +
    +
    +
    +

    Import Subtyping

    +

    When instantiating a module, +external values must be provided whose types are matched against the respective external types classifying each import. +In some cases, this allows for a simple form of subtyping, as defined here.

    +
    +

    Limits

    +

    Limits \(\{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_1, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m_1^? \}\) match limits \(\{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_2, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m_2^? \}\) if and only if:

    +
      +
    • \(n_1\) is larger than or equal to \(n_2\).

    • +
    • Either:

      +
        +
      • \(m_2^?\) is empty.

      • +
      +
    • +
    • Or:

      +
        +
      • Both \(m_1^?\) and \(m_2^?\) are non-empty.

      • +
      • \(m_1\) is smaller than or equal to \(m_2\).

      • +
      +
    • +
    +
    +\[\begin{split}~\\[-1ex] +\frac{ + n_1 \geq n_2 +}{ + \href{../exec/modules.html#match-limits}{\vdash} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_1, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m_1^? \} \href{../exec/modules.html#match-limits}{\leq} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_2, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~\epsilon \} +} +\quad +\frac{ + n_1 \geq n_2 + \qquad + m_1 \leq m_2 +}{ + \href{../exec/modules.html#match-limits}{\vdash} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_1, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m_1 \} \href{../exec/modules.html#match-limits}{\leq} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n_2, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m_2 \} +}\end{split}\]
    +
    +
    +

    Functions

    +

    An external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_1\) matches \(\href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_2\) if and only if:

    +
      +
    • Both \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_1\) and \(\href{../syntax/types.html#syntax-functype}{\mathit{functype}}_2\) are the same.

    • +
    +
    +\[\begin{split}~\\[-1ex] +\frac{ +}{ + \href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathsf{func}}~\href{../syntax/types.html#syntax-functype}{\mathit{functype}} +}\end{split}\]
    +
    +
    +

    Tables

    +

    An external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}_1)\) matches \(\href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}_2)\) if and only if:

    +
      +
    • Limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1\) match \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2\).

    • +
    • Both \(\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}_1\) and \(\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}_2\) are the same.

    • +
    +
    +\[\frac{ + \href{../exec/modules.html#match-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1 \href{../exec/modules.html#match-limits}{\leq} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2 +}{ + \href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}) \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathsf{table}}~(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2~\href{../syntax/types.html#syntax-reftype}{\mathit{reftype}}) +}\]
    +
    +
    +

    Memories

    +

    An external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1\) matches \(\href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2\) if and only if:

    +
      +
    • Limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1\) match \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2\).

    • +
    +
    +\[\frac{ + \href{../exec/modules.html#match-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1 \href{../exec/modules.html#match-limits}{\leq} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2 +}{ + \href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_1 \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathsf{mem}}~\href{../syntax/types.html#syntax-limits}{\mathit{limits}}_2 +}\]
    +
    +
    +

    Globals

    +

    An external type \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_1\) matches \(\href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_2\) if and only if:

    +
      +
    • Both \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_1\) and \(\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}}_2\) are the same.

    • +
    +
    +\[\begin{split}~\\[-1ex] +\frac{ +}{ + \href{../exec/modules.html#match-externtype}{\vdash} \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} \href{../exec/modules.html#match-externtype}{\leq} \href{../syntax/types.html#syntax-externtype}{\mathsf{global}}~\href{../syntax/types.html#syntax-globaltype}{\mathit{globaltype}} +}\end{split}\]
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..37eed976 --- /dev/null +++ b/index.html @@ -0,0 +1,74 @@ + + + + + + + WebAssembly Specifications + + + + + + +
    +
    + +

    WebAssembly Specifications

    + +

    +To support the embedding of WebAssembly into different environments, its specification is split into layers that are specified in separate documents. +

    + +

    Core specification

    + +

    Defines the semantics of WebAssembly modules independent from a concrete embedding. + The WebAssembly core is specified in a single document:

    + +
      +
    • +

      WebAssembly: + defines the structure of WebAssembly modules, their instruction set, and their representation + in binary and text format, as well as the semantics of validation, + instantiation, and execution. +

      + +
    • +
    + +

    Embedder specifications

    + +

    Define application programming interfaces (APIs) enabling the use of WebAssembly modules in concrete embedding environments. + Currently, two APIs are specified:

    + +
      +
    • JavaScript Embedding: defines JavaScript classes and objects for accessing WebAssembly from within JavaScript, including methods for validation, compilation, instantiation, and classes for representing and manipulating imports and exports as JavaScript objects.

      + +
    • + +
    • Web Embedding: defines extensions to the JavaScript API made available specifically in web browsers, in particular, an interface for streaming compilation and instantiation from origin-bound Response types.

      + +
    • +
    + +

    + Source for these documents is available + here. +

    + +
    +
    + + + diff --git a/js-api/index.html b/js-api/index.html new file mode 100644 index 00000000..0dfdf601 --- /dev/null +++ b/js-api/index.html @@ -0,0 +1,4177 @@ + + + + + WebAssembly JavaScript Interface + + + + + + + + + + + + + + + +
    +

    +

    WebAssembly JavaScript Interface

    +

    Editor’s Draft,

    +
    + More details about this document +
    +
    +
    This version: +
    https://webassembly.github.io/spec/js-api/ +
    Latest published version: +
    https://www.w3.org/TR/wasm-js-api-2/ +
    Feedback: +
    Inline In Spec +
    Editor: +
    Ms2ger (Igalia) +
    Issue Tracking: +
    GitHub Issues +
    +
    +
    +
    + +
    +
    +
    +

    Abstract

    +

    This document provides an explicit JavaScript API for interacting with WebAssembly.

    + This is part of a collection of related documents: +the Core WebAssembly Specification, +the WebAssembly JS Interface, +and the WebAssembly Web API. +
    +

    Status of this document

    +
    +

    This is a public copy of the editors’ draft. + It is provided for discussion only and may change at any moment. + Its publication here does not imply endorsement of its contents by W3C. + Don’t cite this document other than as work in progress.

    +

    GitHub Issues are preferred for discussion of this specification. + All issues and comments are archived.

    +

    This document was produced by the WebAssembly Working Group.

    +

    This document was produced by a group operating under + the W3C Patent Policy. + W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; + that page also includes instructions for disclosing a patent. + An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

    +

    This document is governed by the 2 November 2021 W3C Process Document.

    +

    +
    +
    + +
    +

    This API provides a way to access WebAssembly [WEBASSEMBLY] through a bridge to explicitly construct modules from JavaScript [ECMASCRIPT].

    +

    1. Sample API Usage

    +

    This section is non-normative.

    +

    Given demo.wat (encoded to demo.wasm):

    +
    (module
    +    (import "js" "import1" (func $i1))
    +    (import "js" "import2" (func $i2))
    +    (func $main (call $i1))
    +    (start $main)
    +    (func (export "f") (call $i2))
    +)
    +
    +

    and the following JavaScript, run in a browser:

    +
    var importObj = {js: {
    +    import1: () => console.log("hello,"),
    +    import2: () => console.log("world!")
    +}};
    +fetch('demo.wasm').then(response =>
    +    response.arrayBuffer()
    +).then(buffer =>
    +    WebAssembly.instantiate(buffer, importObj)
    +).then(({module, instance}) =>
    +    instance.exports.f()
    +);
    +
    +

    2. Notation

    +

    This specification depends on the Infra Standard. [INFRA]

    +

    The WebAssembly sequence type is equivalent to the list type defined there; values of one +are treated as values of the other transparently.

    +

    3. Internal storage

    +

    3.1. Interaction of the WebAssembly Store with JavaScript

    +

    Note: WebAssembly semantics are defined in terms of an abstract store, representing the state of the WebAssembly abstract machine. WebAssembly operations take a store and return an updated store.

    +

    Each agent has an associated store. When a new agent is created, its associated store is set to the result of store_init().

    +

    Note: In this specification, no WebAssembly-related objects, memory or addresses can be shared among agents in an agent cluster. In a future version of WebAssembly, this may change.

    +

    Elements of the WebAssembly store may be identified with JavaScript values. In particular, each WebAssembly memory instance with a corresponding Memory object is identified with a JavaScript Data Block; modifications to this Data Block are identified to updating the agent’s store to a store which reflects those changes, and vice versa.

    +

    3.2. WebAssembly JS Object Caches

    +

    Note: There are several WebAssembly objects that may have a corresponding JavaScript object. The correspondence is stored in a per-agent mapping from WebAssembly addresses to JavaScript objects. +This mapping is used to ensure that, for a given agent, there exists at most one JavaScript object for a particular WebAssembly address. However, this property does not hold for shared objects.

    +

    Each agent is associated with the following ordered maps:

    + +

    4. The WebAssembly Namespace

    +
    dictionary WebAssemblyInstantiatedSource {
    +    required Module module;
    +    required Instance instance;
    +};
    +
    +[Exposed=(Window,Worker,Worklet)]
    +namespace WebAssembly {
    +    boolean validate(BufferSource bytes);
    +    Promise<Module> compile(BufferSource bytes);
    +
    +    Promise<WebAssemblyInstantiatedSource> instantiate(
    +        BufferSource bytes, optional object importObject);
    +
    +    Promise<Instance> instantiate(
    +        Module moduleObject, optional object importObject);
    +};
    +
    +
    + To compile a WebAssembly module from source bytes bytes, perform the following steps: +
      +
    1. +

      Let module be module_decode(bytes). If module is error, return error.

      +
    2. +

      If module_validate(module) is error, return error.

      +
    3. +

      Return module.

      +
    +
    +
    + The validate(bytes) method, when invoked, performs the following steps: +
      +
    1. +

      Let stableBytes be a copy of the bytes held by the buffer bytes.

      +
    2. +

      Compile stableBytes as a WebAssembly module and store the results as module.

      +
    3. +

      If module is error, return false.

      +
    4. +

      Return true.

      +
    +
    +

    A Module object represents a single WebAssembly module. Each Module object has the following internal slots:

    +
      +
    • +

      [[Module]] : a WebAssembly module

      +
    • +

      [[Bytes]] : the source bytes of [[Module]].

      +
    +
    + To construct a WebAssembly module object from a module module and source bytes bytes, perform the following steps: +
      +
    1. +

      Let moduleObject be a new Module object.

      +
    2. +

      Set moduleObject.[[Module]] to module.

      +
    3. +

      Set moduleObject.[[Bytes]] to bytes.

      +
    4. +

      Return moduleObject.

      +
    +
    +
    + To asynchronously compile a WebAssembly module from source bytes bytes, using optional task source taskSource, perform the following steps: +
      +
    1. +

      Let promise be a new promise.

      +
    2. +

      Run the following steps in parallel:

      +
        +
      1. +

        Compile the WebAssembly module bytes and store the result as module.

        +
      2. +

        Queue a task to perform the following steps. If taskSource was provided, queue the task on that task source.

        +
          +
        1. +

          If module is error, reject promise with a CompileError exception.

          +
        2. +

          Otherwise,

          +
            +
          1. +

            Construct a WebAssembly module object from module and bytes, and let moduleObject be the result.

            +
          2. +

            Resolve promise with moduleObject.

            +
          +
        +
      +
    3. +

      Return promise.

      +
    +
    +
    + The compile(bytes) method, when invoked, performs the following steps: +
      +
    1. +

      Let stableBytes be a copy of the bytes held by the buffer bytes.

      +
    2. +

      Asynchronously compile a WebAssembly module from stableBytes and return the result.

      +
    +
    +
    + To read the imports from a WebAssembly module module from imports object importObject, perform the following steps: +
      +
    1. +

      If module.imports is not empty, and importObject is undefined, throw a TypeError exception.

      +
    2. +

      Let imports be « ».

      +
    3. +

      For each (moduleName, componentName, externtype) of module_imports(module),

      +
        +
      1. +

        Let o be ? Get(importObject, moduleName).

        +
      2. +

        If Type(o) is not Object, throw a TypeError exception.

        +
      3. +

        Let v be ? Get(o, componentName).

        +
      4. +

        If externtype is of the form func functype,

        +
          +
        1. +

          If IsCallable(v) is false, throw a LinkError exception.

          +
        2. +

          If v has a [[FunctionAddress]] internal slot, and therefore is an Exported Function,

          +
            +
          1. +

            Let funcaddr be the value of v’s [[FunctionAddress]] internal slot.

            +
          +
        3. +

          Otherwise,

          +
            +
          1. +

            Create a host function from v and functype, and let funcaddr be the result.

            +
          2. +

            Let index be the number of external functions in imports. This value index is known as the index of the host function funcaddr.

            +
          +
        4. +

          Let externfunc be the external value func funcaddr.

          +
        5. +

          Append externfunc to imports.

          +
        +
      5. +

        If externtype is of the form global mut valtype,

        +
          +
        1. +

          If Type(v) is Number or BigInt,

          +
            +
          1. +

            If valtype is i64 and Type(v) is Number,

            +
              +
            1. +

              Throw a LinkError exception.

              +
            +
          2. +

            If valtype is not i64 and Type(v) is BigInt,

            +
              +
            1. +

              Throw a LinkError exception.

              +
            +
          3. +

            If valtype is v128,

            +
              +
            1. +

              Throw a LinkError exception.

              +
            +
          4. +

            Let value be ToWebAssemblyValue(v, valtype).

            +
          5. +

            Let store be the surrounding agent's associated store.

            +
          6. +

            Let (store, globaladdr) be global_alloc(store, const valtype, value).

            +
          7. +

            Set the surrounding agent's associated store to store.

            +
          +
        2. +

          Otherwise, if v implements Global,

          +
            +
          1. +

            Let globaladdr be v.[[Global]].

            +
          +
        3. +

          Otherwise,

          +
            +
          1. +

            Throw a LinkError exception.

            +
          +
        4. +

          Let externglobal be global globaladdr.

          +
        5. +

          Append externglobal to imports.

          +
        +
      6. +

        If externtype is of the form mem memtype,

        +
          +
        1. +

          If v does not implement Memory, throw a LinkError exception.

          +
        2. +

          Let externmem be the external value mem v.[[Memory]].

          +
        3. +

          Append externmem to imports.

          +
        +
      7. +

        If externtype is of the form table tabletype,

        +
          +
        1. +

          If v does not implement Table, throw a LinkError exception.

          +
        2. +

          Let tableaddr be v.[[Table]].

          +
        3. +

          Let externtable be the external value table tableaddr.

          +
        4. +

          Append externtable to imports.

          +
        +
      +
    4. +

      Return imports.

      +
    +

    Note: This algorithm only verifies the right kind of JavaScript values are passed. +The verification of WebAssembly type requirements is deferred to the +"instantiate the core of a WebAssembly module" algorithm.

    +
    +
    + To create an exports object from a WebAssembly module module and instance instance, perform the following steps: +
      +
    1. +

      Let exportsObject be ! ObjectCreate(null).

      +
    2. +

      For each (name, externtype) of module_exports(module),

      +
        +
      1. +

        Let externval be instance_export(instance, name).

        +
      2. +

        Assert: externval is not error.

        +
      3. +

        If externtype is of the form func functype,

        +
          +
        1. +

          Assert: externval is of the form func funcaddr.

          +
        2. +

          Let func funcaddr be externval.

          +
        3. +

          Let func be the result of creating a new Exported Function from funcaddr.

          +
        4. +

          Let value be func.

          +
        +
      4. +

        If externtype is of the form global mut globaltype,

        +
          +
        1. +

          Assert: externval is of the form global globaladdr.

          +
        2. +

          Let global globaladdr be externval.

          +
        3. +

          Let global be a new Global object created from globaladdr.

          +
        4. +

          Let value be global.

          +
        +
      5. +

        If externtype is of the form mem memtype,

        +
          +
        1. +

          Assert: externval is of the form mem memaddr.

          +
        2. +

          Let mem memaddr be externval.

          +
        3. +

          Let memory be a new Memory object created from memaddr.

          +
        4. +

          Let value be memory.

          +
        +
      6. +

        If externtype is of the form table tabletype,

        +
          +
        1. +

          Assert: externval is of the form table tableaddr.

          +
        2. +

          Let table tableaddr be externval.

          +
        3. +

          Let table be a new Table object created from tableaddr.

          +
        4. +

          Let value be table.

          +
        +
      7. +

        Let status be ! CreateDataProperty(exportsObject, name, value).

        +
      8. +

        Assert: status is true.

        +
      +

      Note: the validity and uniqueness checks performed during WebAssembly module validation ensure that each property name is valid and no properties are defined twice.

      +
    3. +

      Perform ! SetIntegrityLevel(exportsObject, "frozen").

      +
    4. +

      Return exportsObject.

      +
    +
    +
    + To initialize an instance object instanceObject from a WebAssembly module module and instance instance, perform the following steps: +
      +
    1. +

      Create an exports object from module and instance and let exportsObject be the result.

      +
    2. +

      Set instanceObject.[[Instance]] to instance.

      +
    3. +

      Set instanceObject.[[Exports]] to exportsObject.

      +
    +
    +
    + To instantiate the core of a WebAssembly module from a module module and imports imports, perform the following steps: +
      +
    1. +

      Let store be the surrounding agent's associated store.

      +
    2. +

      Let result be module_instantiate(store, module, imports).

      +
    3. +

      If result is error, throw an appropriate exception type:

      +
        +
      • +

        A LinkError exception for most cases which occur during linking.

        +
      • +

        If the error came when running the start function, throw a RuntimeError for most errors which occur from WebAssembly, or the error object propagated from inner ECMAScript code.

        +
      • +

        Another error type if appropriate, for example an out-of-memory exception, as documented in the WebAssembly error mapping.

        +
      +
    4. +

      Let (store, instance) be result.

      +
    5. +

      Set the surrounding agent's associated store to store.

      +
    6. +

      Return instance.

      +
    +
    +
    + To asynchronously instantiate a WebAssembly module from a Module moduleObject and imports importObject, perform the following steps: +
      +
    1. +

      Let promise be a new promise.

      +
    2. +

      Let module be moduleObject.[[Module]].

      +
    3. +

      Read the imports of module with imports importObject, and let imports be the result. +If this operation throws an exception, catch it, reject promise with the exception, and return promise.

      +
    4. +

      Queue a task to perform the following steps:

      +
        +
      1. +

        Instantiate the core of a WebAssembly module module with imports, and let instance be the result. +If this throws an exception, catch it, reject promise with the exception, and terminate these substeps.

        +
      2. +

        Let instanceObject be a new Instance.

        +
      3. +

        Initialize instanceObject from module and instance. +If this throws an exception, catch it, reject promise with the exception, and terminate these substeps.

        +
      4. +

        Resolve promise with instanceObject.

        +
      +
    5. +

      Return promise.

      +
    +
    +
    + To instantiate a WebAssembly module from a Module moduleObject and imports importObject, perform the following steps: +
      +
    1. +

      Let module be moduleObject.[[Module]].

      +
    2. +

      Read the imports of module with imports importObject, and let imports be the result.

      +
    3. +

      Instantiate the core of a WebAssembly module module with imports, and let instance be the result.

      +
    4. +

      Let instanceObject be a new Instance.

      +
    5. +

      Initialize instanceObject from module and instance.

      +
    6. +

      Return instanceObject.

      +
    +
    +
    + To instantiate a promise of a module promiseOfModule with imports importObject, perform the following steps: +
      +
    1. +

      Let promise be a new promise.

      +
    2. +

      Upon fulfillment of promiseOfModule with value module:

      +
        +
      1. +

        Instantiate the WebAssembly module module importing importObject, and let instance be the result. If this throws an exception, catch it, reject promise with the exception, and abort these substeps.

        +
      2. +

        Let result be the WebAssemblyInstantiatedSource value «[ "module" → module, "instance" → instance ]».

        +
      3. +

        Resolve promise with result.

        +
      +
    3. +

      Upon rejection of promiseOfModule with reason reason:

      +
        +
      1. +

        Reject promise with reason.

        +
      +
    4. +

      Return promise.

      +
    +

    Note: It would be valid to perform certain parts of the instantiation in parallel, but several parts need to happen in the event loop, including JavaScript operations to access the importObject and execution of the start function.

    +
    +
    + The instantiate(bytes, importObject) method, when invoked, performs the following steps: +
      +
    1. +

      Let stableBytes be a copy of the bytes held by the buffer bytes.

      +
    2. +

      Asynchronously compile a WebAssembly module from stableBytes and let promiseOfModule be the result.

      +
    3. +

      Instantiate promiseOfModule with imports importObject and return the result.

      +
    +
    +
    + The instantiate(moduleObject, importObject) method, when invoked, performs the following steps: +
      +
    1. +

      Asynchronously instantiate the WebAssembly module moduleObject importing importObject, and return the result.

      +
    +
    +

    Note: A follow-on streaming API is documented in the WebAssembly Web API.

    +

    4.1. Modules

    +
    enum ImportExportKind {
    +  "function",
    +  "table",
    +  "memory",
    +  "global"
    +};
    +
    +dictionary ModuleExportDescriptor {
    +  required USVString name;
    +  required ImportExportKind kind;
    +  // Note: Other fields such as signature may be added in the future.
    +};
    +
    +dictionary ModuleImportDescriptor {
    +  required USVString module;
    +  required USVString name;
    +  required ImportExportKind kind;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Module {
    +  constructor(BufferSource bytes);
    +  static sequence<ModuleExportDescriptor> exports(Module moduleObject);
    +  static sequence<ModuleImportDescriptor> imports(Module moduleObject);
    +  static sequence<ArrayBuffer> customSections(Module moduleObject, DOMString sectionName);
    +};
    +
    +
    + The string value of the extern type type is +
      +
    • +

      "function" if type is of the form func functype

      +
    • +

      "table" if type is of the form table tabletype

      +
    • +

      "memory" if type is of the form mem memtype

      +
    • +

      "global" if type is of the form global globaltype

      +
    +
    +
    + The exports(moduleObject) method, when invoked, performs the following steps: +
      +
    1. +

      Let module be moduleObject.[[Module]].

      +
    2. +

      Let exports be « ».

      +
    3. +

      For each (name, type) of module_exports(module),

      +
        +
      1. +

        Let kind be the string value of the extern type type.

        +
      2. +

        Let obj be «[ "name" → name, "kind" → kind ]».

        +
      3. +

        Append obj to exports.

        +
      +
    4. +

      Return exports.

      +
    +
    +
    + The imports(moduleObject) method, when invoked, performs the following steps: +
      +
    1. +

      Let module be moduleObject.[[Module]].

      +
    2. +

      Let imports be « ».

      +
    3. +

      For each (moduleName, name, type) of module_imports(module),

      +
        +
      1. +

        Let kind be the string value of the extern type type.

        +
      2. +

        Let obj be «[ "module" → moduleName, "name" → name, "kind" → kind ]».

        +
      3. +

        Append obj to imports.

        +
      +
    4. +

      Return imports.

      +
    +
    +
    + The customSections(moduleObject, sectionName) method, when invoked, performs the following steps: +
      +
    1. +

      Let bytes be moduleObject.[[Bytes]].

      +
    2. +

      Let customSections be « ».

      +
    3. +

      For each custom section customSection of bytes, interpreted according to the module grammar,

      +
        +
      1. +

        Let name be the name of customSection, decoded as UTF-8.

        +
      2. +

        Assert: name is not failure (moduleObject.[[Module]] is valid).

        +
      3. +

        If name equals sectionName as string values,

        +
          +
        1. +

          Append a new ArrayBuffer containing a copy of the bytes in bytes for the range matched by this customsec production to customSections.

          +
        +
      +
    4. +

      Return customSections.

      +
    +
    +
    + The Module(bytes) constructor, when invoked, performs the follwing steps: +
      +
    1. +

      Let stableBytes be a copy of the bytes held by the buffer bytes.

      +
    2. +

      Compile the WebAssembly module stableBytes and store the result as module.

      +
    3. +

      If module is error, throw a CompileError exception.

      +
    4. +

      Set this.[[Module]] to module.

      +
    5. +

      Set this.[[Bytes]] to stableBytes.

      +
    +
    +

    4.2. Instances

    +
    [LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Instance {
    +  constructor(Module module, optional object importObject);
    +  readonly attribute object exports;
    +};
    +
    +
    + The Instance(module, importObject) constructor, when invoked, runs the following steps: +
      +
    1. +

      Let module be module.[[Module]].

      +
    2. +

      Read the imports of module with imports importObject, and let imports be the result.

      +
    3. +

      Instantiate the core of a WebAssembly module module with imports, and let instance be the result.

      +
    4. +

      Initialize this from module and instance.

      +
    +
    +
    The getter of the exports attribute of Instance returns this.[[Exports]].
    +

    4.3. Memories

    +
    dictionary MemoryDescriptor {
    +  required [EnforceRange] unsigned long initial;
    +  [EnforceRange] unsigned long maximum;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Memory {
    +  constructor(MemoryDescriptor descriptor);
    +  unsigned long grow([EnforceRange] unsigned long delta);
    +  readonly attribute ArrayBuffer buffer;
    +};
    +
    +

    A Memory object represents a single memory instance which can be simultaneously referenced by multiple Instance objects. Each Memory object has the following internal slots:

    + +
    + To create a memory buffer from a memory address memaddr, perform the following steps: +
      +
    1. +

      Let block be a Data Block which is identified with the underlying memory of memaddr.

      +
    2. +

      Let buffer be a new ArrayBuffer whose [[ArrayBufferData]] is block and [[ArrayBufferByteLength]] is set to the length of block.

      +
    3. +

      Set buffer.[[ArrayBufferDetachKey]] to "WebAssembly.Memory".

      +
    4. +

      Return buffer.

      +
    +
    +
    + To initialize a memory object memory from a memory address memaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Memory object cache.

      +
    2. +

      Assert: map[memaddr] doesn’t exist.

      +
    3. +

      Let buffer be the result of creating a memory buffer from memaddr.

      +
    4. +

      Set memory.[[Memory]] to memaddr.

      +
    5. +

      Set memory.[[BufferObject]] to buffer.

      +
    6. +

      Set map[memaddr] to memory.

      +
    +
    +
    + To create a memory object from a memory address memaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Memory object cache.

      +
    2. +

      If map[memaddr] exists,

      +
        +
      1. +

        Return map[memaddr].

        +
      +
    3. +

      Let memory be a new Memory.

      +
    4. +

      Initialize memory from memaddr.

      +
    5. +

      Return memory.

      +
    +
    +
    + The Memory(descriptor) constructor, when invoked, performs the following steps: +
      +
    1. +

      Let initial be descriptor["initial"].

      +
    2. +

      If descriptor["maximum"] exists, let maximum be descriptor["maximum"]; otherwise, let maximum be empty.

      +
    3. +

      If maximum is not empty and maximum < initial, throw a RangeError exception.

      +
    4. +

      Let memtype be { min initial, max maximum }.

      +
    5. +

      Let store be the surrounding agent's associated store.

      +
    6. +

      Let (store, memaddr) be mem_alloc(store, memtype). If allocation fails, throw a RangeError exception.

      +
    7. +

      Set the surrounding agent's associated store to store.

      +
    8. +

      Initialize this from memaddr.

      +
    +
    +
    + To reset the Memory buffer of memaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Memory object cache.

      +
    2. +

      Assert: map[memaddr] exists.

      +
    3. +

      Let memory be map[memaddr].

      +
    4. +

      Perform ! DetachArrayBuffer(memory.[[BufferObject]], "WebAssembly.Memory").

      +
    5. +

      Let buffer be the result of creating a memory buffer from memaddr.

      +
    6. +

      Set memory.[[BufferObject]] to buffer.

      +
    +
    +
    + The grow(delta) method, when invoked, performs the following steps: +
      +
    1. +

      Let store be the surrounding agent's associated store.

      +
    2. +

      Let memaddr be this.[[Memory]].

      +
    3. +

      Let ret be the mem_size(store, memaddr).

      +
    4. +

      Let store be mem_grow(store, memaddr, delta).

      +
    5. +

      If store is error, throw a RangeError exception.

      +
    6. +

      Set the surrounding agent's associated store to store.

      +
    7. +

      Reset the memory buffer of memaddr.

      +
    8. +

      Return ret.

      +
    +
    +

    Immediately after a WebAssembly memory.grow instruction executes, perform the following steps:

    +
    +
      +
    1. +

      If the top of the stack is not i32.const (−1),

      +
        +
      1. +

        Let frame be the current frame.

        +
      2. +

        Assert: due to validation, frame.module.memaddrs[0] exists.

        +
      3. +

        Let memaddr be the memory address frame.module.memaddrs[0].

        +
      4. +

        Reset the memory buffer of memaddr.

        +
      +
    +
    +
    The getter of the buffer attribute of Memory returns this.[[BufferObject]].
    +

    4.4. Tables

    +
    enum TableKind {
    +  "externref",
    +  "anyfunc",
    +  // Note: More values may be added in future iterations,
    +  // e.g., typed function references, typed GC references
    +};
    +
    +dictionary TableDescriptor {
    +  required TableKind element;
    +  required [EnforceRange] unsigned long initial;
    +  [EnforceRange] unsigned long maximum;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Table {
    +  constructor(TableDescriptor descriptor, optional any value);
    +  unsigned long grow([EnforceRange] unsigned long delta, optional any value);
    +  any get([EnforceRange] unsigned long index);
    +  undefined set([EnforceRange] unsigned long index, optional any value);
    +  readonly attribute unsigned long length;
    +};
    +
    +

    A Table object represents a single table instance which can be simultaneously referenced by +multiple Instance objects. +Each Table object has a [[Table]] internal slot, which is a table address.

    +
    + To initialize a table object table from a table address tableaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Table object cache.

      +
    2. +

      Assert: map[tableaddr] doesn’t exist.

      +
    3. +

      Set table.[[Table]] to tableaddr.

      +
    4. +

      Set map[tableaddr] to table.

      +
    +
    +
    + To create a table object from a table address tableaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Table object cache.

      +
    2. +

      If map[tableaddr] exists,

      +
        +
      1. +

        Return map[tableaddr].

        +
      +
    3. +

      Let table be a new Table.

      +
    4. +

      Initialize table from tableaddr.

      +
    5. +

      Return table.

      +
    +
    +
    + The Table(descriptor, value) constructor, when invoked, performs the following steps: +
      +
    1. +

      Let elementType be ToValueType(descriptor["element"]).

      +
    2. +

      If elementType is not a reftype,

      +
        +
      1. +

        Throw a TypeError exception.

        +
      +
    3. +

      Let initial be descriptor["initial"].

      +
    4. +

      If descriptor["maximum"] exists, let maximum be descriptor["maximum"]; otherwise, let maximum be empty.

      +
    5. +

      If maximum is not empty and maximum < initial, throw a RangeError exception.

      +
    6. +

      If value is missing,

      +
        +
      1. +

        Let ref be DefaultValue(elementType).

        +
      +
    7. +

      Otherwise,

      +
        +
      1. +

        Let ref be ? ToWebAssemblyValue(value, elementType).

        +
      +
    8. +

      Let type be the table type {min initial, ma𝗑 maximum} elementType.

      +
    9. +

      Let store be the surrounding agent's associated store.

      +
    10. +

      Let (store, tableaddr) be table_alloc(store, type, ref).

      +
    11. +

      Set the surrounding agent's associated store to store.

      +
    12. +

      Initialize this from tableaddr.

      +
    +
    +
    + The grow(delta, value) method, when invoked, performs the following steps: +
      +
    1. +

      Let tableaddr be this.[[Table]].

      +
    2. +

      Let store be the surrounding agent's associated store.

      +
    3. +

      Let initialSize be table_size(store, tableaddr).

      +
    4. +

      Let (limits, elementType) be table_type(tableaddr).

      +
    5. +

      If value is missing,

      +
        +
      1. +

        Let ref be DefaultValue(elementType).

        +
      +
    6. +

      Otherwise,

      +
        +
      1. +

        Let ref be ? ToWebAssemblyValue(value, elementType).

        +
      +
    7. +

      Let result be table_grow(store, tableaddr, delta, ref).

      +
    8. +

      If result is error, throw a RangeError exception.

      +

      Note: The above exception can happen due to either insufficient memory or an invalid size parameter.

      +
    9. +

      Set the surrounding agent's associated store to result.

      +
    10. +

      Return initialSize.

      +
    +
    +
    + The getter of the length attribute of Table, when invoked, performs the following steps: +
      +
    1. +

      Let tableaddr be this.[[Table]].

      +
    2. +

      Let store be the surrounding agent's associated store.

      +
    3. +

      Return table_size(store, tableaddr).

      +
    +
    +
    + The get(index) method, when invoked, performs the following steps: +
      +
    1. +

      Let tableaddr be this.[[Table]].

      +
    2. +

      Let store be the surrounding agent's associated store.

      +
    3. +

      Let result be table_read(store, tableaddr, index).

      +
    4. +

      If result is error, throw a RangeError exception.

      +
    5. +

      Return ToJSValue(result).

      +
    +
    +
    + The set(index, value) method, when invoked, performs the following steps: +
      +
    1. +

      Let tableaddr be this.[[Table]].

      +
    2. +

      Let (limits, elementType) be table_type(tableaddr).

      +
    3. +

      If value is missing,

      +
        +
      1. +

        Let ref be DefaultValue(elementType).

        +
      +
    4. +

      Otherwise,

      +
        +
      1. +

        Let ref be ? ToWebAssemblyValue(value, elementType).

        +
      +
    5. +

      Let store be the surrounding agent's associated store.

      +
    6. +

      Let store be table_write(store, tableaddr, index, ref).

      +
    7. +

      If store is error, throw a RangeError exception.

      +
    8. +

      Set the surrounding agent's associated store to store.

      +
    +
    +

    4.5. Globals

    +
    enum ValueType {
    +  "i32",
    +  "i64",
    +  "f32",
    +  "f64",
    +  "v128",
    +  "externref",
    +  "anyfunc",
    +};
    +
    +

    Note: this type may be extended with additional cases in future versions of WebAssembly.

    +
    dictionary GlobalDescriptor {
    +  required ValueType value;
    +  boolean mutable = false;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Global {
    +  constructor(GlobalDescriptor descriptor, optional any v);
    +  any valueOf();
    +  attribute any value;
    +};
    +
    +

    A Global object represents a single global instance which can be simultaneously referenced by multiple Instance objects. Each Global object has one internal slot:

    + +
    + To initialize a global object global from a global address globaladdr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Global object cache.

      +
    2. +

      Assert: map[globaladdr] doesn’t exist.

      +
    3. +

      Set global.[[Global]] to globaladdr.

      +
    4. +

      Set map[globaladdr] to global.

      +
    +
    +
    + To create a global object from a global address globaladdr, perform the following steps: +
      +
    1. +

      Let map be the current agent's associated Global object cache.

      +
    2. +

      If map[globaladdr] exists,

      +
        +
      1. +

        Return map[globaladdr].

        +
      +
    3. +

      Let global be a new Global.

      +
    4. +

      Initialize global from globaladdr.

      +
    5. +

      Return global.

      +
    +
    +
    + The algorithm ToValueType(s) performs the following steps: +
      +
    1. +

      If s equals "i32", return i32.

      +
    2. +

      If s equals "i64", return i64.

      +
    3. +

      If s equals "f32", return f32.

      +
    4. +

      If s equals "f64", return f64.

      +
    5. +

      If s equals "v128", return v128.

      +
    6. +

      If s equals "anyfunc", return funcref.

      +
    7. +

      If s equals "externref", return externref.

      +
    8. +

      Assert: This step is not reached.

      +
    +
    +
    + The algorithm DefaultValue(valuetype) performs the following steps: +
      +
    1. +

      If valuetype equals i32, return i32.const 0.

      +
    2. +

      If valuetype equals i64, return i64.const 0.

      +
    3. +

      If valuetype equals f32, return f32.const 0.

      +
    4. +

      If valuetype equals f64, return f64.const 0.

      +
    5. +

      If valuetype equals funcref, return ref.null funcref.

      +
    6. +

      If valuetype equals externref, return ToWebAssemblyValue(undefined, valuetype).

      +
    7. +

      Assert: This step is not reached.

      +
    +
    +
    + The Global(descriptor, v) constructor, when invoked, performs the following steps: +
      +
    1. +

      Let mutable be descriptor["mutable"].

      +
    2. +

      Let valuetype be ToValueType(descriptor["value"]).

      +
    3. +

      If valuetype is v128,

      +
        +
      1. +

        Throw a LinkError exception.

        +
      +
    4. +

      If v is missing,

      +
        +
      1. +

        Let value be DefaultValue(valuetype).

        +
      +
    5. +

      Otherwise,

      +
        +
      1. +

        Let value be ToWebAssemblyValue(v, valuetype).

        +
      +
    6. +

      If mutable is true, let globaltype be var valuetype; otherwise, let globaltype be const valuetype.

      +
    7. +

      Let store be the current agent’s associated store.

      +
    8. +

      Let (store, globaladdr) be global_alloc(store, globaltype, value).

      +
    9. +

      Set the current agent’s associated store to store.

      +
    10. +

      Initialize this from globaladdr.

      +
    +
    +
    + The algorithm GetGlobalValue(Global global) performs the following steps: +
      +
    1. +

      Let store be the current agent’s associated store.

      +
    2. +

      Let globaladdr be global.[[Global]].

      +
    3. +

      Let globaltype be global_type(store, globaladdr).

      +
    4. +

      If globaltype is of the form mut v128, throw a TypeError.

      +
    5. +

      Let value be global_read(store, globaladdr).

      +
    6. +

      Return ToJSValue(value).

      +
    +
    +
    + The getter of the value attribute of Global, when invoked, performs the following steps: +
      +
    1. +

      Return GetGlobalValue(this).

      +
    +

    The setter of the value attribute of Global, when invoked, performs the following steps:

    +
      +
    1. +

      Let store be the current agent’s associated store.

      +
    2. +

      Let globaladdr be this.[[Global]].

      +
    3. +

      Let mut valuetype be global_type(store, globaladdr).

      +
    4. +

      If valuetype is v128, throw a TypeError.

      +
    5. +

      If mut is const, throw a TypeError.

      +
    6. +

      Let value be ToWebAssemblyValue(the given value, valuetype).

      +
    7. +

      Let store be global_write(store, globaladdr, value).

      +
    8. +

      If store is error, throw a RangeError exception.

      +
    9. +

      Set the current agent’s associated store to store.

      +
    +
    +
    + The valueOf() method, when invoked, performs the following steps: +
      +
    1. +

      Return GetGlobalValue(this).

      +
    +
    +

    4.6. Exported Functions

    +

    A WebAssembly function is made available in JavaScript as an Exported Function. +Exported Functions are Built-in Function Objects which are not constructors, and which have a [[FunctionAddress]] internal slot. +This slot holds a function address relative to the surrounding agent's associated store.

    +
    + The name of the WebAssembly function funcaddr is found by performing the following steps: +
      +
    1. +

      Let store be the surrounding agent's associated store.

      +
    2. +

      Let funcinst be store.funcs[funcaddr].

      +
    3. +

      If funcinst is of the form {type functype, hostcode hostfunc},

      +
        +
      1. +

        Assert: hostfunc is a JavaScript object and IsCallable(hostfunc) is true.

        +
      2. +

        Let index be the index of the host function funcaddr.

        +
      +
    4. +

      Otherwise,

      +
        +
      1. +

        Let moduleinst be funcinst.module.

        +
      2. +

        Assert: funcaddr is contained in moduleinst.funcaddrs.

        +
      3. +

        Let index be the index of moduleinst.funcaddrs where funcaddr is found.

        +
      +
    5. +

      Return ! ToString(index).

      +
    +
    +
    + To create a new Exported Function from a WebAssembly function address funcaddr, perform the following steps: +
      +
    1. +

      Let map be the surrounding agent's associated Exported Function cache.

      +
    2. +

      If map[funcaddr] exists,

      +
        +
      1. +

        Return map[funcaddr].

        +
      +
    3. +

      Let steps be "call the Exported Function funcaddr with arguments."

      +
    4. +

      Let realm be the current Realm.

      +
    5. +

      Let store be the surrounding agent's associated store.

      +
    6. +

      Let functype be func_type(store, funcaddr).

      +
    7. +

      Let [paramTypes] → [resultTypes] be functype.

      +
    8. +

      Let arity be paramTypes’s size.

      +
    9. +

      Let name be the name of the WebAssembly function funcaddr.

      +
    10. +

      Let function be ! CreateBuiltinFunction(steps, arity, name, « [[FunctionAddress]] », realm).

      +
    11. +

      Set function.[[FunctionAddress]] to funcaddr.

      +
    12. +

      Set map[funcaddr] to function.

      +
    13. +

      Return function.

      +
    +
    +
    + To call an Exported Function with function address funcaddr and a list of JavaScript arguments argValues, perform the following steps: +
      +
    1. +

      Let store be the surrounding agent's associated store.

      +
    2. +

      Let functype be func_type(store, funcaddr).

      +
    3. +

      Let [parameters] → [results] be functype.

      +
    4. +

      If parameters or results contain v128, throw a TypeError.

      +

      Note: the above error is thrown each time the [[Call]] method is invoked.

      +
    5. +

      Let args be « ».

      +
    6. +

      Let i be 0.

      +
    7. +

      For each t of parameters,

      +
        +
      1. +

        If argValues’s size > i, let arg be argValues[i].

        +
      2. +

        Otherwise, let arg be undefined.

        +
      3. +

        Append ToWebAssemblyValue(arg, t) to args.

        +
      4. +

        Set i to i + 1.

        +
      +
    8. +

      Let (store, ret) be the result of func_invoke(store, funcaddr, args).

      +
    9. +

      Set the surrounding agent's associated store to store.

      +
    10. +

      If ret is error, throw an exception. This exception should be a WebAssembly RuntimeError exception, unless otherwise indicated by the WebAssembly error mapping.

      +
    11. +

      Let outArity be the size of ret.

      +
    12. +

      If outArity is 0, return undefined.

      +
    13. +

      Otherwise, if outArity is 1, return ToJSValue(ret[0]).

      +
    14. +

      Otherwise,

      +
        +
      1. +

        Let values be « ».

        +
      2. +

        For each r of ret,

        +
          +
        1. +

          Append ToJSValue(r) to values.

          +
        +
      3. +

        Return CreateArrayFromList(values).

        +
      +
    +
    +

    Note: Calling an Exported Function executes in the [[Realm]] of the callee Exported Function, as per the definition of built-in function objects.

    +

    Note: Exported Functions do not have a [[Construct]] method and thus it is not possible to call one with the new operator.

    +
    + To run a host function from the JavaScript object func, type functype, and list of WebAssembly values arguments, perform the following steps: +
      +
    1. +

      Let [parameters] → [results] be functype.

      +
    2. +

      If parameters or results contain v128, throw a TypeError.

      +
    3. +

      Let jsArguments be « ».

      +
    4. +

      For each arg of arguments,

      +
        +
      1. +

        Append ! ToJSValue(arg) to jsArguments.

        +
      +
    5. +

      Let ret be ? Call(func, undefined, jsArguments).

      +
    6. +

      Let resultsSize be results’s size.

      +
    7. +

      If resultsSize is 0, return « ».

      +
    8. +

      Otherwise, if resultsSize is 1, return « ? ToWebAssemblyValue(ret, results[0]) ».

      +
    9. +

      Otherwise,

      +
        +
      1. +

        Let method be ? GetMethod(ret, @@iterator).

        +
      2. +

        If method is undefined, throw a TypeError.

        +
      3. +

        Let values be ? IterableToList(ret, method).

        +
      4. +

        Let wasmValues be a new, empty list.

        +
      5. +

        If values’s size is not resultsSize, throw a TypeError exception.

        +
      6. +

        For each value and resultType in values and results, paired linearly,

        +
          +
        1. +

          Append ToWebAssemblyValue(value, resultType) to wasmValues.

          +
        +
      7. +

        Return wasmValues.

        +
      +
    +
    +
    + To create a host function from the JavaScript object func and type functype, perform the following steps: +
      +
    1. +

      Assert: IsCallable(func).

      +
    2. +

      Let stored settings be the incumbent settings object.

      +
    3. +

      Let hostfunc be a host function which performs the following steps when called with arguments arguments:

      +
        +
      1. +

        Let realm be func’s associated Realm.

        +
      2. +

        Let relevant settings be realm’s settings object.

        +
      3. +

        Prepare to run script with relevant settings.

        +
      4. +

        Prepare to run a callback with stored settings.

        +
      5. +

        Let result be the result of running a host function from func, functype, and arguments.

        +
      6. +

        Clean up after running a callback with stored settings.

        +
      7. +

        Clean up after running script with relevant settings.

        +
      8. +

        Assert: result.[[Type]] is throw or normal.

        +
      9. +

        If result.[[Type]] is throw, then trigger a WebAssembly trap, and propagate result.[[Value]] to the enclosing JavaScript.

        +
      10. +

        Otherwise, return result.[[Value]].

        +
      +
    4. +

      Let store be the surrounding agent's associated store.

      +
    5. +

      Let (store, funcaddr) be func_alloc(store, functype, hostfunc).

      +
    6. +

      Set the surrounding agent's associated store to store.

      +
    7. +

      Return funcaddr.

      +
    +
    +
    + The algorithm ToJSValue(w) coerces a WebAssembly value to a JavaScript value by performing the following steps: +
      +
    1. +

      Assert: w is not of the form v128.const v128.

      +
    2. +

      If w is of the form i64.const i64,

      +
        +
      1. +

        Let v be signed_64(i64).

        +
      2. +

        Return a BigInt representing the mathematical value v.

        +
      +
    3. +

      If w is of the form i32.const i32, return the Number value for signed_32(i32).

      +
    4. +

      If w is of the form f32.const f32, return the Number value for f32.

      +
    5. +

      If w is of the form f64.const f64, return the Number value for f64.

      +
    6. +

      If w is of the form ref.null t, return null.

      +
    7. +

      If w is of the form ref.func funcaddr, return the result of creating a new Exported Function from funcaddr.

      +
    8. +

      If w is of the form ref.extern externaddr, return the result of retrieving an extern value from externaddr.

      +
    +

    Note: Number values which are equal to NaN may have various observable NaN payloads; see NumberToRawBytes for details.

    +
    +
    +

    For retrieving an extern value from an extern address externaddr, perform the following steps:

    +
      +
    1. +

      Let map be the surrounding agent's associated extern value cache.

      +
    2. +

      Assert: map[externaddr] exists.

      +
    3. +

      Return map[externaddr].

      +
    +
    +
    + The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps: +
      +
    1. +

      Assert: type is not v128.

      +
    2. +

      If type is i64,

      +
        +
      1. +

        Let i64 be ? ToBigInt64(v).

        +
      2. +

        Return i64.const i64.

        +
      +
    3. +

      If type is i32,

      +
        +
      1. +

        Let i32 be ? ToInt32(v).

        +
      2. +

        Return i32.const i32.

        +
      +
    4. +

      If type is f32,

      +
        +
      1. +

        Let f32 be ? ToNumber(v) rounded to the nearest representable value using IEEE 754-2008 round to nearest, ties to even mode.

        +
      2. +

        Return f32.const f32.

        +
      +
    5. +

      If type is f64,

      +
        +
      1. +

        Let f64 be ? ToNumber(v).

        +
      2. +

        Return f64.const f64.

        +
      +
    6. +

      If type is funcref,

      +
        +
      1. +

        If v is null,

        +
          +
        1. +

          Return ref.null funcref.

          +
        +
      2. +

        If v is an Exported Function,

        +
          +
        1. +

          Let funcaddr be the value of v’s [[FunctionAddress]] internal slot.

          +
        2. +

          Return ref.func funcaddr.

          +
        +
      3. +

        Throw a TypeError.

        +
      +
    7. +

      If type is externref,

      +
        +
      1. +

        If v is null,

        +
          +
        1. +

          Return ref.null externref.

          +
        +
      2. +

        Let map be the surrounding agent's associated extern value cache.

        +
      3. +

        If a extern address externaddr exists such that map[externaddr] is the same as v,

        +
          +
        1. +

          Return ref.extern externaddr.

          +
        +
      4. +

        Let extern address externaddr be the smallest address such that map[externaddr] exists is false.

        +
      5. +

        Set map[externaddr] to v.

        +
      6. +

        Return ref.extern externaddr.

        +
      +
    8. +

      Assert: This step is not reached.

      +
    +
    +

    4.7. Error Objects

    +

    WebAssembly defines the following Error classes: CompileError, LinkError, and RuntimeError.

    +
    + When the namespace object for the WebAssembly namespace is created, the following steps must be run: +
      +
    1. +

      Let namespaceObject the namespace object.

      +
    2. +

      For each error of « "CompileError", "LinkError", "RuntimeError" »,

      +
        +
      1. +

        Let constructor be a new object, implementing the NativeError Object Structure, with NativeError set to error.

        +
      2. +

        ! CreateMethodProperty(namespaceObject, error, constructor).

        +
      +
    +
    +

    Note: This defines CompileError, LinkError, and RuntimeError classes on the WebAssembly namespace, which are produced by the APIs defined in this specification. +They expose the same interface as native JavaScript errors like TypeError and RangeError.

    +

    Note: It is not currently possible to define this behavior using Web IDL.

    +

    5. Error Condition Mappings to JavaScript

    +

    Running WebAssembly programs encounter certain events which halt execution of the WebAssembly code. +WebAssembly code (currently) +has no way to catch these conditions and thus an exception will necessarily +propagate to the enclosing non-WebAssembly caller (whether it is a browser, +JavaScript or another runtime system) where it is handled like a normal JavaScript exception.

    +

    If WebAssembly calls JavaScript via import and the JavaScript throws an +exception, the exception is propagated through the WebAssembly activation to the +enclosing caller.

    +

    Because JavaScript exceptions can be handled, and JavaScript can continue to +call WebAssembly exports after a trap has been handled, traps do not, in +general, prevent future execution.

    +

    5.1. Stack Overflow

    +

    Whenever a stack overflow occurs in +WebAssembly code, the same class of exception is thrown as for a stack overflow in +JavaScript. The particular exception here is implementation-defined in both cases.

    +

    Note: ECMAScript doesn’t specify any sort of behavior on stack overflow; implementations have been observed to throw RangeError, InternalError or Error. Any is valid here.

    +

    5.2. Out of Memory

    +

    Whenever validation, compilation or instantiation run out of memory, the +same class of exception is thrown as for out of memory conditions in JavaScript. +The particular exception here is implementation-defined in both cases.

    +

    Note: ECMAScript doesn’t specify any sort of behavior on out-of-memory conditions; implementations have been observed to throw OOMError and to crash. Either is valid here.

    +
    + A failed allocation of a large table or memory may either result in + + In a future revision, we may reconsider more reliable and recoverable errors for allocations of large amounts of memory. +

    See Issue 879 for further discussion.

    +
    +

    6. Implementation-defined Limits

    +

    The WebAssembly core specification allows an implementation to define limits on the syntactic structure of the module. +While each embedding of WebAssembly may choose to define its own limits, for predictability the standard WebAssembly JavaScript Interface described in this document defines the following exact limits. +An implementation must reject a module that exceeds one of the following limits with a CompileError: +In practice, an implementation may run out of resources for valid modules below these limits.

    +
      +
    • The maximum size of a module is 1073741824 bytes (1 GiB). +
    • The maximum number of types defined in the types section is 1000000. +
    • The maximum number of functions defined in a module is 1000000. +
    • The maximum number of imports declared in a module is 100000. +
    • The maximum number of exports declared in a module is 100000. +
    • The maximum number of globals defined in a module is 1000000. +
    • The maximum number of data segments defined in a module is 100000. +
    • The maximum number of tables, including declared or imported tables, is 100000. +
    • The maximum size of a table is 10000000. +
    • The maximum number of table entries in any table initialization is 10000000. +
    • The maximum number of memories, including declared or imported memories, is 1. +
    • The maximum number of parameters to any function or block is 1000. +
    • The maximum number of return values for any function or block is 1000. +
    • The maximum size of a function body, including locals declarations, is 7654321 bytes. +
    • The maximum number of locals declared in a function, including implicitly declared as parameters, is 50000. +
    +

    An implementation must throw a RuntimeError if one of the following limits is exceeded during runtime: +In practice, an implementation may run out of resources for valid modules below these limits.

    +
      +
    • The maximum size of a table is 10000000. +
    • The maximum number of pages of a memory is 65536. +
    +

    7. Security and Privacy Considerations

    +

    This section is non-normative.

    +

    This document defines a host environment for WebAssembly. It enables a WebAssembly instance to import JavaScript objects and functions from an import object, but otherwise provides no access to the embedding environment. Thus a WebAssembly instance is bounds to the same constraints as JavaScript.

    +
    +
    +

    Conformance

    +

    Document conventions

    +

    Conformance requirements are expressed + with a combination of descriptive assertions + and RFC 2119 terminology. + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” + in the normative parts of this document + are to be interpreted as described in RFC 2119. + However, for readability, + these words do not appear in all uppercase letters in this specification.

    +

    All of the text of this specification is normative + except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

    +

    Examples in this specification are introduced with the words “for example” + or are set apart from the normative text + with class="example", + like this:

    +
    + +

    This is an example of an informative example.

    +
    +

    Informative notes begin with the word “Note” + and are set apart from the normative text + with class="note", + like this:

    +

    Note, this is an informative note.

    +

    Conformant Algorithms

    +

    Requirements phrased in the imperative as part of algorithms + (such as "strip any leading space characters" + or "return false and abort these steps") + are to be interpreted with the meaning of the key word + ("must", "should", "may", etc) + used in introducing the algorithm.

    +

    Conformance requirements phrased as algorithms or specific steps + can be implemented in any manner, + so long as the end result is equivalent. + In particular, the algorithms defined in this specification + are intended to be easy to understand + and are not intended to be performant. + Implementers are encouraged to optimize.

    +
    + +

    Index

    +

    Terms defined by this specification

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Terms defined by reference

    +
      +
    • + [ECMASCRIPT] defines the following terms: +
        +
      • @@iterator +
      • ArrayBuffer +
      • CreateMethodProperty +
      • RangeError +
      • TypeError +
      • agent +
      • agent cluster +
      • bigint +
      • built-in function objects +
      • call +
      • createarrayfromlist +
      • createbuiltinfunction +
      • createdataproperty +
      • current realm +
      • data block +
      • detacharraybuffer +
      • get +
      • getmethod +
      • iscallable +
      • iterabletolist +
      • nativeerror object structure +
      • numbertorawbytes +
      • objectcreate +
      • setintegritylevel +
      • surrounding agent +
      • the number value +
      • tobigint64 +
      • toint32 +
      • tonumber +
      • tostring +
      • type +
      +
    • + [ENCODING] defines the following terms: +
        +
      • utf-8 decode without bom or fail +
      +
    • + [HTML] defines the following terms: +
        +
      • clean up after running a callback +
      • clean up after running script +
      • in parallel +
      • incumbent settings object +
      • prepare to run a callback +
      • prepare to run script +
      • queue a task +
      • settings object +
      • task source +
      +
    • + [INFRA] defines the following terms: +
        +
      • append +
      • exist +
      • is empty +
      • iterate +
      • list +
      • ordered map +
      • set +
      • size +
      +
    • + [WEBASSEMBLY] defines the following terms: +
        +
      • address +
      • const +
      • current frame +
      • custom section +
      • customsec +
      • error +
      • extern address +
      • external value +
      • externref +
      • f32 +
      • f32.const +
      • f64 +
      • f64.const +
      • func +
      • func_alloc +
      • func_invoke +
      • func_type +
      • funcref +
      • function address +
      • global +
      • global address +
      • global instance +
      • global_alloc +
      • global_read +
      • global_type +
      • global_write +
      • host function +
      • i32 +
      • i32.const +
      • i64 +
      • i64.const +
      • import +
      • imports +
      • instance_export +
      • mem +
      • mem_alloc +
      • mem_grow +
      • mem_size +
      • memaddrs +
      • memory address +
      • memory instance +
      • memory.grow +
      • module (for frame) +
      • module grammar +
      • module_decode +
      • module_exports +
      • module_imports +
      • module_instantiate +
      • module_validate +
      • ref.extern +
      • ref.func +
      • ref.null +
      • reftype +
      • sequence +
      • signed_32 +
      • signed_64 +
      • store +
      • store_init +
      • table +
      • table address +
      • table instance +
      • table type +
      • table_alloc +
      • table_grow +
      • table_read +
      • table_size +
      • table_type +
      • table_write +
      • v128 +
      • v128.const +
      • valid +
      • var +
      • webassembly module validation +
      • webassembly value +
      +
    • + [WEBIDL] defines the following terms: +
        +
      • BufferSource +
      • DOMString +
      • EnforceRange +
      • Exposed +
      • LegacyNamespace +
      • Promise +
      • USVString +
      • a new promise +
      • any +
      • associated realm +
      • boolean +
      • create a namespace object +
      • get a copy of the buffer source +
      • implements +
      • namespace object +
      • new +
      • object +
      • reject +
      • resolve +
      • sequence +
      • throw +
      • undefined +
      • unsigned long +
      • upon fulfillment +
      • upon rejection +
      +
    +

    References

    +

    Normative References

    +
    +
    [ECMASCRIPT] +
    ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/ +
    [ENCODING] +
    Anne van Kesteren. Encoding Standard. Living Standard. URL: https://encoding.spec.whatwg.org/ +
    [HTML] +
    Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/ +
    [INFRA] +
    Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/ +
    [RFC2119] +
    S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119 +
    [WEBASSEMBLY] +
    WebAssembly Core Specification. Draft. URL: https://webassembly.github.io/spec/core/ +
    [WEBIDL] +
    Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/ +
    +

    IDL Index

    +
    dictionary WebAssemblyInstantiatedSource {
    +    required Module module;
    +    required Instance instance;
    +};
    +
    +[Exposed=(Window,Worker,Worklet)]
    +namespace WebAssembly {
    +    boolean validate(BufferSource bytes);
    +    Promise<Module> compile(BufferSource bytes);
    +
    +    Promise<WebAssemblyInstantiatedSource> instantiate(
    +        BufferSource bytes, optional object importObject);
    +
    +    Promise<Instance> instantiate(
    +        Module moduleObject, optional object importObject);
    +};
    +
    +enum ImportExportKind {
    +  "function",
    +  "table",
    +  "memory",
    +  "global"
    +};
    +
    +dictionary ModuleExportDescriptor {
    +  required USVString name;
    +  required ImportExportKind kind;
    +  // Note: Other fields such as signature may be added in the future.
    +};
    +
    +dictionary ModuleImportDescriptor {
    +  required USVString module;
    +  required USVString name;
    +  required ImportExportKind kind;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Module {
    +  constructor(BufferSource bytes);
    +  static sequence<ModuleExportDescriptor> exports(Module moduleObject);
    +  static sequence<ModuleImportDescriptor> imports(Module moduleObject);
    +  static sequence<ArrayBuffer> customSections(Module moduleObject, DOMString sectionName);
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Instance {
    +  constructor(Module module, optional object importObject);
    +  readonly attribute object exports;
    +};
    +
    +dictionary MemoryDescriptor {
    +  required [EnforceRange] unsigned long initial;
    +  [EnforceRange] unsigned long maximum;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Memory {
    +  constructor(MemoryDescriptor descriptor);
    +  unsigned long grow([EnforceRange] unsigned long delta);
    +  readonly attribute ArrayBuffer buffer;
    +};
    +
    +enum TableKind {
    +  "externref",
    +  "anyfunc",
    +  // Note: More values may be added in future iterations,
    +  // e.g., typed function references, typed GC references
    +};
    +
    +dictionary TableDescriptor {
    +  required TableKind element;
    +  required [EnforceRange] unsigned long initial;
    +  [EnforceRange] unsigned long maximum;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Table {
    +  constructor(TableDescriptor descriptor, optional any value);
    +  unsigned long grow([EnforceRange] unsigned long delta, optional any value);
    +  any get([EnforceRange] unsigned long index);
    +  undefined set([EnforceRange] unsigned long index, optional any value);
    +  readonly attribute unsigned long length;
    +};
    +
    +enum ValueType {
    +  "i32",
    +  "i64",
    +  "f32",
    +  "f64",
    +  "v128",
    +  "externref",
    +  "anyfunc",
    +};
    +
    +dictionary GlobalDescriptor {
    +  required ValueType value;
    +  boolean mutable = false;
    +};
    +
    +[LegacyNamespace=WebAssembly, Exposed=(Window,Worker,Worklet)]
    +interface Global {
    +  constructor(GlobalDescriptor descriptor, optional any v);
    +  any valueOf();
    +  attribute any value;
    +};
    +
    +
    +

    Issues Index

    +
    +
    + A failed allocation of a large table or memory may either result in + + In a future revision, we may reconsider more reliable and recoverable errors for allocations of large amounts of memory. +

    See Issue 879 for further discussion.

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web-api/index.html b/web-api/index.html new file mode 100644 index 00000000..c183660c --- /dev/null +++ b/web-api/index.html @@ -0,0 +1,1146 @@ + + + + + WebAssembly Web API + + + + + + + + + + + + + + +
    +

    +

    WebAssembly Web API

    +

    Editor’s Draft,

    +
    + More details about this document +
    +
    +
    This version: +
    https://webassembly.github.io/spec/web-api/ +
    Latest published version: +
    https://www.w3.org/TR/wasm-web-api-2/ +
    Editor: +
    Ms2ger (Igalia) +
    Issue Tracking: +
    GitHub Issues +
    +
    +
    +
    + +
    +
    +
    +

    Abstract

    +

    This document describes the integration of WebAssembly with the broader web platform.

    + This is part of a collection of related documents: +the Core WebAssembly Specification, +the WebAssembly JS Interface, +and the WebAssembly Web API. +
    +

    Status of this document

    +
    +

    This is a public copy of the editors’ draft. + It is provided for discussion only and may change at any moment. + Its publication here does not imply endorsement of its contents by W3C. + Don’t cite this document other than as work in progress.

    +

    GitHub Issues are preferred for discussion of this specification. + All issues and comments are archived.

    +

    This document was produced by the WebAssembly Working Group.

    +

    This document was produced by a group operating under + the W3C Patent Policy. + W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; + that page also includes instructions for disclosing a patent. + An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

    +

    This document is governed by the 2 November 2021 W3C Process Document.

    +

    +
    +
    + +
    +

    This document builds off of the WebAssembly specification [WEBASSEMBLY] and the WebAssembly JavaScript embedding [WASMJS].

    +

    1. Streaming Module Compilation and Instantiation

    +
    [Exposed=(Window,Worker)]
    +partial namespace WebAssembly {
    +  Promise<Module> compileStreaming(Promise<Response> source);
    +  Promise<WebAssemblyInstantiatedSource> instantiateStreaming(
    +      Promise<Response> source, optional object importObject);
    +};
    +
    +
    The compileStreaming(source) method, when invoked, returns the result of compiling a potential WebAssembly response with source.
    +
    + The instantiateStreaming(source, importObject) method, when invoked, performs the following steps: +
      +
    1. +

      Let promiseOfModule be the result of compiling a potential WebAssembly response with source.

      +
    2. +

      Return the result of instantiating the promise of a module promiseOfModule with imports importObject.

      +
    +
    +
    + To compile a potential WebAssembly response with a promise of a Response source, perform the following steps: +

    Note: This algorithm accepts a Response object, or a + promise for one, and compiles and instantiates the resulting bytes of the response. This compilation + can be performed in the background and in a streaming manner. If the Response is not CORS-same-origin, does not represent an ok status, or does not match the `application/wasm` MIME type, the returned promise will be rejected with a TypeError; if + compilation or instantiation fails, the returned promise will be rejected with a CompileError or other relevant error type, depending on the cause of failure.

    +
      +
    1. +

      Let returnValue be a new promise

      +
    2. +

      Upon fulfillment of source with value unwrappedSource:

      +
        +
      1. +

        Let response be unwrappedSource’s response.

        +
      2. +

        Let mimeType be the result of extracting a MIME type from response’s header list.

        +
      3. +

        If mimeType is not `application/wasm`, reject returnValue with a TypeError and abort these substeps.

        +

        Note: extra parameters are not allowed, including the empty `application/wasm;`.

        +
      4. +

        If response is not CORS-same-origin, reject returnValue with a TypeError and abort these substeps.

        +
      5. +

        If response’s status is not an ok status, reject returnValue with a TypeError and abort these substeps.

        +
      6. +

        consume response’s body as an ArrayBuffer, and let bodyPromise be the result.

        +

        Note: Although it is specified here that the response is consumed entirely before compilation proceeds, that is purely for ease of specification; implementations are likely to instead perform processing in a streaming fashion. The difference is unobservable, and thus the simpler model is specified.

        +
      7. +

        Upon fulfillment of bodyPromise with value bodyArrayBuffer:

        +
          +
        1. +

          Let stableBytes be a copy of the bytes held by the buffer bodyArrayBuffer.

          +
        2. +

          Asynchronously compile the WebAssembly module stableBytes using the networking task source and resolve returnValue with the result.

          +
        +
      8. +

        Upon rejection of bodyPromise with reason reason:

        +
          +
        1. +

          Reject returnValue with reason.

          +
        +
      +
    3. +

      Upon rejection of source with reason reason:

      +
        +
      1. +

        Reject returnValue with reason.

        +
      +
    4. +

      Return returnValue.

      +
    +
    +

    2. Serialization

    +

    Web user agents must augment the Module interface with the [Serializable] extended attribute.

    +

    The serialization steps, given value, serialized, and forStorage, are:

    +
      +
    1. +

      If forStorage is true, throw a "DataCloneError" DOMException

      +
    2. +

      Set serialized.[[Bytes]] to the sub-serialization of value.[[Bytes]].

      +
    3. +

      Set serialized.[[AgentCluster]] to the current Realm's corresponding agent cluster.

      +
    +

    The deserialization steps, given serialized and value, are:

    +
      +
    1. +

      Let bytes be the sub-deserialization of serialized.[[Bytes]].

      +
    2. +

      Set value.[[Bytes]] to bytes.

      +
    3. +

      If targetRealm’s corresponding agent cluster is not serialized.[[AgentCluster]], then throw a "DataCloneError" DOMException.

      +
    4. +

      Compile a WebAssembly module from bytes and set value.[[Module]] to the result.

      +
    +

    Engines should attempt to share/reuse internal compiled code when performing +a structured serialization, although in corner cases like CPU upgrade or browser +update, this might not be possible and full recompilation may be necessary.

    +

    Note: The semantics of a structured serialization is as-if the binary source, from which the Module was compiled, is serialized, then deserialized, and recompiled into the target realm. +Given the above engine optimizations, structured serialization provides developers +explicit control over both compiled-code caching and cross-window/worker code +sharing.

    +

    3. Developer-Facing Display Conventions

    +

    This section is non-normative.

    +

    Browsers, JavaScript engines, and offline tools have common ways of referring to +JavaScript artifacts and language constructs. For example, locations in +JavaScript source code are printed in stack traces or error messages, and are +represented naturally as decimal-format lines and columns in text files. Names +of functions and variables are taken directly from the sources. Therefore (for +example) even though the exact format of implementation-dependent stack trace +strings does not always match, the locations are easily understandable and the +same across browsers.

    +

    To achieve the same goal of a common representations for WebAssembly constructs, the +following conventions are adopted.

    +

    A WebAssembly location is a reference to a particular instruction in the binary, and may be +displayed by a browser or engine in similar contexts as JavaScript source locations. +It has the following format:

    +

    ${url}:wasm-function[${funcIndex}]:${pcOffset}

    +

    Where

    +
      +
    • +

      ${url} is the URL associated with the module, if applicable (see notes).

      +
    • +

      ${funcIndex} is the function index relative to the module.

      +
    • +

      ${pcOffset} is the offset in the module binary of the first byte of the instruction, printed in hexadecimal with lower-case digits, with a leading 0x prefix.

      +
    +

    Notes:

    +
      +
    • +

      The URL field may be interpreted differently depending on the +context. When the response-based +instantiation API is used in a +browser, the associated URL should be used; or when the ArrayBuffer-based instantiation API is used, the browser should represent +the location of the API call. This kind of instantiation is analogous to +executing JavaScript using eval; therefore if the browser has an existing +method to represent the location of the eval call it can use a similar +one for WebAssembly.instantiate. For example if the browser uses foo.js line 10 > eval or eval at bar (foo.js:10:3) for eval, it could +use foo.js line 10 > WebAssembly.instantiate or WebAssembly.instantiate at bar (foo.js:10:3), respectively. +Offline tools may use a filename instead.

      +
    • +

      Using hexadecimal for module offsets matches common conventions in native tools +such as objdump (where addresses are printed in hex) and makes them visually +distinct from JavaScript line numbers. Other numbers are represented in decimal.

      +
    +

    While the "name" property of an Exported Function instance +is specified by the JS API, synthesized function names are also +displayed in other contexts like call stacks in debuggers and string representations +of stack traces. +If a WebAssembly module contains a name section, +these names should be used to synthesize a function name as follows:

    +
      +
    • +

      If a function name subsection is present, the displayed name should be ${module_name}.${function_name} or ${function_name}, depending on whether the module name is present.

      +
    • +

      Otherwise, the output can be context-dependent:

      +
        +
      • +

        If the function name is shown alongside its location in a stack trace, then just the module name (if present) or an empty string can be used (because the function index is already in the location).

        +
      • +

        Otherwise, ${module_name}.wasm-function[${funcIndex}] or wasm-function[${funcIndex}] should be used to convey the function index.

        +
      +
    +

    Note that this document does not specify the full format of strings such as +stack frame representations; this allows engines to continue using their +existing formats for JavaScript (which existing code may already be depending +on) while still printing WebAssembly frames in a format consistent with +JavaScript.

    +

    4. Media-type Registration

    +

    This section will be submitted to the Internet Engineering Steering Group (IESG) for +review, approval, and registration with IANA.

    +

    application/wasm

    +
    +
    Type Name: +
    application +
    Subtype Name: +
    wasm +
    Required Parameters: +
    None +
    Optional Parameters: +
    None +
    Encoding Considerations: +
    binary +
    Security Considerations: +
    +

    WebAssembly is a standard, a safe, portable, low-level code format. The + security considerations associated with executing WebAssembly code are + described in https://www.w3.org/TR/wasm-core/#security-considerations.

    +

    The WebAssembly format includes no integrity or privacy protection. If + such protection is needed it must be provided externally, e.g., through + the use of HTTPS.

    +
    Interoperability Considerations: +
    See WebAssembly Core Conformance
    https://www.w3.org/TR/wasm-core/#conformance +
    Published specification: +
    https://www.w3.org/TR/wasm-core-1/ + https://www.w3.org/TR/wasm-js-api-1/ + https://www.w3.org/TR/wasm-web-api-1/ +
    Application Usage: +
    The application/wasm media type is intended for use as the type used to + describe WebAssembly files when sent over HTTP to be executed by browsers, + which is a common scenario. Additionally, the type is used by several + WebAssembly runtimes that take advantage of the safety and portability + while targeting efficient execution and compact representation. +
    Fragment Identifier Considerations: +
    None +
    Restrictions on usage: +
    None +
    Provisional Registrations: +
    N/A +
    Additional information: +
    +
    +
    Deprecated alias names for this type: +
    None +
    Magic number(s): +
    0x00 0x61 0x73 0x6D +
    File extension(s): +
    .wasm +
    Macintosh file type code(s): +
    None +
    Object Identifier(s) or OID(s): +
    None +
    +
    Intended usage: +
    Common +
    Other Information & Comments: +
    Common +
    Contact Person: +
    +
    +
    Contact Name: +
    Eric Prud’hommeaux +
    Contact Email Address: +
    eric@w3.org +
    Author/Change Controller: +
    W3C +
    +
    +
    +
    +

    Conformance

    +

    Document conventions

    +

    Conformance requirements are expressed + with a combination of descriptive assertions + and RFC 2119 terminology. + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” + in the normative parts of this document + are to be interpreted as described in RFC 2119. + However, for readability, + these words do not appear in all uppercase letters in this specification.

    +

    All of the text of this specification is normative + except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

    +

    Examples in this specification are introduced with the words “for example” + or are set apart from the normative text + with class="example", + like this:

    +
    + +

    This is an example of an informative example.

    +
    +

    Informative notes begin with the word “Note” + and are set apart from the normative text + with class="note", + like this:

    +

    Note, this is an informative note.

    +

    Conformant Algorithms

    +

    Requirements phrased in the imperative as part of algorithms + (such as "strip any leading space characters" + or "return false and abort these steps") + are to be interpreted with the meaning of the key word + ("must", "should", "may", etc) + used in introducing the algorithm.

    +

    Conformance requirements phrased as algorithms or specific steps + can be implemented in any manner, + so long as the end result is equivalent. + In particular, the algorithms defined in this specification + are intended to be easy to understand + and are not intended to be performant. + Implementers are encouraged to optimize.

    +
    + +

    Index

    +

    Terms defined by this specification

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Terms defined by reference

    +
      +
    • + [ECMA-262] defines the following terms: +
        +
      • ArrayBuffer +
      • TypeError +
      • agent cluster +
      • current realm +
      +
    • + [FETCH] defines the following terms: +
        +
      • Response +
      • consume body +
      • extracting a mime type +
      • header list +
      • ok status +
      • response +
      • status +
      +
    • + [HTML] defines the following terms: +
        +
      • Serializable +
      • cors-same-origin +
      • deserialization steps +
      • networking task source +
      • serialization steps +
      • sub-deserialization +
      • sub-serialization +
      +
    • + [WASMJS] defines the following terms: +
        +
      • CompileError +
      • Module +
      • WebAssembly +
      • WebAssemblyInstantiatedSource +
      • asynchronously compile a webassembly module +
      • compile a webassembly module +
      • exported function +
      • instantiate +
      • instantiate a promise of a module +
      +
    • + [WEBASSEMBLY] defines the following terms: +
        +
      • function index +
      • name section +
      +
    • + [WEBIDL] defines the following terms: +
        +
      • DOMException +
      • DataCloneError +
      • Exposed +
      • Promise +
      • a new promise +
      • get a copy of the buffer source +
      • object +
      • reject +
      • resolve +
      • upon fulfillment +
      • upon rejection +
      +
    +

    References

    +

    Normative References

    +
    +
    [ECMA-262] +
    ECMAScript® Language Specification. Current Editor's Draft. URL: https://tc39.github.io/ecma262 +
    [FETCH] +
    Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/ +
    [HTML] +
    Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/ +
    [RFC2119] +
    S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119 +
    [WASMJS] +
    WebAssembly JS Integration Specification. Draft. URL: https://webassembly.github.io/spec/js-api/ +
    [WEBASSEMBLY] +
    WebAssembly Core Specification. Draft. URL: https://webassembly.github.io/spec/core/ +
    [WEBIDL] +
    Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/ +
    +

    IDL Index

    +
    [Exposed=(Window,Worker)]
    +partial namespace WebAssembly {
    +  Promise<Module> compileStreaming(Promise<Response> source);
    +  Promise<WebAssemblyInstantiatedSource> instantiateStreaming(
    +      Promise<Response> source, optional object importObject);
    +};
    +
    +
    + + + + + \ No newline at end of file From bb6fbcf37e3348d01e3b98070c8b5b2b5553a79d Mon Sep 17 00:00:00 2001 From: wingo Date: Wed, 22 Jun 2022 08:50:33 +0000 Subject: [PATCH 02/14] deploy: f9024a25e6a44aa5967c0eb6878b4bedeefc49c9 --- core/.buildinfo | 2 +- core/_download/WebAssembly.pdf | Bin 1510762 -> 1510954 bytes core/_static/documentation_options.js | 2 +- core/appendix/algorithm.html | 2 +- core/appendix/changes.html | 2 +- core/appendix/custom.html | 2 +- core/appendix/embedding.html | 2 +- core/appendix/implementation.html | 2 +- core/appendix/index-instructions.html | 2 +- core/appendix/index-rules.html | 2 +- core/appendix/index-types.html | 2 +- core/appendix/index.html | 2 +- core/appendix/properties.html | 2 +- core/bikeshed/index.html | 24 ++++++++++++------------ core/binary/conventions.html | 2 +- core/binary/index.html | 2 +- core/binary/instructions.html | 2 +- core/binary/modules.html | 2 +- core/binary/types.html | 2 +- core/binary/values.html | 2 +- core/exec/conventions.html | 2 +- core/exec/index.html | 2 +- core/exec/instructions.html | 2 +- core/exec/modules.html | 2 +- core/exec/numerics.html | 2 +- core/exec/runtime.html | 2 +- core/genindex.html | 2 +- core/index.html | 4 ++-- core/intro/index.html | 2 +- core/intro/introduction.html | 4 ++-- core/intro/overview.html | 2 +- core/search.html | 2 +- core/searchindex.js | 2 +- core/syntax/conventions.html | 2 +- core/syntax/index.html | 2 +- core/syntax/instructions.html | 2 +- core/syntax/modules.html | 2 +- core/syntax/types.html | 2 +- core/syntax/values.html | 2 +- core/text/conventions.html | 2 +- core/text/index.html | 2 +- core/text/instructions.html | 2 +- core/text/lexical.html | 2 +- core/text/modules.html | 2 +- core/text/types.html | 2 +- core/text/values.html | 2 +- core/valid/conventions.html | 2 +- core/valid/index.html | 2 +- core/valid/instructions.html | 2 +- core/valid/modules.html | 2 +- core/valid/types.html | 2 +- js-api/index.html | 8 ++++---- web-api/index.html | 8 ++++---- 53 files changed, 71 insertions(+), 71 deletions(-) diff --git a/core/.buildinfo b/core/.buildinfo index 1fca0ce5..e3d3ba39 100644 --- a/core/.buildinfo +++ b/core/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: e756ba4ccf1084d9440b0a7f56b4bd2c +config: 35bc79e2573cdd9f369a6d61009be146 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/core/_download/WebAssembly.pdf b/core/_download/WebAssembly.pdf index 821bee21855f57db8f9b8a6e18761d9855047bcc..89a970f9082b9f869e6f4d77bf1eaa5bfae0c7c4 100644 GIT binary patch delta 556290 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

    `#pdqyFL<(q=ig5- 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 OtQjZMs3Wmn3=<~UM;S0uRu%8Pi8(7awYLQR} zO^hB7v(4)(ham<_HaGaLW$Wa=FBWEOvE7Z$hz4}B0jHA*@r3<;gKGrSJ6P+kfz6lI z(0*bTB12v0{SlNXyd0}-(RK+2ff_k*5|*t!s`+COugJoHw2bn{l}_*yKu0ELrseY( z`VH5H7*M8v6MO%eaLo6$v-jRH7Y^h-#`b@U=u#A|_pe~>c846$O*h*5Q*&)BG2>Cg zIXZ2+LO2D>v#|VPRoJ{4@yl)5U;Fv@%he;NB4d%BoD6>GEj;+`W7%DMlP!XPk7mAX zlUNGaNk^gCmSO4Ja^ItkzfK66Fu?n9&p)Q52h0tB8>J_&69nB}7XecQU*)=-Cjm7l z-~b~>f_qK)N=dXD;oY(B%By;CsxikiLMId5q&NYLFm@br=S*C~Ok$xJPxWgc2oj#a zcS7V7F#R#IW&!|!l!RKXrotH;ubTI+! zjXY{52$N>=&I3AvSr{T+boqr3udzAhZIvd<&f!(z5m4(gE)rox<5GV>m3P@dN+2zN z2Gx1U;6TSNul*PEu;b&fpPQoI1Ca8sO&Gar>LFc%VYWb|>A?z<8Gtz*i-?Q81zX16 z*y3aFXBey7S@7)!x8bWO_!f-2NB}!VgyY_(bP>>`I9q?`f}C5=SH8?|37)yQ!+-1( za#PUv2nmc1Stttta+EM&)NgM6)Z1i^NISBxc#(pj8LⅆWU@)D)-q-G1n8{)qlKkK?C%EjXA~j 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%0DjfvJfX+D4vZ9 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�Fr;$Do;G!8zPT`E(_H>O*AXr_QUE% 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%0A)NFNoK6b-+2341cL| z3ZhiyzXKb^h%|}Lx9zfMuVUCV)m~Y~-v_G;kW;f^Jwy2vJwy6E_6!~VFYOts4*x#H zVu~1})^s`l%|LdnF0S4C0B(|MMOl;OZ8)yRctJhIe8{km%`#luLqB zvKZ8p{uB=Im^xYXQxtzv6z#yyD-v?JjY$Wc|#w+xcN<2P(Gth?`|B zkG9R+!8Y6dJ~oR0DHrA=$6v*%W`9Va!D4i$4m`Xa0q~}ApK9ABm2O!%MoM{26ZXB1 zWK<&DrOil1xM<7i#d8`@Hl87Y4(3hS@-xOWcIh61=GfT`Rs@9K*MDpVM}o#fhTpy; zOjf@kDZQ4DNr9S5^68dh)lk~n(DT&5REQ`xWK1gzOv|MAo0&mpWA{*Xym>nc^pH%l z=7M}-1LPR!%T>1}hcz0{(0~vH;f`kr4=25`*;VL-BUVALi|kfc=Gyd(PW<=IuQk^{T~WFiyjJPZe(+Ga%Ev{3YSdp2nn~B*9dqDfAySm z=)rD(e*4|c>$f+*-Y{49g(G}h-3pp~f4CJYseb_m-OdHoNr58}PBXilRKou<)40-cS*^>egmG2UmJ57- zXC4YiOj&Pl6-@|8meS-~Kk?cRIlrz`s%ZRc=kY!*y0&!~5N;fbnRuvV%U}rV40=foF4(Dx!s$%^4%PQk}9` zDSxzFF!lu}bf8_*#2Zjq*QW+gwKz zqk`z1bqnk*4rc+T9<)71QrT;t*Cz&AEJX?zK)T@g>=o!C&(OS`e-hZcVKRF+*c{vx ztETqN^|HKot*PVCb<`?BRF-us_Pz%G1Iux$e#F$km-fWYl}?Y?iI6E!vO+?T@_K6q zx`th;@r}EXKU>r6R{py5Tq>$7eGKSun)XU;KDBm2Q#D82tfZl+t%=#yc!7XIgPtp) zVuh|d%LQi%OyId3f0*zBeP>AwdEs3vjD-qdI|l9o?&`|hFFx}s!E*)u+Tw0y@Bw(0 z)>LhScjy~NV=34g{GfgZa1z6ovht=^EsP&zYt~N0*lh`7ms-OP3OeIltV(cmuzP|d z%d&&U&a^jd6lib6fkxQdV3}}tcde?^6r5E$@>b>YptFL3e|ul$9gmlg^FdaX?ZvWa z3*Y2;3>S-f>B%Uo&Ncbp27l2=R;#)7Dof`qzI?-2F#TMSoaV42@j-`vzfYxfEOOdTX)H9&-dp!)=JlIA)R#B-_&fJT;}dyXjymoT@RYo<9|zzIW* z^kHOsv5@a4%p)Tz%?7s2dGhi)y~;?Ir{T`u93X}>f7m&Djd?e*KH#`cPgS{}5gq<{ zN>em2Yd|E|(I`ot^<%ZxZXP!<^}hLJBR{CJlWA>zhtOF7&VcjXzOP7wKCn#ysQ^b@ z2R6kq3H}%kx~b^6cD9wuXgoFG*Dnq*0Q7YLtxwUP9iu-D>0ckCpHDec1+$FlKeUvu zuGN;nf5riY3CjP-F{*1hS8{{>Xf4}%|$^U;EdfT`Obji}sVDU3p{0tU9 zgT)iUq6@8j?Q>BRNC-A|sC=_|tIR|ylVZWSnaKp^2+c(CC_Qu?mM6jdG z%}!vh`du?upTb-{#_SPeH4(hmvZbl&)`eK5_Tf>PCgpmwGHX+{E+jr*8XF(4%o4j9 ze;a}QaSEXyvdX3fHtcvK5xRZD1_ShRft>xa7_iwSow0gQ zeNW)lgs;k^XmJQzGZM^GS3dp4+(t0koI5*4#kBkMz0C_cKH7Z9L)mGt%eD5|U*mf_ z&t`wU4aDgbOk>&pz$lm8cV!G+fBMPhUOf(aWAn&Z8o*KA#bj>WJ&%1bcDBi8`|RqJ zR0=>(^{Bq7ch&Mp?pzGO*=0bfuM4ot+H6f@H36H^o<*2qhSp9K(1GYUNo&>M%8~%4 z@vt^gzQV)&HZ05~7bzwe4^cfAFlG*ix7gti$-#_WEeRnBmuII2hyB|oe+08UQsIol zrc_i7F0g$-li`>KgqC7y&8ophSH1v^&93ayw{Qmno#S&%E7~S6&H17Ruizy464;sR z1a!xV(DuHP85974X8Y{GB_62}h;{}k0XMKidwvu_^KA6g^5nhubX}DQ)h-_Mq*u8T z0Z0L-q5L@!KyaWUnuRYAxI>J`VSC;dYwx0ESJbn=0b_{? zJL^b!>XCW^(FA8oD={g@Sad`hkHDx1w<8%9LcyJbM4lhmVz()?-n5T+YqtZZ4Pbsm z*n>$_Vqy0P!2;A|?}8megh+#1$jmuW)$TC94LfH zUUju8Ku%+Nh=iq8e~!Ao%%Co-L-J+lbm?T=Oz}kE$&?b=0g)oGw>LHT_{kD>UqV{71z2F`h%c{v<>5yW-huf|{Hoq~yx*}xLlXB@XkmZ!5 zG{|x{e=yzXBp70Fj^8dsA%7|+u^LTTgv0mf!-JHK=?~i?$BWLDFL5k^y~gK zW-emkXwXpzO-#;d0g4yjOGKf|-C(=dMQee_TI_`+iuQP!K2!Oqgu7=&TW_Awv*?qP z$Q+wzaYBs4PBMhdqiFGyxPp;=P~5AA%D~83e=H_BDW-oofVX)jcyBj?0o_j%a(PZh zkZgdN`w^KqXs$>q$MEk-q57|LayTWXY0S2_-3udXE{-cP*ek_FRCLkp(I*p6Xsw5q z-A3DakkQ#RCprT~0p4=W&q%V4V|!ud^vzWLL7M*-N!nBWu|;Ph_Q#i3mEpG|^I*&? ze=Ezv8j+_1JHdQUm!}4uPL)$Ml@rwQne_fl&-C%Y1rnvh7MsO6Tx)6bNcK-wjL9Pv zWBakU!?mCPX9f}#|5$7j@!gDaS(g`d0%p#ish;z>tWKX~b?GsyW0x8D@4)OXSCkxp zTy{`XMioPnq+IOR2Oo_WuskDq{(Rv;f0o$-5ph~LPyp_f{iSYzwUU zfxGsh^jBN6>@m5P{$p=Eu))(E92i$!$0CeeYfPBHPmfw`>?sv4xX=X_TnC$@z^G1( z$(k#3rz%YOp7J*egaWqrHhotw%Z?Al)(llXGEL)fSe$0+f=x>wlJ8H_&l87aOq3Bl zc%CjWx;TF30Jz7_j$Shjeh$usSA@5s@stF3ch(=-nEaC&l7pf0A>wsA2c9I~TGz1~ z{$R#T3Q6=(vcgy%aR`Y0H?ivIpqD}K2rQSeCkZbo7=7ng=uu3o&E9v_w_cJ?GSi19 z%=E#@Ol1(ZCPJbJYP-L_-(DmTm&ES~Gk+RV5vG?vS5-Q@%ARIG8~Dy8t5=>)^)rngv`CM3sc|Joqs9bAN!n z%gqrH@E9X1nR!x@U;#J2Xnem865)t(N$V&Hg&0#VN??t(^YN1e7m>g?{G*(#^0aCV z_Ua9EUuOsh5!EOb)J^?n2$3rxj8w{S<{q~RA>r~mbn@Mu#Nii|w2NC0dE`U`;2;^4y0he|d5su4ZnPf#eaetRS8JUTg zO}5l9Ib0@r_Fvx=5e~87qIPPTTrb*2^Ht;C6!zAh}suEIU!b5!O!>k4dsjI+Fo|X<7HK(ko-E!$@pxffEj3F=X(s zp@s6ZArKc}fT1Kv3*CmH;eU~ykU~;6i1H;5ML`_r3mi^Y#dvT13lx*4)~4>k`68{r zLo|#SW8qsrT#{F%JIji3zMAx|2@G>9wl4I44K$O2p|V13~9+4je*E zP%z))xKSQ}XDPOn2Y=(tX${6{IA1wb&&w)xw+!UW9k)(H;;B!3zswO>dv(JH>8)F? z4TeN$9W!%6opMO)s(S&E94XeIG`TVsCUt6i3JXx7daZXJh;oLJ+z>hpltQ)gI;Zwa zc)x6nlZ6leI8Um|YIDOX=GLVtw7Z_crUI5&x+mDCygS_z5`R+G1Oqr*LL^3RbqOL^ z!x1HmIa1$m9QY*IFIp~s;Ma=GxAAYf`F+nlxxl@vq(UuQj{;ZFxc zuoX+lXS|ln5XtSL)osj)wV=G%VIW0Hs#YM|BM8VtGk?IR9jJv4qG5&E%G2(KQp#Kt z+A_1996|)7N43?`q3J35MV5jzkbE<=o#hNeitWg?%u`6MJ7iv&dG61=YP`voJzstW zq*;H64{wd>XFAioK3Eqq)wTJZ1V z;1qBo#N%MP0|pvl#*UO_h#M1+W0_+WkUpq@#J&R3CssgDp?E-8D2`&F=7=lA8Qs`` z>#21ZBIGcsBat+_k!K}!c5Y?1unMo;ry+IV9R@;?7bJBymvZ$8F9Cj+qV)(s0S%Yq z^$0$HO^I`rmzTi5{Zx+H{K?b9R1U!?K0BG?g4u~z@Ik3l*wry#@4hIdvx(Gus7N8Q zU+g^7S6K2ZiJe2kbh1UDo|ClIQ%D}*R!}KK5u`Bblsu4P-Mz8n#{z<5N}Yz{d1OI9 zi|F}gs_4b-?)c;OpDYZ?$%Fo5vGeaFoFYOmy!0W|E@lDapo^Lf!e6hG`OvJGj~o(x0cBLzZN#F25bKZ`EOm9(K81Wx8n8)kPDYl2nZ>cn*s^2e{xDG+(9N^ zAAfxK{_){I4+P}K5s4H95jhe@Mf26e=dUNv|pv`(!U&0tgXO`!(XnY*QI;%qZLnyHnIdp zm>3Y#iTAt3lvS}9(updB!Nt`x$&(c>$<~Dxs_d$k?2=VlrU#W@f48u9OGNP@ri-x}ab#+RmizVG2Ew2|Od_FceIRCt(QQ*Wag$x;nt7fSg^MvSYBXh1BWYMP z^*Hp)%q9%rF;W+Xu$D*8nM@f!m~ucZ4#?N!@HCoCCE@YovwNJy%LxZ0=K02&|HVPe zuA1z>WqFqDT-d+*e_KnBa(CTd*yq+P_F7>HXZc!*^qdtvkEFRHBY(yJ`rW?upvcBw zNyZtAL7a(3UqGYfE#krrT#hIF^95Ce0C5y!_1u8H6f6u(K5UOl)DOGh62e1z# zNLO6=3ji2=w@P;)wd1gw(h9F~U=*bgQMEnG@2+-_Zi^xv308~EAtKAGRSR9lk>a#o zu$STiA-eU*)POB`NXTC(!9zi$5tlVET<}=;v_jGT%!=T2R{8WLE1$<<+Azdw53KjA zS-SH}+u$Dpf3$!sPik|QJ%DB|P1odbl*_3E9tA5&ZUtpS30(@rc$3dvRt|l2Sc_o* zqYk2s@V35)*Fyih2a+0TA^&Vdo}dU0NZ#?te?{OuA$7+H!73D~W|6g(brcH_ zg*5FN^&AT@q_zH^r2(JKmhP`V2H#%D3eY}aa*h@B8CFn6MnVF?&@-eUH9tcNZYkg@ zX~Y$za65(r{XvFuyZ zKOxk$6E`G)G0bvqHH(=vy30B1nd5tkSlaL7O%K(GN540i_@ zVa(mWpwMQx5FmG~1jJEBI+4RU!VQg{a5B52lf_WnjY$4LvIY`oJNbVPiOA+5pMp;1 zfBue)kW2+37t~SeTpgub2@!~6d;6c^c&4BQltb+S zC&*wCF%8ZIeTH}e0K#46dy*Fpiz()&A6M|g1;Kt(*?$pSvHq`cMZX7cWR2ED1%il! zEIgWWjfgVMT!r0duJS(5H-21o#USMue^)-+*m$wLW#Ys9A#t4LPHmRsVp0*fOh=6p zM!nx|tJSYBlUaUdEW_HB%RS${N>`g*HvD#`QM3JJ=Z;#&$$I24hf*YPZO$jVTb*xa zNj@wIL5kLPuyY$1gked|k>Pb1CLVzfQj4Cx$8Lc(dw<#5!z&rx5UPd=t{qp<0 zisD2i5Ke6lh z!-`N9b!#7eHgyaMWTzNZ_HQ`Yq8b>mv%^4#uy$NIv;cH=`=t#UcVL5h*WQv@?$VKX zk`yi<1F9ZaI-)8D$ynMiR!oaJdrB`5g_Cn^#!uOuXojRBq2bwE1$l3)f832Sg9y`a z6zzBD651LIsQsF~*1_NnoXQonnDkC{Zcuuc6RKmdI^?wYs3g%L#|mAS$Dc=fzAeJJ zT_IxHw0Z~SRj={`y4&KSdFpFVOa;pxahVhd6I#U-J(T=!6jSFC1C*Lr(zlGKfeaCJ zq6#C`Y)CH0IUcf&Cg&YLe{SDTT|j05wxPq3yngC$V^!o-x5&k6=koGh6l50Tax8b< zQ^k3u;=McwosOVGti(^U(o+ig0wYUI*gxRw@3x0t%2)mEWT7Hnde)#A$3kf6&moec8E0<&y2{wP(#f&{?&hd-45`xni`!&0{eT%C#p~%Jedeyd zO=d~FO56vEu>0jZ_hYqQPSfkVe7u(! z76~eU`z*TX{n^9$kujoJ+qH_r|6I#x31947e48srmvloYL4tq)f*~w&1;w-30_4{H z(c~^2Wzuf8f^Y2^?X~Bx;J)HXoFYkJL-&XaxWE5{yS24+AQ~&nhLI3z^TZudD*F?I z2sfM69k=F))9qR2i-92h@!c$$rmJ;DhO#nRxk6Oa&25>bhXiBX|1qF128!n;eYq7Z zlE^5g?Fxyc<`Dz63b!bvc8Zh{(Xh1Ylt<5$4u_A&<7MUGu)4TuC^ZOcq9KupTj}l1 z_czHh`M#SpLt_0?Wj~i27YWe=07QhB?-vP00q>VJ7zxjRUu+}41jCE1;g?BAw~`dT zmSJUOjR?bl9al{{la_?oX8&m#%ETZFCzYrafTY-uRk z$ET_%!>59Ath1bl!=m5d$P_2lG6n zLiA*VS-WNS54NdJb-Cam$Ieujx0vc?vsyv?K{f|WLsX7W|F8}2B5QD5U8rJ42HM-2 z==EZM(-1RZwtdpde$@SVnYim|Vqw*%0RwEc%)iU2kFi^EWjoym_j}fG+cob73KuhV z`-pr6e2&xgbhL6Gr|VTRn>>RLTJ*2(a$)9i>6ur_o^5samT{P?#tS}>JQU@R7`GrB_dLgEf2 zdOZiFFlbx*TIY{e`Svn_26|X?=CN6S$u4arU8;8iyqMUcYg5FF*SR5w3R6k%%G@YbiF9~_Z3PCG#GC25`@Kh z%RspzohK?P58NR;i8o1G3K-@8G6_cfq-W z1w+bVd|~e=$hkB4I20K7|9^^Ndl*ry6LS=Yzg$aesekY+c@%_e^C+qjrEuClM>D-$qA;sLV z24@$~U$uKOffHEej}E`qKH4CqHy2y4s6Zm4m`*OxNO2u7BuSREzm|B8BPv8NEL=6Q zS2^KSh$~u_V(FLFfQWv)Op)Mz6yGni~Uzex>{ zy&l9?m!H{S3@7VL&P%2)k<`4(^+Yo$BM(jZ(Eyv^qD!XpRa^_!Fe>9t)R^uBtr=zI zp@H$issVxI2N~<=%=~deq za++7*br^@N)9mh~w7>8sPgbUDb$4Nk4W-C*6 z5i48-@u6Zf5GLD82o$``vs?1PkQmYbb6T>F5GVve?Ls2!77`|MC&V{lZ1Z!pn8#s~ zq}yO1DAFeP$$z|LOyImCcgS5hNqO(e4!juK&u`Ik5nZ>du_2Sd03msXgdiib-m?B%_6}8uhQoMR|cNfjC+d&qW>507{s~EJ!;RMqu9-!04fzEml zCUi8fHOnlvmknihts1Oy)er*slyFxKSsI12G{b=Bq<@U3Yz5=cL=jfEcnj!Qq-V=M zo^;nB0cT+bi1EzuglVT(I|9dgb0~n1YqWs1tl+>QJp><_8xgUgDAfq9D*-yiw;{pc z_17gPGlB%yUd$bkvoSBAQrXNYB#v~jtL4OI1|H@`@Y;n z%jji0Lw^#e(g_QNgydqMIB8Wwz2vo5%uKSy}elYDOLMx01b%DPdi zx+T)76@~PMN}aY=jzg?z6WHD+*1AJtt(y~Ty?=4-$%wUh0%GkdG>-eB>xBkGuMt4* zzanZ^@>D`Q2vxTHx>0=#q00N>9RSK(}bfm@zX;GTeu39y8-Mmjg3f)>XWx+eoJ z`hThCn(5roObH{Zbnfg|+m1~FjowHH4`5r3MbHJPjd<4DJ5VuF<`aBKI-hWMU+WVJ zAW4bulj(dKPs7>tn=e#O3hw?gjc>MCKU7AvbD3Bz9%p`g1pxTF?b8asFd5b3tLy#b%*kzsFxSrckCU^w|~U% zPpC4g^t{u1*4pKWP%s@X+KW)CYY|G}=vtptjryOL zJSi{nlpro3dEMOE2fM0-Ao0TrL1p!Qa5!BqQ(Ls|O98l#sLmuI7>+aLNJ4LC(QP!( z_G+%8N%G_S7KoN||1mUddo=>VF zk0sx4&*!s}b)vl7_Rw@B0I4{trlXTJQMq#3Ni?0rAG;b-W)SnX$91OWkbly^G}dxV zT8Ss+On$~YOelWUmf_;fTdKq*9kCgLBtH-eg%5?^TXTd<4Rc8P6 z?^cgdMMLWMS_#DEPBBKe*=q$+6y_PqF+i7giwY zOovL0?x^^6UF|nfZp?SC+y|`<~kVJZ;kneWmv(jkx#U65u?f6g4XlM&YaAJ^=R3;bKiK2-z8Zph1i>u_r=;tvNqxABt%_d!3 z&L77Us`TjmE}dl`G2^pof1a(DuiU%u(|J1Gr0y4ruzT@^`?1N_+45#Rp1{?v-CG~A zz+V^dOzk^(l$WPsN+(!OD1{@)_?L_C&%U`h`~8f7$T%TRM2>_}$!u}<;TN1-!TaAQ z7%`)hhvKM3!UaK8Nq9X^&d+{2!{sAmMBqs=qLSG&BuUorLF>);f4h_;;8&`ga=xDC zh4|$orZ|BTbN4o)SXG z+Wo$|K3YH}YPXZ1e*^7r_n40fT)$gFinOdw$yZL0>3qHdM5YZrP6)?HQ35X%GOPqP z?b7z^cZBTJ;nW=w2&9k_YNy7mtE@Nnv2ypu^*T*^DviR&a(l^xKv_w)@T4^a=YEZfgmClBPe>mG|AFGUPxyieppJ{|8 zjTx+$Rj5QFVib^OOyKg<+LBw5g-MkHh~1`00EdnAn_=WzPh_hmskC;#AWfpu~;I_U~~$W0{cN~Fj&msekf(r+JKv-8q zg&ZVhLzWXUD-}dCW}g5tUINJG3Xo2ZW-Zr%Pc1cxNo}L1_8Oef(c4~#?bpxQ4ZVhN6@kqyIwb|o^3X&l0>?LVowKde`-WBsU7vUrz;^&bsfM(a_YeF z1agK1h(hu}+)8dwe7H^5>6?C%On`4;YOza@5u#I~x_!7o*i=5a)qOp((=RY+q)lgBXhvV+$=t6!^=K5rT(|WYiIIUG1rm%MuEzmVAAPZ@FF?mc3nUFI zH7dJZf0#vFScg@Gf^brI;aI!~b$x!cu7gLkXsn*_BPO_+5GbX6?Mc9(obQJG>BJF| zCN+DKeek#pkgP~x(IZOAMm;%U#31;WOdua_Gt;;0l_iT0P%gW=($$!k^YkTDmVx#R zBFa}`R>XZ=2`Vw+Eopf-<8lDrtr1s&Anw8)f5bZ^8@8yYbqZ(CzOgxX1m=Kx_hBr> z=vBm-7`Ui+@nwX`7)XOvsa4d3_TtO?#bvs7uYs-=Kht^YItcKafCvM1+@t&C;WnGu z`ti0@SX4sy$oVUHp`a4%%Y-Qg4yGz&t;d4c-c5%ZA#H2VolC0%xWRvk;bDx+mRX)n zf9Kg>MGI-$SpeQRo!_@BcnfMCQqMgFd`E#ePh(~Rc4)MyK{FCK2?RUYW$QW)fm@_k zWiha7bObp~8e)hN``j=DEu?WDwR`fBfZ$jNcR~bWhS*u^ft`(%hx81- zyN;O|0Cqr$zbX_TkPb0(wkho~U0e6MDGHbM)_+*j5|`UfSNgk+Cil~MWz|*+Ht>A7 z5`nq{R4tFYTGwXiGB`6D#}Owkk(Yp|psh0M`0*|shG}qsCgv~1N%Mlc-WBz4 zXMbL_OtDpkdv|4)yYdie;`xwPr^{3zj75YmH=7J_w>n?GO#8`MqzKU|XV|t0JmMjP zq|ndK_Ml2n3)k80Ft71t+5H_5;9ACN$5+nlgkVQ}W$-||yTXPQMO2Wk0G`yf4efTlu3I-1H%*-n8<7A*JR6t|-%-+wC- z**U=J4*nL(ZK+1fo_%pBhc(+15p^S_`oPp22AnPj11R~{MO+`pTs*{zL0U$L%_;bA z5FGA@gm4^N{1xO5d9>2e`yK2 z4^frgy^kYEG9XAnfTco!?nN>7w0|w@ZScU+0X+9@@GRC^(QpmjV*Wa8{!zbD@nw7f zU9(^061r#;mY;tSnGzMR2AXAs74frxNp*NpI32TWFPt*kZmK{wV$^4G|Bjdr&SkV^ zy3jI#?fwxlZeY4&+FHSLOgM(}n3R~TiF~>l!>2o~1EqIG&HsXcbr3fWjei6+y1i-} zSWjxDgGj3m5~cvm);a4_=k=3QF`!N<_C&dOce5w(V2vngMCY!jui^v`_b60*lyfXL z>`)kLqW=t&K5dQbTgJn61}kutN3DMAIqaoi0=t*cIqY4ei`6=Nd81z2eyzeH2zkJu zmx(7@up~7(>}bY~N%t&ThJVc?xPGnSUzY!kX=<@f>$+dfJus+keBX4}9FPPv-=alW z&U}X$SqQtNU)|zvdNbyGx2Em>o8MpYYO76`>(k1JKC-;oYhqX-$@C%1)%HsS#nX@S zH()i!Mi);p4~5bgal*U7+Dy9I)1M)eZfp6d-G{2}6m46{SJ@xgCV#7%M|D&6_8=9= zx5Z64Ud#UKDx#T2+Aobu?z$mAWD)#_TW77okr7B@al~$TXE^E@^zzSsp8p*1)u+MN z!nRV;pr94NA3ZBR9<+P_(6VCniyksp|5VEfZA#1$@%`r=Wg4w>A0l^b9|YXz@Z|#x z?5bF2+`A+`Fef>1)PE|TcekL$ScV%62nH|JiwGM-?H2%1wmd8FIQeW~YF82b_-XO~ z_X|GZenIDK`+sx4z#P3_;2Xoe77X;B1%qaZ6>JUcFR`+Pt9=^d2ad3}QJDODDbjz{ z>V)sB7G4-Gyq2Py&>66gNcc}2g9`<3Aoa!N{u>bVvnZShlw-ei_jd**Lqs+fhRqW$ zK&Tg?w3oI1@YGyK51p-RUw{)aTs8j+f&Jc{JnD}SME|4!upB~4j1tO=;SS>(`G)bo zZl`x+`{nVH|0`_^kBQ`F^v$0|^qJikTl5WS{{|gls+SRH1QWN0LL{`~sxmpcY}(-9jP4k}8boEbf=?%w=NM{_v-{fH9b?C66(Yc-OJ5pFbmUXFge z`^OzE#!U&Q7SA;jeoCuHTlhom;19(N*Td{8;B(!u>>WL#c>%e<04^3GT31@AlDMzW$D};Cx|-)%R(XP^w0Pe`u!iYtDyRG`ET< zEk@Ho;K1{H7~6cdpS8^@Bh=cf%<9?X`R4q)N5dvYo36vA#4;AJkrs?~p?1U?bvTE9 zq_oazkmERuSnbbYGyo6Eks)>p_YfgWf*@51qJby3#}TskKl z#7`OE%%p>iNls+NfAPg*AuP121ra4emRXZ;(}ZglfhaMwM@DI!1`(DpCk}uAs*oUq z6Yx`c!hibVG(yTPVA{scXw(eS0v?SzQ7szExAl1iSXmxn2Ex+;GtsT4j0^Cv2pUG5 z()lI-Y5;^IOo$pFV!aU&yn-{AjS(^M7QBvk)SY?W6v{B&f222rDeG8)brz_7IY4lP zyfr#RPQVaj_^;20wngUH1lAHNU4b0+LMG@EpkqT}(B)Cky>=RLaefeE>RP!MfU5=9 z;CwiBsdEuW-FmYt0Ka0uxyyd&7`>TtMaTcXd=?_T4Y(G2Cc0z;x=!SDoBtNWWN-#3 zh7k;cILq}+e-C;+qw)|VJkbJ}C816fg>(D+X8yd)QiUT`DC7VVgcf?dev2g{*W=l8 zxycJi{BFjN&+CW7H$8rwNIKqZ&*lVVNg*ZxHoWp+r0Zuh*(=K0b6rk~;l5~m8utJ(fxBIx*Sn}S>upT7XGxeeu~T?I5isiydz2tR1XvY*Gq0mRkb~(Je92*f$0{J;sre;z zyjU;xe~a02@xL7G{YGdE46$^^-C)2Wb5kXv4$Shp6~kf0aL{1Cn@Ba@^;1(j9|DUz zKB2_r=6<$3rKXc5Sr0S2p4aD=_9mHh#8ipn7RQ}E`k(pd^+VR`CLGjksYsAlxLuXV`fcmRMdkCbDI=%GStve+XB*>O*nJP-hf6Mkgt0G9bs+xGUnJ6~)^VDV&B!8*=J>pup{yqiCQz4}=SDPA; zw^q$H@Tp#nBG?s5A*g%Jj|Lj=jyM7O`p(SsC(u6@?9ApGg*^7Fm1K}D9CaVrU zf3zXFV4P^9NBFaH+i}h256#oHi zJS`Y2t&hbKV`I8bIb2ah8c<`ud)3dfN)zQu?-mEKQ6!^gG z@dO;CWX*Vp8!^g8Xb75xB54+04zIqMoKm_^d}dTO#%G?pr4nX2(M|5Pqkhxp7n=F8 z(98gOzFmf)nHOEG#?buTgy*RV-Z+~*phJDzJC|anv{hNg4N@ILJ;tg91eBc;e<18` zGv{O6lo9C;0j#k&ws7O{q;>D!3pj<7=}O!yV}w@O?vTAQoTYY;#=rrDi8f+kzWF8v zm4fn7syN}BT`l3WRoL@(hB=(g=i4@W1E=tMZ*O_r-Vnrr6v0WD97-elyD2mxV>Re| z;a++4Rl9a#b7F<9Iu5(%<=*Ece<60&FKUM3tsRiIDoiJIdor0?C;Ed` z$gtU&PiKeZ1sgI-oJ>}ce+e#3R(cRkZLk2*UWGvn)=PiT(B%}Iyn>{vdzX9h{C8XaJ z-HD^SQr6GQWn16`Mk`s7?_z(Bw$q{aN>eJ_PbzKfLgZ~ys#Uh~e+^bT{xndPjoVvf zAik9hjA+Sz>qRz9(y6418q=Z1HiT<=gQN-ua56%H^*WT-FO&*}sQ2PKhAC~KMs0{v zD58Iqf*{D*_3CS=Rh_$lm@k~C*~{`YeXO4;gafQ5ttWLGZ(A)B3{=I!$g5V@6G-;i z;(W!<*bM${3(XU|`2FQr<>m4GUH&T9oUOj#@7 zTD!2cPoWU^Lm4{uWDiW|Rc_sFRkJwl&5=For9WwSTtN_7e{J>sxq)txfHZ6Y8ktTy zWcoHyt7(C87*gQgF2ln6oG6_&7r*r;EY8yIMA7a#R14Pm{j5&xjEtsR5c8n%Ui8x&_w@DZL!+*o)3IMIv=L?hF z0YcrVt$0bIpsw{0=BY%1i4Kdk26*5b@-N+2#1Wj_f475`r8++;9JaB@>frCX@`XN2 z-nOThrU_A}uxFkCma3j^sAi{Yk`S`KIRN$YD2}oVe9EnAaV(`<8=-=zYV|mc5mMkn zWzwj!S8G)9WHZ;1Wo%L3gV$J|r;REo8^Z!Ur1JqH_>jc<@Km76pSv1_@{GE0qh0W{ zVa)q%e>Y6%gW#^MxzditrgFKU=sd$+VIPax+s+}ER`m^Hf=bAfTwF=Im%vr){)qH} z6(u`tKSy9isoX7b6>QkK0;v203>R)Sk)3iYljK%sq6%(glZ+M;tgFCEKw(@t&Lhj2 zB3;fjUmBp=mOTgbRg$?2SBB3_*3SbJQ~qTve=(rgO8}~Up+=+&HT(;~m1|nhxt6zb zVLx^7m9M7N&NI;k?o=en72_{~u4DaFQSYaIX_-~D@^B4jr3hv6(#G^vlPd5`MzJ`l zV&Wz6bgb$Y^{Ts@pJJa)0Bo$z2Xj$iF)1$XU0gHtaR-&INVdQ*c_lD$QuV+tsQgYp ze^D-lDLZUHl<~ajxpG4Uj2NHK;T7(fDc-t)AF8)NFvI)51;P>|RJ|m`I~@mG$`(jb zs+X+fw%u=M4|{x42PIw95Q>`~_z1GN)#Lt-aOZ-j{a?YbtO;DeVW8Ekp)U6A2L2$1 z1Y+`n!KCS5YqvmRD_ELus;hbM+H+Dpf9v7~+Ue7@vxGX&Iu>|)X$o%-AA%Pg!MENo zbzrr<_g-#i#z7Tq-7&_Yr2dT4@Q13~FvQ{EzGTzbUgnL>1Qg$ybCwfcf30;U zoI^)FaC9biz#D&>M&<->IQM!wt!1i<_gCm9kj84_-?Z*bieRh+ZsK%5*1L@z>h;4atB#d;&oF{8m-}a4bsvDQ1QaRh zvjX_6r<)o4x!-LoqXPwuDwLr)kretT@I@iR3Qb!?CGGDw!)QsF z6z2YCx1-e(`3;ogNL+9D+I02X=+M zF4x!DW0TxSt9JWmAEVMO4f8lEV8pxIY@N?>mF;=4OT?Kv zpx>?B)0QlOjL|Y5=2uG_cp*`!>HRkm~@#9_y`Gu|7=Y-F~61h>%3G#9>qgF)Wbb zECjL3D2V;A+GbXDgqSV|;u!~OayAm4QC`P0!yTT%$8K@CvMOXm1kB+7Nx;ky;O;?W z4_)$hBm;X#3fTr_+=nvYM*(FprxZ|Tv>6A=DxA42h>`-zI8{x5PzJq>0cApjNS1TD z0m?w%8A%IeA{4U|u*~vHurCqIjH6S4WmipD#$*C4gSB7jQLs!R1z##y#<;W1?8jYp z=fDe3f43J{9ntJvX%I~#T(YO=m=ztLVxfU$Z%7whv%JZ1&CYB%u3?0IcOV_ESuUw6 zu34fC#x-#FtTTLn9M^0w>2XZ~rFaNz!0={RQ(TV(YtVHopjrI?5{)xp0cE@ZG@9RZ z-2`Y{nc;w@ijYfBKoiGRMIi~e?B8UKGsc{8#`yI8YIEtFIDF-oNJtWkBfIut{4@J&vA(LsQ@PIw=5yj^SUlA_hKIJ+ zi@Qcghl3n{nUP{PLzkp5fa7!Auq!cABQ1rB|fdG zO0*&c5?o`?`-mO}l3B$YCSlf?hh8Bu;{Xn0aFaLe7kL2PUfSFw!X@isYo<>ErfnM8k_ribMTTK`$GlfDmFwIDEl7BO4dx1b zsmWK7=nCYE;&J2)w8oU{LYY*H5F?x=5V6#JD>4LAJzO3*1$p$6d@jM4w|(jwr71Gy z&{D2ZJDcnKJSmL74KuHoISBpdnE)o5&gmqGYA4KBRY%G!sn(Y!inwc0pYxVphF-##vo=ughBUGXVey(9^*tF$g zLp~6fPHfd4pAX^-KLz?ssM9V}-G}4NersDL7Fv zq&1LJ)ZO}&*+zzpXSS?PP%dZ+nmq$Ov<>d^x_6zH9E3>UCv7!(3>XFC99W~J+cp7i&e zu4pQ;p7kuk;%8E{)>NS|NQ|au{qeERwtALbjke!*M24%A0MyVpoR88IU z=Tp^yk5)D06%ExQFo3Lo65(DILpln9>xb2sy3;@L)S0z$;~2aS!$}w8xL_YYna7E|&|cN!Pp_QO&F5hmB6HiJlIkb# zq@V2h=w~E|*{G)6-yJvFCaMwDGl%S=Ndb#&QViqs1GG|r~>C_9wmVSX3Yq0DAIepWW{UAqT1e#hct{D*r^>eq%e~9I3OEN^Qc!`xi#sF4ouiwf##Y+>g75)o%G=HTWE43}j^f ztn#;is5ZV>64X=EgKxM$lzDUc-|VV5Kly*lb?ksbm(e}+_MZqv48o-mxPN73X5a3* z&I&Rtwmvy5ADEbavght?U)9+*Cq^J;_heBUAv6QoSC_!xwnQl$d{PR>ZlT^2F*q{X zCM0E$$Xmyl;ns#Qk>{FxWj|#8p{5a1)f3BbDu$7#y~hrjG)R>Pb#x+s z-;uW}@cvpiI(1siqfTl~>#3&diG36iSTZc0GErEs|J>YX4u?P5KiR$29E;xe{B*lK zP*yClluoZVd0ls9$T}~qIjBZB=1Ao~!0G{27xzWui@dXK_M1Jl{UIw3ZLf=m6bH5a zKEllWD47-nQApO!Lbp6o=Aj1+Yj0tHx&Q1h=8+{!=YmxEyOjcB*=nC`z1u%|Q#^UQ z+(ssvQy?b=n|@eqx0zdo?LJIaKO|wdsTe=y@?QYp;qArt*N4q=z5BG>R^D+_eH*&q zh{{ecLyx}qor9E-;<#Dx3Eecn+(qhOKK$i&0ruo{H_KnZWFeQM*<5ln{o&CMy_V_f zVQwGb=(+B81!0bGA;8Rzfs!Z!!l} zRv&i_NQXOZH$^pG=0$Bt)}(*MIs?tNf#?YM#@O=P!VR?xg4_B2u*=M9I^DJt+MUCZm!8r;)m{e8&s!lgvmA>mePnp) zq->@E{XLX$RN3ugzj5iAVb&n z6`$;YJd20Ae*!F+BdLG+J?h{6A_9^FGAWsnNlBcD4ljNeAlNaJdc=@YA_|&gw+JwY zcqE>;zh?2nN?;6p20=GqTQs@T>oZahl%^ae@Ra_>qlF>31ev{A7nSJ497B@uR;6l- zhvpA(9;721tc&y!m4aQNtbO$R5e${Uzixn$Udg7emrz7l4?2G=K1Dpa7nJ}b6T`3} zD4k=Cp&lm@AOTAPQZ^owsl*=F9n0*6UG9dti-76V2t(kGQteu@UmG*I!7TVG(w%$f z2LlV~?wHl{5KS_KK_A0Qv#R(2FB^yr22n^9)8-KliXj$8?7To1Ba)*LCK~Kk7*!t+ z2M1~nreq89u&aM6`^CuYF|UBw&frOc6sTMT&VZ&C(17N(M=Ss9U>l5s(X5Z=Ej8*; z4x9$&J+N;h&N|>_$#QKjzGmx30K0#iDVc`FrH#AmmI())HHF)GJ(1mDLs<|#&)0l& zPFg`>CGI37EjH2m^zu;I{eQ?enZFfLY}$G;xFAe)>Xm;sYXdN^XV)uXGTJ`Uk#Uo) zcWLF82z35*$ZBgDN!Zdpb+*k4)<8`tc&i=YZ7tpM-G~ShffVl0%WAI`Ee=XAB#lMO z8f=nSeS;Y*OEsdsy);JfV_s**%2PHfMeyv}O`?I1b?GiScg$VQ{jiAuO2Miov~!}G z%2MEPjt_rCBf&bk*;eJ=Z`Mf5uhveikKTJA+A|97`(1hga@Sga%#wmGzx9_bbi%X8 zgFA0L0nA*}9z}jQ?}VS7v`<)t~hX(YY}tUt_YyQM*x{Sd-aIn9Gs&A0(WK{ zAR8yNSX23Ds;pD0Y=fee81u#ji$RAB#&{QEJI#Lyrv!=MOJ8m7dV-MqjTL1xQ6vG% zL~!O09wRkxNs9=yd=g%0H8}y&Yl@S{J5*52LFufstcGjN( zJe7aepYces_hzRz2HXe}NOXS4n7ILm1tJYF(aMbiBUjh?*1J2f*LD_0nGf-uw##wbb%iPej}g;%YTde}Gu7FUiEQCuNG_Ed23$7uzoza25zbHWzX>cHsJ|9PWyE79P!PHZEo!MbSvqOLS z^uZoY@QLBU$$4I@g$at-jJ&2(>}bsI8|`RAY~AIi_r=Gnl%&UP1&0DHATt3N#Y6&5{>n~$eXdKg(CuQ?hSl~ zV1P(p=rsrF@z;Ephq9Tu)~|8g9nCYOSO{?nSLX?p+#oW%&uR{|PeQ8nX7YdbI~qXz zbO&KCyYe~RrJGGPA$X5N78x+x&0Y_r#P&E$6A_5{G|~6Eu_AJ7bOc76GUvtmL2b9i z&=7!Y+6C~xpUMzUyS_m1%`6~kQCa=<^Xn$Ur{B!T7ZO|ZxI={hzz;n}I(7pa; zM2A;gX&9s8;PLpxK~2I7YK%zb|{o69ynl(`>}rmOCY9%9VW`@swj=-XRAtYi#5oHiG~ai`B& zTfkHJBvq9Fm{Ad15_!&&46EH5+``W8zCVpkq;1%`#tsOC!88x-K$L$S8rXqJ*e^N6 zLP618y=Q+G_$dIA<}(66?J;~s^>W6lz0q^>1_P3AUG7k&CHuT-R1x3bvWH!x-fMHHAqHWNIsj@ z;0_u#S>r45``lX$*|xw<;?Qg<1CMot!9;PBrE&# znfG5OL41EKxY2EJqeZ_}UQZ8g1js|80%c4C>(>5t$ERuW*m+No2yRG-yK1+((?A0@ z(0yy;cQvtLNrEDW5~ce@$W2~nFXrT|TcnIWuwZH?dxavoHU5dbLWn6i4>1MoBE%Gi zc3n)t04l#=NFgwrDWm`iltP{`(7eDiaGu~oaYTPe|21d*9*m@k_AYpv8ZoM74J)Yq zRO8Er6_Ga87n&S`xPyBlq;v^*!@chNzerZxndkCE)d!I7m!J*~vUFTz*lhV2g7>#0dx-A^RXtYkyz?L{)t&O)p+(wMISa5@zDd9=bLLsWK}m0-5R zCdx{zZwQZ~@bwGDM|9r!h=0xq`)yHe`_X?x=rT=oAsp94%tXsO6nWu3>YPuw$2;G6 zD6*iDW@5nyun957X#LdKoi<%`xr8bJ+2wULRDNx0i$~vbUYV^L{(}b7DJyUK$1kV< z=mw_Y6oM2Q{>Q@OO7dj+H`|P21#`g}082=X5UPgj`Y(xBV-gBwZe(+Ga%Ev{3T2nA z$_59wYn2HN3YWON3M!M{6bP59p9!RYuv}0IPmuZh(^n_YPftFa5Lhyfh+85@!l-Du zK6(2dM=QAhD#C~v9o2C1^Ak+q zdbjX6%L>4N9XweLt(zG)tb6TzQ>@4NkHY2(z3;!lHBe-jY~D$8=NsplVpF~P^aUa9 zH!xB=Ti>_`f*~~$-m06lysZ6yy}l{{*bq78cATApBG}nxhU8P3Z1RtB)-jXdNFt+{ zt{{RD;U;2865(FUdsZ$Grz~2up0ZJl>Fgpa&fEm>TLZ&N5-lJMj1Z0E(lU*+^uMGs zk2NSJKmn%(x08RysR&P|HKSpBwr=rZKx#+xdM-i{-9$&r-W6Ll5a>n^Vn-sWQ9679MD_)x$B#EhmbUSCkX zPwZpTu9EUzX*bv+u3!Up%ldh&iJa~{oH-Mhakd>=0QgvN<{5{7s2WH-7#RCFyXcKy z<6+drF%=57o_B!EdV&1c_4cv@!t+fHlg`Sas*;A>AKhiq8MrQ8mU962zuiS^7zS!K zw`N+enfI>wg&n}AWkNYn1q=w|UXF_v#o%&>r(G(kW@vKBB*4`gY40OD(NGCMF_JdB z6Ub6c*6wq>K#I_RsQpwvvMjT;hdfx8h4e=Nw!3$pjf*WC-@5Il?O;U+ImH*VHXK(ygj~HC&GZczoJVw>55x^ZKHS0JsvssoX&q5WF7epatU;X(Q`QC+j+XS*9O{ zNnRr5lhgzx?*l$Qn~L5kn8w0^)77V;NP*G>Yw99}2aytgViYl=qSixGrho$IoNbeC z0tzh?i1;_Ee6{H*q~I~Tw_uc%-AXR78%GO?1T`&_A8w68SV81*StkvszlNX${H!Ru zcbC)-AlCRv{hkkB_LksLgjf;>mm4JFf07yRsy|DC;z6gEsi(M_Y;}ODH|Z zF)G0lx}phxnEwtui^*tL`OZ2W)G(l?5S~i*%4rRYvu#GZ3^_v&CWuhJ0F;Uy^qzl8 zme)?aIKb1|Yc9JTZbTJF%hyZW8`Kp`@?lQkR#M9?oh>yQ`QbiGDEGB(t@zyUV0e{@ z0+%nRaybDz#AkH*DBuc%H1(PgqeGPnpojS)e9Dl2Sr+>ZNV}1zkTB$~RKUlU_C#RF z-YVSS)z=bJ-|7a3$tc+2e#Oq{yEm9X;jP15n0$v3yelTV?u9{ku(3mp!(Ik^c>0E2 z^S(Q_A|1%!kR4$10}UQSoYA`zElf&SNDAjuVFn1t>(*a3W}2F+O9loJac{`1HpSIo zd_#bL`U>fey<&Inl`=@|bdE-w5eIY*rr14Q4vU*g^ut+2bNMJbhkCfqvAVN4f~FWY z3WgWraC2mco=oQ;k0EqeViY7~|9+*zp3|tmd44vI<~T!A%PA1nsbVz_5SI3QziJsq zKDgU45c`A=3JAlxkVcg9uS*wtaI)MBf7#xgDb@I~vJin1M1>vBSEErJEem}X<~v${ z7Lri4kRPhSw=4_Uqe8(3CqHz*Z%7ux5W)0EiyxNX`{!@4_u=v4P!}zM2}Xc{iqk$kV^0^&7< z-lydneHJ|Y9vTchU>rb_(!TCv6s(}I^g7KCRP{9|8W}Hw_Q~m5n6LDE>j`;#8E4r< zU!Fj(GaMM*?|6(CCZ~jlh5jHiRQu^YWEfl>Y7Gx5s>Axtf-wd`(L{JLTEl05{&;A8 zXg^)WdokT@A)rYRrXx}vJod>2Eav{FK0QfWedMMVPx8)WB_#8HS!M8$C{Ywl=$>rV z{U=+kUz%wSA8r*unupB{{_f@83-A8Xli-NTqyFZp_s_dHID<4Oq`Er(&UjmV`0X;j zn!~E#Uj;^`XB^EJk{h6&igthte!8fE)&38XIxJw9p~?mmx7?=*t_hbh;Rq|2wXq4f zf0{7{CFu0+>%ZN7`}*!*cNF>^PUs|J&_zLH98Kn{yEkvc$pW7LZ4we5>&bglYBdp( z5*8`AUQS-!{r6p1jyohQ)L1qW@UPHnlEaJ6!=FkDX@@}Au+Z?@k|ta4iex=yIw-QF zNKHqpR^T-b51)PU9i>hsG9*+;C}iq*e+5GhzOZJBkZK}D&8|OLBAFirKb@+nBoU6q7Wath^^*&t!8EwkT=$3qNEfTe z{&N_HUA`#7SX33E&xa#Dya1tBfAvr+atWt^CNvgZa=9&;tD0Oj*C$}wf!Im_ODKt@ ztQojSilj#y1mQwh{>c-xL5@lLdWcou4$+>1&Ptc`t3Debl|Dxq*yYO5(6X%zTyT$= zs~%;DNEnT!3!fA}j;X?`M-{-|I)Z+#E}*xj$PqwD;woB&hiElVmcIABe;isUU~3H% z0Pf_)5UK!!6m!R-Uo|A;L+xQ7_Un18WltR6+6bWm)|Icxlr-_#GC@j=IfYMZ4!9VUf9?6A|3X2b0>_s{V z4bfN79%$(DGMvo7AnDTWe`c#Ii4Ur%BnX@W6J~1s!$|4_GR#jS0Usm*7#V(m3Sp$H z`g?5EjA}|K5NZ|^shKVLzdim$6Q&&h-W$4j694Ktn#TkJv|9@Np*X~IT8zXr8d2Wm zNzC@TfV}P+F5ii_E!Qu-oaPZqn`^nwVYE2J=zm^E7G#P#O$XdAe+U>1b1XU&*9Xb; zw0=ZgRdj=iY}M!PS*%-;z#&drl%j?>34`YmMc@oxK{&j;V*DQ8FG&)N;LdA)J}x)+ z$#OU3iYQ^C?(bJ)G9Meq;dfIMt`TO!K)7Bb++r8dHi~1Tc`|y2+`>3?h*u1P5gy%y zR~LuCEf$3uB2WH&e_4d#(IAU3nRXi%T^gCSIi$c*biLPeVGzVlm?`eWPacyfQSoh< z)EBx%z8+!Z){TzZT#|$_TIvx!6J?B)3P^w5<^w|kd6Rzn@3AixfH@|o%x~mjXiF!X zB*CA)e>t5+I{0AWP?kBy<;Xe>v2N7EAy zl_6Z(&-4h?QYii#xvExj1Swsy``hVE>fmIab1F}W5F9+u5{gHbsp;+0!@qs|TGCUSi^ zG8Q3d|6p`$EZ$I#rXkcRvrXN~JVV6dh{#y`lS0Q0QO{JXuLxiDXY3tA{cs(u1Nqd{ zQ9CpU9lg7p$%q=&N%qYbNPq>JU7^|GA&seQUN>I%e+@kV2*Dd^r%?|h1el+im5+8t zgi2g)!r%f-B-dl7D0`fi7;ObWbYukpz0C@Xqxe_F-jv_t`MFx!3zp0JUi9f0p-q7K zhe5k!vf}-T720c;Y(5d2;=HB~GtXVnuYQKXD~iADvN-hVa-mnjCZX+i0>LV%E`6b1>-&F;B?j z-#52VB=-Q#Fc-5}EC8hFj0nHw1~?`ru! zkaLB)YGHYMKz+bI33f_4jWIB=zjJzYm9CD-f4XoN^F2FRF9~o&(q)r+9aGZ#W<$Ja z*35?7K+s{-8#BZ3VR(U080+!GodfQxXKj8bc{fYLPB8G4@R)xLLVpuGhg3K!^&ttP zF{M8G)K&(*?Oz&*0`Dct{?dnyn3M-HTi&|B8IJ(>RC6l242Rx7rFq)3kXLCUF-*ba ze}|^$tZgr$SJpFKKsb&1*5VE=^BFTMR-hsJur+z3j`QWdSg6| zUuUCFBRl0DADnOL-QyF1$LUEkdaHODe`pgmlfeFlgU?#^S*tz?txD#_5v3BifR^7x z%#KA&3}mN95n=xfo~E}Dt_|or-=!l77?Xs$g1ajQS0UiUIqgk(T|PRq@5YtIZm!4A z&w0t7$H)GSC;X5ty_{Av!0$w}%A~6EX*M_oiFBZCa5d(Zn2fW*sEnCyQa8ZmfAh`o z!UTpJr|NEomSboFt|tJsYqidxz)iyOJ_@wgK{+Joom6gO)=>!rg?QYtd)?55`+H)B zM%(d!Z91b@s}lgdFhg*D`_Vd3sFj|e^5nrT^38UTvy{+?9vLia=dRJ%;EtS&@S8XR zzlqQI?IXu;>LmQ8K3e>?Nasttf8IAa2ILfO{y!ESu|pmmgg%1sO8KfXj`Ngb*ox@Z zwjzRov=)z?wH^A(NKf9vQk>*OYSp^$87Rm^{|w!+P{`~%|HiCt{5u}C5e7e+n{SL> ze0$v>Wk@8eZR-iC1Eyg_@>1ovBy~VzZg$omKC9rfKz*zNbv$Zjn2H*cf5Pm%=@(20 z>tmra`y4tyuh3aSAcjktKZnkrL+581I{U`2dn%VR=lt6Q(Ck)Y?wm){U98U8?~IA> zLURNjj>`NGBWa(X$F z-KR4fE^+}OMGM}~ll?Aj*l#ZE2?h4LCWXVqiy4Cp62h7Ym3XAPk$_o5ShLFI^36^j z;T4qdQ!cf-^fA%ifbS|Qj<%L$FzCI~pZ3P66L;Glqhlq+7z?MB3EH$|ab-=URYGgr zHhC$|C{DDM{(1kDf0^P^28(nHxHwxs+FOub_*G@q@Sv_5t^tyw3Ob+()yAuKVHicY@Z)bUGHj--W06dmd2*%2V-YvU zYgNgGvTf+B85K1|n!(R1LqZQohm6g-s=A^Fq%BCrlNA)`e9a&vkrn1gEBx?aRU-}H zGiM~!t=)$Xe{g^gK(6~E0&z|h`TiFMx6RX;p&V2bB!$rxhECH`qy$tze{yjDB5H-fwPrVjTvy~a^>Y`9 z*f%Ls^H*qghZ@pf?ti>4hKUv7>e%Mh_CbfZ^~Tx9 z%tg9ff9!1kEZN}#Q%mN;crX05>LMLFw#H-ZCJSDdR*_qhN|2}xaQ43X^dVP za6?rKb!CfFq6DR#J$1W%ZlT&_CNM+O-oRXqy2rN4ut##GF|g}R`4O0D7t5Nr%Vqh_ z{#5eu!rpGyZs{WVWy(SWdhzZl&2oF0gRwO3e<(GCuY@onF)z=;_}a9iBQOU@oNT!_ ztkoKk+#)N=4nqOUbGWe9F`Z+Rw%vvOqA|_o7wgI{!^_S6F13EuvcWPMN&%3sXa#ph z9ig~YM|jYH0CQUnb!Urhmx+-m0ao`FzGzASeL#Z0y7g)+WbhPe-lK~EtybCm%aVsB zTb`0Fz<;P+#n|e1k-f_n`=sQL?O(dxRm86(VU^UdA++w#d|dz)pr6asytZgzVPC$_ zil>sjF#No#Fi(@kj$Ee*Ev|oidVDJ3QjZv)Mml!$Tqa+TtV^1i?U9J2N=+H)m=;9q zCZ)1TO9nJb1tyE9^P*M?mtP1Y&bQ%bRiDt0G)Y7Z{@Tca_ zGg#SVWu689L_-*sOUfZUA<_>U&u(V&W+uZBfuhw%khtTi6ObV$poY?i|7d(72l-8| zOr0=7X)~j;Il(chCXw`%>})UY)AUNn3Nb|_BWHS}63#5KfOQb2;^~de@(r-l91wqP z0)IKL5zNMDc3>bAcD!-@c!$8-l)f*+9$$d~=f#Z%Wox6zn_q0#+Jq8Bu_h;FS}#f? z>_8N3^<9?OR@3gBif{S3P4sur_;-cF>Ob+UY}z^qkmTV5^Y`CcW_wwW@|ZY{y2$wy39(zdsTEF z1MX?GW278YcN)t8031q=eSX}V)Y4V_kl=LGk<42=Cn|AqP5B8aqjmH+<_LGkk-l8l zUc8ARMO-`ot_CYyXy8PC7IpQIhDxHtT6;@uAY#jFp#uvLg4~!Bc%D7jU+d|hfPYKD zoqf01*k9`;;R0cOVT)fa_hv~_Ge_e@G}x;T+d-oa9yDsq2F3`SAE2(bHqy{yxhqEm z;CjC-N0L=kFzzm>c}EB5r1uIN}kGWmxWSIq69-0H(oFboK``I(Xtdo`VQpupK#chrG@QdEg znOq#!la!fH8iu63&^PNS`-@r?))lrdgJCaLZO2QMGc59C+XUNX!TEfjPvPQJIgAwG z3w{mw_o~B9aq6r;VAlPEZBUJ{khzWrrZWZh&d#aYJcU5;*T7NAVo%awnEwW*Z`Kx< z5&j7jx6Q%{?-G}Sa1|++<<$wTe}gHdu!2lJT)jPeb#?aF83C2CM~sRbiBNj8)!Fq2 z?8Wf>t%nf{mG`Awweq+ih{^yyFTKmN-_CH`WU$pXS-_7}8k4W?v<(9L^9jfPdbwOr znDD=V`sQ&yA;K?`O>TaSvTFGz$x1WKYv%JRiJzAi?6&s^MO-j%N+b$df8}I?>^0X@ zfw8ZBuBE_crHp46gtXM=98u2Ug;K;NEcC0b5XDM+L&9$nSAmy-+|I-IufY+j9eafo zIIt2p-=?$NQVUkM7E^+R61&yc$M4MA!jKHCohO3$Q5oiJ+~AE@mSeG@20DB1&h8qnVY25+ljQsgqD1m4v|wlTbb-34@^|w4}Oe zN8x?SxQzyEDD52ktyH@1K?$p}DhUL80SYBkr3EFBG87PD7Nus9e{8M6-ZVg1sS2&S zdI-cRgT1(9El(U33c@XUg4J2|-GKiAO<~KE+P`|te%iHPLLsS+{X=l{EsD5!*x1GU zgRRsO>UOjLd{gql!OL#0PJ>}gjX@2$Kynw*^-IAE^k=HLg$T9gV)e{3n7pKCeb6ULAXL&yh$ zLQ#1KluBLth7r(HJ8h!gw7JmxMvG-9@ia^Xwgj<90kegMD-UL%vdhJDNPrSj?l+(kYJ2>v>vgtnxp+u_}fXgXEiZ*XdS>PKaa9jZZz-jPQ&p#cc>>wSC zQh|$7mX-}lRqM`8JmU3px0bj<0t=hANBdBG92^rUd@^7u?pRtzLkveldF@42OPQ{V zk)#05HW50RwupyLOMoTWoLyfQaKM$i?7;{pPXmaSe>|XAA9D#qjL5c2&TE?FBJq?k z2`5!(BkAHOEav)okC}HwE8q^E)Sf=2;bGw=3tU;ogs@ zWwCbTnjr}g4&Wc3U6mCW6cQV9)u9@yghx^C)_U(T@Gh!O)hsEtW-6N|@wxlXakF02RA}f?V*5sDg=|+gGQ?cP@ZWhX1%r>eRBZqr!sRaTW;OE{l9m#zCjWw0{6M*5=v_ z9q%Hmc_2a`R$x05NptVtj{W5a}5ubcftitA7<_G9~cGf7$0&1{9YxZtY04NX&~~pl#W3(KmN)isW0n z>k)66v5Mm@JdVUOq-4#37U{jta(4(k=2}hz$e8<|-F>z0P4yK9wa1A~^*KFnf7_~g z-zW^A>;FqO`;x75%Og*C*`N-&Y_NO;c*p7>zBFHC=(~^7rPI{>{u$~)Q_b){dLbu| zvVZlM{d+FtWY2}1WfV{t42?3etMreqG@=j@gTk6T4zD2acVi%JY zm!9*nq#?2?%kEZs1qn_#2c!S~Ihg!bb1=2fH}x00c00OX@X{B~!BOAu>isGkr-+cM zfg`M}T90wnf~cSFqRj+)9Qa%I;Q-qlO{M`4{a0Ug_oMrJw_yft{{|&S0@lKp5&j7j zx0&4u3<{UQRR}7V&*urQe_nA8GuZOis~<1EzqI)xWz@*A89i$7z8G*foY-|Zaux?4n(Sn6oif16d*APPknS!Mqp zjwt7B?|yAI=Mz3IPIW{4wY6iPmJ%p9O;JD@VVn&pV00j(xG$q>g3OqtOawBzxz11d#Ex7OFkTug#bm&7 zEaP^1N>cth>XBrvU&V4Ngiuqy_P2=NT#x*b!gh)!ku z{&GqbB-Zhq@>7yfFRN`{9hw}J&0_}GIIc~CAREMg` zPsW+c0_}CeAY#~5CXY5r2rew8i}ks&du99jU^iPA)pkhje;1@KvlJBBdY@04WK81D zDQ+jNO?tsLhru3M)3^FjHJq$?2MZTAn8G&#GRkc z8XF~C$Omn0uzb(f{&_lV&l?OmAYXxs22X4)X%VZ|3#zZM}CL+NB`aT*sIy|K!>P>3hbhw=&GV!u~J++;Lr1Q{r z3E`CWxBEP?S3;OdJD*)K9ov7}d$0_=h0sn~QwwU?FP#goC@UQhKNS=q;-%n~j}(?3 z2y3w6P+C&~9hTvNa=_6g)h?_XW6QJ6lBvb@1QiO{e-=-qqL_4a8ggAYi#OhmL=3&% zzRVi?7N%Qw7ctQTZ|}#1ah44HMsuPQHS(K)RB#H`rJTYc14Ac1?20c-0g>5_ZvctC zvXAHbobC4*81Eb%r$gyd`hYnc8--Ap{?~_do9>HhD%l84m{3nM#VMT#2%K?WCl5qB z*jGsLe}ZuL{(vb?P_Z}$fe!|3;G2-FNS;^$n3unf51x;Z@T??n?ngHIBO2At?cc1j;r1t zv#K_dz|WCTd}XcG?(Imkzl#dfEKV%}^L8}WImj(*CfP$1ujg&Us`>er@ef0{YUx%E z4dGLnH%1O}0&|!NR$2xVtwK;_SGp_L2louB&9hVO7C!Hr;@Gaz6lLyS7?+3rGW#Xa#U zj*Ic_l>fG55I74biE3xZd#Zt7TP%S^e~xZFA32R_V+3^{y4ACNziz<4(=M_P?|vAS zyb7xF7~=n+>k%u}elyjQ$kawl12#&|n^ znw21$S6x~%d;um(uriM&5(~fqc^nPCGp?)p88Ica%XS!NP8jRj6t+VWPDb8kf0>=; z99m;p?=fjF2S1-UgVwz`s&l!{oiv)eV_wfuqZHsQpCsGTdXT)cx(^ukdlRQ`klXt5 z$&?2`W0hbiWYLN*@aHD{vu%e_4U+f1Y3k^F@;MSo!|zv!dl6!^(GGos~~d(TaWo zE8l*7Rz_M0oO{Kw0ESSpa@D{2=vzROF62Y1a6nuuEO@wVbG2+SWs^_U)leUFjhfE4 z!XOR6xeG0jg%4Ykfu!j6==}V-0@0|g^nQ;EYZeY9@vfCK=1h{5Pk7pxe=+%$8JpL% zVNCRTRH#V{J%AYOP~ra$f}omBbCp4^#q4P(9Dx4QK>OyGg%bO-`PnNosU|!Tp|4~< zLBI-at=Xm!UmqH=c_d>1dDqh&rZD0`5~d4o_qlp$PB#uL{wH$!z9@@kHj#5lbjpW` ze4FF3NHx^LACSlyRNLGJf0|g$5FMm(){hX6OXHMI)%t*9=&;Eiwx-i0=uAJK)1Zlc zp3fyJCW&N0^j|SbQ2{TC4WR6ldZCoI|8Za2-c_5eaQ^zTtr@)NdZA@@JG*rXHA3%f zgT)gmQWDxl)13`0ENNS+Ps9_H{mIQEpo*otHfk|97j>JY?LQYQ&GRucg}%+RX2fEQtsTtT!J^I99<<3h z(8f{?DT0kd=?L6(Cjx^+(I#}*vF$kGrfzrDPwLXP11*bB)|?2i4J9<5G2IXe0pev| z&mOlJX=@99`V`N|e=DY7tm!zkgld+6@P(372Wum-CARG11eRI1>SU&bpXdO&;IH-Khxz#i^4~!csACf>72Bf^@fy>qYXm-Ny#a zyV}0B%~wB*W2gC;ZyMKgcv+NV5-*GB#~Mpw8dfa>gVW;rf0aYI;5bUNP{qA&IcL3(;kN`$Jmrz5Kt5NVli`UCb70=c!VPQ=*otdk2aRIp8o4&>r+}Aq zGH3`7D~D|De-0+HjcauJu5#~CEBwZU*H`@x;SsE^&btF7JHJ(b9hN12oo;oQ)K(}y z$oTI6L(Nl>P{N=de@64v{|C6O(NMHNLjm(Nb~7A&*IlZzLglXCDgb=P%=KFpfz1N@ zc=|Tchm`_^@Y*yMZi{`9*+SFZ(fSDygzM>=J66U3e`ZV)sy%=ULOV0~<+|-gZu4yK z3&$Hsg07ow>o@M}Hy=YMb=U@HzfyH*vaaRsFBzHZ9roBV-(Jq0?l5icYd!x;O^1&M z*Rhn4qf0SiF0SM|*|9R>*fa=r!W)esBu937$ z3@@7Se^GDlL!$F?Ul2FK=~Nu?;m@ zYs@Zu+8|;Nm;y(9v;z*Ed?i4qjN>ge0b!MQt}gyFuKu%0E)ay7jfuk?^X$~ty1r{D z{k)9(`#hA(1c;!!ykL`W8xC4EcVPq6T%2Bpe>qYJo*jyK7;^NkP4vz89?GLqvFFf$%bOLUJjmE=J5!UEjOtn&` zuWX5!(B#ii@+ZTJUyLOY(%zTEBkx(>Ptc=8IldcXiNO1S`;}S0l81!rai~{JZ zWx9CdaE3=VZ_Q!#sf5ygK=8i->UIRoml6I66t_n63DXOI)hXvNgN=WF`@_}s+pGUx zF`%0!EHNBNltg7FnLb>-`EUYqdC`TS^Ij!X^wneNP{D7~fK zqXzbEBM<$;biH;RWZ4p=jl8z?^hrE zE`f)@KkoR~u>+WZ5t3^7z8)@sAN7=VSrzwxWy7*XJsOV1?<`m3Jh7(?)S5!1Owk4f z_Z#~g`pA|PA^6b>VL&&jj5Gq5X*EI!h734b3viKjMA=1kLTEy@bvjYIE1vDzCZogv ztVn|g?#7Zj$$@|#CLo_w0gQQBd1@zR{W+Tzh?XXE&x`4ztdOazTcH(A# zuNEsmk&nvt!!2qHKC}RpfcF7?;0!n?M%vof)(U!ya)fwP`2g4`pud~=53f)FGW_l0 zt`3%;9`oa)qX>BeVN6of=)ig)plHGvYbLzj$!PHFwhcWGYtJlCYPqN{a*XO9@!vED z_3+Ule4PeR*uHO?7js0N19UM9K3aBvgr!`MUTm(%Fiy8bnJy&tNf)wZLo1Rqu}8{m zMnKMpJsNmE#9|0hVjG8}y<~){Ovr)#_|A088Z1t5zKzZC_R0aWEMb`(;BzDjxZ1OQ zKCpcoZA$8F)4%|4KpL^dZE*wWULNDOhPH?JqTL=>gZxxXe+8!oAzD~7`oktk0E$2IC0wzSF z6m$<#R`BQ!q>P{!%u;xvhsSyTkOS}C z{W5=C<`vw!q9melNV#4%OO-Wfrqp4x2sDS#98u*4G_Pw(^@WG#4u{szJcQ9-6@hbW ziR?718uXAhio9q>4C@2n!!5;b)5=o~z<`4@J#x5z9O7Vv56`qq{#laa zVccuJ4(>f%g--Jj*?te9cY6qPn1j%iSSDkf_02nojZB~K$@J~MOyBgNnB9gFel4lK zI>?6gK{lcHruyt#OZ5+P^!kugUtc)YS6{;Aogm)5&}mPquP&PEtISy(B7APcv#}<} z#}hg=dR*dQ?lU5P9G>}f=-5g?2JSIFG;5Q_X30sNNj8an{hH>a@!X^a+btM&G(egm z>Kzxq+MK33^1vi^g3*b|L71@^Fmc$s6_-wUb{C>w9Ld7uo$uQ6DtBuA2y&#(I|%Sn z8DHfqk7;Wq5~ph7iO`=0pGo9$a!2YX6vb^!VR=FK)fjzWxC4if?(m# z#(7jj!&z8=A8Qu%1V*RM8RVjw=pCu_8acXDZ&J>N76EnYs!!G6HmPAzlUY&T*90!} zx?bp;G^Q(GY!oJQAu&4c@|@vaWw5Pj!kF(S!P=!1qd&Wn=aUaKT-7aXOXMF`PKCih zO|eKhcLhdV;D7mYQNb|tx4yIt7oNUiUNd+yp9hP7&-~z1vHIZT$6d9vsvo^wtjk$d z({wZDwe)yf`vVP~U@7*y0q7|ixZj}9i;5utBT3g3(8(t%y-A@7j6|%YAFaT6m<4@q z(ZUi^9-8&SYX&>QjvcOPz5n?!@~J z{I6esG&!>k!w_rRU9at)8n5Z*f{=w~qc_DvF`q0^)N|b3r?FP3avZ*EdY5qPi@O0y zSwRF3ByRE{i3_5FW}!imGYkqrU*B~jYICz+)W;~1Uzz&e!TM_O9R|2B^afhnr9?DV zqM+8_94GYjCk7k}ypA%v(~c;+@kQ$$nSDVaZsF(3>0 z-nXHNAc}D<>nO%S?}8}izFCz1bJa}kGceBUAV~5aO6s|F&Dsf0IJkBkl8}t>SO;d@ zt(_kjHO3%8&b9cbc|+i2<)59D?qNT?F4vXQ4Y8I9y*L@kkF*tugat7Rg zji8E%?yz~tA*NDlh=silj81PeHhNrCz-}LFaD;aZuKbM7xWW(%86B6s(os(hgJ$07 zl_lmfppx-x7bPCpq*9qK>fr1Hq7K8(;V|sDI04Vnk8Dev(47qx^*$da^G%Be!X^zL z&NCqcxqhY&bkov-=N|f~xwFMxdkCU`0sC;?YZAoxH&Cxas%4L9&KrvBA*P}I?)Tx= zn5a3saj>uUFWETQK|%P;_&f0`f{FTirk`}8j^VZjQ>#eNDB^t-pOdE9tKzq^8lK0WeYRMuL5MP*QA zfty*e%%`i`eB8)w_=~BYvJ#9 z%&kXny*-6|cOCp0vS0J#j^$3T!=-+))WAzktbp-}BDMO^I-E{0I;z8e>u}qYP@kZL zLA}n?*N?sU8xL)F{aBP)3Le3wKm}O$W!s3;xPy3M;7jQ;NE|O!~Uvk+UwDf){6s3YJSJ* zf2;DjX!s4dY8m}B=wC2wVvnLw(9cidn^S3H$J18ixlceI=Zj@d@HQrKwwSK5Dbe3q zqcsntw3{COd3bg0VlAXomFL%wE)J*TRP(_&yv2@`bS~qFA6;+$$Q+iD5UiW6APfaE zWY+uTbAk~#Xpv52h{Za1wzD1sE(oGZ!u>q>IQaVjdzPy!BET_5R5J6XB*6+E zYz+Qf3yBaE3qeaM2@o1pPD%n%#4V+#Zxeiq1jgZqVMIV8k7?ds4^gbmWX0hx*V3)i z9fW^%Ztj$5C=>?~6+o#Y^urM3ys`Mr9n7s?VTLjaPwXqn3RKD%4%5YCIZdbTN0R%i zTj*5k6ex+wa;q;xv(2O!5*#j9yGW!O(O8u4E$@v)GWQwWqc-=yYOU{Kc%h$PD`@D+Pb(mMB(C8}bQ_kp|;rND|?AU~Ct^1S6Op zHRc=d`3SNC|8v|i6kC6B6p!vA-B4R4gHlvR7H~tt1z3Y&?@vQ6LTeUaFbW8#aS&OP zmu|z!5bSc6tddEQg4a@k!#w@nsA>&cr08fv&~bx7}k_ zX#=;nKbpBWcZ4+U1eW8KeU1GL)=&kvDA5uuW^P_{Gayg5zUdtH_4YK6fAr5wPPu z?jTNZhuSn+f{&P_NONW#TWIgtBLhALK$7*>Y@Q`68~$I;Qj3tN7TJbcx^UXEu>1AG z^258n?tAnts=G)sRzn@lRd zJ&VamLZ+dNGzsEyyx#`9aM&`eNw5AHym6xbBZ47=`O#lb@Pp&H0hKF8JKVIXG|V(S zqXA$|rWH~=?qm9NML`Z7L(&CyjWEE)MHID@H4r+NxYz5MgnYB>_07e=N14)lFce@$ zkT!;P_A$sPYnm+z{jj+kfRKNPD+K-JJB@o{N<=}qkY2kK#H;0>J)6deFt$Tb3gMcy zUQEPD5V=D-+@B*(jc&jLoE5;L+RXe_u3jr8{FZKUZvnSh@#dmx?+35Ul2x$LdSR9Nxm7 z*W=@)n8QrUCirz@4*la~v!^U1di8!bMZ8DpAWcBg3+2}bz%hTPNM9|-CR>Am#sKd6 zur&L!F`!Ik^sX2nE)01Wi~)C-ivhGHkS#%xTt_0`HV7Ofk^ZQtt|Jfje-ae=w+f2g zPuZMOgn1|KJIR& zkS!j3(ZJT*?Zjo_ZgAu(uCPqDNQ!id4wW7T(eU^b>79SkCIJZtmt~s-7YeDkYLj4> zX_6QXH4a~%x;+wm1;R~hgSePAaiRec#9`J1TZ=mL_?xjD#Y)S8yQg_FNps&z^R&$K zY&`dm3d^d!%@&jSdg{l=U~TmbcQ;usns&9G6w8%=*VXJM}SV=|w++eP|dyKjo@i>U{u zM+*AnYBFOK)$KfaZ&1*6gTaSm>Dp3aB}g$+clLjP1e5vN8MutYeC_&4N-385G4f=U z3Ma|JX`FE|D^5FSPJq&J_OM>A^SN37#Y6C9vR<|ExhMfq)Co)8^yi+}0*-iht79>^(1w^`o_@ z9bGLFiTbNx)!Wo=A!_wD;jikh?~81!N$RxT9K1Dw&lv46(W!lD8~j^d`|rN|P@!1s z1}pDhpB2fk!^*o?XXXA{T6z2WtjKfQYP)}k2yq3DIFM#UfQuZ+sc?~A1{Z%djg)m0 z>ouX#e@FjysM3e*=EY(TBiJkP~B@` z-JF4Npo7p|&Fw_PVFIfvXRwhUHWhGqSMGFT8jJ(N7`QNPb{N}v;MfWi|3S`FWhj5_ z=sW&rMe&s1-rNi$ro!jv=b^$OTD$IN1m*=<+k<=PvZPg>LGtWI=80*(HhJ{TL97Z6 zE_75IfA9ZT;1m(!xg?AODTEOczMUmcL!f17sC14f;8Y=b9KP{~1(!6!gFAbATbXl0 zlW-vTzfTkgehOu7WOH|0TePg*v#ivsM8Y1W_enybL~!ejDLZ z@A@wypf*NSGV`V+K?YxJJ$&C-iVzeEL5-=52m&lem9vsS3^6O|;oAfkQ-Lv9aXtYX zIZLIp(wyfLjmHnSaqe$_f+*Hz1;yciuBBVN`w$jCIa8u_)Hs+@4jT(6{`(2B$HK7L z*!=G{7H}q8o1UD(8qHGDoCK)hR*JIny=a-Q-3ZoNU&q((!glj8Q-~zUG^GUbkUGh-cy4s*sG?hMaft+2snq23^anG4x3e;3h;muY!S@Qg zNrbm1F^sh4)uh^q_fp3XOz^aN)A=TyfifLMJOQRsBZ%T)>Ri^n_g9ZPM4?dYMjd(f z;_AfrMVzHwh4v4hZis?EaTF32OaTZOC|L(8A0|*gPB`Ulj)4EbL)Mn7j5#26!Nd8(1h z{sT$6Bv(jCKcVQ7T>cD_YbmQ}i(uB{V8|+H-xSCUe82d^B69MQrlOeNoQ7Tf|v>Br*cwWTG*qIiGUZ>twb&D+*Xt zNIxs;nycE;a%}{@vmkqIz+6M^vY8ocEy_8$uO%eU$`pAyTF;L~e~pB!QTuASo*98Y zx2?Y`BNuOPiKQtkdiAX|XQ^NkA=WCYjU%mJDu|txTYJX@y!HI zBC0um+TM7_+PDDZnAF?lJ>bQW4r^C@w@Y;JEX_#6rKqEVWXs;1pxs1LVO)f@-T#B>)P zD;Yqeohm?HRWfXa_i?hoYT;JEb*u^TjG0eaR8!CYxiga>(vX{Diw6S7M-&v~hU&A5 zVVUE9qI{6Fee8Rb4}`U#-m%0M8ed|}w#g*qPVIsAk%SWR3vILO9eP61CmX0WkapaE z)(mM?pYzjI8UsiptcS|B`7VJ)ncAMDAEmn&eW%rC*+U-Irw&jZ+&yCOfnmr}LLuG) zSvd^Io|#zPq%+e#e+j5Pn*bs-`#r0%i=pf~1Z=A&Zco24glY-5`;EA#^ng(2q{dfA zG<{zFQb>=brErHMz4CY*h<6)h(JC%~s!mswUe{v#Y4G??4Miar9@v`B@e>#ToJHe3 zd*Ia}dc2Yf6yh38vNFb1E5x;}#ipi_RK^$S3vdqEvNdN&G=4n!v^4<$pjteoiSRU` zy_%?j6;V$r;z74fqkYiL9>wlG&TTJMJh{NWOtww)&937hkURGDD>_(Gkg$z^FjorT z-CQvnB*K6i+S{#Xh8mccQ{7&_<&j? z*|Xd*x(fsV%`_(-2uukE-e z`v#MO|L?cn!FU!jC!;*49VF#(aC^CZiLQsqc)!N0vSIx25@k@iU8`Td z7wJb89UIiVEpAmiU}e!BX2bM?m+0g`b<9Elu>SVhzM)#u-FG=uX$MHsPIM^E;y zdBg=lR7v=rN55YE>k8K_x1Wdr#~4w`%#)Ht1zcD=`Aa7xLQpIOZKNbXXjC~V3B*ur zDLsCh=<`HiJh~Yx5Xfy_%kgHc@#tlhmj3F9Vr?FORUH0vE#0cald$UBYbAQ>#nFUv z*iksT?dtVr0u->e(c5cyu6vv-#Ib@a_UWXkpGz0h+DafWCu7GbVtj(KB4Z0Je{YD>NKhelZdc}iek*LF?#dg zeP2v}djj9aju1$bW*u}eQ9ACe1&U`#3JzZwqD;F*E2I4Y8M;q}LYT>hjCb#TF!#bO ztS@+2lehPzReekE4vjQxHTmu|UMNzsHNzsk3o+2AjuU_j-ZP_h@(3VGr?Yd?7qnW! zeexI=&HWAP4R|01Z$zJm38ShO^$~b8#57ocjUfeeO+eqA#~rc}d>&}~lrL|S{Gzxf z9o6kl`+%AN4z=74YPZI3U(N<=+IUNAAYV<4P4dS*L4i{g<9H3@688aNStK>S-Hkbb zTyZwCl|WLrWX~S~JhD8iUba$;`+jvQh7m;&0f3)Sf_Plp=)KkU4iJ+RY;qmM2-ygK zVgU?e03#Q{u&+V-J>q-}n}+~abvAVd;&e~Z+t7;&8&=lP%cI^$uX$~fr&>b{#s#^| z#KG7mYWFY$pLx#=@H56WLw&Bb0Ho7Ht`B1dZxqmUxhS^^eL{dr%!$wYe*@eQg<`FH z+>me1&DUg1^{6;8inxFUD9>dbu;3tnCZK*maNa<_K>R$>>Yt#2;&EyUoHGU~4a%a9 zQrKWjzzG1K;Ul!uFi^oJj12-++z(W`2~<|Y-sWKVO0*9zSLT`0-REt>D3TqFAV@M` zi;u~4OvLEH?cpAFn`fo_EYekxmXJ9Q2(cFv_fbOP?MjX2a+R9eQIaN#>2^JT7rOF% zIc8$?WV7a(yV5PJo4g*#FtQX@mej~{VmJfe;DAjaGS5kjoXzTg8*?$T+o@4DpQp1d zsqAtRWNTKte>9~)`NnPW^pHA=gD1SEprs>M=X>T%W zJ1GcLc~cS@TDR=s-! z(`zzkYxz|QMgfcMEpkY346+{~@^kfcIEI+o3nYk~CzO0JZn&%~pUcFRUQ_3T=k!D! z?(~|X&i)<}V`WbBZar6juQ-c%ah3#U8@nnEEK)kUHqL9!gXqz~$iP%)J=%u$XHbT+ z+RowW4bBaZd(Q1nb!Lf2^Om|EURZ>3EPD8Kn=c*e4DG*4+tre4z0Kv!eU)d^tO|fx zL(ggXl#U_qY1=D{*;dR}h;{)YX>LAxZ;7;OGlDcPw^pY_AS}dx@%5f(*%Qh%TrwFx zWU;L7NxwIWVkSI*nZ)~bE%hL8qW!#y)z}IrOVir6K?x3~%ee{lWpk5fTE<8j>(UXk zBG`nr71n?>jXRJI6&egFrn=mm<4`z&as;>KNVb?|rtNMG+i-99F)@F>s$M#Y)Z`_l zyPDMOxfJX)r7+BY5r^-d_Z-^9fYpii(uyvaB#j52Mkq*^tJV}PMRm-ZrO#W5V>S}C z-qvdbb)?yk)w0a0tOm!^T0#mEjxMXq?iXEZQyJ(=?@hj%7F#O>3F)prU&Gk6u_-7V z07Z5n`Q^xd@wOV9hiYu7)RE{KPTN`wvb%|>z*5#|1rFDL%l>j+z5EKAK)ys^RZ0(% zNVQuWa$j*guZsgJtgbC}PH~isZErhimvS8-iU9esK!o=@A0Y^45CK~rv%A1PkluGu z?>W?A0Z1X;HdF*&L72j>^NHiSFrEkVm_ao^$a6B2fS%cX@d568Vppl%^>I<8$@Ia# zzTDO++vfRyhj+>@%+zAJx)3uo^wv(G7`H*^cEek{i!_z@3M3SANxtrz9uK~6E&?77 z$qKmy3%eYNLiiLU08lKFC|2ebtRr8*e@R4hA7%l4#z+8uOnNthPTvO%)O2i^5|=Vi z&>N&BdNlpA?S(7UqoUIa7}kVA^3rI>69C0X0YveCuJUdqa6HL?UM!M06mUQv;Z^**SAF-YlfBBN>YLn2 zBiZ#;UV}HSx7LQGnCOoQxkC4N3LueXVslS%;L1`Uj8(8;{O-!F*{Gh?SXZ8yL6!Q& z4_Rk_lOwL8-Yw@Wp!aflx`)ei>+*76mzS;T14XW{`9pI0p=gOGTN;$DjL$4w{d$BO z!c&IrYsSA0oT?$;eJ$f?Vlb-bJg34f1(RSK(bk{0^w2iQhqJ;!R0y#_DA)@PaW`1M25W=PuIzsD5Y{MQy}8IaW=|pECr6sSw~~pFp51TKEeq*( z*uY>YW~PAw(mJH*x&HRA4vMsTEEWg6Jve|Lf_Ea-w|q5t_qdqu3_TQ4$}T1BX_Dt# z69H*QlDE7Ngs=h0f>eix4MKJ*<0Yhj40_hilIjmu1eCG)w+r9WQY`N5LQqYSq?fjo z;hYozOV>Wwoue#fS&>ewZBjP#E`5Kr(<3i?j$ab6LJqaoxh7uY80;nv>a`J6ZF^2E+O-gTeLf z^d)5&sX@ZrALXnEpXymFH`%5{GtgACHnd>D5tRr1COr7_cTN!@^-nYilfVjLgp58s zB&)F*aJMs9c9K`1@kH`?^gde^*lAcd`VSYbt-TlXq#6?ZKhPOsIhPUs2^6;pGYUQn z0XUZdiwG%~aXt#If3ciX3NuLf`}t32-=ClT?~DN7I3R(dz#>P&s91XSgpn2;9kS*As9_l^6Nfkl|UDCVz&&lNATkS(Mqq zN5>3C6l+UOarn=*3<_9!W$^tEKuC!mAsp=1!bC!L9v- z{Bl3FQA&_#LG;N6o+!PmNm+ZBYYi@u01s}Qs~E5{-Maaj+>t+OaDX@(%k(tFUw{j zKhknke?*yI*pGWQ;PEug?RxhvTrHc2m&qb7T|zK32QoWa)=L&~R5eqhvf<2KGUl{{ zhidUS6}WREIPZxX!X>IvVgD@B+#jH8C1*f9k<5&927gA*Xpe|kzeZFti)BeXw8w+* zyX@+Pp>>*(3IZ(VUN(U^q60*4PbT;<7Z^k4f4vNyI&5~enZxDLA2Ue0cMF@Lhn};u zhk|t|2imoD-n&?K=>X7Wt=dMV&1@C01cxamMs8&YB8oL`6&3Y5MSKfR6lYaq{EG&( z4iwo{8u!Pm`pPO`vby{L=>zLiz!O ze<8}-?C=H@B$Yo%IQaRzH-AnPG7y#qj`7Dt_^Ri%;p;m*MO{E%Z1r5#%k)Kn!b*4C z?WIDBlx#zC5noOu?SZIVBdOZh+E#yC(H~Z{5UXX6feD3xRz=5TZGgclR*F_5*81ENRE{?Fv`I^Rr(`P;qx_)BfA%YX z4oy^{Go0+?SSn<-0s4jY1}H2t2&MImy*Wi^8*z5W@0sh zCDM`|I0&>sWm)968^f(qa{F*g-kx5XGEU<~btHMdeQuEj{kTL%G2K;J3`rsynK4^U zGZwP|-EP_;Q_ZJ%vBn38O>zBNe+=(gP9v>am--Z?6Sd&T1tnQQ#27cQC{w3}&B)H8 zt5>(O^Fh)b6F#Is-K@3h(j7lcy8F%UQbk1)U8JXKDSr!PpX4sdO+#`cWV_@xkbRf~vZEQOe+cqb*lbP7IjgD<|V%wY;6WbHpw!XRdzW3{_>fWc<>F(8C zbqc#aV-a=Qs}nzMJBc9TdH+z7aX6H&hp)AX%fcEIxt0ke(fSLMtd;WmR;Tph=Mo zaXs_sMp5e~kf}S4=oTWi340r?E4=8YZM)8zKBwMEI9c-p-@dML$EUDIrCt`_jA^V! z-O}$S1My5VeGX1ir3_GoG86}uFoG_;RWBqQDO;D^9&q`F;5f51Hk`>VSL%4_)~c{< zmL2wO`96GS{Rw9qTPs62&Ttv`9%oP}CRgop56QdH66f4=-=53cYU84!dkp?NSp`$$ ziaxSAD90P-R8UXm<&Tb1uOiP6uZ^A;_l+g~n8wOeubz@%M>s%U`fSf#^Q#g92{mj- zS-N!y8&!>L&d_@rDO8r6rmi626)g+fg8nyYRbY4W(!UY&uHohIM=Ta15|Z9Xt^9J*}RkoC?T zLOFKAqGvs9=>xEVQnJ1qDdK$cY_e%F?jyIl4n&zUhHX z{}riZqA`1VS^P;8^wzjbCH$@D{<$5bOm)NO@QZv?{0o@Rb7fHji#w!dQG2g81p0}+ z%DM~wFf?2)pJqJv7yzV+U}_M2a7FucMcvd=DWhL|i24OiHC(+B9kr~npi~cVrA%-N zL@Yaag0`X0Cdc=ix6dP3fn>C;ufCh7SEz=#|1|dRi$e#-cFk2nB<{wnCDm;rD~?t1N8jk=bTrv zRFL|ERZnc0?;_HD?n@EoN4J(@gtIev;C`0V>FVD zEH5VFcI*zf8=kK$O&2#M!LnkYKB{4;%l>kXAirHHTUw@KujMeVY}}4xQv@Ru{AFYs zgNz|F{@OG$s7fWywTzo`#|2{8G&WL}kh;p?8by1lq9}q67mLW70xkzM3MhLapGQYq z>)!f$C@SsH5UP5|cx`+YA`ogC?|$9-Y}6_$_9h!FYcs!Va3oYP)AhfrMU%--Mquov zc*lt8U}2i)qjwO9C2#Px*Tll0s3H6ep~9M-w5s%_CT-~Y==`9iB9_Ni(gb>gDGWQB z{XqMEaJ{RtsZ9!V0dH;~3<*jln|EY*4ajStQ+;VF?LjVOR!vqi7_1$rfuFepjTKIQ z`iwYRsvAE$K}s7*2l>U?B_b=0^SU^^76KSi(7T}SKbXy+Z&}&xu0BDehEE6)NA#_q z!G=q#Iq-^_tlEl@KqDce^QxesCc*<~p~%0mjkXuV1K^-)0KQ!iQJhL}BOw9|@c7t3 zZG5PGBpeR`qrAv~Sng{V<~mt?4>lu%_!p4mgK{lfGiX?@A0a1SX`N8ZXnKY4m`PYy zGJ|!iv6RekNnOyHemJxD(X%egySgFd^Xs!FRI??DvA1qw^GdT~CV1Hx1^q645iSr^ za{-h{7s&!MfD22(2~T0Uy#tz51)(Ux09iH^PXwXDZqtBTbONgUG>$x#Lbi?t(JZ?d zyTI?ki28rWaOF!CvY%l}^ZPB?9QgCM$tBnY%-M5zxkphIL^a5z=9(2B$dULsa~-C5 zH=``XGEP`XRLM|6QPg9>gLO&!+YHT6n8t{ZAvR$Fh@dwF#J!pf;Vy=+M2lH!9QxxVP(S1fj@a(Q+?{GwbepjWP5SVev8tT|2YB$g+7 zIK<9f3(?0PlTmcL*()lyGj<=TSx1ybY zosvRQj)cF7-MvX{O$koE!v&LPr)E`$Mdw*y+J11x`uD`xX#8$hP)InwI}zgQp6J2S zr-DrWkq0Tm48`(lK|ZGeb?%8P8AfXQU*?5lJWXWpCe4R;BG8)`R)EAs^ zqXnZv^_4g5#Jj)wH91FC#fB7i-E}cpEnMW|{5C%}Cwo2mpzCGsiE;k2mHM3|Iw`sf z0Fz1I6ZY5tyvAgV5Py%p5{ZmBKqH|y{`toa{_yV4tpo(T`v*lZJq_PFiU9eglR(x6 z&t`P?0V$cDKT$zSWgCj-j%nTW!Rx*b(nmmFkwgdU4?ep`ojdTI8Dn@yrbp|MWao5M zD`jK|Xp7iODVMXEei$~-Jj%sKWc&sSKp(cs^#~_eHZd7H7IKg^{+!F0LJHoufO)|N zwJ1C^Rl3wz*>S^8R4u9533uOw=5d$SWu$XZrQAe~+S)z(=iSV3#M@uaMMnGL{b+6n z@7l>4m0dCgEq_Vp;z<3-X|ha>`OfQH)o zu>iUOLApdkP#5!?IU^v2*!05{@z9u}S}Hq;2FZSp8CLxSN>v?mkYdLc1=>>M!_?U{ zA^<;~{$ECz0znAWctkDZ69IAqdqheCm`@YOw&Ng$w^%9d+UAt<0(&6dBdaP!D+!E~ zXak+Lm?aK$lz^r`f?NsnsI)&JFyarU8x&v2ns?6Zda#kJRkdaoACu>m2W!%lb2xHo z%=cVSxpE*+z&FhI-twvZ6m~(>wG$Wm1?oR`uPIs-1lBtca)l1Ijaqp*jRLYk#O`AW z4#K!BgcRX_7K;Lc{@_%`%?{SR>Q_U6dRy(s?xbaqsxM6*J5@P*-?is#Hv?difh)tu7dryDm7PgllwJ^ z0H#{h(85r26^|h*eqw13j=c7$Hc!YPZLYJB`E?&*bo^*mTwgV^?cIe{bQU|zz9I!z z((){A8EUMaNu}Tot5g;o)EBt#A6$d4{K!` zSHBgVY6}$9@FYf&k=S2u8KpxDg*%tOC69GCnI*c)VhZH$FAVcEacAnu@Gz9=G`RJFeS> zNYfsWtfQcko{yi+qa5!C~>$8*kSF|8WYQ^6n8Ad7Qo~a5yusO^ihnepUVK8k~W1 zSTHdtV_`uEn%Nd!iRveA@<4HupnLGjqEdyNn&|V%DbS{u^>VT?WA?G+d03BF^r8g< z6-WZd#s83sbSVe3v+Y2{!BjVsYA6lcq6O6E!a@~I?P_EnlA55BY*xaUho=@=q<@VPq!NtMYb8f2hV(%>O`I@3I zNZNC3s&oEVI`}7rML*43I3!xvJ$d8?T+KeB;eRsvI1eyjgC=JR$QZOD{wUr`^9)t? z35DJ%QR1NMcjkx56_@rF(dY}R!-Uy^EKp82A}tMX;t*$tYZc|*j4uad1Fo;R;-z(n+0bw!8xU(E)#X*jO z#*qhQ;?VF|r0>aNf3e=ARjy)Mpfk-Z#as~DmMnsClfxBmkoMk~5l{*GFNSmejXC+Y zO+b}*>Nee>S1UAcG{9=WI)F}~J8JreT(nCc_g{%Jf!IbfD>d`nIWGaZMgE*OPUs=8 z$vnwsm1yLP0S>8RE%xv{8$R-Y-)I;?5Hk)WVRVm(Q*t<1oV{VTSs^nEzRmR#hHIzy zWWQ+}s-a7bC?~=0ByUj$a`@#v(rckmRHQhhqbK|H+~P7a4cAFfpPD_9*Jlfbe)N9t z%KdBz7;JGvYR$9dyI_8spkMu*i7u&%$9K(14#R#1jybMNrWJ?#=rmze z0~znF)KTi+gX{f+L5-IJU)6&ef7;Jae>odtn zXv}DvuGsFYADYDP?!yJx#lIQu*3GB9!+_SZj|D2mYm1#T6)v zL9c3F!QF`SH;}mRh#KS!)D9$gdSdSg%RCtQPJq)~x z?&+#A4gFE(2DrwU0fby#-%o{{ZNf!Bi&vyHgA5_U4Nt-i@sI|JbI6)n%LogrT)>;a zp)L3ciKdyW`s(1r4C}vjL<|t(hu$qtAPxxPhwj}k7lu~P28C+2HGb5aw(4ip9UuED zeIH=R3pS#4@#V6(-3gVj)A(JDM~%<5Kl(1tB~=yd1zb!EZ^w^A`56%TSsaEf8h&5+ zqrwiId}3-$MOTI8fWzq1dGTk%AlZR=vtu6zY|TTbQ#!LbaFF?Xe6_TZUM`38{2=n{ z0P^H}9q)M)+^8dcl8KNKO$+Hsd%6v6$E} zG-#KIQ2;&%9JA2{!~sV9&_eQ@_JEZj@S8-X_A(^<*gqdxU>5_RT8EW3F8o8^R%1!x z4@W%EW2KdOBcw!k>ges9BvEklijHPHZB#??m52#><7~&2dJR3U`CDj2VZ(OjgL=8N z@>kLqF)L(&~wDCJ_N0pD#Ck4hhlK6K>B;{3?1I z|NE9`o#5(W(rz2T>C&LQ;VOXoa}_v@!8fm`?z_jDJNq#I%@vZ^f;>`5QY8go?d2Vl z58MK{G8hEg@*FEGLHb_@%w3=J_tm}wKXkoQt^+VbqG#3+a*~#S?v9UDyt{fk%H_~RuSKJf$u zJ_-hm@_?_O^WU`LsIs0#0HQqQSJ?fQL*X=LUoc5@W$)@RgXgfhu81!=%P0x4wGgod ziGw4G#(Ahv4z&ZYA+n8uvJ$>484Ko0JY)TzQ``<1Z9D=HoOhY?LPCJ7EBi_$C}hJ4 zD2vb+(bErv8N|NzHUT0i98r<;B;;;O76(rp4SXzc`>db%es^FhqUy zdk6S{&{|lpq7b2hWe5Q;Cl~~GdU(1+ZV-sb%}4XuLLheDw%h*~Jf_Zhfe;Df0wJ*h z0}LYyMASf_e=9LJB8;0HG;|yU#}cH#Y~VJSu*0?#aTa)Bz^^Hl-{9c<@sgfGb(P1m zEdAd6TPHc)Cg1-iEVa(Rj5_o7KniEgLo&elO=j01!PID@yl3+0<_vZ(Z3tDg&qNaUaX*e4!ZY#^hV<=E#y&Bgz%VXR^Ot#hir_iQX|JS+Dcfs3^J05CFno zf18)q)|2eB8Z~Opq`#=Oi``?TBgwZ)F`U-3X>R%X+nwbOe-(j2rhl|i**iENj+%4w z2wQhQ*Bit<**&oV+#{_u3QaH46LPao5}Ovf6^LTfC^7e9uf%5UqUV?#ex`sYgi% zqiJbD$~d-27F=*^M6=e;3F@DYqQ;FQEhNAs7Ljb}d&RV*gXfUpRy=b5b> z8ob&7QO|ls^~|c9c9}*3O_q)kba{IEMiMdKUKd^$+6nWI+=-KE$`kT=BS<#Be)hn!;zdbHdW0Xt}lFa1pM)@+S-N;pv zfuuKq*n#@I6P%BLGuvYLPai^NHiBKlK5h{q_f|pvBf<33L*;%31;KWv`EmvEkp^m+ zIeDQ|!yxJ`K>vcJ>p4KAGWf4!>`pjsYk~Y^@Ye<*;)iDRFckBLQcIjDBac{g_{}mO zZ#c4>WtL}-06_;L@PryhxEc)VxUWvJkh<@42^ak@>;LZA?-ccX%IIz9&-V$oThk2V zDEYeiV*KZW(V6D*5G9GFF(l>8l|x|l+VlVtl~@7(Trkr~QqwU$9@EO=W%qwtm&%R?~^cb z_4)+^azK6du%het! zefw%bRD4EquWqy&Gfg0~2@n%{$t%=;SZ_Er zr_i#$ke*$G4&D=2RF4r9|E86pPkV_mMf110TF!2cyCZ9urpSelQGq+g`J21#-CZb0 z&8#>TMb0o!OlJ#6aMYvYm}T~S+ql+|23H!JO!J6z5!9j6&(k8z>Uo8;>?PgorA5W# z35sy^iX4bR9$Qmv7=W+Y*~;C~O8t9fCuuWyshh$Dqr$~$satiWZh4zOZESCMt0D+X z-yHO1ZXube{b5x5=fiNJr3$KF`z(Hf4;}}hd}r^62`loy9dDzsb_ZzjU|i{A(rcV< z=*Nu#^QFoqaHVoC`N2LE^l?k}o3k*&^VEYo`qeRAY=~T%9q={oc0L7wSnrmuqx-EL zav37F<`$ZsRaR1MY}I0MmYY8=R+&D4@N7Z9VI;X;16r+$)`r4d=6>K>&$SU1Xg{ew zd3cfuiZ~fr`D_WTgVBP^=$1(OBP^3aG6_^i7c1AV`@+$L7BT81rgR^U0|6GLs{u^sEb5SNQ(K;cRh4)@O6C;2= z+|Qr~Sp@00mP8o5O33v{nuI=FX@niVFF)Ne^jyI&48)hf*i_+Yae88|izRsWYw$s7 zlN?}5MR7F5uWdLCx*V>bIw?z`T*F0Fq!JqtpEYpN8SO-yoc-1^Cl_J|JQ871Z%Clyt zm$0|P!9M?wr21bnA{jlKZLHZS`8kEFGY=bl0bq1x+u_Pt(WQ?a`zra^?0euDaY^ol z8~nS>Pa^Wp&}yK%%$Wf`mo?&>3ytK|ybw$B2qNF#eEc&-7%p0>XVA~0MT?{u!hYf- z?HazGM(&-&72L_UdQNn=7EUl}3B0Hvl^!SC`=}-i=6LQO4iyeqKQyqV#O-GxBRu#> zpaEFd4u^vdhjU_=Bu1MRqH?MXjWul^U(s~37jp8TbQ<%;C%6coTT~?Xj%}A6`i?pd zwZBMY*=AJT{U`k?XZ_XD4n_ZgswPUXb~9G`!HiZF-$Xc(w@Njv#F=cj^vXL%(EGdS*1eS|9!GrfgV_ z%US-c;Uj|~_Fjj;If25U_WwF_ex5tW!-FaLc)FpM+nOKud;XY0B4i*? z3^i1#zWyTQn9=;-21hCpjuZ`8AC3>P^S$h{exJ4Uv9`F?hGpm?!4~c~7Pnt{e%6ej zqXnpvn^?j-Ll%|%=jS|%?gE}?o-6Zz?v?lx?fqIlI-Yx`-&YR;<=Itp&i0e1Ts;98 zWMiM^9Q`(k6vL9p?5^_jwaqY(qLrwe*pL06~(xbftg1lHGtTNk|)-N;vDx@_v?DpNV0@`2J(QV$(_H9wHh1x-J?LvPds;4+Bbv39itw>If++OTQ=)oE|XgL3+x@mH;Jj!R^Gm4 zs2iytE67jZayfgJE*89b`Q6_1Y*kl|iB2;&AAolp@+>2J>mXJLb-3_YVR{g;Ov|}K z;qW8y{NXnxM3{Odn2#4Bi%Ee6M~u+B0F<501=M~IP82 zt00OUK}ab`K4iHZHJXU`buCVm`7grF0!qV72vjj31|b}6 zVX4%AH4)l`?!uHABptML$bVG=3P1Db#{?oO3TiSu$a1 zalZ&aboAe=+7HE*j_{bgS5%GgOg}IFg9P9z@d(sta8R;>)0U24@Tp?PKNHnnCEV!IpkHV8C+33BUs*`9tbf7wQ6F9NI+sDCXH zzM~6|zz_;0(V+{QK+xrn1tjzt@Zeuh1X#UW&q_12;%tZvG|3Qwjhs`djI8%hstdp`k2;!Rpl@!T6)2{ zzCWbXwhdl+ckaf0A82{F%f_Zxat|BXSiHzg+W-6I==bO5f6e#!%HWVu(u9@ZXn|~5 z=Xqw7k*iM(-ZgM6t=~g2>U{Hf@wiC6%nG|D0sN6f6h7X`+=!Mij%=xWDlQhg6?g*g zZ&z08lj(V=q{sXotMI>aSOO6^6J-`U#Ue>f+08QZH&J{MzKf{^TYicEDxLq_H^)#d z9(YOd;P%gC7|in*E!+909%nYAe+QMtJ!yQ&-3t6~$)^>kTQ z-&zdvm^iln$w;C9&cbhltXMyDzx3|eSbxz_+;Kto;b*bRq7(wj^$1pn+E4TS^o8Sy zOO|hMgumzTol@NVz3pf@dkZ+m@tdRhzVpI!-E+BHdjF39ye06$64~r@2As}bcY;sIt;H&mEF$WpG2MGkv`-WvR{^o2D_JBpZ|_fF=nRupqYc(FQoanxk` z(u&LZ(!<$Qq9q>;AdZ3m8G_jxB-OyX5HOiiD*ahaXAT8MSQsVGshLu}TH*Ck&ldL2 z$mM`4d$^fIBnZ+u7D(8=RI%zDr3)g^%_y$%;Oi*RQ~wI68B02o@zmv+`QgWLQb7$; zARs~o(%pshsn5mAd^bFq|chk!N4$Q3cUw=U1Ugc~Ei6G6B0&aZ1oj{+{xxdpzfC$Z6X5$ zJZ`SVlzwRd5DU4w+^E70+|*#EFQX+1y_a&?ttu8u!28X$n$l9`KQ8L)gOa4As4V55 zWZ=%{M_2JW8Gm0|bwPBY~<}4>dh)RtK0v6Ieqi-5oMDWT;q=RFf4{3NZLX ziCNbN9;x(MVr_miLz)nz+2->_D>>Ip)-2(w{|b}SipHQ&T7fROR+#_(57G>V{>1_) z+#NAA=lr_#e2Y^o*<&s4Tkh`i?oLDJ|DaW-M?&e7)kVWpklG^dgh~b}-ys~m-IV+R^j?aZamhdzz5Z^bJR-HtZ%#_F;BVmkA(3A$|eO}Hq-x`24@^w@3f z6@G47QchOCu#yLIliEt9^@VHf+kCpkv)0h3~^G8I3`=2NPv9@BE2q{H?o# z#m(KHy?(e&>nFwW?%`y|jGbws#u%5Wf5dVnl2U(}W{VR1QzAjbFcW~xq)>-<$AjaW$ z-NO7}(1W94s=0E%ghqcyg_O(B@zW*l*@;tgr6d}18~h1?Mgl@le7+q4dgqYSJejj2 z@Pd~t^OFs42XSG>pE*3s2puheB9C_XSLBE5z;dvz6DH;3QQ5z8^fub5Da;CjUkkA& zoV;U6lsXG(0+e59UN|!y*Xheg4GBx2BR{zFAgF^gOlkHTVsti(_c}}S7VJP4Gcej{ zX?bSpm0U^_WPtnB6dkO^%{jKTGK9ibAIcQa-xQG>f@Kp|l-NmZ5Rn^xa_K)T782LY z43S}E+YrP+trji{^U6wkuaf2RL@rE=jo3S~`6OL=qhX(jOr*co{#W^7T!1*E~1F&ySY8`(D1Qb{BKxy4FPl5b^R$M0}40{gCGAuW0 z7A{+f1;=GrrILs+G;9-tElknjT#Hq;Ptq8`06Qd1!yAQT17|Qc&gz$V&7*cH<&7C z{d0hMlnqtPsxwvIAVuLNON9ICcl6_1>F_awc3OU|W6ReZ+dYRUx>0Di#N?5<*|B#C z2xe~Dul!o&3xEe;tlCoAGEjP$Yn(!W`f((~ZG;%t29xGs!d%i{#TG<@X_ga^AO&ic zgZmflG$?TP;|BSW{yo3u3^Y71u{#gwM zN{Y&kIU1bVQ2O0)oK6=+>D#OktJ9{nG^*dYwf1VL&YiDWP}XIknww290<~?^IeIxn zeqY*i?RE1;B~`~7c%qFcj5UO5WdGK7UBfEzB;D^oCV%#72kBEDGmR9-jQ!bL!-jyk+E4ebL#?KfVltib4)PZ;0Oi5XKF(x0RK{`xD)aYZxo&mx-vUcXx`3v{F4IE2soV{16$`n|TfoXRYBRCGmq<%f zPXXwNd{m|uIfgX6NmmEm*CJQsd-RuSTd0PJpr$^$yKOSqtb+XI3u@}qW%4Oec=?yd z)VmAk)@KG+Bu_L2Ie6aFJ&d;KZ)&N z>BFtGX7GoTwwpamkCMz#iWSwf(3ovPs}CSE*UVrq4b5_!DsOZc=Or7#-?H?NVmaBV z2HP5{XF+EF)vZ>*;=rsnOmh>1sIA_VZV{imxX3yTVH)zdvh2uCWt{KFEP z5DoMbrvACNh;!0?pNjL10pi*_?se_5G8dh3JDOf zltb|Km>W(sh=M^EIUYd3lMTEeNe=w?LRWOqY*0y1M37-5U*axNNJ;JuLtd&H$;ylN z%dvw`3i#-XRyLvg&ju!D*hJwjKbZe6BdNb#vFXB8daUBzSp1V>@w*r5TYDGOI(oy=2Yei{<5#qX#iv3XtJqcu#eQw@e zse2?SqeSQ3Xc zT?Hj~L3aahCC3XGl<~t==c4UEf+7f6q;F;Z?)9ke34?G>^YGIZ0Ci?eDTzMv{V!kVWw_*7zRF_w8!I9k%TgD+vOow3m&we;Gzh1+>{2Y zB(YJ_zQg;U>G!#zfb?h2;Qpz%vC8&Q(CArpx(&}>dU`hHje6q*XMUm~j*mHUaNJIL zbJgP>H<+-_8Tw8{_RW3tP19N|m8TB>tn-9V3ybQlw^tK?&2R2_#rr9=?hMm8JP$*W zeYJqJoB&^_M@Ex%G!m2@D|2x|Xiia`Y^ddTTndn4qFiAx0EL3=6#444cM{cX|9e7) zN+rDi33)Guxxuf1_A9J+m)-?vbjs(j3m9347?WLGyL2_q%zU|b9r(wEW?DrhiO?#laW(GZnv~C?6ZX6 zjpW8YLJD5!3>ciV9EH#CzDpD1)Cu$_N!|*^LJkj%zlHDtGV{z4^Ra84e6kUtJk0T| zVF8g&qJmHZzl~i~Exh$8WM!dby&WjGM?EqpCMG`8H8hbgc{@3F=5#}eGhkL+_D9Sr z%LRg+-Bs>P#qwZ_Fm74*ye0>@|H!nv8@ip<1nvs60Y*k1J>mV9=@0Zk1-VN0(iu_D zB^ia(k@O;s=1K z(O9E5aAlGz{}QVNUHZ%M&|Y$#R2!-Ixl}~kZ)a&X)Ug90JyeZ9OgL|oOgV{GGCJ~W z?F?zy@ogU`sL*igQ$#4IcQ+8Ay}41cXFCJB|HM(d3ER!Ck)N>yHGl|?cP{8;NQ?fu1T~Y zfK|gtu)QC}<7Yo~AaRKjb>1!|@y*snvgg7Vwd+U+Uj{Jx2YIs+279#6l`LXGNQUM#6%6s9lTxfN)Al0A-Tuc>C!PE zR*b77<+e%Qz|>I0DNpwZ!a-fv2->J;5+upRBz`PsRh=?QA{=7Po~Z;7vzs>$0Ebb` zR%Lb(WrHEIHE_gk4(M%6k_>!rNFJfg&2d-12&2c`XTEiUCTrGQG zDYTAsNpODAMj~l@iV@3b=KQkx0h0I&>X+9OgzM$zHX`2WxzneWbd$$vrRe1te)>C_ zlq~s;?E|dW@oq1;2Uqrn{hx1;CV=$6@RfdAR>EUwz-`6!hu0Kc{K7j1&y}9*eC*@J z{@rIU0~9E$VRFq#dSiy7-QfgOP-Bjw-BEi+ZnY0D9k$^ar3|I83+Mglj!gmEub!X` zb78FPNgpRR$m&Xey;I42^$9bvC;YW-^? zkj%I=gd>jLcQwL4KMItdCxQE%G+GB~3dd@8aKb6M?1PXA3Cj|8zm8QMu$mXp%bEq4 zl2zJpudeYv5{?KBTZV7d!@i4*p>^@irMf)3oYJx=&Bzq$rY{9meUlUYgFgt!BKTUY z7-Ae!)fqro1?MzcV;oM#@E2(YU*`{;v{qV(U)z0GGA0J9c;PR6>y)@95Tm}y_`$@} zW!b2B8AYOT5HhAxR{yGy4g&pZY*eTBNLk7elc; zsY)CtT9)Wq|I1-<@l5}P6L0r_x^?ght``QB^?&85HP3KWz(L|a0#mG>@9#cOS7Dt! zmoVYc=(}S3QYN&TwpW6mu}K`!U)ctOtT{d{jV-YM%`Wmv@@ad!B0%~9rE8o5`B&vY z&Ci2{_n6*S%OU%cGixI-;+`!Wc>q`8>4jtqOWv_gB<+iC$&Qzwk~_qF{e9c419v2* zw3RV>vZ4TRYmGSopZ`@IQ<=IwCQySdRun^3ZxsuzX!^9jIrh)f{0Ry2On8&mtCdqBE}C@KF%{EOFj8iIe0PF4EjlH zk+!tc6!raCEs5=W$3BPG)0&(mu#v-tz+-w8@+2vMZ4vI)OiV3++B%o4Q;xYnBg@r* zT}WqqA0#gqq5JE^uGeOiTP2fRRt9C7wKlA^s`y+T83%(3O>VG>qf9K3S&3*9EkW6} ztv4Qp74|Sa<$D3EXb0CvmMX7=;hbQrH#mK`qZjZsK)nKE&DqOKo<@@Gx_@cUMl3Gl zW*`7`a}M=d5lb;^<{`KzF4hGpgpi@Z4)=t(NJ=olg(awMU}-WyNE=?n!N44zwa$IO zWTUDhQ|*wzHhOA6loj?H3F4;cr-oT3J7S^?kZDtD86M2T@WnK3>-$rRBDiOMF_+*- z1iG+(-He1giosl^I~ELWCg3QclnzIQ<46KQ+@_nt(u%ewttcU^)!t5GF(=}^^7oOD za-*7qUMi?)+mbW|S{iAh%~@}5pmxsYU8RR7Zbzj4op)1Zob{ZAn^FB9N9l_4a?~Cm z3A#@C-zZ&Vuotab-TER#T{1fMl3`$+Bg4uS#(lszCBtybBl0=Vgh!D{{LQi9@IdXP2SfxLA#9T7 z@cK3gysi0+W#k)6t8hXdL1vGCg#iF95i{p`P@_|`9~QTmn)7z#;bQR+}2dl>qg0OuV%2ytUzy2`Z;|$oUnpHC5@{>szoG`XtmrHC3=&VaIHZ& zLCRA<)#2|8wOW+6cXO<--Q40s--Ubj_+fUG^3nLWvsj#@OO{tdD~BOf?H0JdlQraw z#js4tLVPaw;rxVDamyN&Y0O9J+`Eg)O75&5X&BS}eC$x_w-GK$o{lKKk+Dvj?#C-O zZ<^%F3B2B1vO~OkFE`!OuRClKJjv;DlXNvYb2MLh+ zQgX{O*1L|aqhzN-zZ++=R|TYq>WcJ#%ZEXubMN=Ir0w)UEPUfj?{xq${Ii^NJEPvW zw^+wdKJU53dCrmICCd;_RA&d+F#EpYgPw`SMZk!P(H7Npi$PEkvPuqkmR`fiw6E&r zb%KdD)7*7Fgzu~L2YY(ZMsk~2qfR6Dff5@{fQUR``bb72u|rJRu>&3c=}?;MV&H=T ztsEW9p5%^Dy+^i!83zw6y>Qqe0Z2JYZHCM+?m{^5!|_@4|0wZ=f_m@P0nL>pcyzcTtY>2Vxf$y|Tv8T^q&6IdCBBMT`31;Nl3xEt{k^ zZezl!+dWY>p+AM#fdMv2;zR+677jJ`!7&!h6j{)me^8pg*Vf;a$scmVTLsuCj?n&r zsu8zoSRo4sMa;gzLmdD!WfN!524%|?xw#9MKj4Np$hVRIY|A*tE*;|!#EMtq3LIj4 zhWv3P6eZd(o6IB_-e@6j&I7HJ;IM9Ft?060xF<7H66F_}nGf_eb)a%0wlfyq^_K9= z4FcS0M}}DwPFO1xe6#b=4i8^Ijo6+HRU7a{~#Ac zb|QOv7$GwlUtw&7L@V&7Ep&vy92wv1xEz z^l)PUjr6D|T<(Ym-Ynmx+Yc&9Z% z;ET17!VIxR?9mM&oJA zUfy`sVq88LK_N9692cl$4{ke0rZkf7?LaSnJSG zELd#WX(sWn*v-(EU|acmsD$xSb!bToFl__>^13P=j@*njW+H}mKdztYjk?HW3=ZvI z)b3RhT5wgejt_eUS}z`U^2^GWk-R4E*MjBPtqe~aE0~hOo(i^6k;jpYKrcu#VT)3T zt7>nUs{npC&qe4VLn!stpBS!#azjNzR{>A{GUFi;r@)*=O13P9(B-im;(*!O7&??GaL^&=?aoc1Wqj!lQ&v%;8c0|(5l7GQNMaSQd zr1|tP=c~7|gY<`i9MOBGcHa=Bd_I@Xw{q6=^wPLeUw?s`y3j%V#{$Jl8v=)S1071^ zhk#cDz^N91mpKFf@r4PPu-j3;UGr~1`b!7BcmzIif?c_T2cS1Cs;(KdVSoAJBzbuaSgS8*uvkg`9E}x;IqZyvPfH4~D(QLvcjHSFp*B^82{p^KNp@}Uq%s}6=&tg?h!^&v{ zm!n-XO>1<`h>&9c;>YREzfiy|@I{OkbKk%TNU!ARRW;%~pKa!O)qAlnHop7RH+&uo zaEDoeQh(s{=GL!}aB5L8M#67twbxm@@h$2gUY^#Zb9uXz=7b=YtNmNW$7v<|HoxEI zyL?@EnG3Jclccj@d>KIm)q!+iTRYl};n((ngpx?@_HWKMu&{L{SE;m0r@eGH5!Mih z`iXaQKhJ{sq*|}fpa1Or z7uFJpDF~N=XZS8mWSTf5Z0S6(ZWu-q3ct&4A1D>oSiw+`d2BWbx;^i=YEF!{d&zd4 zfo=jZg(jMD&=QeO`j>c@kmxW$A56CWj+p}hDuVzGy&Okiadv5npcNC$8>ql`Af#MUxvYiX+k+Wa_y(b!fG>CY&3uD zLQpHLs*N~+lh;$Or>k~Oi3L=|(K@NDR~@oJ5Hj(NWMk~BvUR9U5oXnZlG)hrp_sNK zFY@Ww0ZN~S3JAF3wqNlAY~h+%0jI&*)qhbOB0~yXfbR6PNU5c()e-wsKS?3=aeK6@ z$xy|6SBr&XYG3QJW#nrx7Hj)jWNmb|TEBNaGmdZ?K(&eyz*oKQn5^Tznsw+G zN;`C2Mpx|!U%H}8J9&xdDjx3h#r#Vuv;eacrChsSobL>AX}SHhKI9EtnU-!M0e>eP zMx>yh$bx@&7=sz&tP70MRrz9L6vbm}7^1YgL>4ZlH_IGNlD3B=+Fr~ar3}g3!2vI` zwtiX`;f!c)D~sq8EW!_3WYu92hFf@ki2zyUtAhps1qP5|XoG+R2h3rlZ7b)oIh0jr z1c*3jj=K(XKwT5|5&?3z+}uo;hkqkP5XtnV4B~}I+Qbmn*yJuouE$d&ZTbcGyF@^q zlNQ|FHXMu|hJ$&5q!*;)aw|480ppsSaa+$Jq)M?bhM1=Cc=iQe@azkGDcKjPM}mwe znpw}jKzqZ!U?JjGOZlQ zPo{RE>3ZHX6Km2iEH@RCSby%x9+FZBLT!g5hbAi13N}FG-D6JjiNd!v?&!_At=jW7 zrkZk5$X#HWb#a;9<@eL=w8)p3T=5`5(aKY4|JZ>Hsf1~KZ=U;scZc(~bVN1QBzT5Q zbdgkXn6Q|UNtF_Q(pgx-aYUEn^g&eu(y>tGVVGp>xV4`V3V%vO{pfH3v%}o^aL1*bQ;R27E#C?|H?>Nbr6c-?2g6q_?Md z`AeRXNGqzoRT}Ut1eT8lLLaw7)!%!ETHT&e-|U9XQvekm2Q8_oPu-n9h7`y64eRoo zUXVf%YQW0K%duk?enuEPy%RdfzRf+(f#HNX4^EimnSWiZuL1D{CmMP@!V_*7Jn_<> zjSbC7KnZD7A=Rjwg}Ed#VF(p5Gl4IZSb{lLVhL=}$V@QLOkjJBCGd|POW?Pu|7(aP zu(>}o0eHP3P@3hXPd+HIlE-iYr3v5!3fmh_Xe^j4KKVQ(m}t&U0z^^isuZg)LjgYA zTsHgG41a}2;@o(K!bN&XGZg5J`jj+^qjv2y4UvMEJ57BYMe$TF?CJzX@qa-RGJQ+n zocp?Ga1<%m5nZm+2T{Nlm9|NWgR4Iy9G=ES6BaLmH;E|ka&Il%CFIM$+;0!uho#Ov zQT}9a$w-%IN^^<3u#5GgNEs2bfOEQK#Q4H|XfwqainaekOW{WIq<_$Q{10g`jO69T zh8mrXCtAAEo3hfCkq-)FdA3NDrI+u|m3lz7<3=1m@0XUZdiwG%~92g6) ze^`zvg%V`=+wCtmKi%H^|Aqj`I3k`zj)YOscy{yYHykDK{+9?NW_0wsD>aL_Ac!gn z_tWU(&3|riG34@!2#gpbDw(Y*Nwk6w8!tapOddX=aN7I5$s4kyr1aP zNMJnp>2bMO)%o!;9a}C3t-pN_^((32e`rKGv?Dw@w_j3Q`t5rqYK4eK+A+kHNqslO zb;CFwWK}nf)+I)Qt98XMapo)J(94K1Gngd)g+jxT#B}g;(PEO07fG5Gh35IfzmEOo z+mL}SjB`tcEwH%vBSaKy%M``oKiAUptNHSSlj5^>UFLBe@k2t zze<;@G)w2Xr!My_-HSXOOe}_!<~8a-xO%V{!oSrH3K?QTtZR-Jv*lv$=>jr=YmUD7 zIOdI*R!9&Mjl7oozGjQ$>oo16jT*$*nl!XOhfJ+44&%fWD1bJpu1PTm)oc)<>*`5i z9+i6i?%m(K3WEi!(a8|4R5*R~e?lq@OBTIaf|k;x?VY`KKE;l7e;BN9eiD`IW!abz+u9;Nzz>l6qPNSbmYo~CON z%1}b!eH35Aiq74#EhXVX>i!8ue8+cL4g1jhM60@;D%V zZzc&KE|U-|@My#}c!;`|Dj=sx6@1KH_T*gI0#<57HneecT;>a?mL2&50Y=2oAYWiB zxO{=VvH1df)o3{45X1glv{>c~Tp^b)uy^s?Ul&W;-&&G~rwJGmMs|(N!rCq#3JAk$ zw%4T%Y~3<#P#g4de|ZCmuqc_C<+0BgbOz-FDWzKy29AsO1y_$w7-&##7DC1ICJeN- zTGAy9xRfP>cI68MK^lu5QBtKOc`-q1Q6EeXYHZNAo<@Ifi^3_G?oqAK<#GiD0lFhs zAkLC2a1!Yd2bG8jx*3Ltu{t!#)LyZAf1w={rekOf6BnjSf7)-rTl6nPq(J{(T2KK4 zsIcK&VQ{bDLUlP&0goO|hU%QSEWillSmr4ms?!rK08G=FH`k|xbA_}i4R2a@!AV!* zpCepl$UKlk1rOwKTLD;)`Zy%VFl}U=%ucevXRj#Tx97=3G=0>*OA-llGBD+nC z;!;zd7tu$Ic*qRa04%3=Bf8uR(bJ(I-X=7&xi*hWTsBwsTLzG)H^K)k1DIB5m*({A z0OE4%0K7hby1WVuz5wa73SczcoBdpiN_&pbb&jC`f4E*@?y`GW+ce#5)%0Fj%d|~( zBs1r5Fw)26s{bOuQ_B<;Fg|*jg*yELG{4$P6@gyf zAG?NNsx`UXhOke50X%KEWqsQRU&&&f<;5z!@6so3Al|3vSPPlVCwaFLm@3g=mEbT% z2z&^ne|R}7i-9-Seh3nkp1v#Q1>P1#?&oGdwM8O!Hl8eZC!Hs|wiWZFi@_Wz+NS1p zW8tSxtFZ{xq-iZqpea>8+NH9TUQrwD~C<> z^PE$1ckvk$mZkX)R3TN3w8b6Gz8teW$m3HS<4L^ zhZ+!+GEw)J{x{i}Poab)(v)AJ_gLuNnau)5tIc%QMWMH;s)5;Gt7@Pv8Ya9x$9(RC ztKy2QS6n?6t}f#&+Xbu~Q4%H-VY(6xZ&lCba{XeL%eVb_VLLWFL%^sy0>({LWzUML zfBamidbyO->knv!Mr6}sUP1K=s;>}KWlvC**I>10u-f%oxFgv|>~bD?hH#W>kU7@} zgrn>lj-F}D#s&96T*J{bBIh;Ddkse~gPch^p8B8p#k(L>+I8}cu+;7tr0M{a;4gip zunWJYEouQFfiPA`q6a|KioI@t;9VSSe=d^mL!4Re9fNgH_x`Ogutf0Jli>_aZf1kh0 zqAOY71bH>+S10|MopiEa_MX1J>^;$-apVB7Q{TB8{%1yn> zs6RUq-nxOqHMLznE~k^R>%mrZo`@?9P5STt%l*(EzPJh-a8A>jZm3hxy)Kman+1^L zkL>t;k`;s{lg!F9pUfY=PO>kaaN1y#?RK?r+r#Xp-}-Tut^b_1$^KWf`4H573cf+MJB3Jh4xJ2%R5jg+YU z&dGB!jg$H)XnhoH;LK7v3a>`sv5<|U#HvczGc3(eDFATOSTP-cu*4?Gq&T9)l@BW0 z9y5PCi`~TY4|i#?Yd1;KWZloOShUE$u8PlIt}D+B_h!A__t&AqTGa`?_PE}sp%Uwz zxVw!Mm{-HuAx3I_4cfD59=X@aysd{2b9)d~ai9Vb)|L>f|NrX$15 zaN~$XiUNoni9|*7)z!zJaI}E-?<0&@5=UQ5uT{haK~zb2UqTYsA2Xhu0qAS@go?lRr`^;;!;!p2CyVcTbJ=4V7q%69(Fw1OdqX+7dDE$x8n z&Wz-fd|?|1MnFF*C*M`JVUg+SUH81G*0z6Y8}6qJ$Um>vTid+8>4R2bge3{U-G`6@ zF*vI`Wkt0$ER<&rsA=Wa-n#8>(tKO`3j=K^j(;@)6o-F#EG=!ijqfzt0~iwpop`rnKt*-jarWMv67F9!jX zi1LQ|Kw*$2!&)$0Yk)YJY_rWaD*^5Hv%1Tk40G)3o|wZAs$O!r*3(Yr>2eTGDp0~2 zDu0}Vw*UqLM3r$p-L(P10ovZ7Xt*>Yj=vet?%!Drzopec|fW(`Shc7>7L zLF}*u@dl%LaUnth&Sf0?fDDre=qgn!%d5@0Xt<`vPC5=Z5^vE?d;VQxaVy?k1G6^G!rb7T#?CS@KIDd;B zD9%0lL@J)UG_K)9K#B-pZ5-U5a8n^qS0ipY~L?;xz9X} zaO^DS6en|zAU*6xGv%6j&N>M~fYfWoIx^K9={SU!U zz@tbM4aM-h4K%dbhgxV?xEXQ1wr01-@oPJ!wZ1DxDlZCVt&xM!R~mGcC}M>?}H zmA07s(#I4?-%*4Lgk#y!Ed5?enXa;$XZJRPp3W&r;B65^z^|NvHW2MO5xk5Jmg3Nd z7OIi)H*dbO`wLhQR3dHd$bWnauHjn$Q(F+iG@TSkiRD3n6g=G8-TQi!U|m{t-w%?8fD50H z*8RQ2(!3i%IIuRj-U+4N+N2IU0l9hTD=FdwNqQKF=%|nw%RnO}gMVt1q_o(BHV1G| zLBZ1{qje`c21K+6@=LP$zBLGe!$>N280&FJA*_-M0vVi!J5UA;qzF=sj$|NzD+xwe zh_2Xl;{d)aD+~S7!zv`0?45z<_KR$mRhgSiNBu>Svkzf)o9fBWB z*F=@i7cv$r=PY;;wtpTlhlLE>YK%Ry5#Q&g3XyhGRgd;yCIrqvyNl!IC+OCww{SYG zuAe^LCB^*Zt%TS=B^_9u5yavi=?$nBh*H*vJ;|O$_n0HgfQ)d4aO{XxF4~LUhi1)qGZfH)%jeXvx#jPnG z&;bIe$FVvCytOShA-hKj39oFVnP&&jp@tfI3wsm^bO}rh#$Mxc?`$7XrPU^~wg#hs z1$@&Xquw#XV&A3@SqwCtF)3XF1t_or(>2Me)PDJ)*?+T*MobYVFX9-;)3m%iYBcz$ z>B1xyh>Hw&pB3=GlYw-(v@d1$%aq{BE-U6)*(dBcHj4Qq>$%UNzE;4|Oaj>w=QH#G z4JQrYbqe#bCR@CRff)xEQh)*qY{nrn`b_si?j7%+E{v0Q=hFg_@X6OjUE82Yo#s+_ zax>+4Vt*p-DohPQFB|8C_GMPwR(JN@1VQ~Dw^_McRyIYcbQ)9(TuXY}nwM_$uCl}J zG$nr$d3iM1zYT@}H*wyRP;Ta`Ghy;*Uc$^$nB@=nj{5P(%dxQkN`dt~d)IYV)0; zW#MpsRY&r{;3na?*{P_=)J z*LjiFxql^$)Dz{*ApGoVM&O-TPStIDoNC+in_y-qc<{DZXKtuLmz|?(R0gg^7up+@ z0q^UZ8f^FDUUdhw`IcELbRQ3z+@}f=i+@3?IX_2=E>$%YUyn zvj{UljWmp)-x7pbr_k%kRcGVQ??mfzeSC*W>l$Q(oeL*G!C!%s(rsVrN;^^XR}L4S znEa$+@{=42vRpj-$$tZJZ6nx6vY+IH>?er4JSq9v$2?>5nXs^8p~*Y4r$c<69OQHS zfO~T=a2mzz1;hDjD4c&7vg;lJ<$uPC|IyMpjl^9)R!>X%_pyA8WQXT%%I;=l4K)Yi zd8OHTHAHGaQ_@}+I7I3Lf$sycDsgtK3LlD9tz4;mi1pLw1~1N4c;@$m!BU}bel&Ex z8M}p~&FQT&*aYlh`#6*a1fR7nfXBUP_U61Kir1eoVP#ewQ4GWjAog%|pntP&Z(W@= zoUmdZhidk7kKWY9WZw24FgdC>|I|*;qMZ_;l=@RSy`*y5q-A+bJHdY2GEOI5G?AuS zH8?VyBwh5VbUpN?*ktl7Ral@P^TopuKY+i@BtPOY#V=I=@pPRe&PWAZau>gGokWi4 zBsdku?02PeLc&5nOMAOZu(Xx6)z^6ZC2?3w{Fz|OY?M{^U7UEG*NRl z`38i~{DSLQ7Wv$!IK5%kRJsthZg646S2h%WT~9)KC#mY~*l^-JtAFjN*>m8e*7pul zcONR#Yd&n2`8;=*UNn;i7yn=}+soZZYQp^9G->C4r2`)|5qR&G$am&)Eq5Vac$x1k zTDR`1Yg6}7+G|@ew_wBb$Em{Y-&e5rGNmxr(GoT>aaHKGS~s_N^w`3!6YdO_S*6V# zZEnb{pNmWrurLV>J%4&@pZRKIH$AEBPr}_2HrMs_qs)ujWxbRMa5}KcbzdUFCb!%B z9{I?7>fsb6H)zw9;6Vq;~=aP_jHgn`rHywF&^Adlok^Zd z{%x4hqyQqW@zLJjBy~-k0}A%}f48QxpO=v$3lz6wItxk)mr>LXDSxe4TW{Mo6n^)w z(A#9JW_g!XU>JH?h85U=H39n27MN_&u`pd+OKz5bze65UmXtJU=XY==a5|tHtvRL8FXhn(OFl8znqSvXqEaL{~-hA%4H)DmLqvU1#cbb-P^gB#kfk zW>bEoLT>WDY@27;`+v?{nnefraHsR#$w-WmOer3$q`+uAL4PYLq6kwC>eJVWKCBd_ z@teGNHbG;&ZjX((%ca>^Yfn~regX5Gc8^9YE@3`}u&#E-N3K~O@FOn5()n@)o8PM=R2$aR5dM0BC-JQDELFx0z*hS=+f_U5A|U72h*9R zpDWiK>$N#}z}qvSvUCjfv<;oPuHD)XAYTax0GX<2g-(fcl+Kpa;XMl*_)tcZIW#(U zi?1P*DUm!4L!A$Z_>XM>R(9ALe2vCMYkX(Z`mQ?fH-Af};@wFf*QiW$-TTgVJNr0> z=`4sZUzXs6fV({`C5@lW2GwnGtb99QtMh7WW!r&YR*qMWC{(Oil{OT@|1J3jWO+6o+>IkOrKQG#%;N zSy$~bg&*B6b+~6Ywji{}s=!xQbZleo_cUKuzGYp|KCu=-o`$LZ^^@!j?DoOS?fd}r zF?0+pLC%L*Dv4HnUaY~10Lg!VP%;bvNqAr7FuHopFu*~;knqm^wrl_Kt1{2pM9g47y-PBkBetShmW4&RS3HZ8cs<-0f=pxchkkV=>Q@yfN6^O#ykqiUTOZ6Jo=-K7%E8!(|UBo(0@PX zi1DXmJ>7SnB*3LuY#ML^XIlGa?Qfs?d3+P}RD4Jmo|8QQPH>PvkqhS&IqrSmA)=eo z5=F%39zf~y+K09cgQm|RDWW1Y2+7rYDQJA#d$BsdE;rZ=+~2k>>F9$+#))Py%s=-K z1D*=dU(SmDlqr%d9ry*!yZW9Q%YP|Qhe7BkM=(&)rWox;w30wFBruU#@VPkYFz_Kd z>@nU{g=gwlffz$Jz*w3Q>CwnL4E+5vp{Kh78+Et%VO=&k8pwA{_;ub-`8Oj&)_{|$ z5Mwey)6quSH#dkTe#WY5Ey^3aiH=Bs1nwxdb9{8>v*j>HgERqp&OXiQlz(KB&-iZl zh!Zo|mEojx*7`t9Po?tpv2zs7{b`Ef*A6Lr#|&PRq@2Xi-_PqIDQH;LW$S=%-v z`F)jdh9UU$8GUB{XXvXufwK{v`RdKC3}>?ztL^9z8V+kmj6W~7@qSC=;8k@y5x^a{ z-jpZ;lVg7K~M#qCl*+H)A_5n35Gd00}xz)*X{4U7u^yvFysERL2-wk zvH0~a-!CmLPbiZV$Q##krDYbs@`Vfo3qD-91M$Juuo>Y00WR;M4!7Y;3j+avmIF#* z1nGahe&74!y7#?DKyDn6Kv58pBN3}0o%TL|#lZ-kzYj2CaTMH{QPY46f~b;kJqbSc z{^{Ym-k|VWZ#|!YTdJ(ext2!YFe&;BhYwnSmv0HF{elWagr3@rA0=gy7o+UnivP1y z7_ed@EXw5G&A@9j#25kGs~Nt3V2oRq(O1k{W#rcQ#g6vW;1Wqz4WFgya=x&N$5&PMKPk)@hJWKhP4;z+}&IQ-|44Ca8@#={Tq0Kq7(EjV-ALt#(`dziDF~W1aXZ9Hxj+(FxLh{!sbOL^FSkiUW5gJH9xf{X0#QNC zE^IK!?A#9-hms-BLk6kL&G?1RbPaiM-8CS$N2D%KvB`x1?3g7(p58IE7k6?Df(WA* z>=+C~D^o5VA*U_|VgBP8J$=@KqLWs@Cg0zxch&m5YxkX>m2Q|d&+ zhW6fxi*Mi#+o>IYSU2hjDOZ`veQf#+SnA`Tbha!y*)>t9Yi!xHrk%E$n&_?njWWkU zeQ!@<1hRs%V&~SrHt3XfmOdWqWTz2?ybDgC+IF^8SHOUuIj5TpC?w?h@}`!sQ`RJq zHRVYuXdK{z>*!GA4HTq5Ao_TAd^i;KgLv2v6ImV7m3F6KXrhAz)0ZOhr?_)Ph=F}&9c6Y-E*(~)J6d-%f`;bq|%dxN&kK1F`Ebv0cCvc zq!17!xIVprAi+gd|LGjsC{vGzfk0^YYRhBF--abn!B2{VejAL1pE32T4!w(*Su{=+ zC>TlZRAh590@l`?KIeA!d-;Nzh?`hgNdy_ET?Di3iNh<{o`OB$z4@ zzBlN$i(&XPT9%RE zP}P`!54V|y+OpY&QRmRZ)HeZ%B3%9UEOoD~I&{(Ty1hyvqN=K1wH;E#5m{qt+ie<_ z0o4?L+< z#|ncZ8|JLFJ{CAAOvhHbgEy$K4S2v^Cn4RsBD@Jb6a-MIg8HDMg>f)Wx=s#zFs@=l zx$r1&EL?H!M!o2EBmkL#LQK%T8uqJeISWIaRRDh7 zV%idcxmGn>x3r+$fVLLgC)zULdOSMpCHGT-&eovsnBY}cuxlqhlbOLeZPqQD9e0AW z-Jzp~!?w^Nl-e0OxMZhScjz`6VAkR2VXMXr?7Onbw(y~MohX!6C9S=RojMz zBSkBKu61uCgIMvS&qU~&$IOG-*nXC)5uf@BuUlGmf9r$&Vwe}n+;pP42kXR!!)a35 zhttHig_@hZNawcc)!una#SmA^<$U#jrITX_2@>Y}?@q6r%tr&5V>bPkl({=`frM*S z^N%l0R!xc<(~zq>J8=Z}S{AFaeNt-M!f`ls_tRwLedC1F7Y*%DUnlzT&zYX>PS2a^ zr5v7mtnTwADqJjGhBvdc%9YIB8kzp}{kJSFvyl~SC5CBGwU?_U9P;{6UX15|*>_F; zGAl|)k`yZuOpC6Wz9u1TKAaBP7&MUBuYWv#Ddn5|QkX7Z*e~;<%!-i_8=e}m;iPDm}-oU4vJ4p`TiaU@dL3ZtXNF?3Z>qzM>JX?(*_>wp_`o&2I__ z<;9Js@oJA!x)$J?SD-zen+Pa5>?l9RxmTawd;*GGc~HytW{WyZ!zqM#7a|}j0OOL! z;a{fl)ufPsgZs$!t{3$1;wCAtT6KE_JS<*ujc_2(rA|J`O|GZkr#GP?q!MsVeI=YE$~LK6dw!zE@4Qa(Ml`D zpFaIb*bpyd?_)+QMUooFXLaY#$ns0IbD=Ch_N^bM;8(YyfCXRTKVxQ>fkX=xxAb2N z;R}BVw?e=SzWMp)r>no*T>bls1IfXP6N!rHBwA(F)rX&h)gH!wS_Mod@#?dgRjrif zOhh3(m#g~s4NZVI8{L|Cpb0jP3pdaU7nSNtd6<9e&D6r6tr zu-cY$mS{~&9X2XhH|-Kpl0`xM6juhC*bFxw*0v%sI=1BzOQifF*u3REu>HMl_Qwp> z&oDRymge;E*`B=b^V%XZnF0!qp$ANMkJTw^Iqal|lfHia$0crr4778`jc66JBmyNe z(2s?H12P2~U?y?9jPh9qVw_BJIzNBk4irVY-QJw;7BLk)y<5nn(9_+1S=cIMA{L|0 zZh08dpK#FN>6%o=T(9pIh|mF?S-p&kVv!0S@hKIBMZ4AXa6!`}c$xO})=fXreUX2JEK2kl z-S?En*Zo0hJX%3(_z0Y$2C8&GgyO?(@o6K$F5B@8T;(-A9=l^&mS`3qY2eT{6+O*Q zhhrxOw4?D|bFBCDSkz0dMuvb?^)etX2}Lpq-eEH72~!t?7nI@xTlc;}2PXr$zMon> z957Z-25OxiZ>t(xFDHzwr(q*pL&p7mS!C(1D2x7))@}~t9E4opV{JSM+iaE6>l>IyGz)+*yhgNq zGNj``N`Jb$25CT7ml|ou@c`TDysW9f`KEp2a8lBEj;lW0r*#KA)8~Iks4!ZS4|`kE z=yy@0f5oX)T2E-~a^PFqFCGu!-JQn;iTLYL@gveLtSP_;ih~3&r^@@3#!jORGi=xb ze<2#$`r#0*^jPg0`wXJZ)3&neq*dlQ}l#hFiPoz zPY`MDoSSLAWDd{)Tn~R%#!V?pH`H|2Vl-KHB-8-RGiNWVBVn3;-K8j5GEp=?u9x+&Y)Uk!NV5!lg8!-Z9+0tSdz7LyDtQRPKsN#S1+l?UA#iNilfs>RV zX8 z;Gf#uMja(N7v#qE%osIrzSi2E;rl^xoE5=;cntFoNS}YF{W=aIKndq*zj{X6Z_<6u z{Yr<9C^R?6`Wvc2vjL>_`RfH$hKw!bgJ~KR7Y{<`#!u4lsPHOtl zA5+WITO^@10yLU&Mu50dGORQSb1yI>UPN3Ut6grn(Ldgwhm+QzKjFlNEXBvE9VTK2 zQv#>$UcY~saxa$O#;5`u0#giOli>hJ_l)eRH&Y?gkv>U^eT;x<9Z&YJg+u~l=Yea5 z6iayo7L5jB{cb7cgl&dJh9cRE7&5K-sf5L&XS763D_+yR!4wAoCf`8)vUCh^l5zZe zUWDp9bSvxu0Xx6^1;5|SFEQ|(4TPXI&EK<=oK%@W@ zuI2wB=?P|5@Q=pU-|d1I+)4>%6rJwO&wvBsOLgLfLVd*4=+~AS0rAx94E2yX7v+fk z#o9QZW{`DSSsHBtRm>_|9lfOzs&KP7mSKPIbI2HNnd%~}a&YN7lwU^cytqH<u zAM$m&vlaOii}5&RsFJ|ju_Qj-%y{@~GVJzLUg&O%|l1_G9 zS1uJE%PY?9ZZx1Uef&x9Ch(_=PpDX`yk&Z})ETupx656B)M?|WWK@0}TNZVJoei5dxHf2;r+e3vi!`+< zF;R^mB;tNw;thflh|W@EMCjfZX=JxV|xnmNA!Vl*xjp!StT6YcI4oK!&1S5Z5+$o*OhZhB!B-7k+ zJxnNN|XLdj)0ny;{bY3p}O7tj(GjS z{&@2J<;kBX1n9;A2?PZa8RAL=>E`6q?>Jb(^B)6@A|-=sJ8Ba!P7oC_+~>iElb=s; zpKoBeZ(mE{T}ilrfcTQK;~WE|{(#)F6Ne*lUF?@LNDq`2YD61+3y>9n-hrC-~# zdwNbtZ)QY6w5*wUVTO*;KryGyfa|PYdy*H`jPS7DC8=k>x+&`9OUsbGu4W8}WuBLY z-D{&d)tTF4K*c(^qvF;pUdN@X)<^beA2x6o}BrQO&L`+~pOt>5V z-64t$QO<&SZ%|`b0AuaFjYc>IRUT1{F{ z?;T0`eIqIRt3=XeQYSB%KQHEaY178^Z{TA7@1Rc>E@gj#{#l?WP>S-2ifO4=LjgQ! zujp1;nZlrkO*jelxYQjW6Qh`kTcBZsq7Mr)z~*YAE}m0=1x2@tY|#n@ryY1cqfqZc zolm3+b&{GAdF_5>#nKi1=BEs+ZIWu!D8VGG_Wgm0yY#vQZiab~WJTp(*K6%=^2`$7!d%wRoq_l0(Kc&&;SueP#m>Qh@`5rt3oe5xus*GCA(>oEL(K4R99#= zk4O}LG>waYqDVIGwQOFS-2rbdkR-~hnomxWoo-qWRhecZR~qw z6a*`T3F*855fhSUHhsZ8Gjz)r_0G1fGVQw`S>YQ)Yh8Kj8fgKimKQ=IgpFkrfmB4@ zns17Gw2s=IlqGN=L=_G_OjWY;WAtG~d@X z2!-K)@U>CdPPxp>a-_Ywk%lFc>;4`b8}kKFRwi)Lq3@Q{Y{FexhD}L(KY0z?Zc`8*vAon6%ZKVNVEpBE~{3Nd!jS+wq7OA`%Xmg z5RGElgEZPngSt3^L6u{p(viJdn!pPqHr(OCI|ZNS9OLkp83RDl+UP`S+v|@H!vkS7 zhUB&C7lTT-&t1_13|L9tMvDgM));DC413AjJZT(irT;X$>~#UA`Pw~O?CY_^PZ}+M z_pNHTa%wz;dsB7}+Pi06Ts5=H)q(f!?~9(6A4-LYf-HkZh(U41>b9Dc6^&g=5vOd^SNDMWV~u?n9X)0w3!~ z7Za`vV2b3esq!G&n{Pbvh^N7Zj;X_c4F{Py5H1ed>3G6t4oia71Vs`_-b$}n~ z-`a${FOX#94y1Eq;N@$9zkF-r}Wo zX)|dh!d{i2;$FDLp@G8=ak+TqMr?Fa*i6GtE+_Iw5)Q^tgfIzSL0CuYQpel~kF)g%r2j1?3 z?nPBd4LgrJ5E+m9QKSO%O?CrZ_IgTM25}s9(t1+hos&35+_*ld+nMTrR6Nzk+Cv0% zjgP)OKb{B^^;v5tsZrY_oeK)Vmy)TL{S#o29C6#PfvX_55^@{_mot2Ph4Dlr=7#KM z^dA%94mc#T%Nam2!d>DfgBVA4(FM>yCQ}IBmc1Wey%Xo>Q?*TmBCPJe%=dVbJMfV# z;&-v9zA}5Vql@74bI0I+3ASfkjO6VfNPB!hhMMM#Wa9%e?7jzNI2j(0q2PR(Pg{So z!PmI#TAxjrFASx)Me5gemK!gLWn*=4uX<6;yxG`F{KmcV-39k1DSB`E?$Ewx$w`fyh+8>Ag}AZx;qgY8>Z$;0K$XALa`(i;J?3@mD=Le#IXiWXe*)Uirt=KI zNOD^!5#fs+0IR8s98R{}!LoU+LX#mtBuh3M=M=!{o3k~1)Z@*nah;ECcga=Dt{VaW z(tKZK?#NVbe7$ePt#;*RRD%s<*fbXQ+ilZYXx3gdiqM}d=8LR;Tx@;w;qAr6*NLiB zLYk-s892iai>lRrQR#YEe~I?g9o^UNL3;?q&PUjNa~-Tl6eL|LI(E>GNDN7!XxD2F z*l~bIIRBwc@6H@A*t)K_)!FGOBy5mZUSH1y4$AS#Xlax{t~(^`y*)r_ z`fl$uxV0Q5)%MGG)qiYTcK_{#^`>txElaCkwya>#e`zxWa@aG#t6F@@8l#H`!m zHb-YK2Va0}%b?%w%a^auBY=g3@u-{bbANt!Th+_a@{|uLP6!Rc?t}lHx4Ixq$ZoE! zK3huN0U_-M{NoT^aCSn{r=Y9(lhSqdXXTf&_XlMtBr<*y87dCSE@hzK?w&`s#F^|r zdcaWoLK4#cJ$fWdS%VE%gr#xq|7cSa**U z*uqx|Y>nZ=4%Jk`eG)$&cjqC@$QW}~$*Z8>5M_9eIX-yG&panLr#ygD<_ZhTq{G6q z1fk*#4g%rgJfz7qt#f^&L7h1!#DpQ-Xh4gv)iL1>oExC#&9>D)N3a?n4S!)ZPLgIB zSSKYXYNpE0xQlKX0M1^A$_hT>0QnmPxn{*x+GYqdLvLnV<^;kiP9YXZ z%^XDoSU3zLvn?34?%}8x&KtX_GGQDCZJGu$CZSv<|EbyH{_s3#G^ zc=g6C7U_L4y)U8m1#dT1(|;6;(hPBf0er7#iCm61-OQ<(r7&yOc~)Joi?8}5;~w4P zJ3~i2O&1En|AGH?q-j1B8R{vH@uGT+vW99imMqlgEHxUwFbdw}8=$&X@diHD6x~;O z9BH9I1hbI)_NHi6h-envq*;C_R^*XVqd|CtbfIYDjphXYm*pGt%ztVL&aVZ%GlR`@ zYtc+7rP;8q+WyU|$xD2zdET+ATDNIu5OEW^B3-k3P6en0IF>nuSS)0NxHhE7RVB03 zA1rcCXefs<3@#2Efd7|1lOKU`>-~1?7z?U}3)UP&j`*`!ZOS4m+7e~@ZWak-B??n7 zbTB9_OGBr1ASm2sN`EEY@HRb9AQ**F2_FQ ze%Jdnq|`B(YQtaxwpu&QUK(RQL;_~XwH`4^m`2YLou0K7OfdV$(^RKxB z!OYqsJH)FH#4_pW-qh7{n_&XX;DxJB_KQy1wE^3p!{`kP7=M{ic{WGN->f@L0(M%X z3_qE%dH7;kDMf-it!eP`N||O9IectVEqElu2^DE-rrbP$yIS97V5qLm=@xo=rn5fy z5>5Ovuk)qPgGotf#HnKRel!kG z@O}`2@t*etUQ@GS5RB4n-Xj3`xIb01+qa;|JpXT{o_rQ)s-hk?Nw7&; zQ}Wc%uq>LiOBQSMhunu3m&PSXbQ+sngM#)>Khl0fTD}!u)6T2NY4@RlRNrP(fw!%vLE?~@70Ac_LS!vr}ZrD4$Mp_VHA@Xg1!@83T#9jh2- zQ!`X@rC5X945x=gG$FAFokZM~iOy8Kl7E^#_F#yrcT`M$rM`#}5jwGK2o5V<f$Q~qorYMy4aT5?C!28F)1Q;GyZ$i@&9@jB>o~Lux^;y^AQT5+9s6C zVx4OW6~}TfqMmaIC1Nqk@a?Bl4(NR2&x%L!h)x}Ht-WyoY|Exkv$U>@RA;mFSARM% zP_A;TPu$1kD1>;79cS{8_#gemOFEo~o>`uq1B~EYm1o1)@YV-8hlFw%%kNo+unBwR z1$?Ch$_WkPN37TM8N{oqMm0QEuVYV9D>63v06SG8Alxl>xn%)Wa`RLL&NzAsAtUE# z&IJ+i0al%I_|_`8^`QU&*QlH$_kZ!qYOH%WfG2DT<%CImnls0gv=F)zfdMccgsO<# z*2chUrOqJ&VF>pSY3fFfK@vpe_J+wxow{i{SVaKabbGj7S2ZGg*Oi`%@y0k3cnyw;$C!Hu@S6zaYRZX497n z3`mo%PEDAlq7|6L#2{*EMai<-swxCNYVuW)Rb^!e_C%8uj8JS7uCHEs!$lGDVT6i{ zDR8Ii4k}xfuXTk8-zh!lihna|%-RsE^l117nep6U%m9qsI49Dj>V0fQbYOE9i?UK> zrO#bTelKtFG@?<_0D^(CYPtxp%f&A9vRD-c-NJ7V{}MSYl%pf`aS#kWXX9!*bwl>} zaIxH(kAi&2@YH6GS9|&>T&j$*_yPII#(dmY6Iz=RSZ_Jb@JX2YSARwtizO$z(3p{! zMNd@BMd9?5;CLw@JYeD}AOy-zXQBmAyU)+A4 zhw~5A(H4-^E|0Wb0IZSxgtiOt6yV0jT^IX+3nxK1?t|KY&Ush+lWs#yl+Z_Pm|zt4 z0D<(bAndZ}1SxRrmwzh-+3s$@58GJa<(XPa;;46yM~J6@Arsd?AM0x?eBFnVNZW{; zd5%0Lfwkb#E(3z@-D{lyL&V3NZdn66lJ3Xf2cs8M5#T_zH z$El;^kKG-mQ{MU`p58`Y1-seRM;y+WKD1&K-kdU6VY6_`yqmK9Phrt|a$ z%i*4SqZ}INI(J$MRTq_^5K}M?rMAzi(Uf+@w==t<@qZ6NLLVI5^|s@k#5SdXHUHJ3 zxZaxn2SYfGsoPMhUfHfWJuq$cNSj*4=ep8Zmh%N@n9eYuJhZw8gHE@qy9P(Y}TVSimie{Ia&PR&>6y08__P4=A3G{#j4@r-T-cRq^2OmyfEU=a%oRV>o;Ddqzg z1)%*{Gd}^F52z)w3c#&T1cMg`RHG)2O`Qz9i21AFo3`CFFJHU>eT)s07FwaJIwvVG zis<_7wI1?8^?+k@{EvB?79~lW&6mG6pH(q%`(gUMI`+5kFF!uxb1*t=N)s7CJ@iG=y+4NcZ}iVDFzlb4DmNX?Q9mw!3o4rf+Z3%?#V(bek;(rV$!Qp5UMC zVto_j?u+>o=66brcgjRS@&5qaA!zcKfkX=wmxr4R7y&bvQMU{$m&=9eu8H-9=mwM3sd1S@iS8 zKQ6Ev_v(oV3>zaVnJFnrw1f|j65ltJA{;R;sUel=f>4MtWvL_)tNOWrBhiPEzoUWrI zj}gJLE?pBOna$=yCI+8}3=h%?@;SRTN3F~dV3Vk1W(3lL1m)%hX~|ZSgUE4Y=ZCx; z!q}}4q?KZAlp+vmDQr*P%w~u2g1}fnJ!)#^mKC=~qM(yOx>5vJ%7`zoSM;^Tob^hJ0q0l!+dFN z{cI)I^Kxo4i~-IH5Ly@?D?~FT;NWkfM;{ah>7U$1O0# zi0ZV^U%?-O!@ycR#W1`Yym5TQ7$0XSZtAtw?Jr~_qA3!vO7P^nQj*;z%^Q<1X*Gl6 zKFWm1A`oTdn139`fjX+U4u?IJiD5OhV$LO?vQ+jV;SrD+4X7@5mi%7A#OEMPe5e#D zfr#u#(KP+Cry#9?tjXh%K-0}&FAp0D5Jj%mA)(%TWHzfe5X^-(OI3mu)2pb zH)mt@L31$J13*Tg3gRrbwdVJC-!5M+Sc{xy-qFyXkzoiX{bJ}VR34&5 ztdB^F)%5+Cjs7YLBiTsOum5rKs6Yr~#dOtmf+UdRXoT{-zj2TDtuclCtGPbS<7~EqJeJYyJSd&kbRA! z%RWU{TPQj?nxanwON9{=yjs8*FAUYB?Wk3v>wjW2iM)2ARvB)F99Ir3^C8R2^tSTD zFYVV^R;J5jR@l#zbdlzh!hWh8x$rEq|E2bGl27WS+dQ4*X;Glzh+{eU+kBZ;-T2M? zK;_V;anWirD5q)W8vD((Y+TZ|y1VnLV&6Akw?a-5{={MGCBE6 zGq9){#(aCiB)1VJ>5u-9^&ZR^lsX$wf@ z`JpJRRXFuGIz|Lz+@ha94h6=VSTl}lpkgm2;C)KaY#Hc2FG!#K(*T$f*2<(nuz&R9 zhT7{=3BtSrlMv7QlV^jL^L?g_V~kRJD@`ur?WP?q5${eqBO<8o z(MpgR#nhS9()T@hYI(|uPd|a~Z=U!#L5zzX)t`TD>Mzfx{_+XcU!F_-4_PR9VHP6> zNFiZfx2C17_MgU(%yQbXDhbTlZZu19R4WE$4pedQk4`)Rj%H zt)03|#-$C&aO3a;GAf(sp+fCO-XG}~fY5gSb_zJ`JTg7w$eJJK)u zV1q-gBDd+`b=Y^_5hUcca&IWtK<+VO_!uIbxah7X`V-OP#PGeF&66_AZ%02F@R}Q_ z_ItkPq*2HExmjq{%;HfK9e?qV1Yxzptd%d&g-W`~0K3V+`0y6Xv`F(+h+7?R+RO#G ziPEdwfXg~4G!Ug{LqzK+y~FHl2Jgg%#c}OG`UYl)Z#c>X<|QF_+%0__SWkh(Hn zF3KVxc<|Qj!w}pjz|f7x5Plt6g}1hQ$f1FcOfe+tZCSap8IKMnr{9;|X@Aau3C4Q2 zec3RWsK$2|+`|JfQ83HKyMoEnQ_MeIAd#k9Y~HHfLo|Begr3MBvJp`@M?#QeBg!;{ zD6!axDQtU8k;lOld4DjbaD=**I z*$M)><=dm?1QGGHYb$J91c6IR#HrrZEdBQR(y@Yd6WaMHq+1$`Cs`S36J@*G9JdI8 z6m7OVH-gls@NNLBW(Erg^hJ<%QE=Zmp}6d7_eS^n#yyRIgc8bS`q;`2n~`oMvKw1Vyf9NkS38i-QWeL<=# zTfDt*Va+OU&tbKlg8Mcv(jW@O0L9cSO9T>%e61)%H=&T)ghG1Lbf%xlbf$Z?L zJ{b1YCfFkzaDPu72lq~bF3%44whe?)5=lyrZTIyosnpiKq)kfLD+1o)?@;s=JEHGF z_9HNY#MMC{Mp{m({Y=O`&f{(o?Xfk6p3_;nMGU@?P4)~dRiUbmoZeDBO_b{k`=8$m zVk_UC3g7DRtZd>Jk$oPB)iu4vwx+k(dI9*;)2~4nFMn&$=d%Wt8ezrHZhF(e+V4?V z;r^DlHV1Wh(DHu4y5INo?4gRe!Hgfn#@~pqu9Ho6^b3GJQGF=vi#*Nh;S)5OJ(bHXZbmuE6( zg}c-;anXwRcc}}AAKR2R7vXP4 zZ&;RBH+*L0gV7Mz`RjYvjm$molGfFP*Xdy=7Gi=#bA8Ct&|_|{JDjY)`k*dg1O8hF z#q%@)@oQ1BE5~iB``34NFOnsgAjasri)76uI|8fKMY7d(u+T>VGNW)ygB#{S1(-+jU?qA=QR`uj2$hD$ z^H~MLDsM-Ns?hvX0SW*vv)L+FQlM!x&sq(@&1_az=1Qv#Zr?4ny%$ZBmv&BV{*J4% zRz}i*XzkF=kl_dfsm&!#Typ^t3fh`WQ7WC3Me`|OSusYK$#!aRHG)AOX*&gUe_NHs zSX&4XaWMpXvx~sWoT3zhg?&uKH{jP$uNuULS63F6yVwggLEW@hpyV^|kjcNgY|r%3qSDH48MTjMlt z1ilAB(OT!VGi|Y~)P&y)>$otae|@5Ra#oCs#!j{`fPcWQCOs;w!6S-=3U4V>RxG$S z{*6I!gcs*RI>KWy;*5f;5o85$V?<2cD3u@@lUBkP*2RoBz}{ynOkcU5vRl z86(Pgr!UOSBzK(@mRZ~4%g3<@*4G)WicCHFJx+l*M%E7V-%ZLAgj4zyf0S*LyC?SE z0uo`l*2_G*?Q`aeJ*KXI>%2K47-L5Rz9dq_Q|3wH;hc_03be-5_q8Wr*;N%y5KjWe zNVXc|7JZWw>U$mIZd8)kr7!_YO5rK&=(oGU8!lEgR5=opEfe>Lrpv$4*U(AZhdPq_kh(~Fx&Nk$-%JdI%Zi3CIYR?ssQ z4nce^jX*fX?Y&SuR#}~R@tAC`Kp-NMePlq^1#$Pi{FeaJu$&a)OSs)MzyH(o{`9>6 zC(rZL=X>7AK!)`y@uIv5EdrUf%fjD=hqSWEp-Y|hyDE#J^JOT<0Zzcps)wqS{J>or&QnD@I z2?-%S^%LHXEEcj)wVQR`NLi>N@^V3GaL&I5tWP4!*W5iWP%sb#`4WM`gACyHH0b3W zAPcdXD~5Qi7y`%9{PhPle=#1I6i9VsU?fH4Iw_up{zn?NoJq_ay6 zTGu_3^^h$*7*Pg~*`$1_p{?~(n7ZaRFv*%sA!{j*t`ttZ zzL9Czmn(dEe>|%U;041)Y5p3rTm0A{Z-z@#tnhX(zx-7(Ai1SMCJwd+qvNV)f7RkIkCMArxIawne4p6)X~oVSw;bCR zL4FBtp^`4Cgi2|zO#ibh*9z>Y(YaYzL* zd6Gje!@?NqmR&ncqE6wce4_ZYYHmcxO+tc#%82Zd6WIsN5y=o{4~6D>Chvk1herM{ ze+VnMu=}LAEt*|tuMET)uM_D!R;%Ue-4>!b6y^+A^mOE=B@c z^3+&{1OZ0X-hUQYKwb4E=^4t13Jy|Ya6uuC+8xICnb}sTRvfvpt%9M#*43H$X&O;% ztBUC%lF_Vy>85W;b{kLIEn(Vs;6}S=f3*v_rL}pvZ482^7ggEyNi>zE#IzI1=>66C zNIYPFryf-_l*PE3^<2(>MA zV+jbYQUcnsBWgQ@^p9|pmwIx`X2HrM&Qv(BcZf8x?lBrRVwW;Z6>xGi2>47_K{|s!;sK&Sg`?Nrs`{QKleK}eX z<5C;Bk8IxKxrJU4Y8p{BHS4{mhrr_0A(kfls=@cqC=Qu>iekBz z(Z9El!Ve~8_lcp#fZsn$&qJkve+2m_kETQ%adz3qrxKFxK@rkN?NU|!PWN$`oJiJN zIOHcU$F}a|w;t`POs$VfpQL{D+W}pIn^3c*)1DR5S*li$$5cu0pJ5p+n<)niC!e3~ z@^i8M>Z@XV`MKDBv!88#a<;c|{h+{?(& zKW9e@ApNWY2zjx-I<;bx*I$(zuY!rRbK{#W22cMm%?N&NsEWh*VDa5P#N7!L;YS*U zs$|RkaB)f<&FrsidtCvt-xd&eJtuDj4%M$9u0*bDn*RhA@~TFB|2+<`!w_+s$&YVo zkXw5i@I6tTVmJ`FVT;A$e@$5M1Z@IIs(X$4T>|VhT>=-w5o~3%d0sylX9%_w@V4Uq;Arj#7s2EkG|7FAa;7aZZl9Udog&Df9r3cdSB%n42=!0bCXWc3CKbCpDnwuygsD)q!iRx;#)X2UX zv@K`mjt)gIS~PV&yD?)rn(Jr;H@bs>aWhi^<$IWHU1` zuGFW?Z6g^Bbd6*%ZB=U!8HROygOLzc-sTp?x0hR-GmSNx-p10U9nEHUIx3pC!d30X z%EHEA72WDXKV~Kzj5%fxF@W~3zaEo_Q?~2dc_N^=(``~_z4oJM-O6DMNrHf2DYc_y zZpWLRr#^Ydf5e`ja|xjx31UA3m^RI#e)-~s>NSk+l%Vo!qv&dxqpYk81U3P`Z_Si< z`ad85JDI%6L9sKG)rh zN0urMNyI(JIg<9fyJ3nWv@!|Or`nuGENe*BwHcXZQ|b&u@%iE~l9JC&(uUdeEir+3 z&5!y|7lQx41Q-n=v^_<|>T_-e&iHzoErzO2R8*Sn1XqP7)Ph%vt6bH=_xAsYIM;z| zIq&tv0LA|UI6YD-mm#wY6_2uxTNHoiVNv;E8WfdVd>O+ui5K=Ro77J%T+LR-VYr&^9G_7P zXmQ84B(WX6PYf1R5ce@;`($MP zT-kdVtNIUi^Y|Z+V0RIxQEVTZsLb`E8lJQWN7LAH0iZR^atFiIo z^yTsKttkqTN)#xj%lxAiQZOSJlB7bA%S{Z0I|b0Msz+vI&ck^a74bZ`LE6zacjGM1 zEhK4H6-61uZic-?&0g}0Fp4XuD?|Yc_15^l_z3a+?GfP{euVh`yMKK9;Qgd4 z!@xUL?TYWsaP*<^X@>#$oWS(nUD)wubgw8pd3Y2)?=heUcY(0xySId)u_nXaoD5`Z z<<{qn-q{)62grXLjM>98LAy%D2#iadV=-2Cd{Vfea}nhJ|MyRbDOzqvOQ^ww!R-Cxdb zFY!pQT*Cd)xx^z_4v52_T{ehBV)t~{AIKX_=^kRaX-t3r-rqX47mEM3!eIyfc1=z9 zIi`pQ+-QSH%jzZZGE0r-b7_Psqg!U_Mh$jNwLLp8#aHddM*jP75vF;mOPM08YXdW9m|1t?}&$eNu4<_@fUXtc zylaeMkVSu|a4WEjJYQf1Fm1w+$* zJ71dT;WQar1+LY3SyJnS__|Jrq2W9Z$CaR(MbV;aWTivXIJP$pRlF1cv&B5B9u;=b zYPE0Y{Qa6HV1C&?`qG)_)E&fUHgm3FdqK| zANxSy*{B>#rTap-t^7y0Mnu3&rUIg=@J<)A0=n3w|3UIr+vtC4Ypo$+UFn+$B!i9b zLjv72K7^`WwVeQI<~AN64ffkkHBe};mI=lPgMZtJ9oq{piR6zE49Rx@LkWNRo}zfvyxM_r;xtXZ1+FL(9ON=B58DhinS)wr#SS^pwmWN=WCzzBb(w&mc$HeEeNp zgvk_z`NfB?^LL&Pbr#Q$e=>Dn9-o~)<-X@j>XJaqCt`F$F`-YyxHIjoVbBPo^)Ad;+)*8ie2Ou7nXZe(+Ga%Ev{3T2m#L<yP8M5&yn_h59KHTJiW6c|}pAj|~zu1(I7JA1((}wza!TEy-t2fsSdm3p;rFV1dMbwM5 zLQFC5X63#2e+sDZlf~Cnm1K+cV-V6v`R_K#GW{7dzKnnCw8;Np-~O1alekLk9~5Ex zl?APs3OlgQ^NGVW|;KR*#SAV~``p*>sk+Dat zh#UzWdCTnT{Rix=;QeFI2|_o2Ypzcvcr=1ZektB;#NVgGTHR4xNV zu`;704*zo{?ZnfUF!7sfrAHR#6iG$BkP29iw({Q^hQPw%0OLl(K%EK;_|Ob^`}R+U z_RTeX9B3#*l*^9hUzTD#2}6vi?z^%7%p?pcBfWp6`3h7Za6i>}9oi~!Siqb>7;Hp_ z$r=hmMidHBtviCcC19RJI%3L-BfzT|l0EYw{sk?y(#ZNNO_G`su7418w3m&h{{;5)p`*fjOBqf)esMBSgm7-tBJD4CM7V199#a+GybE&2oYFgpsIi8G-hBIp9L$8!wy&(uV>N?*Ak#&%$_l4 zbO0QQeQ*@P&p9}9bmihv{lWmCkX~a*uS1(p9*E#yb_5LKPiJ#BoJ%SrN*%NI<{zwgS|>@(5CQ+5)Jgn+I;p981aV74sUV>S;zo#n21HHx zML?i%OWw}gUhrOfH}|G8)XFb5rnHII<}VFMmgIF)OD3iLp2r!KI?d19fMdTXEoFnU zNu8AK$27OkxTPIxCLnGsYuV*%Q&BzIm+RIGIDh*rq0}{;$|PSVEBo%YEHe8m&YLMe z-otlvs6i#LhIl!_pvM=yuIZs(B)T>I*NcTM5Tmv5? ze1GG=o{k{v5+Eu8jq0<)s44B|U=&wq~X#fzEad5?oIHm6vont;+O zBA>yK$D}^59J6%3{Cg^9#Vb_)zv`I%Vt-7%8?={5QV*D8CusSc%bk#dOb^^cCKM#V zkaI!6WAKsw*j=9I*!>@AmeyxFVJDD3NXY1&Blh(!gULY)I1%5i@Z3`$r^3s3?F0xZ@rn!JyUK<3$*!oscqW+=pM5=2IDn3m%&FaghJ*&rF5(LtDDR^5+w0qqzbLAf_PN^@$@WgGf$f!rYY*#LY zA|8DPkA%>Zg8knm9m6;pGL}(}Kb{4r89*}D9#qYU6Efg*bRL}kKFMq?=s#YhJ4#?L zk4$ZE97wehnI+jX-BB(f{oDm_#ebdzZ`coJ5+DwB4ZFl?*X;J=;*+!gj5;&y$z!N? z4d?J1s(=pU2?ax3^1*M^dHm)kh=d<6*2!hO#w3cW^P28J-LQMEs~#cDr!IToTy&H zwJ`vqbd%Y;hTk*3Eh)$2Gji}TgoR1!R>_p+*K#FeJXG4gLq(;G=vGjns;i*O%%>DN@@%< zb$>TJIzDP|ON3@ji)7!&flX?GKv6F)Z4!EMhGzV^V;5-%12DSrSUZR4~Zls*ALFk%_Ee3~XFJU?2Zw62p* zf|ljGFflFXPn$BSs$quioZ<)*IatF0G}Pb`w+38_^(tBI!&nMH&*?CxYvyA=YuDT~ zXFZ{&PnVwC z3nCHC_Uq=xM483)RO0^v|J=2Im(kk`ESFK#4l0+;)&mKbFx(5Qf90G~7(r$~y#4Ct z?{9B@xgoG_JRy^W!V)oIeI7J9bg`k>MdIi3GAMz5F$k@8$yI>A$i? zUhcxV5XDLlOgQ|{f0eXz^l!o(AAgYuPoj7-ryS-Nc9q}Gh?wqy;{;C+%l%*FurHJ<)Zg$Nh$m3iATtL#LJ+09j(aL(p1SmpvXK&vbRoiCkb+)yW+-KFQ%y;(dee?LT)?bV1Hs5XP zYNeldJTeqo7D-FzVY33A)5AfRYxfBgjgpgK@Pbyy0x6gmXk*fB$=~l!NhASHV@Wg3 z!YbG}?Wc$c-kM;&-qbtCo}+3ZkQ8aB7I{ZPuEq0ye{XMCd(~G)_WE^{hM(FQOVvqVc@B4?LWD2d*ttBt=yP~RG%TGn8A=!xW^Z}x;*TgFFV*Vto7jh7(j&!wEkMzq)=dZ!pkP< zb+XC7w!DX^@?`~Ccr1~7_5_ovUV^D_T##UbllIW9!J#nGqNvjxN45l)jZ^|3r?jRmJR z!@~-UX_MPbT;I)Z_hxpuw8ji0;we@Sr;>yLvs#MsY87#s5Q!4mM%Jtu6HX)%mo00- zBju5aI+(lJ<%d;mR~&UHAGw6Ff40PceiTca1^P6uv;9&(dvARie6`BUVqE|?cF6fx zh)N07Sp)zYM%&m_Y{w}R=#r<&3rMrIRDXsvnZN=cHu=enjU(FOI~^tTQ+Lie>Z%J- z)6Ct@MrXQ8w20lT%uIXOom?Vg2#Z!;APxo*Edy<=@9KkFnU;=TsjZ0VY+#af7=fc42D&IH-OQ-*|1q$QFv>90rZ*}#;(bO(}r)#3x<7kqWrVi>TabmEv zI?;k=rTX1zuUKKqr)e8K;mUvj_}o2IdkC(DUyp&?`FgW=m&RgK6K{7e&bwy~QqiB4 z|7hkW2JJ6L)FPKS$OP)R%aIFyuBv^`#W1=kfYdSQw%G;_gq8 z*=$+9{^}bC19U! zn3r&qPzWjQb0d78e*mx_d7nSaJO#Bi_T zMc4mEG8%?h7o^M*W7F6z3ODLcQ6;CT8d7rlAzVxnCc>9(#IT?YuFE0bphYBXfzdN{ z#juqGBDzkN!Gwo#>9goo3#8CQS+pVL z7#A9BjZmPOdP;A@&(Hnf!@^pH=pqYP<(zTRDr_J_e~KaNNVQ&cOSVEBvzdhfo_kX| zX&#A{9P}flPe&JHMDGESb44HGOcm0r3r^mk*nV^fNser=Nt0B#F+Yx{Ql3xcWkg=S zJj0KZF-i3UFB#nJOelaH9>R^E;w4URw{y@Pm36&|p#coQnGB(U^gPHb&p`w7`U%H* zXn>rBe+Jk&Xy93r*ejy}dL|kWLulYx`b(||2Iw`xfS3fC{SX+CzgaLaROry#o2H4x zVgd3zV8CGk>za;Y0qlpA*Nz2*MlS3REb#iV0J}OCkk`fnI^|ba#{x}hE1bjX#&zlf zFN_5Ks0%zxUBEXgTNm)(Mq;%$F4Lfr^{NX9f9xF0ke*pU7{(0rEX@Z{tntFCO65)c0N)~#aW8?tb5Zz8hln#?PK9LGKo(d9> ze{mA0Gma!zPw&VdhhW8+a_z9UO%P?$cw6=xhwe|OJ4}6JaAv_4ZOkvWZQFJxw(U%8 zez9#%Y}@9vUJ0Ms@GKmY4X8OX2G+K(@Z@`FFdA7@+9f zd#muo`Ql6N$Eoccs+*cjCkXo*?M#aPR12asa|LqyA)BH!@>hGlEq>afeuFbKa$2YA z>QlrSlN^%Kap&jsE4UB3Xq*tJj8;?<@Npbg+H>FzEg{f?ig%PUJ*9cbo-2X~G+&3P z^8st&#-~|t!!q=6zM!(P#ZDP(J2PnzpGW<=y((!N2Wizpk9UWQA%N^1*VRLGfo}xG zVH*~MR05(YKRP3e@t`!`el=&*^+J!+BZsnI{YdA7G+ZmYwlDNz%60}ad!@e>$Z}gK zRz=ci*{QI~>0!C~)34D1omg)bp=lzWf`8sk(p^8(+t2NMCo+(DQJZvCE@t3+2y?kj81QO<(A5Wl3)R_K)oC;>>?x zXOdajc1wbOaa7G#q#4O7!|~V`Q~iBAUp%ZA?dIcKfPu}!Twp-}$cj2aro5HeEg

    hbmW9;OqZ8&mVVftpM16I=UDc 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
    99$Rb9r; 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 delta 555610 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
    #nNVRyHkpPgUg*XzybAJ->Y=_gdi9a0x?(N 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%0A=pFhj&XS;o)RQZ0?6?4CRNn)5+{$5 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

    WebAssembly Core Specification

    -

    Editor’s Draft,

    +

    Editor’s Draft,

    More details about this document
    @@ -648,7 +648,7 @@

    Table of Contents

    - WebAssembly 2.0 + stringref (Draft 2022-04-27) + WebAssembly 2.0 + stringref (Draft 2022-06-22) @@ -657,8 +657,8 @@

    Table of Contents

    @@ -667,7 +667,7 @@

    Table of Contents

    WebAssembly Specification

    -
    Release 2.0 + stringref (Draft 2022-04-27)
    +
    Release 2.0 + stringref (Draft 2022-06-22)
    Editor: Andreas Rossberg
    @@ -688,7 +688,7 @@

    1) is a safe, portable, low-level code format designed for efficient execution and compact representation. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.

    WebAssembly is an open standard developed by a W3C Community Group.

    -

    This document describes version 2.0 + stringref (Draft 2022-04-27) of the core WebAssembly standard. +

    This document describes version 2.0 + stringref (Draft 2022-06-22) of the core WebAssembly standard. It is intended that it will be superseded by new incremental releases with additional features in the future.

    @@ -17057,11 +17057,11 @@

    Execution

    - +

    Conformance

    @@ -17088,7 +17088,7 @@

    , like this:

    -

    Note, this is an informative note.

    +

    Note, this is an informative note.

    Conformant Algorithms

    Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" diff --git a/core/binary/conventions.html b/core/binary/conventions.html index 079d7a59..0b880edc 100644 --- a/core/binary/conventions.html +++ b/core/binary/conventions.html @@ -6,7 +6,7 @@ - Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Conventions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/binary/index.html b/core/binary/index.html index 3d8ffb86..2b4ce2d6 100644 --- a/core/binary/index.html +++ b/core/binary/index.html @@ -6,7 +6,7 @@ - Binary Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Binary Format — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/binary/instructions.html b/core/binary/instructions.html index 66833c26..cf8ce3a0 100644 --- a/core/binary/instructions.html +++ b/core/binary/instructions.html @@ -6,7 +6,7 @@ - Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/binary/modules.html b/core/binary/modules.html index 439735c5..2fd1c7ae 100644 --- a/core/binary/modules.html +++ b/core/binary/modules.html @@ -6,7 +6,7 @@ - Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Modules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/binary/types.html b/core/binary/types.html index 31573886..8e1dc74f 100644 --- a/core/binary/types.html +++ b/core/binary/types.html @@ -6,7 +6,7 @@ - Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Types — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/binary/values.html b/core/binary/values.html index 7efd7ff7..f18f9acf 100644 --- a/core/binary/values.html +++ b/core/binary/values.html @@ -6,7 +6,7 @@ - Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Values — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/conventions.html b/core/exec/conventions.html index 2004b56b..7a419715 100644 --- a/core/exec/conventions.html +++ b/core/exec/conventions.html @@ -6,7 +6,7 @@ - Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Conventions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/index.html b/core/exec/index.html index 14a4537b..b177ede2 100644 --- a/core/exec/index.html +++ b/core/exec/index.html @@ -6,7 +6,7 @@ - Execution — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Execution — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/instructions.html b/core/exec/instructions.html index add88423..7080cbe3 100644 --- a/core/exec/instructions.html +++ b/core/exec/instructions.html @@ -6,7 +6,7 @@ - Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/modules.html b/core/exec/modules.html index 103c3cfb..42c0f86e 100644 --- a/core/exec/modules.html +++ b/core/exec/modules.html @@ -6,7 +6,7 @@ - Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Modules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/numerics.html b/core/exec/numerics.html index b1f6963e..206d5138 100644 --- a/core/exec/numerics.html +++ b/core/exec/numerics.html @@ -6,7 +6,7 @@ - Numerics — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Numerics — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/exec/runtime.html b/core/exec/runtime.html index 4eb896a6..92d7073c 100644 --- a/core/exec/runtime.html +++ b/core/exec/runtime.html @@ -6,7 +6,7 @@ - Runtime Structure — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Runtime Structure — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/genindex.html b/core/genindex.html index 0adb322f..75259dc2 100644 --- a/core/genindex.html +++ b/core/genindex.html @@ -5,7 +5,7 @@ - Index — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Index — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/index.html b/core/index.html index 586df31b..b6b2c960 100644 --- a/core/index.html +++ b/core/index.html @@ -6,7 +6,7 @@ - WebAssembly Specification — WebAssembly 2.0 + stringref (Draft 2022-04-27) + WebAssembly Specification — WebAssembly 2.0 + stringref (Draft 2022-06-22) @@ -78,7 +78,7 @@

    Quick search

    WebAssembly Specification

    -
    Release 2.0 + stringref (Draft 2022-04-27)
    +
    Release 2.0 + stringref (Draft 2022-06-22)
    Editor: Andreas Rossberg
    diff --git a/core/intro/index.html b/core/intro/index.html index 998f8048..6478aee8 100644 --- a/core/intro/index.html +++ b/core/intro/index.html @@ -6,7 +6,7 @@ - Introduction — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Introduction — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/intro/introduction.html b/core/intro/introduction.html index 614de8bf..cd20eb5e 100644 --- a/core/intro/introduction.html +++ b/core/intro/introduction.html @@ -6,7 +6,7 @@ - Introduction — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Introduction — WebAssembly 2.0 + stringref (Draft 2022-06-22) @@ -86,7 +86,7 @@

    IntroductionW3C Community Group.

    -

    This document describes version 2.0 + stringref (Draft 2022-04-27) of the core WebAssembly standard. +

    This document describes version 2.0 + stringref (Draft 2022-06-22) of the core WebAssembly standard. It is intended that it will be superseded by new incremental releases with additional features in the future.

    Design Goals

    diff --git a/core/intro/overview.html b/core/intro/overview.html index 778a2b7f..96360977 100644 --- a/core/intro/overview.html +++ b/core/intro/overview.html @@ -6,7 +6,7 @@ - Overview — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Overview — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/search.html b/core/search.html index 4591a88e..64532a7c 100644 --- a/core/search.html +++ b/core/search.html @@ -5,7 +5,7 @@ - Search — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Search — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/searchindex.js b/core/searchindex.js index ed31bc93..a9b20297 100644 --- a/core/searchindex.js +++ b/core/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["appendix/algorithm","appendix/changes","appendix/custom","appendix/embedding","appendix/implementation","appendix/index","appendix/index-instructions","appendix/index-rules","appendix/index-types","appendix/properties","binary/conventions","binary/index","binary/instructions","binary/modules","binary/types","binary/values","exec/conventions","exec/index","exec/instructions","exec/modules","exec/numerics","exec/runtime","index","intro/index","intro/introduction","intro/overview","syntax/conventions","syntax/index","syntax/instructions","syntax/modules","syntax/types","syntax/values","text/conventions","text/index","text/instructions","text/lexical","text/modules","text/types","text/values","valid/conventions","valid/index","valid/instructions","valid/modules","valid/types"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,sphinx:56},filenames:["appendix/algorithm.rst","appendix/changes.rst","appendix/custom.rst","appendix/embedding.rst","appendix/implementation.rst","appendix/index.rst","appendix/index-instructions.rst","appendix/index-rules.rst","appendix/index-types.rst","appendix/properties.rst","binary/conventions.rst","binary/index.rst","binary/instructions.rst","binary/modules.rst","binary/types.rst","binary/values.rst","exec/conventions.rst","exec/index.rst","exec/instructions.rst","exec/modules.rst","exec/numerics.rst","exec/runtime.rst","index.rst","intro/index.rst","intro/introduction.rst","intro/overview.rst","syntax/conventions.rst","syntax/index.rst","syntax/instructions.rst","syntax/modules.rst","syntax/types.rst","syntax/values.rst","text/conventions.rst","text/index.rst","text/instructions.rst","text/lexical.rst","text/modules.rst","text/types.rst","text/values.rst","valid/conventions.rst","valid/index.rst","valid/instructions.rst","valid/modules.rst","valid/types.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,2,5,9,10,12,13,15,18,19,20,21,22,24,26,28,29,31,32,34,35,36,38,39,41],"00":[6,10,12,13,14,15,19,31,35],"01":[6,10,12,13,14],"02":[6,12,13],"03":[6,12,13,15],"04":[6,12,13,22,24],"05":[6,12,13],"06":[6,13],"07":[6,13],"08":6,"09":[6,35,38],"0a":[6,32,35,38],"0b":[6,12],"0c":[6,12],"0d":[6,12,35,38],"0e":[6,12],"0f":[6,10,12],"0x":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"1":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"10":[6,12,13,15,38],"100":12,"10000":15,"101":12,"102":12,"1024":20,"103":12,"104":12,"105":12,"106":12,"107":12,"108":12,"109":12,"10ffff":[31,35],"11":[6,12,13,31],"110":12,"110000":[15,38],"111":12,"1114112":31,"112":12,"113":12,"114":12,"115":12,"116":12,"117":12,"118":12,"119":12,"12":[6,12,13,15],"120":12,"121":12,"122":12,"123":12,"124":12,"125":12,"126":12,"127":12,"128":[12,18,20,21,25,28,30,31,41],"129":12,"13":[6,12],"130":12,"131":12,"132":12,"133":12,"134":12,"135":12,"136":12,"137":12,"138":12,"139":12,"14":[6,12,20],"140":12,"141":12,"142":12,"143":12,"144":12,"145":12,"146":12,"147":12,"148":12,"149":12,"15":[6,12,18,20,38],"150":12,"151":12,"152":12,"153":12,"155":12,"156":12,"157":12,"158":12,"159":12,"16":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"160":12,"161":12,"163":12,"164":12,"167":12,"168":12,"169":12,"16x4":[6,12,28,34],"17":[6,8,12],"170":12,"171":12,"172":12,"173":12,"174":12,"177":12,"18":[6,12,15],"181":12,"182":12,"183":12,"184":12,"185":12,"186":12,"188":12,"189":12,"19":[6,12],"190":12,"191":12,"192":12,"193":12,"195":12,"196":12,"199":12,"1a":[6,12],"1b":[6,12],"1c":[6,12],"1d":6,"1e":6,"1ex":[9,15,18,19,20,21,34,36,38,43],"1f":6,"2":[2,5,8,9,12,13,15,16,18,19,20,21,22,24,25,26,28,31,32,34,35,38,39,41,43],"20":[6,12,38],"200":12,"2002":[16,39],"201":12,"2017":[9,16,39],"2018":9,"2019":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"202":12,"2022":[22,24],"203":12,"204":12,"205":12,"206":12,"209":12,"21":[6,12],"213":12,"214":12,"215":12,"216":12,"217":12,"218":12,"219":12,"22":[6,12,38],"220":12,"221":12,"222":12,"223":12,"224":12,"225":12,"227":12,"228":12,"229":12,"23":[6,12,31],"230":12,"231":12,"232":12,"233":12,"234":12,"235":12,"236":12,"237":12,"239":12,"24":[6,12],"240":[12,18],"241":12,"242":12,"243":12,"244":12,"245":12,"246":12,"247":12,"248":12,"249":12,"25":[6,12],"250":12,"251":12,"252":12,"253":12,"254":12,"255":12,"256":31,"26":[6,12],"27":[6,12,22,24,38],"28":[6,12],"29":[6,12],"2a":[6,12],"2b":[6,12],"2c":[6,12],"2d":[6,12],"2e":[6,12],"2ex":[12,34],"2f":[6,12],"3":[1,8,12,13,15,20,30,31,34,41],"30":[6,12],"31":[6,12],"32":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"32x2":[6,12,28,34],"33":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"34":[6,12],"35":[6,12],"36":[6,12],"37":[6,12],"38":[6,12],"38th":[9,16,39],"39":[6,12],"3a":[6,12],"3b":[6,12],"3c":[6,12],"3d":[6,12],"3e":[6,12,15],"3ex":34,"3f":[6,12],"4":[1,8,12,13,15,20,25,31,34,35],"40":[6,8,12],"41":[6,8,12],"42":[6,12],"43":[6,12],"44":[6,12],"45":[6,12],"46":[6,12],"47":[6,12],"48":[6,12],"49":[6,12],"4a":[6,12],"4b":[6,12],"4c":[6,12],"4d":[6,12],"4e":[6,12],"4f":[6,12],"5":[1,8,12,13,20,32,38],"50":[6,12],"51":[6,12],"52":[6,12,31],"53":[6,12],"54":[6,12],"55":[6,12],"56":[6,12],"57":[6,12],"58":[6,12],"59":[6,12],"5a":[6,12],"5b":[6,12],"5c":[6,12,38],"5d":[6,12],"5e":[6,12],"5f":[6,8,12],"6":[1,12,13,15],"60":[6,8,12,14],"61":[6,8,12,13],"62":[6,12],"63":[6,12],"64":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"65":[6,12],"65536":21,"66":[6,12],"67":[6,12],"68":[6,12],"69":[6,12],"6a":[6,12],"6b":[6,12],"6c":[6,12],"6d":[6,12,13],"6e":[6,8,12],"6f":[6,8,12,14],"7":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"70":[6,8,12,14],"71":[6,8,12],"72":[6,12],"73":[6,12,13],"74":[6,12],"75":[6,12],"754":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"76":[6,12],"77":[6,12],"78":[6,12],"79":[6,12],"7a":[6,8,12],"7b":[6,8,12,14,15],"7c":[6,8,10,12,14],"7d":[6,8,10,12,14],"7e":[6,8,10,12,14,15],"7f":[6,8,10,12,14,15,38],"7th":9,"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"80":[6,12,15],"800":15,"81":[6,12],"82":[6,12],"83":[6,12,15],"84":[6,12],"85":[6,12],"86":[6,12],"87":[6,12],"88":[6,12],"89":[6,12],"8a":[6,12],"8b":[6,12],"8c":[6,12],"8d":[6,12],"8e":[6,12],"8f":[6,12],"8x8":[6,12,28,34],"9":[12,13,15,38],"90":[6,12],"91":[6,12],"92":[6,12],"93":[6,12],"94":[6,12],"95":[6,12],"96":[6,12],"97":[6,12],"98":[6,12],"99":[6,12],"9a":[6,12],"9b":[6,12],"9c":[6,12],"9d":[6,12],"9e":[6,12],"9f":[6,12],"abstract":[3,9,10,16,20,21,25,26,31,32,36,38,39],"boolean":[25,28],"break":[24,28],"byte":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43],"case":[0,3,4,9,10,13,14,16,18,20,24,26,28,32,34,36,38,39,41,43],"char":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"class":[3,29,30,31,34,35],"const":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"default":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"do":[0,2,3,9,16,18,19,28,36,38,39,41],"export":[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],"final":[0,9,19,21,25,39],"float":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,42,43],"function":[0,1,4,5,7,8,10,11,15,16,17,20,24,25,27,28,32,33,34,39,40,41],"import":[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],"int":[0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"long":[3,16,20,41],"new":[0,1,3,9,16,19,24,34,36,39,41],"null":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"return":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"short":[26,29],"static":[9,19,21,25,28,29],"switch":0,"throw":28,"true":[0,20],"try":[3,18],"var":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"while":[9,13,18,19,28,29,31,35],A:[0,2,3,4,9,10,16,18,19,20,21,24,25,26,28,29,31,32,35,36,38,39,41,42],And:18,As:[3,15,16,20,24,28,36,41],At:[24,36],BE:[6,12],But:0,For:[0,3,4,9,10,12,13,15,16,18,19,20,21,25,26,28,29,32,34,35,39,41,42],If:[3,4,9,10,13,18,19,20,26,28,30,32,36,39,41,42,43],In:[0,3,9,10,12,13,14,16,18,19,20,21,24,25,28,29,30,31,32,34,36,38,39,41,43],It:[0,2,3,13,16,18,19,20,21,24,25,28,29,30,32,35,36],Its:[24,28,29,43],No:[9,10,18,24,31,34],Of:24,On:3,Or:[9,18,43],Such:[2,16,24,25,34,36,39,41],That:[0,9,10,20,21,30,35,36,38,39,41],The:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42,43],Their:[13,34],Then:[9,19,41,42,43],There:[9,16,20,21,25,41],These:[4,19,20,21,24,25,28,29,32],To:[9,12,16,24,32,39],_0:[2,13,18,19,21],_1:[2,7,9,12,13,14,26,34,36,39,43],_2:[2,7,9,12,13,14,26,34,36,39,43],_3:13,_4:[13,34],_5:13,_6:13,_7:13,_8:[13,20,34],_9:13,_:[1,6,12,13,15,19,21,28,34,36,38],_e:20,_f32:[28,34],_f32x4:[1,6,12,28,34],_f64:[28,34],_f64x2:[1,6,12,28,34],_f:[1,18,21,28],_high:[6,12,34],_i16x8:[1,6,12,28,34],_i32:[28,34],_i32x4:[1,6,12,28,34],_i64:[28,34],_i8x16:[1,6,12,28,34],_i:[1,3,9,19,26,28,34,36,41,42],_if:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_indirect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_low:[1,6,12,28,34],_m:[18,20,21],_n:[2,13,18,21,31,34,38,39],_null:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_pairwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_s:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_splat:[1,6,12,28,34],_t:[18,20,21],_tabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_true:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_x:18,_y:18,_zero:[1,6,12,28,34],a0:[6,12],a1:[6,12],a2:[6,12],a3:[6,12],a4:[6,12],a5:[6,12],a6:[6,12],a7:[6,12],a8:[6,12],a9:[6,12],a_1:[10,26,32],a_2:26,a_i:[10,26,32],a_n:[10,26,32],aa:[6,12],ab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],abbrevi:[21,24,33,38],abil:1,abl:[9,13],abort:[16,18,25,28],about:[3,9,16,21,24,39],abov:[0,4,9,18,31,35],abrupt:21,absent:[9,39,41],absolut:34,ac:[6,12],accept:30,access:[0,1,3,9,18,24,25,26,28,29,34,39,42],accord:[3,18,28,35,39],accordingli:[39,41],accumul:[0,21,41],acm:[9,16,39],acronym:24,across:24,activ:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],actual:[0,2,10,12,13,18,19,25,32,42],ad:[1,6,9,12,13,19,20,28],add:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],addit:[0,1,3,4,9,10,12,13,15,21,24,25,28,29,30,32,34,36,39],addition:[0,28],addr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],address:[3,9,17,19,25,28],adher:[9,18],admin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],administr:[5,17,18],adopt:[3,10,16,26,32,39],advantag:24,ae:[6,12],af:[6,12],affect:[2,18,19,28,35],aforement:24,after:[0,2,13,16,18,28,29,34],afterward:[0,16],again:20,against:[0,18,19,28,43],ahead:[24,35],akin:41,algorithm:[5,22,39,41],align:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alik:24,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocglob:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allochostfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmodul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloct:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocx:19,allow:[0,1,4,9,10,12,14,15,18,20,21,24,25,28,29,32,34,35,36,38,39,41,43],alon:[9,16,24,39],along:0,alreadi:[4,18,38],also:[1,3,9,10,12,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41],alter:25,altern:[10,20,28],alwai:[9,20,21,25,28,35,38,39,43],ambient:24,ambigu:21,amen:[16,39],among:[20,31],an:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,42,43],analog:34,andnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],andrea:[9,16,22,39],ani:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],annot:[12,18,28,34,39,41],anonym:[25,36,37],anoth:[28,36,41],anyth:41,anywher:[21,34,37],aot:24,api:[19,24,25],appear:[2,10,18,26,32,34,36,42],append:[19,26,39],appendix:[0,1,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],appli:[9,16,18,20,21,32,36,39,43],applic:[4,10,16,20,24,32],approach:[16,39],appropri:[9,16,19,28],ar:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42,43],arbitrari:[1,20,31,32,38],arbitrarili:[21,41],architectur:24,argument:[3,9,12,18,19,20,21,25,28,34],arithmet:[20,31],ariti:[0,18,21],around:[25,34],arrai:[2,3,9,10,12,13,14,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42],articl:[9,16,39],ascii:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ascrib:18,aspect:[0,4,24],assembl:25,assert:[3,16,18,19],assign:[2,21,32,35],associ:[0,2,9,18,19,21,28,30,32],assum:[3,4,9,16,19,20,21,26,32,35,39,41],assumpt:[9,24,39],ast:[6,7,8,10,12,13,14,15,16,19,20,21,26,28,29,30,31,32,34,35,36,37,38,39,43],ast_i:19,atom:[19,26],attach:2,attack:24,attribut:[10,20,32,36],augment:[10,26,32,36],authorit:24,automat:[3,9,25,29,36],aux:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],auxiliari:[0,3,11,15,18,19,20,21,27,29,30,31,34,36,41],avail:[18,24,25,28,29,39],averylonginstructionnameforvectext:34,avgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],avoid:[1,12,16,21,32],awai:28,axiom:39,b0:[6,12],b1:[6,12],b2:[6,12],b3:[6,12],b4:[6,12],b5:[6,12],b6:[6,12],b7:[6,12],b8:[6,12],b9:[6,12],b:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],b_1:[9,10,15,26],b_2:[9,15,26],b_3:15,b_4:15,b_:12,b_i:10,b_n:10,ba:[6,12],back:[0,18,25,28,41],backslash0asm:13,backslash:38,backward:[13,18,28,34,36],base:[18,20,25,28,29,31,34],basic:[10,21,25,28],bastien:[9,16,39],bb:[6,12],bc:[6,12],bd:[6,12],becaus:[18,19,20,21,24,41],becom:29,been:[0,1,16,19,21,24,29],befor:[4,13,19,24,29,32,36],beforehand:19,begin:[2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,26,28,29,30,31,32,34,35,36,37,38,39,41,42],behav:[9,21,28],behavior:[9,16,18,21,24,28],being:[13,24,28,41],below:[9,19,42],ben:[9,16,39],benjamin:[16,39],besid:[20,21],between:[3,20,25,31,32],beyond:[24,25],bf:[6,12],big:39,bigoplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bigwedg:18,biject:20,binari:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bind:[10,32,34,36],binop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitfield:13,bitmask:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitwidth:28,bitwis:[20,28],block:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],blockchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockcom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blocktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],book:[16,21,39],bool:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bot:[9,18,41],both:[9,14,15,16,20,26,28,29,34,36,38,39,41,43],bottom:41,bound:[10,13,15,25,26,28,31,32,34,36,43],boundari:1,br:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],br_if:0,br_tabl:0,bracket:[12,28,30,34,35,38],branch:[0,18,21,25,28,34],breach:24,brief:[16,39],bring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],broadli:24,browser:24,bt:[6,12,18,34],bubbl:21,bytes_:[12,20],c0:[6,12,15],c1:[6,12],c2:[6,12,18],c3:[6,12],c4:[6,12],c5:6,c6:6,c7:6,c8:6,c9:6,c:[3,7,9,15,28,34,35,38,39,42,43],c_0:20,c_1:[18,20],c_2:18,c_3:18,c_:20,c_i:20,c_k:20,ca:6,cach:24,calcul:19,call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],calle:28,can:[0,1,2,3,9,10,12,13,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42],candid:20,candidatepair:20,cannot:[0,12,19,24,25,28,29,35,37],canon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cap:[20,24],capabl:24,carri:[3,21],carriag:35,categori:[8,21,25,28,35],caught:25,caus:28,cb:6,cc:6,ccc:9,cd:6,cdot2:31,cdot64:18,cdot:[3,9,15,16,18,19,20,31,38,41],ce:6,ceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],certain:[9,16,20,21,25],certifi:9,cf:6,chang:[0,5,9,13,22,39],channel:24,chapter:35,charact:[4,15,24,31,32,33,38],check:[0,1,13,18,19,25,28,30,34,39,41,42,43],choic:[18,21,36,41],chosen:[20,41],clamp:20,classif:3,classifi:[9,19,30,39,41,42,43],claus:[20,36],clear:[21,30,31],clll:36,cllll:36,close:[10,28,32,42],closest:20,closur:[19,21],clutter:[16,32],clz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],code:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codifi:9,coexist:14,coincid:[9,16,18],collect:[21,29,39],collid:12,com:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],combin:[1,20,36,37,41],combinatori:[10,26,32],come:28,comma:38,comment:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],common:[4,21,24,26],commun:24,compact:24,comparison:28,compat:[13,34,36],compil:[1,2,4,13,24,25,29],complement:[15,20,24,25,28,31],complementari:25,complet:[0,3,10,25,29,32,39],complex:[26,31],compon:[9,13,16,21,26,29,32,39,42],compos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],composit:[26,36],compound:[9,41],compress:[10,12,13],comput:[4,9,16,18,20,21,24,25,28,30,32],concat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],concaten:[3,9,13,18,19,26,42],concept:23,conceptu:25,concern:[24,28],concis:[16,26,39],conclus:39,concret:[4,26,32,39],condit:[5,9,10,15,18,19,20,25,26,28,32,34,36,39],confer:[9,16,39],config:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],configur:[5,7,16],conform:4,conjunct:20,connect:3,conrad:9,consecut:[0,4,21,36],consequ:[0,9,10,28,29,35,36,41,42],consid:[20,21,24,32,34,35],consider:23,consist:[0,2,9,12,13,16,18,19,20,21,25,28,29,34,35,36],constant:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],constitut:18,constrain:[30,41],constraint:[0,4,9,15,21,39,41],construct:[16,21,25,26,28,29,31,32,36,39,42],constructor:[8,14],consum:[18,24,28,39,41],cont:13,contain:[0,9,10,13,15,16,18,19,21,24,25,28,29,32,34,35,36,38,39,41,42],contemporari:24,content:[2,13,18,19,21,26,29,39,42],context:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,40,41,42,43],contigu:25,continu:[18,21,26,28],contract:24,contrast:[21,41],contribut:2,control:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],conveni:[16,20,21,28,32],convent:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,22,23,24,25,27,33,34,35,36,37,40,41,42,43],convers:[17,18,21,25,28],convert:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],copi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],copysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],corollari:9,correct:9,correctli:38,correspond:[3,12,13,14,18,19,20,21,26,29,30,31,32,34,35,38,39,41],corrupt:24,could:25,count:[1,11,18,20,21],cours:24,courtesi:21,cover:9,cpp:9,crash:9,creat:[3,21,25],crucial:16,ctrl:0,ctrl_frame:0,ctrl_stack:0,ctxt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ctz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cup:20,current:[0,2,9,10,13,16,18,21,25,28,29,36,39,41],custom:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],customsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],d0:[6,12],d1:[6,12],d2:[6,12],d3:6,d4:6,d5:6,d6:6,d7:6,d7ff:[31,35],d800:[15,38],d8:6,d9:6,d:[13,18,20,36,38],d_0:20,d_1:[18,20],d_2:[18,20],d_:20,da:[6,18,36],dan:[9,16,39],data:[1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,43],dataaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datacountsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dataidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datainst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datamod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],datasec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datastr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],db:6,dc:6,dd:6,de:6,deal:[10,26],debug:[13,24],debugg:2,decim:38,declar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],decod:[0,10,13,24,25],decompos:21,decreas:20,dedic:2,deduct:39,def:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],defer:[4,13],defin:[1,2,3,9,10,13,15,16,18,19,20,21,24,25,26,29,30,31,32,34,35,36,38,39,41,42,43],definit:[2,3,9,13,16,18,19,20,21,24,25,26,29,31,35,36,39,41,42],degre:41,delimit:[34,35],delta:28,demot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],denot:[10,13,14,18,20,21,26,28,29,30,31,32,38,39],dens:10,depend:[2,4,13,18,19,20,23,28,29,31,38,39,42],deploy:29,depth:[4,28],derek:[9,16,39],deriv:[3,9,10,16,39],desc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],describ:[0,9,13,16,21,24,26,28,29,31,39,41],descript:[3,7,13,16,29,32,36,39,42],descriptor:[29,34,36],design:[4,9,16,23,39],desktop:24,destin:28,detail:25,detect:0,determin:[0,16,19,20,28,30,31,34,42],determinist:[16,18,20,21],develop:24,devic:[19,24,42],df:6,diagnost:3,differ:[0,3,9,10,12,18,19,20,21,24,25,26,28,29,31,41,42],digit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dim:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dimens:[4,41],dimension:2,dinstr:19,direct:[20,28],directli:[0,1,3,9,15,18,24,25,32,34,36],disallow:35,disambigu:35,discrep:24,disjoint:[9,42],disjunct:20,distinct:[25,31,32],distinguish:[10,13,21,28,29,31,32,34,41],distribut:25,div:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],diverg:[9,18],divid:[3,18,19,20,21,25,28,35,41],dividend:20,divis:[19,20],dmode:19,document:[24,37],documentari:36,doe:[0,3,9,13,18,19,20,24,28,35,38,39,42],dot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],doubl:[30,35],draft:[22,24],drawn:32,drop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],due:[3,18,19,31],dummi:19,dup:0,duplic:[0,28,32,36],dure:[4,9,18,21,29,30,43],dynam:[9,19,21,25,28],e000:[15,31,35,38],e0:[6,15],e1:6,e2:6,e3:6,e4:6,e5:6,e6:6,e7:6,e8:6,e9:6,e:[0,2,9,10,13,18,19,20,21,24,28,31,36,38],e_i:[13,42],ea:[6,18],each:[0,2,3,9,10,12,13,16,18,19,20,21,24,25,26,28,29,32,36,38,39,41,42,43],earlier:[18,36],eas:43,easi:[0,24],easili:[19,42],eb:6,ec:6,ed:6,editor:22,ee:6,ef:6,effect:[0,16,18,21,28,34,35,41,42],effector:35,effici:[24,41],einit:19,einstr:19,either:[0,9,10,12,15,16,18,19,20,21,24,25,26,28,29,30,31,32,35,36,38,41,43],el:[13,36],elem:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],elemaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],element:[0,1,3,4,7,10,11,14,17,18,20,25,26,27,28,30,33,38,39,40,41],elemexpr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],eleminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemkind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemmod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],elemsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elimin:21,ellips:26,els:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],elsewher:39,emb:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embed:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embedd:[3,4,9,18,19,21,24,25,29,30],embodi:39,emploi:[24,26],empti:[0,3,9,10,12,13,16,18,19,20,21,26,29,32,34,36,39,42,43],emptyset:[9,13],emul:25,enabl:[4,13,21,24],encapsul:9,enclos:[28,32,35,38],encod:[2,10,12,13,14,15,21,24,25,31,32,38,39],encompass:24,end:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],end_typ:0,endian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],enforc:[15,28,34,36,39,41],enough:28,enrich:1,ensur:[0,9,18,19,21,25,36],enter:[0,16,28],entir:[16,21,29,36,41,42],entiti:[21,25,29,30],entri:[1,3,13,18,19,21,28,30,32,34,39],enumer:0,environ:[3,4,24,25,29],eof:35,epsilon:[3,8,9,10,12,13,14,16,18,19,20,21,26,32,34,36,37,38,42,43],eq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],equal:[3,9,10,19,20,21,24,26,41,43],equat:20,equiv:[32,34,36,37],equival:[13,16,29,39],eqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],err:18,error:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],error_if:0,escap:38,especi:24,establish:24,et:[13,14,19,36,37,42],ev:3,evalu:[9,16,18,19],even:[0,3,20,21,29],event:4,ever:13,everi:[3,4,9,13,16,18,29,31,39],ex:[3,13,19,36],exact:[20,28],exactli:[10,20,21],exampl:[0,3,9,10,15,16,18,20,21,25,28,29,32,34,35,39,41],exce:[15,21],exceed:[4,18],except:[9,10,12,13,16,20,26,32,35,38,41,42],exclud:20,exclus:[20,35],exec:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],execut:[5,6,9,16,18,19,21,22,24,25,28,30,41],exist:[0,3,9,18,19,20,21,24,34,36,39],exit:[0,16],expand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expans:[10,20,26,32,36,38],expect:[0,3,4,9,13,18,19,28,41],experi:2,explan:[16,39],explanatori:0,explicit:[9,12,13,21,26,34,36,38],explicitli:[3,9,16,18,39],expon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],exportinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],express:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],extadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extend16:34,extend32:34,extend8:34,extend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extens:[0,5,10,12,13,18,20,28,32,39],extern:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42],externaddr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],externv:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extra:9,extract:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],f0:[6,15],f1:6,f2:6,f32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f3:6,f4:6,f5:6,f64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f6:6,f7:6,f8:6,f9:6,f:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f_:19,fa:6,fab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fact:[0,18,34,35],fadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fail:[18,19],failur:[3,18,19],fall:[18,25,35],fals:0,farther:28,fashion:[21,29,30],fast:24,fb:6,fbia:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fc:[6,12],fceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fcopysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fd:[6,12],fdiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fe:[6,15],featur:[4,24],feed:35,feq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],few:[10,16,32],ff:[6,15,31],ffloor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],field:[13,19,26,36,39,42],file:[10,32,36],fill:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],filter:[21,29,30],finit:9,first:[0,4,19,20,26,28,29,30,36,41],fit:19,fix:[4,26,31],flag:[0,14,20],flat:[0,26],flavor:28,fle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],floor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],flow:[25,28],flt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fn:36,fne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fnearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fneg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fold:[4,33],foldedinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],follow:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,32,34,35,36,38,39,43],font:[10,26,32],foral:[9,20],foreach:0,forev:9,form:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],formal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],format:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,37,38,39,40,41,42,43],formed:[25,36,42],former:[0,10,32],formul:39,forth:10,forward:[13,28,29],found:[16,39],four:[21,25,28],fpmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fpmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],frac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fraction:38,frame:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],free:[19,29,39],freed:28,frelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fresh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],from:[0,3,4,9,10,13,16,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,39,41,42],front:39,fshape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ft:[3,13,18,36,42],ftestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ftrunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],full:25,fulli:[4,24,41],func:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],funcaddr:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],functyp:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],funop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],further:[13,15,16,25,28,41],furthermor:[9,13,16,18,36,38,42],futur:[4,9,12,13,14,18,20,21,24,28,29,30,41,42],g:[0,2,9,19,24,31],gap:12,garbag:21,ge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gener:[0,1,9,10,13,16,18,20,26,32,39],geq:[10,12,15,20,26,31,32,38,43],get:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],gi:3,ginit:19,github:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],give:[16,39],given:[2,4,9,10,16,18,19,20,21,24,25,26,28,29,30,32,34,36,38,39,41,43],gl:36,glob:[13,18],global:[0,1,2,4,5,6,7,8,10,11,12,15,16,17,20,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],globaladdr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globaltyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],go:29,goal:23,gohman:[9,16,39],grammar:[3,11,13,27,28,31,33,34,35,36,38],grave:38,greater:20,group:[2,24,28,34],grow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],growmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],grown:25,growtabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],guarante:[3,16,24,25],h:38,ha:[0,1,2,3,9,10,13,16,18,19,20,21,24,25,26,29,31,32,39,41],haa:[9,16,39],had:10,half:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],hand:[3,21],handl:[0,20,21,25,34],happen:19,hardwar:[18,24,28],hat:38,have:[1,4,10,12,13,18,20,21,24,26,28,29,31,32,34,37,39,41,43],head:34,heap:37,heaptyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],height:[0,21,25,28],help:20,henc:[3,20,21,24,38,39],here:[0,3,10,13,18,19,21,35,39,41,43],heterogen:28,hexadecim:[10,31,38],hexdigit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfloat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfrac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexnum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hf:18,hfill:19,hh:38,high:[18,24,28],hint:[2,18,28],histori:[5,22],hold:[9,18,20,21,30,39],hole:21,holman:[9,16,39],hookrightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hop:21,horizont:35,host:[3,21,24,25,29],hostcod:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hostfunc:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],how:[19,24,25,28,29,34,41],howev:[0,2,4,10,13,15,18,19,21,24,25,28,29,31,32,34,36,39,42,43],hspace:34,http:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16x8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i2:20,i32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8x16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],i:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i_1:18,i_2:18,iab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iandnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iclz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ictz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],id:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idc:36,idchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ident:21,identifi:[4,13,20,21,29,32,33,34,36,37],idiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextendn_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ift:42,ig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ignor:[2,13,35],igt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ij:[19,41],il:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ill:39,ilt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],im:[3,13,19,36],imax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],immateri:36,immedi:[1,12,25,28,34,39],immin:21,immut:[9,21,25,29,30,31],implement:[0,2,3,5,9,10,13,16,18,19,21,22,25,29,39,41],impli:[9,28,34],implic:39,implicit:[3,16,21,25,28],implicitli:[9,10,16,25,26,28,29,32,35,39],importdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],importsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],impos:[4,36,41],improv:2,imt:42,imul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],includ:[4,9,14,16,19,20,21,25,28,29,31,34,36,39],incompat:13,increas:[2,13,28],increment:[13,24],independ:[24,39],index:[0,1,2,3,4,5,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indic:[0,2,3,4,11,12,14,18,21,25,26,27,28,32,33,34,35,38,39,41,42],indirect:[2,21,28],indirectli:[3,25,28],indirectnameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indirectnamemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],individu:[2,4,18,19,21,28,30,36,39,41],ine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ineg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],inf:38,infer:36,infin:[20,31,38],infinit:30,inform:[13,24,39],infrequ:13,infti:[20,31,38],inher:[9,30],inherit:32,init:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],initi:[0,3,13,16,18,19,25,28,29,36,41,42],inject:1,inlin:[28,34,36],inner:21,innermost:28,inot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],input:[20,28,30,35,41],insert:[13,34,36,38,41],insid:[9,21,24,29,35,39],inspect:24,instanc:[4,5,7,16,17,18,19,25],instanti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],instead:[0,1,13,16,24,25,35,42],instr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],instruct:[0,2,3,4,5,7,8,10,11,13,14,15,16,17,20,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,43],instrument:9,integ:[1,10,11,12,17,18,21,25,27,28,30,32,33],integr:[0,1,20,21,24],intend:[0,3,13,18,24,28,29],interact:[3,21,24],interchang:31,interdepend:[4,21],interest:[16,39],interfac:[3,24],interleav:[19,21],intern:[25,42],interoper:24,interpret:[3,4,13,16,21,25,26,28,30,31,38],introduc:[1,10,28,30,39],introduct:[16,22,39],intuit:[16,21,28,39],invalid:[0,4,13,41],invari:[0,9,16,21],invers:20,invert:20,invoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],invok:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],involv:28,io:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ior:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ipopcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],is_empti:0,is_num:0,is_ref:0,is_vec:0,isa:24,ishap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],ishl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isol:24,issu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ital:26,item:[4,36],iter:[10,18,26,32],itestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],its:[0,3,4,9,12,13,16,18,19,20,21,24,25,26,28,29,31,34,36,38,39,42],itself:[2,9,16,19,21,25,28,29,38,39,42],itt:42,iunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ixor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],j:[18,19,20],j_1:20,j_2:20,j_3:20,jf:[9,16,39],jit:24,judgement:[7,9,39],judgment:39,jump:[16,18,28],just:[4,19,20,24,36,42],k:[7,18,19,20,21,43],keep:21,keyword:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ki:[3,9,18,19,21,36],kind:[9,13,19,21,29,30],known:[0,1,21,25,28,30,31],l:[6,9,10,12,13,14,15,19,20,21,29,32,34,35,36,37,38,39,42],l_i:[18,41],l_n:[12,34],label:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43],label_typ:0,labelbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],labelidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],laneidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],languag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],larg:[4,21,26],larger:[3,18,19,20,28,41,42,43],largest:20,last:[0,4],later:[16,29],latest:22,latter:[0,18,31,32,36],layer:[10,24],layout:24,lcl:[15,18,19,21,36],lcll:[20,34],lclll:3,lclllllcl:31,le:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lead:[10,20,31],least:[16,18],leav:[4,21],leb128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],left:[20,21,35,39],leftrightarrow:20,len:19,length:[3,4,9,10,12,13,15,18,19,20,21,26,31,32,36,41,42],leq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],less:20,let:[0,3,9,18,19,20,41,42],level:[24,25,29],lexic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],li:[20,28],lie:38,lieu:38,life:21,lift:[20,28,29,42],like:[0,2,3,4,13,20,21,24,25,28,29,30,31,32,34,39,41],likewis:[0,2],lim:[14,37],limit:[0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,39,40,41,42],line:35,linear:[9,10,21,24,25,28,29,30],linechar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],linecom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],list:[0,4,18,19,21,29,32,34,36,39],liter:[4,12,31,32,35,36,38],littl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],littleendian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],live:19,ll:[16,21,32,39],llcl:[21,28,29],llcll:[2,10,15,31,32,36,37],llclll:[2,10,12,13,14,15,31,32,34,35,36,37,38],llcllll:[12,13,34,36],llclllll:15,llcllllllll:36,lll:[18,20,21,36,41],llll:[3,21,28,29,30,31,32,35,39,41],lllll:[26,29,34],load16:34,load16x4:34,load32:34,load32x2:34,load64:34,load8:34,load8x8:34,load:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],local:[0,1,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],localbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],locat:9,logic:[0,21],longer:[1,21,28],longest:35,longrightarrow:[3,9],look:[21,35,36,39],lookup:41,loop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],loss:12,low:[18,24,25,28],lower:20,lt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],luke:[9,16,39],m:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],m_0:[18,31],m_1:[36,43],m_1m_2:31,m_2:[36,43],m_:18,m_k:18,m_m:31,ma:18,machin:[3,9,16,21,24,25,28],made:[13,18,21,31,32],mag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magnitud:[20,31,38],mai:[0,1,2,3,4,10,12,13,16,18,19,20,21,24,25,26,28,29,30,31,34,35,36,37,38,41,42,43],main:[0,1,3,24,25,31],maintain:[0,21,25,36],make:[2,9,21,24,41],malform:[13,15],mandatori:34,mani:[10,24,26,32],manipul:[0,1,3,21,25,26,28,39,41],manner:[0,4,20,24,39,41],mantissa:31,map:[18,26,30,36,41,42],mark:[0,18,21,38],marker:[21,28],match:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbb:20,mathbf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathdef1000:6,mathdef1001:6,mathdef1002:6,mathdef1003:6,mathdef1004:6,mathdef1005:6,mathdef1006:6,mathdef1007:6,mathdef1008:6,mathdef1009:6,mathdef100:2,mathdef1010:6,mathdef1011:6,mathdef1012:6,mathdef1013:6,mathdef1014:6,mathdef1015:6,mathdef1016:6,mathdef1017:6,mathdef1018:6,mathdef1019:6,mathdef101:2,mathdef1020:6,mathdef1021:6,mathdef1022:6,mathdef1023:6,mathdef1024:6,mathdef1025:6,mathdef1026:6,mathdef1027:6,mathdef1028:6,mathdef1029:6,mathdef102:2,mathdef1030:6,mathdef1031:6,mathdef1032:6,mathdef1033:6,mathdef1034:6,mathdef1035:6,mathdef1036:7,mathdef1037:7,mathdef1038:7,mathdef1039:7,mathdef103:2,mathdef1040:7,mathdef1041:7,mathdef1042:7,mathdef1043:7,mathdef1044:7,mathdef1045:7,mathdef1046:7,mathdef1047:7,mathdef1048:7,mathdef1049:7,mathdef104:2,mathdef1050:7,mathdef1051:7,mathdef1052:7,mathdef1053:7,mathdef1054:7,mathdef1055:7,mathdef1056:7,mathdef1057:7,mathdef1058:7,mathdef1059:7,mathdef105:2,mathdef1060:7,mathdef1061:7,mathdef1062:7,mathdef1063:7,mathdef1064:7,mathdef1065:7,mathdef1066:7,mathdef1067:7,mathdef1068:7,mathdef1069:7,mathdef106:2,mathdef1070:7,mathdef1071:7,mathdef1072:7,mathdef1073:7,mathdef1074:7,mathdef1075:8,mathdef1076:8,mathdef1077:8,mathdef1078:8,mathdef1079:8,mathdef107:2,mathdef1080:8,mathdef1081:8,mathdef1082:8,mathdef1083:8,mathdef1084:8,mathdef1085:8,mathdef1086:8,mathdef1087:8,mathdef1088:8,mathdef1089:8,mathdef108:2,mathdef1090:8,mathdef1091:8,mathdef1092:8,mathdef1093:8,mathdef1094:8,mathdef1095:8,mathdef1096:8,mathdef1097:8,mathdef1098:8,mathdef1099:8,mathdef109:2,mathdef10:0,mathdef1100:8,mathdef1101:8,mathdef1102:8,mathdef1103:8,mathdef1104:8,mathdef1105:8,mathdef1106:8,mathdef1107:8,mathdef1108:8,mathdef1109:8,mathdef110:2,mathdef1110:8,mathdef1111:8,mathdef1112:8,mathdef1113:8,mathdef1114:8,mathdef1115:8,mathdef1116:8,mathdef1117:8,mathdef1118:8,mathdef1119:8,mathdef111:2,mathdef1120:8,mathdef1121:8,mathdef1122:8,mathdef1123:8,mathdef1124:8,mathdef1125:8,mathdef1126:8,mathdef1127:8,mathdef1128:8,mathdef1129:9,mathdef112:2,mathdef1130:9,mathdef1131:9,mathdef1132:9,mathdef1133:9,mathdef1134:9,mathdef1135:9,mathdef1136:9,mathdef1137:9,mathdef1138:9,mathdef1139:9,mathdef113:2,mathdef1140:9,mathdef1141:9,mathdef1142:9,mathdef1143:9,mathdef1144:9,mathdef1145:9,mathdef1146:9,mathdef1147:9,mathdef1148:9,mathdef1149:9,mathdef114:2,mathdef1150:9,mathdef1151:9,mathdef1152:9,mathdef1153:9,mathdef1154:9,mathdef1155:9,mathdef1156:9,mathdef1157:9,mathdef1158:9,mathdef1159:9,mathdef115:2,mathdef1160:9,mathdef1161:9,mathdef1162:9,mathdef1163:9,mathdef1164:9,mathdef1165:9,mathdef1166:9,mathdef1167:9,mathdef1168:10,mathdef1169:10,mathdef116:2,mathdef1170:10,mathdef1171:10,mathdef1172:10,mathdef1173:10,mathdef1174:10,mathdef1175:10,mathdef1176:10,mathdef1177:10,mathdef1178:10,mathdef1179:10,mathdef117:2,mathdef1180:10,mathdef1181:10,mathdef1182:10,mathdef1183:10,mathdef1184:10,mathdef1185:10,mathdef1186:10,mathdef1187:10,mathdef1188:10,mathdef1189:10,mathdef118:2,mathdef1190:10,mathdef1191:10,mathdef1192:10,mathdef1193:10,mathdef1194:10,mathdef1195:10,mathdef1196:10,mathdef1197:10,mathdef1198:10,mathdef1199:10,mathdef119:2,mathdef11:0,mathdef1200:10,mathdef1201:10,mathdef1202:10,mathdef1203:10,mathdef1204:10,mathdef1205:10,mathdef1206:10,mathdef1207:10,mathdef1208:10,mathdef1209:10,mathdef120:3,mathdef1210:10,mathdef1211:10,mathdef1212:10,mathdef1213:10,mathdef1214:10,mathdef1215:10,mathdef1216:10,mathdef1217:10,mathdef1218:11,mathdef1219:11,mathdef121:3,mathdef1220:11,mathdef1221:11,mathdef1222:11,mathdef1223:11,mathdef1224:11,mathdef1225:11,mathdef1226:11,mathdef1227:11,mathdef1228:11,mathdef1229:11,mathdef122:3,mathdef1230:11,mathdef1231:11,mathdef1232:11,mathdef1233:11,mathdef1234:11,mathdef1235:11,mathdef1236:11,mathdef1237:11,mathdef1238:11,mathdef1239:11,mathdef123:3,mathdef1240:11,mathdef1241:11,mathdef1242:11,mathdef1243:11,mathdef1244:11,mathdef1245:11,mathdef1246:11,mathdef1247:11,mathdef1248:11,mathdef1249:11,mathdef124:3,mathdef1250:11,mathdef1251:11,mathdef1252:11,mathdef1253:11,mathdef1254:11,mathdef1255:11,mathdef1256:11,mathdef1257:12,mathdef1258:12,mathdef1259:12,mathdef125:3,mathdef1260:12,mathdef1261:12,mathdef1262:12,mathdef1263:12,mathdef1264:12,mathdef1265:12,mathdef1266:12,mathdef1267:12,mathdef1268:12,mathdef1269:12,mathdef126:3,mathdef1270:12,mathdef1271:12,mathdef1272:12,mathdef1273:12,mathdef1274:12,mathdef1275:12,mathdef1276:12,mathdef1277:12,mathdef1278:12,mathdef1279:12,mathdef127:3,mathdef1280:12,mathdef1281:12,mathdef1282:12,mathdef1283:12,mathdef1284:12,mathdef1285:12,mathdef1286:12,mathdef1287:12,mathdef1288:12,mathdef1289:12,mathdef128:3,mathdef1290:12,mathdef1291:12,mathdef1292:12,mathdef1293:12,mathdef1294:12,mathdef1295:12,mathdef1296:12,mathdef1297:12,mathdef1298:12,mathdef1299:12,mathdef129:3,mathdef12:0,mathdef1300:12,mathdef1301:12,mathdef1302:12,mathdef1303:12,mathdef1304:12,mathdef1305:12,mathdef1306:12,mathdef1307:12,mathdef1308:12,mathdef1309:12,mathdef130:3,mathdef1310:12,mathdef1311:12,mathdef1312:12,mathdef1313:12,mathdef1314:12,mathdef1315:12,mathdef1316:12,mathdef1317:12,mathdef1318:12,mathdef1319:12,mathdef131:3,mathdef1320:12,mathdef1321:12,mathdef1322:12,mathdef1323:12,mathdef1324:12,mathdef1325:12,mathdef1326:12,mathdef1327:12,mathdef1328:12,mathdef1329:12,mathdef132:3,mathdef1330:12,mathdef1331:12,mathdef1332:12,mathdef1333:12,mathdef1334:12,mathdef1335:12,mathdef1336:12,mathdef1337:12,mathdef1338:12,mathdef1339:12,mathdef133:3,mathdef1340:12,mathdef1341:12,mathdef1342:12,mathdef1343:12,mathdef1344:12,mathdef1345:12,mathdef1346:12,mathdef1347:12,mathdef1348:12,mathdef1349:12,mathdef134:3,mathdef1350:12,mathdef1351:12,mathdef1352:12,mathdef1353:12,mathdef1354:12,mathdef1355:12,mathdef1356:12,mathdef1357:12,mathdef1358:12,mathdef1359:12,mathdef135:3,mathdef1360:12,mathdef1361:12,mathdef1362:12,mathdef1363:12,mathdef1364:12,mathdef1365:12,mathdef1366:12,mathdef1367:12,mathdef1368:12,mathdef1369:12,mathdef136:3,mathdef1370:12,mathdef1371:12,mathdef1372:12,mathdef1373:12,mathdef1374:12,mathdef1375:12,mathdef1376:12,mathdef1377:12,mathdef1378:12,mathdef1379:12,mathdef137:3,mathdef1380:12,mathdef1381:12,mathdef1382:12,mathdef1383:12,mathdef1384:12,mathdef1385:12,mathdef1386:12,mathdef1387:12,mathdef1388:12,mathdef1389:12,mathdef138:3,mathdef1390:12,mathdef1391:12,mathdef1392:12,mathdef1393:12,mathdef1394:12,mathdef1395:12,mathdef1396:12,mathdef1397:12,mathdef1398:12,mathdef1399:12,mathdef139:3,mathdef13:0,mathdef1400:12,mathdef1401:12,mathdef1402:12,mathdef1403:12,mathdef1404:12,mathdef1405:12,mathdef1406:12,mathdef1407:12,mathdef1408:12,mathdef1409:12,mathdef140:3,mathdef1410:12,mathdef1411:12,mathdef1412:12,mathdef1413:12,mathdef1414:12,mathdef1415:12,mathdef1416:12,mathdef1417:12,mathdef1418:12,mathdef1419:12,mathdef141:3,mathdef1420:12,mathdef1421:12,mathdef1422:12,mathdef1423:12,mathdef1424:12,mathdef1425:12,mathdef1426:12,mathdef1427:12,mathdef1428:12,mathdef1429:12,mathdef142:3,mathdef1430:12,mathdef1431:12,mathdef1432:12,mathdef1433:12,mathdef1434:12,mathdef1435:12,mathdef1436:12,mathdef1437:12,mathdef1438:12,mathdef1439:12,mathdef143:3,mathdef1440:12,mathdef1441:12,mathdef1442:12,mathdef1443:12,mathdef1444:12,mathdef1445:12,mathdef1446:12,mathdef1447:12,mathdef1448:12,mathdef1449:12,mathdef144:3,mathdef1450:12,mathdef1451:12,mathdef1452:12,mathdef1453:12,mathdef1454:12,mathdef1455:12,mathdef1456:12,mathdef1457:12,mathdef1458:12,mathdef1459:12,mathdef145:3,mathdef1460:12,mathdef1461:12,mathdef1462:12,mathdef1463:12,mathdef1464:12,mathdef1465:12,mathdef1466:12,mathdef1467:12,mathdef1468:12,mathdef1469:12,mathdef146:3,mathdef1470:12,mathdef1471:12,mathdef1472:12,mathdef1473:12,mathdef1474:12,mathdef1475:12,mathdef1476:12,mathdef1477:12,mathdef1478:12,mathdef1479:12,mathdef147:3,mathdef1480:12,mathdef1481:12,mathdef1482:12,mathdef1483:12,mathdef1484:12,mathdef1485:12,mathdef1486:12,mathdef1487:12,mathdef1488:12,mathdef1489:12,mathdef148:3,mathdef1490:12,mathdef1491:12,mathdef1492:12,mathdef1493:12,mathdef1494:12,mathdef1495:12,mathdef1496:12,mathdef1497:12,mathdef1498:12,mathdef1499:12,mathdef149:3,mathdef14:0,mathdef1500:12,mathdef1501:12,mathdef1502:12,mathdef1503:12,mathdef1504:12,mathdef1505:12,mathdef1506:12,mathdef1507:12,mathdef1508:12,mathdef1509:12,mathdef150:3,mathdef1510:12,mathdef1511:12,mathdef1512:12,mathdef1513:12,mathdef1514:12,mathdef1515:12,mathdef1516:12,mathdef1517:12,mathdef1518:12,mathdef1519:12,mathdef151:3,mathdef1520:12,mathdef1521:12,mathdef1522:12,mathdef1523:12,mathdef1524:12,mathdef1525:12,mathdef1526:12,mathdef1527:12,mathdef1528:12,mathdef1529:12,mathdef152:3,mathdef1530:12,mathdef1531:12,mathdef1532:12,mathdef1533:12,mathdef1534:12,mathdef1535:12,mathdef1536:12,mathdef1537:12,mathdef1538:12,mathdef1539:12,mathdef153:3,mathdef1540:12,mathdef1541:12,mathdef1542:12,mathdef1543:12,mathdef1544:12,mathdef1545:12,mathdef1546:12,mathdef1547:12,mathdef1548:12,mathdef1549:12,mathdef154:3,mathdef1550:12,mathdef1551:12,mathdef1552:12,mathdef1553:12,mathdef1554:12,mathdef1555:12,mathdef1556:12,mathdef1557:12,mathdef1558:12,mathdef1559:12,mathdef155:3,mathdef1560:12,mathdef1561:12,mathdef1562:12,mathdef1563:12,mathdef1564:12,mathdef1565:12,mathdef1566:12,mathdef1567:12,mathdef1568:12,mathdef1569:12,mathdef156:3,mathdef1570:12,mathdef1571:12,mathdef1572:12,mathdef1573:12,mathdef1574:12,mathdef1575:12,mathdef1576:12,mathdef1577:12,mathdef1578:12,mathdef1579:12,mathdef157:3,mathdef1580:12,mathdef1581:12,mathdef1582:12,mathdef1583:12,mathdef1584:12,mathdef1585:12,mathdef1586:12,mathdef1587:12,mathdef1588:12,mathdef1589:12,mathdef158:3,mathdef1590:12,mathdef1591:12,mathdef1592:12,mathdef1593:12,mathdef1594:12,mathdef1595:12,mathdef1596:12,mathdef1597:12,mathdef1598:12,mathdef1599:12,mathdef159:4,mathdef15:0,mathdef1600:12,mathdef1601:12,mathdef1602:12,mathdef1603:12,mathdef1604:12,mathdef1605:12,mathdef1606:12,mathdef1607:12,mathdef1608:12,mathdef1609:12,mathdef160:4,mathdef1610:12,mathdef1611:12,mathdef1612:12,mathdef1613:12,mathdef1614:12,mathdef1615:12,mathdef1616:12,mathdef1617:12,mathdef1618:12,mathdef1619:12,mathdef161:4,mathdef1620:12,mathdef1621:12,mathdef1622:12,mathdef1623:12,mathdef1624:12,mathdef1625:12,mathdef1626:12,mathdef1627:12,mathdef1628:12,mathdef1629:12,mathdef162:4,mathdef1630:12,mathdef1631:12,mathdef1632:12,mathdef1633:12,mathdef1634:12,mathdef1635:12,mathdef1636:12,mathdef1637:12,mathdef1638:12,mathdef1639:12,mathdef163:4,mathdef1640:12,mathdef1641:12,mathdef1642:12,mathdef1643:12,mathdef1644:12,mathdef1645:12,mathdef1646:12,mathdef1647:12,mathdef1648:12,mathdef1649:12,mathdef164:4,mathdef1650:12,mathdef1651:12,mathdef1652:12,mathdef1653:12,mathdef1654:12,mathdef1655:12,mathdef1656:12,mathdef1657:12,mathdef1658:12,mathdef1659:12,mathdef165:4,mathdef1660:12,mathdef1661:12,mathdef1662:12,mathdef1663:12,mathdef1664:12,mathdef1665:12,mathdef1666:12,mathdef1667:12,mathdef1668:12,mathdef1669:12,mathdef166:4,mathdef1670:12,mathdef1671:12,mathdef1672:12,mathdef1673:12,mathdef1674:12,mathdef1675:12,mathdef1676:12,mathdef1677:12,mathdef1678:12,mathdef1679:12,mathdef167:4,mathdef1680:12,mathdef1681:12,mathdef1682:12,mathdef1683:12,mathdef1684:12,mathdef1685:12,mathdef1686:12,mathdef1687:12,mathdef1688:12,mathdef1689:12,mathdef168:4,mathdef1690:12,mathdef1691:12,mathdef1692:12,mathdef1693:12,mathdef1694:12,mathdef1695:12,mathdef1696:12,mathdef1697:12,mathdef1698:12,mathdef1699:12,mathdef169:4,mathdef16:0,mathdef1700:12,mathdef1701:12,mathdef1702:12,mathdef1703:12,mathdef1704:12,mathdef1705:12,mathdef1706:12,mathdef1707:12,mathdef1708:12,mathdef1709:12,mathdef170:4,mathdef1710:12,mathdef1711:12,mathdef1712:12,mathdef1713:12,mathdef1714:12,mathdef1715:12,mathdef1716:12,mathdef1717:12,mathdef1718:12,mathdef1719:12,mathdef171:4,mathdef1720:12,mathdef1721:12,mathdef1722:12,mathdef1723:12,mathdef1724:12,mathdef1725:12,mathdef1726:12,mathdef1727:12,mathdef1728:12,mathdef1729:12,mathdef172:4,mathdef1730:12,mathdef1731:12,mathdef1732:12,mathdef1733:12,mathdef1734:12,mathdef1735:12,mathdef1736:12,mathdef1737:12,mathdef1738:12,mathdef1739:12,mathdef173:4,mathdef1740:12,mathdef1741:12,mathdef1742:12,mathdef1743:12,mathdef1744:12,mathdef1745:12,mathdef1746:12,mathdef1747:12,mathdef1748:12,mathdef1749:13,mathdef174:4,mathdef1750:13,mathdef1751:13,mathdef1752:13,mathdef1753:13,mathdef1754:13,mathdef1755:13,mathdef1756:13,mathdef1757:13,mathdef1758:13,mathdef1759:13,mathdef175:4,mathdef1760:13,mathdef1761:13,mathdef1762:13,mathdef1763:13,mathdef1764:13,mathdef1765:13,mathdef1766:13,mathdef1767:13,mathdef1768:13,mathdef1769:13,mathdef176:4,mathdef1770:13,mathdef1771:13,mathdef1772:13,mathdef1773:13,mathdef1774:13,mathdef1775:13,mathdef1776:13,mathdef1777:13,mathdef1778:13,mathdef1779:13,mathdef177:4,mathdef1780:13,mathdef1781:13,mathdef1782:13,mathdef1783:13,mathdef1784:13,mathdef1785:13,mathdef1786:13,mathdef1787:13,mathdef1788:13,mathdef1789:13,mathdef178:4,mathdef1790:13,mathdef1791:13,mathdef1792:13,mathdef1793:13,mathdef1794:13,mathdef1795:13,mathdef1796:13,mathdef1797:13,mathdef1798:13,mathdef1799:13,mathdef179:4,mathdef17:0,mathdef1800:13,mathdef1801:13,mathdef1802:13,mathdef1803:13,mathdef1804:13,mathdef1805:13,mathdef1806:13,mathdef1807:13,mathdef1808:13,mathdef1809:13,mathdef180:4,mathdef1810:13,mathdef1811:13,mathdef1812:13,mathdef1813:13,mathdef1814:13,mathdef1815:13,mathdef1816:13,mathdef1817:14,mathdef1818:14,mathdef1819:14,mathdef181:4,mathdef1820:14,mathdef1821:14,mathdef1822:14,mathdef1823:14,mathdef1824:14,mathdef1825:14,mathdef1826:14,mathdef1827:14,mathdef1828:14,mathdef1829:14,mathdef182:4,mathdef1830:14,mathdef1831:14,mathdef1832:14,mathdef1833:14,mathdef1834:14,mathdef1835:14,mathdef1836:14,mathdef1837:14,mathdef1838:14,mathdef1839:14,mathdef183:4,mathdef1840:14,mathdef1841:14,mathdef1842:14,mathdef1843:14,mathdef1844:14,mathdef1845:14,mathdef1846:14,mathdef1847:14,mathdef1848:14,mathdef1849:14,mathdef184:4,mathdef1850:14,mathdef1851:14,mathdef1852:14,mathdef1853:14,mathdef1854:14,mathdef1855:14,mathdef1856:14,mathdef1857:14,mathdef1858:14,mathdef1859:14,mathdef185:4,mathdef1860:14,mathdef1861:14,mathdef1862:14,mathdef1863:14,mathdef1864:14,mathdef1865:14,mathdef1866:14,mathdef1867:14,mathdef1868:14,mathdef1869:15,mathdef186:4,mathdef1870:15,mathdef1871:15,mathdef1872:15,mathdef1873:15,mathdef1874:15,mathdef1875:15,mathdef1876:15,mathdef1877:15,mathdef1878:15,mathdef1879:15,mathdef187:4,mathdef1880:15,mathdef1881:15,mathdef1882:15,mathdef1883:15,mathdef1884:15,mathdef1885:15,mathdef1886:15,mathdef1887:15,mathdef1888:15,mathdef1889:15,mathdef188:4,mathdef1890:15,mathdef1891:15,mathdef1892:15,mathdef1893:15,mathdef1894:15,mathdef1895:15,mathdef1896:15,mathdef1897:15,mathdef1898:15,mathdef1899:15,mathdef189:4,mathdef18:0,mathdef1900:15,mathdef1901:15,mathdef1902:15,mathdef1903:15,mathdef1904:15,mathdef1905:15,mathdef1906:15,mathdef1907:15,mathdef1908:15,mathdef1909:15,mathdef190:4,mathdef1910:15,mathdef1911:15,mathdef1912:15,mathdef1913:15,mathdef1914:15,mathdef1915:15,mathdef1916:15,mathdef1917:15,mathdef1918:15,mathdef1919:15,mathdef191:4,mathdef1920:15,mathdef1921:15,mathdef1922:15,mathdef1923:15,mathdef1924:15,mathdef1925:15,mathdef1926:15,mathdef1927:15,mathdef1928:15,mathdef1929:15,mathdef192:4,mathdef1930:15,mathdef1931:15,mathdef1932:15,mathdef1933:15,mathdef1934:15,mathdef1935:15,mathdef1936:15,mathdef1937:15,mathdef1938:15,mathdef1939:15,mathdef193:4,mathdef1940:15,mathdef1941:15,mathdef1942:15,mathdef1943:15,mathdef1944:15,mathdef1945:15,mathdef1946:15,mathdef1947:15,mathdef1948:15,mathdef1949:15,mathdef194:4,mathdef1950:16,mathdef1951:16,mathdef1952:16,mathdef1953:16,mathdef1954:16,mathdef1955:16,mathdef1956:16,mathdef1957:16,mathdef1958:16,mathdef1959:16,mathdef195:4,mathdef1960:16,mathdef1961:16,mathdef1962:16,mathdef1963:16,mathdef1964:16,mathdef1965:16,mathdef1966:16,mathdef1967:16,mathdef1968:16,mathdef1969:16,mathdef196:4,mathdef1970:16,mathdef1971:16,mathdef1972:16,mathdef1973:16,mathdef1974:16,mathdef1975:16,mathdef1976:16,mathdef1977:16,mathdef1978:16,mathdef1979:16,mathdef197:4,mathdef1980:16,mathdef1981:16,mathdef1982:16,mathdef1983:16,mathdef1984:16,mathdef1985:16,mathdef1986:16,mathdef1987:16,mathdef1988:16,mathdef1989:17,mathdef198:5,mathdef1990:17,mathdef1991:17,mathdef1992:17,mathdef1993:17,mathdef1994:17,mathdef1995:17,mathdef1996:17,mathdef1997:17,mathdef1998:17,mathdef1999:17,mathdef199:5,mathdef19:0,mathdef1:0,mathdef2000:17,mathdef2001:17,mathdef2002:17,mathdef2003:17,mathdef2004:17,mathdef2005:17,mathdef2006:17,mathdef2007:17,mathdef2008:17,mathdef2009:17,mathdef200:5,mathdef2010:17,mathdef2011:17,mathdef2012:17,mathdef2013:17,mathdef2014:17,mathdef2015:17,mathdef2016:17,mathdef2017:17,mathdef2018:17,mathdef2019:17,mathdef201:5,mathdef2020:17,mathdef2021:17,mathdef2022:17,mathdef2023:17,mathdef2024:17,mathdef2025:17,mathdef2026:17,mathdef2027:17,mathdef2028:18,mathdef2029:18,mathdef202:5,mathdef2030:18,mathdef2031:18,mathdef2032:18,mathdef2033:18,mathdef2034:18,mathdef2035:18,mathdef2036:18,mathdef2037:18,mathdef2038:18,mathdef2039:18,mathdef203:5,mathdef2040:18,mathdef2041:18,mathdef2042:18,mathdef2043:18,mathdef2044:18,mathdef2045:18,mathdef2046:18,mathdef2047:18,mathdef2048:18,mathdef2049:18,mathdef204:5,mathdef2050:18,mathdef2051:18,mathdef2052:18,mathdef2053:18,mathdef2054:18,mathdef2055:18,mathdef2056:18,mathdef2057:18,mathdef2058:18,mathdef2059:18,mathdef205:5,mathdef2060:18,mathdef2061:18,mathdef2062:18,mathdef2063:18,mathdef2064:18,mathdef2065:18,mathdef2066:18,mathdef2067:19,mathdef2068:19,mathdef2069:19,mathdef206:5,mathdef2070:19,mathdef2071:19,mathdef2072:19,mathdef2073:19,mathdef2074:19,mathdef2075:19,mathdef2076:19,mathdef2077:19,mathdef2078:19,mathdef2079:19,mathdef207:5,mathdef2080:19,mathdef2081:19,mathdef2082:19,mathdef2083:19,mathdef2084:19,mathdef2085:19,mathdef2086:19,mathdef2087:19,mathdef2088:19,mathdef2089:19,mathdef208:5,mathdef2090:19,mathdef2091:19,mathdef2092:19,mathdef2093:19,mathdef2094:19,mathdef2095:19,mathdef2096:19,mathdef2097:19,mathdef2098:19,mathdef2099:19,mathdef209:5,mathdef20:0,mathdef2100:19,mathdef2101:19,mathdef2102:19,mathdef2103:19,mathdef2104:19,mathdef2105:19,mathdef2106:19,mathdef2107:19,mathdef2108:19,mathdef2109:19,mathdef210:5,mathdef2110:20,mathdef2111:20,mathdef2112:20,mathdef2113:20,mathdef2114:20,mathdef2115:20,mathdef2116:20,mathdef2117:20,mathdef2118:20,mathdef2119:20,mathdef211:5,mathdef2120:20,mathdef2121:20,mathdef2122:20,mathdef2123:20,mathdef2124:20,mathdef2125:20,mathdef2126:20,mathdef2127:20,mathdef2128:20,mathdef2129:20,mathdef212:5,mathdef2130:20,mathdef2131:20,mathdef2132:20,mathdef2133:20,mathdef2134:20,mathdef2135:20,mathdef2136:20,mathdef2137:20,mathdef2138:20,mathdef2139:20,mathdef213:5,mathdef2140:20,mathdef2141:20,mathdef2142:20,mathdef2143:20,mathdef2144:20,mathdef2145:20,mathdef2146:20,mathdef2147:20,mathdef2148:20,mathdef2149:21,mathdef214:5,mathdef2150:21,mathdef2151:21,mathdef2152:21,mathdef2153:21,mathdef2154:21,mathdef2155:21,mathdef2156:21,mathdef2157:21,mathdef2158:21,mathdef2159:21,mathdef215:5,mathdef2160:21,mathdef2161:21,mathdef2162:21,mathdef2163:21,mathdef2164:21,mathdef2165:21,mathdef2166:21,mathdef2167:21,mathdef2168:21,mathdef2169:21,mathdef216:5,mathdef2170:21,mathdef2171:21,mathdef2172:21,mathdef2173:21,mathdef2174:21,mathdef2175:21,mathdef2176:21,mathdef2177:21,mathdef2178:21,mathdef2179:21,mathdef217:5,mathdef2180:21,mathdef2181:21,mathdef2182:21,mathdef2183:21,mathdef2184:21,mathdef2185:21,mathdef2186:21,mathdef2187:21,mathdef2188:22,mathdef2189:22,mathdef218:5,mathdef2190:22,mathdef2191:22,mathdef2192:22,mathdef2193:22,mathdef2194:22,mathdef2195:22,mathdef2196:22,mathdef2197:22,mathdef2198:22,mathdef2199:22,mathdef219:5,mathdef21:0,mathdef2200:22,mathdef2201:22,mathdef2202:22,mathdef2203:22,mathdef2204:22,mathdef2205:22,mathdef2206:22,mathdef2207:22,mathdef2208:22,mathdef2209:22,mathdef220:5,mathdef2210:22,mathdef2211:22,mathdef2212:22,mathdef2213:22,mathdef2214:22,mathdef2215:22,mathdef2216:22,mathdef2217:22,mathdef2218:22,mathdef2219:22,mathdef221:5,mathdef2220:22,mathdef2221:22,mathdef2222:22,mathdef2223:22,mathdef2224:22,mathdef2225:22,mathdef2226:22,mathdef2227:23,mathdef2228:23,mathdef2229:23,mathdef222:5,mathdef2230:23,mathdef2231:23,mathdef2232:23,mathdef2233:23,mathdef2234:23,mathdef2235:23,mathdef2236:23,mathdef2237:23,mathdef2238:23,mathdef2239:23,mathdef223:5,mathdef2240:23,mathdef2241:23,mathdef2242:23,mathdef2243:23,mathdef2244:23,mathdef2245:23,mathdef2246:23,mathdef2247:23,mathdef2248:23,mathdef2249:23,mathdef224:5,mathdef2250:23,mathdef2251:23,mathdef2252:23,mathdef2253:23,mathdef2254:23,mathdef2255:23,mathdef2256:23,mathdef2257:23,mathdef2258:23,mathdef2259:23,mathdef225:5,mathdef2260:23,mathdef2261:23,mathdef2262:23,mathdef2263:23,mathdef2264:23,mathdef2265:23,mathdef2266:24,mathdef2267:24,mathdef2268:24,mathdef2269:24,mathdef226:5,mathdef2270:24,mathdef2271:24,mathdef2272:24,mathdef2273:24,mathdef2274:24,mathdef2275:24,mathdef2276:24,mathdef2277:24,mathdef2278:24,mathdef2279:24,mathdef227:5,mathdef2280:24,mathdef2281:24,mathdef2282:24,mathdef2283:24,mathdef2284:24,mathdef2285:24,mathdef2286:24,mathdef2287:24,mathdef2288:24,mathdef2289:24,mathdef228:5,mathdef2290:24,mathdef2291:24,mathdef2292:24,mathdef2293:24,mathdef2294:24,mathdef2295:24,mathdef2296:24,mathdef2297:24,mathdef2298:24,mathdef2299:24,mathdef229:5,mathdef22:0,mathdef2300:24,mathdef2301:24,mathdef2302:24,mathdef2303:24,mathdef2304:24,mathdef2305:25,mathdef2306:25,mathdef2307:25,mathdef2308:25,mathdef2309:25,mathdef230:5,mathdef2310:25,mathdef2311:25,mathdef2312:25,mathdef2313:25,mathdef2314:25,mathdef2315:25,mathdef2316:25,mathdef2317:25,mathdef2318:25,mathdef2319:25,mathdef231:5,mathdef2320:25,mathdef2321:25,mathdef2322:25,mathdef2323:25,mathdef2324:25,mathdef2325:25,mathdef2326:25,mathdef2327:25,mathdef2328:25,mathdef2329:25,mathdef232:5,mathdef2330:25,mathdef2331:25,mathdef2332:25,mathdef2333:25,mathdef2334:25,mathdef2335:25,mathdef2336:25,mathdef2337:25,mathdef2338:25,mathdef2339:25,mathdef233:5,mathdef2340:25,mathdef2341:25,mathdef2342:25,mathdef2343:25,mathdef2344:26,mathdef2345:26,mathdef2346:26,mathdef2347:26,mathdef2348:26,mathdef2349:26,mathdef234:5,mathdef2350:26,mathdef2351:26,mathdef2352:26,mathdef2353:26,mathdef2354:26,mathdef2355:26,mathdef2356:26,mathdef2357:26,mathdef2358:26,mathdef2359:26,mathdef235:5,mathdef2360:26,mathdef2361:26,mathdef2362:26,mathdef2363:26,mathdef2364:26,mathdef2365:26,mathdef2366:26,mathdef2367:26,mathdef2368:26,mathdef2369:26,mathdef236:5,mathdef2370:26,mathdef2371:26,mathdef2372:26,mathdef2373:26,mathdef2374:26,mathdef2375:26,mathdef2376:26,mathdef2377:26,mathdef2378:26,mathdef2379:26,mathdef237:6,mathdef2380:26,mathdef2381:26,mathdef2382:26,mathdef2383:27,mathdef2384:27,mathdef2385:27,mathdef2386:27,mathdef2387:27,mathdef2388:27,mathdef2389:27,mathdef238:6,mathdef2390:27,mathdef2391:27,mathdef2392:27,mathdef2393:27,mathdef2394:27,mathdef2395:27,mathdef2396:27,mathdef2397:27,mathdef2398:27,mathdef2399:27,mathdef239:6,mathdef23:0,mathdef2400:27,mathdef2401:27,mathdef2402:27,mathdef2403:27,mathdef2404:27,mathdef2405:27,mathdef2406:27,mathdef2407:27,mathdef2408:27,mathdef2409:27,mathdef240:6,mathdef2410:27,mathdef2411:27,mathdef2412:27,mathdef2413:27,mathdef2414:27,mathdef2415:27,mathdef2416:27,mathdef2417:27,mathdef2418:27,mathdef2419:27,mathdef241:6,mathdef2420:27,mathdef2421:27,mathdef2422:28,mathdef2423:28,mathdef2424:28,mathdef2425:28,mathdef2426:28,mathdef2427:28,mathdef2428:28,mathdef2429:28,mathdef242:6,mathdef2430:28,mathdef2431:28,mathdef2432:28,mathdef2433:28,mathdef2434:28,mathdef2435:28,mathdef2436:28,mathdef2437:28,mathdef2438:28,mathdef2439:28,mathdef243:6,mathdef2440:28,mathdef2441:28,mathdef2442:28,mathdef2443:28,mathdef2444:28,mathdef2445:28,mathdef2446:28,mathdef2447:28,mathdef2448:28,mathdef2449:28,mathdef244:6,mathdef2450:28,mathdef2451:28,mathdef2452:28,mathdef2453:28,mathdef2454:28,mathdef2455:28,mathdef2456:28,mathdef2457:28,mathdef2458:28,mathdef2459:28,mathdef245:6,mathdef2460:28,mathdef2461:28,mathdef2462:28,mathdef2463:29,mathdef2464:29,mathdef2465:29,mathdef2466:29,mathdef2467:29,mathdef2468:29,mathdef2469:29,mathdef246:6,mathdef2470:29,mathdef2471:29,mathdef2472:29,mathdef2473:29,mathdef2474:29,mathdef2475:29,mathdef2476:29,mathdef2477:29,mathdef2478:29,mathdef2479:29,mathdef247:6,mathdef2480:29,mathdef2481:29,mathdef2482:29,mathdef2483:29,mathdef2484:29,mathdef2485:29,mathdef2486:29,mathdef2487:29,mathdef2488:29,mathdef2489:29,mathdef248:6,mathdef2490:29,mathdef2491:29,mathdef2492:29,mathdef2493:29,mathdef2494:29,mathdef2495:29,mathdef2496:29,mathdef2497:29,mathdef2498:29,mathdef2499:29,mathdef249:6,mathdef24:0,mathdef2500:29,mathdef2501:29,mathdef2502:30,mathdef2503:30,mathdef2504:30,mathdef2505:30,mathdef2506:30,mathdef2507:30,mathdef2508:30,mathdef2509:30,mathdef250:6,mathdef2510:30,mathdef2511:30,mathdef2512:30,mathdef2513:30,mathdef2514:30,mathdef2515:30,mathdef2516:30,mathdef2517:30,mathdef2518:30,mathdef2519:30,mathdef251:6,mathdef2520:30,mathdef2521:30,mathdef2522:30,mathdef2523:30,mathdef2524:30,mathdef2525:30,mathdef2526:30,mathdef2527:30,mathdef2528:30,mathdef2529:30,mathdef252:6,mathdef2530:30,mathdef2531:30,mathdef2532:30,mathdef2533:30,mathdef2534:30,mathdef2535:30,mathdef2536:30,mathdef2537:30,mathdef2538:30,mathdef2539:30,mathdef253:6,mathdef2540:30,mathdef2541:31,mathdef2542:31,mathdef2543:31,mathdef2544:31,mathdef2545:31,mathdef2546:31,mathdef2547:31,mathdef2548:31,mathdef2549:31,mathdef254:6,mathdef2550:31,mathdef2551:31,mathdef2552:31,mathdef2553:31,mathdef2554:31,mathdef2555:31,mathdef2556:31,mathdef2557:31,mathdef2558:31,mathdef2559:31,mathdef255:6,mathdef2560:31,mathdef2561:31,mathdef2562:31,mathdef2563:31,mathdef2564:31,mathdef2565:31,mathdef2566:31,mathdef2567:31,mathdef2568:31,mathdef2569:31,mathdef256:6,mathdef2570:31,mathdef2571:31,mathdef2572:31,mathdef2573:31,mathdef2574:31,mathdef2575:31,mathdef2576:31,mathdef2577:31,mathdef2578:31,mathdef2579:31,mathdef257:6,mathdef2580:31,mathdef2581:31,mathdef2582:31,mathdef2583:31,mathdef2584:31,mathdef2585:31,mathdef2586:32,mathdef2587:32,mathdef2588:32,mathdef2589:32,mathdef258:6,mathdef2590:32,mathdef2591:32,mathdef2592:32,mathdef2593:32,mathdef2594:32,mathdef2595:32,mathdef2596:32,mathdef2597:32,mathdef2598:32,mathdef2599:32,mathdef259:6,mathdef25:0,mathdef2600:32,mathdef2601:32,mathdef2602:32,mathdef2603:32,mathdef2604:32,mathdef2605:32,mathdef2606:32,mathdef2607:32,mathdef2608:32,mathdef2609:32,mathdef260:6,mathdef2610:32,mathdef2611:32,mathdef2612:32,mathdef2613:32,mathdef2614:32,mathdef2615:32,mathdef2616:32,mathdef2617:32,mathdef2618:32,mathdef2619:32,mathdef261:6,mathdef2620:32,mathdef2621:32,mathdef2622:32,mathdef2623:32,mathdef2624:32,mathdef2625:32,mathdef2626:32,mathdef2627:32,mathdef2628:32,mathdef2629:32,mathdef262:6,mathdef2630:32,mathdef2631:33,mathdef2632:33,mathdef2633:33,mathdef2634:33,mathdef2635:33,mathdef2636:33,mathdef2637:33,mathdef2638:33,mathdef2639:33,mathdef263:6,mathdef2640:33,mathdef2641:33,mathdef2642:33,mathdef2643:33,mathdef2644:33,mathdef2645:33,mathdef2646:33,mathdef2647:33,mathdef2648:33,mathdef2649:33,mathdef264:6,mathdef2650:33,mathdef2651:33,mathdef2652:33,mathdef2653:33,mathdef2654:33,mathdef2655:33,mathdef2656:33,mathdef2657:33,mathdef2658:33,mathdef2659:33,mathdef265:6,mathdef2660:33,mathdef2661:33,mathdef2662:33,mathdef2663:33,mathdef2664:33,mathdef2665:33,mathdef2666:33,mathdef2667:33,mathdef2668:33,mathdef2669:33,mathdef266:6,mathdef2670:34,mathdef2671:34,mathdef2672:34,mathdef2673:34,mathdef2674:34,mathdef2675:34,mathdef2676:34,mathdef2677:34,mathdef2678:34,mathdef2679:34,mathdef267:6,mathdef2680:34,mathdef2681:34,mathdef2682:34,mathdef2683:34,mathdef2684:34,mathdef2685:34,mathdef2686:34,mathdef2687:34,mathdef2688:34,mathdef2689:34,mathdef268:6,mathdef2690:34,mathdef2691:34,mathdef2692:34,mathdef2693:34,mathdef2694:34,mathdef2695:34,mathdef2696:34,mathdef2697:34,mathdef2698:34,mathdef2699:34,mathdef269:6,mathdef26:0,mathdef2700:34,mathdef2701:34,mathdef2702:34,mathdef2703:34,mathdef2704:34,mathdef2705:34,mathdef2706:34,mathdef2707:34,mathdef2708:34,mathdef2709:34,mathdef270:6,mathdef2710:34,mathdef2711:34,mathdef2712:34,mathdef2713:34,mathdef2714:34,mathdef2715:34,mathdef2716:34,mathdef2717:34,mathdef2718:34,mathdef2719:34,mathdef271:6,mathdef2720:34,mathdef2721:34,mathdef2722:34,mathdef2723:34,mathdef2724:34,mathdef2725:34,mathdef2726:34,mathdef2727:34,mathdef2728:34,mathdef2729:34,mathdef272:6,mathdef2730:34,mathdef2731:34,mathdef2732:34,mathdef2733:34,mathdef2734:34,mathdef2735:34,mathdef2736:34,mathdef2737:34,mathdef2738:34,mathdef2739:34,mathdef273:6,mathdef2740:34,mathdef2741:34,mathdef2742:34,mathdef2743:34,mathdef2744:34,mathdef2745:34,mathdef2746:34,mathdef2747:34,mathdef2748:34,mathdef2749:34,mathdef274:6,mathdef2750:34,mathdef2751:34,mathdef2752:34,mathdef2753:34,mathdef2754:34,mathdef2755:34,mathdef2756:34,mathdef2757:34,mathdef2758:34,mathdef2759:34,mathdef275:6,mathdef2760:34,mathdef2761:34,mathdef2762:34,mathdef2763:34,mathdef2764:34,mathdef2765:34,mathdef2766:34,mathdef2767:34,mathdef2768:34,mathdef2769:34,mathdef276:6,mathdef2770:34,mathdef2771:34,mathdef2772:34,mathdef2773:34,mathdef2774:34,mathdef2775:34,mathdef2776:34,mathdef2777:34,mathdef2778:34,mathdef2779:34,mathdef277:6,mathdef2780:34,mathdef2781:34,mathdef2782:34,mathdef2783:34,mathdef2784:34,mathdef2785:34,mathdef2786:34,mathdef2787:34,mathdef2788:34,mathdef2789:34,mathdef278:6,mathdef2790:34,mathdef2791:34,mathdef2792:34,mathdef2793:34,mathdef2794:34,mathdef2795:34,mathdef2796:34,mathdef2797:34,mathdef2798:34,mathdef2799:34,mathdef279:6,mathdef27:0,mathdef2800:34,mathdef2801:34,mathdef2802:34,mathdef2803:34,mathdef2804:34,mathdef2805:34,mathdef2806:34,mathdef2807:34,mathdef2808:34,mathdef2809:34,mathdef280:6,mathdef2810:34,mathdef2811:34,mathdef2812:34,mathdef2813:34,mathdef2814:34,mathdef2815:34,mathdef2816:34,mathdef2817:34,mathdef2818:34,mathdef2819:34,mathdef281:6,mathdef2820:34,mathdef2821:34,mathdef2822:34,mathdef2823:34,mathdef2824:34,mathdef2825:34,mathdef2826:34,mathdef2827:34,mathdef2828:34,mathdef2829:34,mathdef282:6,mathdef2830:34,mathdef2831:34,mathdef2832:34,mathdef2833:34,mathdef2834:34,mathdef2835:34,mathdef2836:34,mathdef2837:34,mathdef2838:34,mathdef2839:34,mathdef283:6,mathdef2840:34,mathdef2841:34,mathdef2842:34,mathdef2843:34,mathdef2844:34,mathdef2845:34,mathdef2846:34,mathdef2847:34,mathdef2848:34,mathdef2849:34,mathdef284:6,mathdef2850:34,mathdef2851:34,mathdef2852:34,mathdef2853:34,mathdef2854:34,mathdef2855:34,mathdef2856:34,mathdef2857:34,mathdef2858:34,mathdef2859:34,mathdef285:6,mathdef2860:34,mathdef2861:34,mathdef2862:34,mathdef2863:34,mathdef2864:34,mathdef2865:34,mathdef2866:34,mathdef2867:34,mathdef2868:34,mathdef2869:34,mathdef286:6,mathdef2870:34,mathdef2871:34,mathdef2872:34,mathdef2873:34,mathdef2874:34,mathdef2875:34,mathdef2876:34,mathdef2877:34,mathdef2878:34,mathdef2879:34,mathdef287:6,mathdef2880:34,mathdef2881:34,mathdef2882:34,mathdef2883:34,mathdef2884:34,mathdef2885:34,mathdef2886:34,mathdef2887:34,mathdef2888:34,mathdef2889:34,mathdef288:6,mathdef2890:34,mathdef2891:34,mathdef2892:34,mathdef2893:34,mathdef2894:34,mathdef2895:34,mathdef2896:34,mathdef2897:34,mathdef2898:34,mathdef2899:34,mathdef289:6,mathdef28:0,mathdef2900:34,mathdef2901:34,mathdef2902:34,mathdef2903:34,mathdef2904:34,mathdef2905:34,mathdef2906:34,mathdef2907:34,mathdef2908:34,mathdef2909:34,mathdef290:6,mathdef2910:34,mathdef2911:34,mathdef2912:34,mathdef2913:34,mathdef2914:34,mathdef2915:34,mathdef2916:34,mathdef2917:34,mathdef2918:34,mathdef2919:34,mathdef291:6,mathdef2920:34,mathdef2921:34,mathdef2922:34,mathdef2923:34,mathdef2924:34,mathdef2925:34,mathdef2926:34,mathdef2927:34,mathdef2928:34,mathdef2929:34,mathdef292:6,mathdef2930:34,mathdef2931:34,mathdef2932:34,mathdef2933:34,mathdef2934:34,mathdef2935:34,mathdef2936:34,mathdef2937:34,mathdef2938:34,mathdef2939:34,mathdef293:6,mathdef2940:34,mathdef2941:34,mathdef2942:34,mathdef2943:34,mathdef2944:34,mathdef2945:34,mathdef2946:34,mathdef2947:34,mathdef2948:34,mathdef2949:34,mathdef294:6,mathdef2950:34,mathdef2951:34,mathdef2952:34,mathdef2953:34,mathdef2954:34,mathdef2955:34,mathdef2956:34,mathdef2957:34,mathdef2958:34,mathdef2959:34,mathdef295:6,mathdef2960:34,mathdef2961:34,mathdef2962:34,mathdef2963:34,mathdef2964:34,mathdef2965:34,mathdef2966:34,mathdef2967:34,mathdef2968:34,mathdef2969:34,mathdef296:6,mathdef2970:34,mathdef2971:34,mathdef2972:34,mathdef2973:34,mathdef2974:34,mathdef2975:34,mathdef2976:34,mathdef2977:34,mathdef2978:34,mathdef2979:34,mathdef297:6,mathdef2980:34,mathdef2981:34,mathdef2982:34,mathdef2983:34,mathdef2984:34,mathdef2985:34,mathdef2986:34,mathdef2987:34,mathdef2988:34,mathdef2989:34,mathdef298:6,mathdef2990:34,mathdef2991:34,mathdef2992:34,mathdef2993:34,mathdef2994:34,mathdef2995:34,mathdef2996:34,mathdef2997:34,mathdef2998:34,mathdef2999:34,mathdef299:6,mathdef29:0,mathdef2:0,mathdef3000:34,mathdef3001:34,mathdef3002:34,mathdef3003:34,mathdef3004:34,mathdef3005:34,mathdef3006:34,mathdef3007:34,mathdef3008:34,mathdef3009:34,mathdef300:6,mathdef3010:34,mathdef3011:34,mathdef3012:34,mathdef3013:34,mathdef3014:34,mathdef3015:34,mathdef3016:34,mathdef3017:34,mathdef3018:34,mathdef3019:34,mathdef301:6,mathdef3020:34,mathdef3021:34,mathdef3022:34,mathdef3023:34,mathdef3024:34,mathdef3025:34,mathdef3026:34,mathdef3027:34,mathdef3028:34,mathdef3029:34,mathdef302:6,mathdef3030:34,mathdef3031:34,mathdef3032:34,mathdef3033:34,mathdef3034:34,mathdef3035:34,mathdef3036:34,mathdef3037:34,mathdef3038:34,mathdef3039:34,mathdef303:6,mathdef3040:34,mathdef3041:34,mathdef3042:34,mathdef3043:34,mathdef3044:34,mathdef3045:34,mathdef3046:34,mathdef3047:34,mathdef3048:34,mathdef3049:34,mathdef304:6,mathdef3050:34,mathdef3051:34,mathdef3052:34,mathdef3053:34,mathdef3054:34,mathdef3055:34,mathdef3056:34,mathdef3057:34,mathdef3058:34,mathdef3059:34,mathdef305:6,mathdef3060:34,mathdef3061:34,mathdef3062:34,mathdef3063:34,mathdef3064:34,mathdef3065:34,mathdef3066:34,mathdef3067:34,mathdef3068:34,mathdef3069:34,mathdef306:6,mathdef3070:34,mathdef3071:34,mathdef3072:34,mathdef3073:34,mathdef3074:34,mathdef3075:34,mathdef3076:34,mathdef3077:34,mathdef3078:34,mathdef3079:34,mathdef307:6,mathdef3080:34,mathdef3081:34,mathdef3082:34,mathdef3083:34,mathdef3084:34,mathdef3085:34,mathdef3086:34,mathdef3087:34,mathdef3088:34,mathdef3089:34,mathdef308:6,mathdef3090:34,mathdef3091:34,mathdef3092:34,mathdef3093:34,mathdef3094:34,mathdef3095:34,mathdef3096:34,mathdef3097:34,mathdef3098:34,mathdef3099:34,mathdef309:6,mathdef30:0,mathdef3100:34,mathdef3101:34,mathdef3102:34,mathdef3103:34,mathdef3104:34,mathdef3105:34,mathdef3106:34,mathdef3107:34,mathdef3108:34,mathdef3109:34,mathdef310:6,mathdef3110:34,mathdef3111:34,mathdef3112:34,mathdef3113:34,mathdef3114:34,mathdef3115:34,mathdef3116:34,mathdef3117:34,mathdef3118:34,mathdef3119:34,mathdef311:6,mathdef3120:34,mathdef3121:34,mathdef3122:34,mathdef3123:34,mathdef3124:34,mathdef3125:34,mathdef3126:34,mathdef3127:34,mathdef3128:34,mathdef3129:34,mathdef312:6,mathdef3130:34,mathdef3131:34,mathdef3132:34,mathdef3133:34,mathdef3134:34,mathdef3135:34,mathdef3136:34,mathdef3137:34,mathdef3138:34,mathdef3139:34,mathdef313:6,mathdef3140:34,mathdef3141:34,mathdef3142:34,mathdef3143:34,mathdef3144:34,mathdef3145:34,mathdef3146:34,mathdef3147:34,mathdef3148:34,mathdef3149:34,mathdef314:6,mathdef3150:34,mathdef3151:34,mathdef3152:34,mathdef3153:34,mathdef3154:34,mathdef3155:34,mathdef3156:34,mathdef3157:34,mathdef3158:34,mathdef3159:34,mathdef315:6,mathdef3160:34,mathdef3161:34,mathdef3162:34,mathdef3163:34,mathdef3164:34,mathdef3165:34,mathdef3166:34,mathdef3167:34,mathdef3168:34,mathdef3169:34,mathdef316:6,mathdef3170:34,mathdef3171:34,mathdef3172:34,mathdef3173:34,mathdef3174:34,mathdef3175:34,mathdef3176:34,mathdef3177:34,mathdef3178:34,mathdef3179:34,mathdef317:6,mathdef3180:34,mathdef3181:34,mathdef3182:34,mathdef3183:34,mathdef3184:34,mathdef3185:34,mathdef3186:34,mathdef3187:34,mathdef3188:34,mathdef3189:34,mathdef318:6,mathdef3190:34,mathdef3191:34,mathdef3192:34,mathdef3193:34,mathdef3194:34,mathdef3195:34,mathdef3196:34,mathdef3197:34,mathdef3198:34,mathdef3199:34,mathdef319:6,mathdef31:0,mathdef3200:34,mathdef3201:34,mathdef3202:34,mathdef3203:34,mathdef3204:34,mathdef3205:34,mathdef3206:34,mathdef3207:34,mathdef3208:34,mathdef3209:34,mathdef320:6,mathdef3210:34,mathdef3211:34,mathdef3212:35,mathdef3213:35,mathdef3214:35,mathdef3215:35,mathdef3216:35,mathdef3217:35,mathdef3218:35,mathdef3219:35,mathdef321:6,mathdef3220:35,mathdef3221:35,mathdef3222:35,mathdef3223:35,mathdef3224:35,mathdef3225:35,mathdef3226:35,mathdef3227:35,mathdef3228:35,mathdef3229:35,mathdef322:6,mathdef3230:35,mathdef3231:35,mathdef3232:35,mathdef3233:35,mathdef3234:35,mathdef3235:35,mathdef3236:35,mathdef3237:35,mathdef3238:35,mathdef3239:35,mathdef323:6,mathdef3240:35,mathdef3241:35,mathdef3242:35,mathdef3243:35,mathdef3244:35,mathdef3245:35,mathdef3246:35,mathdef3247:35,mathdef3248:35,mathdef3249:35,mathdef324:6,mathdef3250:35,mathdef3251:35,mathdef3252:35,mathdef3253:35,mathdef3254:35,mathdef3255:35,mathdef3256:35,mathdef3257:35,mathdef3258:35,mathdef3259:35,mathdef325:6,mathdef3260:35,mathdef3261:35,mathdef3262:35,mathdef3263:35,mathdef3264:35,mathdef3265:35,mathdef3266:35,mathdef3267:35,mathdef3268:35,mathdef3269:35,mathdef326:6,mathdef3270:35,mathdef3271:35,mathdef3272:35,mathdef3273:35,mathdef3274:35,mathdef3275:35,mathdef3276:35,mathdef3277:35,mathdef3278:36,mathdef3279:36,mathdef327:6,mathdef3280:36,mathdef3281:36,mathdef3282:36,mathdef3283:36,mathdef3284:36,mathdef3285:36,mathdef3286:36,mathdef3287:36,mathdef3288:36,mathdef3289:36,mathdef328:6,mathdef3290:36,mathdef3291:36,mathdef3292:36,mathdef3293:36,mathdef3294:36,mathdef3295:36,mathdef3296:36,mathdef3297:36,mathdef3298:36,mathdef3299:36,mathdef329:6,mathdef32:0,mathdef3300:36,mathdef3301:36,mathdef3302:36,mathdef3303:36,mathdef3304:36,mathdef3305:36,mathdef3306:36,mathdef3307:36,mathdef3308:36,mathdef3309:36,mathdef330:6,mathdef3310:36,mathdef3311:36,mathdef3312:36,mathdef3313:36,mathdef3314:36,mathdef3315:36,mathdef3316:36,mathdef3317:36,mathdef3318:36,mathdef3319:36,mathdef331:6,mathdef3320:36,mathdef3321:36,mathdef3322:36,mathdef3323:36,mathdef3324:36,mathdef3325:36,mathdef3326:36,mathdef3327:36,mathdef3328:36,mathdef3329:36,mathdef332:6,mathdef3330:36,mathdef3331:36,mathdef3332:36,mathdef3333:36,mathdef3334:36,mathdef3335:36,mathdef3336:36,mathdef3337:36,mathdef3338:36,mathdef3339:36,mathdef333:6,mathdef3340:36,mathdef3341:36,mathdef3342:36,mathdef3343:36,mathdef3344:36,mathdef3345:36,mathdef3346:36,mathdef3347:36,mathdef3348:36,mathdef3349:36,mathdef334:6,mathdef3350:36,mathdef3351:36,mathdef3352:36,mathdef3353:36,mathdef3354:36,mathdef3355:36,mathdef3356:36,mathdef3357:36,mathdef3358:36,mathdef3359:36,mathdef335:6,mathdef3360:36,mathdef3361:36,mathdef3362:36,mathdef3363:36,mathdef3364:36,mathdef3365:36,mathdef3366:36,mathdef3367:36,mathdef3368:36,mathdef3369:36,mathdef336:6,mathdef3370:36,mathdef3371:36,mathdef3372:36,mathdef3373:36,mathdef3374:36,mathdef3375:36,mathdef3376:36,mathdef3377:36,mathdef3378:36,mathdef3379:36,mathdef337:6,mathdef3380:36,mathdef3381:36,mathdef3382:36,mathdef3383:36,mathdef3384:36,mathdef3385:36,mathdef3386:36,mathdef3387:36,mathdef3388:36,mathdef3389:36,mathdef338:6,mathdef3390:36,mathdef3391:36,mathdef3392:36,mathdef3393:36,mathdef3394:36,mathdef3395:36,mathdef3396:36,mathdef3397:36,mathdef3398:36,mathdef3399:36,mathdef339:6,mathdef33:0,mathdef3400:36,mathdef3401:36,mathdef3402:36,mathdef3403:36,mathdef3404:36,mathdef3405:36,mathdef3406:36,mathdef3407:36,mathdef3408:36,mathdef3409:36,mathdef340:6,mathdef3410:36,mathdef3411:36,mathdef3412:36,mathdef3413:36,mathdef3414:36,mathdef3415:36,mathdef3416:36,mathdef3417:36,mathdef3418:36,mathdef3419:36,mathdef341:6,mathdef3420:36,mathdef3421:36,mathdef3422:36,mathdef3423:36,mathdef3424:36,mathdef3425:36,mathdef3426:36,mathdef3427:36,mathdef3428:36,mathdef3429:36,mathdef342:6,mathdef3430:36,mathdef3431:36,mathdef3432:36,mathdef3433:36,mathdef3434:36,mathdef3435:36,mathdef3436:36,mathdef3437:36,mathdef3438:36,mathdef3439:36,mathdef343:6,mathdef3440:36,mathdef3441:36,mathdef3442:36,mathdef3443:36,mathdef3444:36,mathdef3445:36,mathdef3446:36,mathdef3447:36,mathdef3448:36,mathdef3449:36,mathdef344:6,mathdef3450:36,mathdef3451:36,mathdef3452:36,mathdef3453:36,mathdef3454:36,mathdef3455:36,mathdef3456:36,mathdef3457:36,mathdef3458:36,mathdef3459:36,mathdef345:6,mathdef3460:36,mathdef3461:36,mathdef3462:36,mathdef3463:36,mathdef3464:36,mathdef3465:36,mathdef3466:36,mathdef3467:36,mathdef3468:36,mathdef3469:36,mathdef346:6,mathdef3470:36,mathdef3471:36,mathdef3472:36,mathdef3473:36,mathdef3474:36,mathdef3475:36,mathdef3476:36,mathdef3477:36,mathdef3478:36,mathdef3479:36,mathdef347:6,mathdef3480:36,mathdef3481:36,mathdef3482:36,mathdef3483:36,mathdef3484:36,mathdef3485:36,mathdef3486:36,mathdef3487:36,mathdef3488:36,mathdef3489:36,mathdef348:6,mathdef3490:36,mathdef3491:36,mathdef3492:36,mathdef3493:36,mathdef3494:36,mathdef3495:36,mathdef3496:36,mathdef3497:36,mathdef3498:36,mathdef3499:36,mathdef349:6,mathdef34:0,mathdef3500:36,mathdef3501:36,mathdef3502:36,mathdef3503:36,mathdef3504:36,mathdef3505:36,mathdef3506:36,mathdef3507:36,mathdef3508:36,mathdef3509:36,mathdef350:6,mathdef3510:36,mathdef3511:36,mathdef3512:36,mathdef3513:36,mathdef3514:36,mathdef3515:36,mathdef3516:36,mathdef3517:36,mathdef3518:36,mathdef3519:36,mathdef351:6,mathdef3520:36,mathdef3521:36,mathdef3522:36,mathdef3523:36,mathdef3524:36,mathdef3525:36,mathdef3526:36,mathdef3527:36,mathdef3528:36,mathdef3529:36,mathdef352:6,mathdef3530:36,mathdef3531:36,mathdef3532:36,mathdef3533:36,mathdef3534:36,mathdef3535:36,mathdef3536:36,mathdef3537:36,mathdef3538:36,mathdef3539:36,mathdef353:6,mathdef3540:36,mathdef3541:36,mathdef3542:36,mathdef3543:36,mathdef3544:36,mathdef3545:36,mathdef3546:36,mathdef3547:36,mathdef3548:36,mathdef3549:36,mathdef354:6,mathdef3550:36,mathdef3551:36,mathdef3552:36,mathdef3553:36,mathdef3554:36,mathdef3555:36,mathdef3556:36,mathdef3557:36,mathdef3558:36,mathdef3559:36,mathdef355:6,mathdef3560:36,mathdef3561:36,mathdef3562:36,mathdef3563:36,mathdef3564:36,mathdef3565:36,mathdef3566:36,mathdef3567:36,mathdef3568:36,mathdef3569:36,mathdef356:6,mathdef3570:36,mathdef3571:36,mathdef3572:36,mathdef3573:36,mathdef3574:36,mathdef3575:36,mathdef3576:36,mathdef3577:36,mathdef3578:36,mathdef3579:36,mathdef357:6,mathdef3580:36,mathdef3581:36,mathdef3582:36,mathdef3583:36,mathdef3584:36,mathdef3585:36,mathdef3586:36,mathdef3587:36,mathdef3588:36,mathdef3589:36,mathdef358:6,mathdef3590:36,mathdef3591:36,mathdef3592:36,mathdef3593:36,mathdef3594:36,mathdef3595:36,mathdef3596:36,mathdef3597:36,mathdef3598:36,mathdef3599:36,mathdef359:6,mathdef35:0,mathdef3600:36,mathdef3601:36,mathdef3602:36,mathdef3603:36,mathdef3604:36,mathdef3605:36,mathdef3606:36,mathdef3607:36,mathdef3608:36,mathdef3609:36,mathdef360:6,mathdef3610:36,mathdef3611:36,mathdef3612:36,mathdef3613:36,mathdef3614:36,mathdef3615:36,mathdef3616:36,mathdef3617:36,mathdef3618:36,mathdef3619:36,mathdef361:6,mathdef3620:36,mathdef3621:36,mathdef3622:36,mathdef3623:36,mathdef3624:36,mathdef3625:36,mathdef3626:36,mathdef3627:36,mathdef3628:36,mathdef3629:36,mathdef362:6,mathdef3630:36,mathdef3631:36,mathdef3632:36,mathdef3633:36,mathdef3634:36,mathdef3635:36,mathdef3636:36,mathdef3637:36,mathdef3638:36,mathdef3639:36,mathdef363:6,mathdef3640:36,mathdef3641:36,mathdef3642:36,mathdef3643:36,mathdef3644:36,mathdef3645:36,mathdef3646:36,mathdef3647:36,mathdef3648:36,mathdef3649:36,mathdef364:6,mathdef3650:36,mathdef3651:36,mathdef3652:36,mathdef3653:36,mathdef3654:36,mathdef3655:36,mathdef3656:36,mathdef3657:36,mathdef3658:36,mathdef3659:36,mathdef365:6,mathdef3660:36,mathdef3661:36,mathdef3662:36,mathdef3663:36,mathdef3664:36,mathdef3665:36,mathdef3666:36,mathdef3667:36,mathdef3668:36,mathdef3669:36,mathdef366:6,mathdef3670:36,mathdef3671:36,mathdef3672:36,mathdef3673:36,mathdef3674:36,mathdef3675:36,mathdef3676:36,mathdef3677:36,mathdef3678:36,mathdef3679:36,mathdef367:6,mathdef3680:36,mathdef3681:36,mathdef3682:36,mathdef3683:36,mathdef3684:36,mathdef3685:36,mathdef3686:36,mathdef3687:36,mathdef3688:36,mathdef3689:37,mathdef368:6,mathdef3690:37,mathdef3691:37,mathdef3692:37,mathdef3693:37,mathdef3694:37,mathdef3695:37,mathdef3696:37,mathdef3697:37,mathdef3698:37,mathdef3699:37,mathdef369:6,mathdef36:0,mathdef3700:37,mathdef3701:37,mathdef3702:37,mathdef3703:37,mathdef3704:37,mathdef3705:37,mathdef3706:37,mathdef3707:37,mathdef3708:37,mathdef3709:37,mathdef370:6,mathdef3710:37,mathdef3711:37,mathdef3712:37,mathdef3713:37,mathdef3714:37,mathdef3715:37,mathdef3716:37,mathdef3717:37,mathdef3718:37,mathdef3719:37,mathdef371:6,mathdef3720:37,mathdef3721:37,mathdef3722:37,mathdef3723:37,mathdef3724:37,mathdef3725:37,mathdef3726:37,mathdef3727:37,mathdef3728:37,mathdef3729:37,mathdef372:6,mathdef3730:37,mathdef3731:37,mathdef3732:37,mathdef3733:37,mathdef3734:37,mathdef3735:37,mathdef3736:37,mathdef3737:37,mathdef3738:37,mathdef3739:37,mathdef373:6,mathdef3740:37,mathdef3741:37,mathdef3742:37,mathdef3743:37,mathdef3744:37,mathdef3745:37,mathdef3746:37,mathdef3747:37,mathdef3748:37,mathdef3749:37,mathdef374:6,mathdef3750:37,mathdef3751:37,mathdef3752:37,mathdef3753:37,mathdef3754:37,mathdef3755:37,mathdef3756:37,mathdef3757:37,mathdef3758:37,mathdef3759:37,mathdef375:6,mathdef3760:37,mathdef3761:38,mathdef3762:38,mathdef3763:38,mathdef3764:38,mathdef3765:38,mathdef3766:38,mathdef3767:38,mathdef3768:38,mathdef3769:38,mathdef376:6,mathdef3770:38,mathdef3771:38,mathdef3772:38,mathdef3773:38,mathdef3774:38,mathdef3775:38,mathdef3776:38,mathdef3777:38,mathdef3778:38,mathdef3779:38,mathdef377:6,mathdef3780:38,mathdef3781:38,mathdef3782:38,mathdef3783:38,mathdef3784:38,mathdef3785:38,mathdef3786:38,mathdef3787:38,mathdef3788:38,mathdef3789:38,mathdef378:6,mathdef3790:38,mathdef3791:38,mathdef3792:38,mathdef3793:38,mathdef3794:38,mathdef3795:38,mathdef3796:38,mathdef3797:38,mathdef3798:38,mathdef3799:38,mathdef379:6,mathdef37:0,mathdef3800:38,mathdef3801:38,mathdef3802:38,mathdef3803:38,mathdef3804:38,mathdef3805:38,mathdef3806:38,mathdef3807:38,mathdef3808:38,mathdef3809:38,mathdef380:6,mathdef3810:38,mathdef3811:38,mathdef3812:38,mathdef3813:38,mathdef3814:38,mathdef3815:38,mathdef3816:38,mathdef3817:38,mathdef3818:38,mathdef3819:38,mathdef381:6,mathdef3820:38,mathdef3821:38,mathdef3822:38,mathdef3823:38,mathdef3824:38,mathdef3825:38,mathdef3826:38,mathdef3827:38,mathdef3828:38,mathdef3829:38,mathdef382:6,mathdef3830:38,mathdef3831:38,mathdef3832:38,mathdef3833:38,mathdef3834:38,mathdef3835:38,mathdef3836:38,mathdef3837:38,mathdef3838:38,mathdef3839:38,mathdef383:6,mathdef3840:38,mathdef3841:38,mathdef3842:38,mathdef3843:38,mathdef3844:38,mathdef3845:38,mathdef3846:38,mathdef3847:38,mathdef3848:38,mathdef3849:38,mathdef384:6,mathdef3850:38,mathdef3851:38,mathdef3852:38,mathdef3853:38,mathdef3854:38,mathdef3855:38,mathdef3856:38,mathdef3857:38,mathdef3858:38,mathdef3859:38,mathdef385:6,mathdef3860:38,mathdef3861:38,mathdef3862:38,mathdef3863:38,mathdef3864:38,mathdef3865:38,mathdef3866:38,mathdef3867:38,mathdef3868:38,mathdef3869:38,mathdef386:6,mathdef3870:38,mathdef3871:38,mathdef3872:38,mathdef3873:38,mathdef3874:38,mathdef3875:38,mathdef3876:38,mathdef3877:38,mathdef3878:38,mathdef3879:38,mathdef387:6,mathdef3880:38,mathdef3881:38,mathdef3882:38,mathdef3883:38,mathdef3884:38,mathdef3885:38,mathdef3886:38,mathdef3887:38,mathdef3888:38,mathdef3889:38,mathdef388:6,mathdef3890:38,mathdef3891:38,mathdef3892:38,mathdef3893:38,mathdef3894:38,mathdef3895:39,mathdef3896:39,mathdef3897:39,mathdef3898:39,mathdef3899:39,mathdef389:6,mathdef38:0,mathdef3900:39,mathdef3901:39,mathdef3902:39,mathdef3903:39,mathdef3904:39,mathdef3905:39,mathdef3906:39,mathdef3907:39,mathdef3908:39,mathdef3909:39,mathdef390:6,mathdef3910:39,mathdef3911:39,mathdef3912:39,mathdef3913:39,mathdef3914:39,mathdef3915:39,mathdef3916:39,mathdef3917:39,mathdef3918:39,mathdef3919:39,mathdef391:6,mathdef3920:39,mathdef3921:39,mathdef3922:39,mathdef3923:39,mathdef3924:39,mathdef3925:39,mathdef3926:39,mathdef3927:39,mathdef3928:39,mathdef3929:39,mathdef392:6,mathdef3930:39,mathdef3931:39,mathdef3932:39,mathdef3933:39,mathdef3934:40,mathdef3935:40,mathdef3936:40,mathdef3937:40,mathdef3938:40,mathdef3939:40,mathdef393:6,mathdef3940:40,mathdef3941:40,mathdef3942:40,mathdef3943:40,mathdef3944:40,mathdef3945:40,mathdef3946:40,mathdef3947:40,mathdef3948:40,mathdef3949:40,mathdef394:6,mathdef3950:40,mathdef3951:40,mathdef3952:40,mathdef3953:40,mathdef3954:40,mathdef3955:40,mathdef3956:40,mathdef3957:40,mathdef3958:40,mathdef3959:40,mathdef395:6,mathdef3960:40,mathdef3961:40,mathdef3962:40,mathdef3963:40,mathdef3964:40,mathdef3965:40,mathdef3966:40,mathdef3967:40,mathdef3968:40,mathdef3969:40,mathdef396:6,mathdef3970:40,mathdef3971:40,mathdef3972:40,mathdef3973:41,mathdef3974:41,mathdef3975:41,mathdef3976:41,mathdef3977:41,mathdef3978:41,mathdef3979:41,mathdef397:6,mathdef3980:41,mathdef3981:41,mathdef3982:41,mathdef3983:41,mathdef3984:41,mathdef3985:41,mathdef3986:41,mathdef3987:41,mathdef3988:41,mathdef3989:41,mathdef398:6,mathdef3990:41,mathdef3991:41,mathdef3992:41,mathdef3993:41,mathdef3994:41,mathdef3995:41,mathdef3996:41,mathdef3997:41,mathdef3998:41,mathdef3999:41,mathdef399:6,mathdef39:0,mathdef3:0,mathdef4000:41,mathdef4001:41,mathdef4002:41,mathdef4003:41,mathdef4004:41,mathdef4005:41,mathdef4006:41,mathdef4007:41,mathdef4008:41,mathdef4009:41,mathdef400:6,mathdef4010:41,mathdef4011:41,mathdef4012:42,mathdef4013:42,mathdef4014:42,mathdef4015:42,mathdef4016:42,mathdef4017:42,mathdef4018:42,mathdef4019:42,mathdef401:6,mathdef4020:42,mathdef4021:42,mathdef4022:42,mathdef4023:42,mathdef4024:42,mathdef4025:42,mathdef4026:42,mathdef4027:42,mathdef4028:42,mathdef4029:42,mathdef402:6,mathdef4030:42,mathdef4031:42,mathdef4032:42,mathdef4033:42,mathdef4034:42,mathdef4035:42,mathdef4036:42,mathdef4037:42,mathdef4038:42,mathdef4039:42,mathdef403:6,mathdef4040:42,mathdef4041:42,mathdef4042:42,mathdef4043:42,mathdef4044:42,mathdef4045:42,mathdef4046:42,mathdef4047:42,mathdef4048:42,mathdef4049:42,mathdef404:6,mathdef4050:42,mathdef4051:43,mathdef4052:43,mathdef4053:43,mathdef4054:43,mathdef4055:43,mathdef4056:43,mathdef4057:43,mathdef4058:43,mathdef4059:43,mathdef405:6,mathdef4060:43,mathdef4061:43,mathdef4062:43,mathdef4063:43,mathdef4064:43,mathdef4065:43,mathdef4066:43,mathdef4067:43,mathdef4068:43,mathdef4069:43,mathdef406:6,mathdef4070:43,mathdef4071:43,mathdef4072:43,mathdef4073:43,mathdef4074:43,mathdef4075:43,mathdef4076:43,mathdef4077:43,mathdef4078:43,mathdef4079:43,mathdef407:6,mathdef4080:43,mathdef4081:43,mathdef4082:43,mathdef4083:43,mathdef4084:43,mathdef4085:43,mathdef4086:43,mathdef4087:43,mathdef4088:43,mathdef4089:43,mathdef408:6,mathdef409:6,mathdef40:1,mathdef410:6,mathdef411:6,mathdef412:6,mathdef413:6,mathdef414:6,mathdef415:6,mathdef416:6,mathdef417:6,mathdef418:6,mathdef419:6,mathdef41:1,mathdef420:6,mathdef421:6,mathdef422:6,mathdef423:6,mathdef424:6,mathdef425:6,mathdef426:6,mathdef427:6,mathdef428:6,mathdef429:6,mathdef42:1,mathdef430:6,mathdef431:6,mathdef432:6,mathdef433:6,mathdef434:6,mathdef435:6,mathdef436:6,mathdef437:6,mathdef438:6,mathdef439:6,mathdef43:1,mathdef440:6,mathdef441:6,mathdef442:6,mathdef443:6,mathdef444:6,mathdef445:6,mathdef446:6,mathdef447:6,mathdef448:6,mathdef449:6,mathdef44:1,mathdef450:6,mathdef451:6,mathdef452:6,mathdef453:6,mathdef454:6,mathdef455:6,mathdef456:6,mathdef457:6,mathdef458:6,mathdef459:6,mathdef45:1,mathdef460:6,mathdef461:6,mathdef462:6,mathdef463:6,mathdef464:6,mathdef465:6,mathdef466:6,mathdef467:6,mathdef468:6,mathdef469:6,mathdef46:1,mathdef470:6,mathdef471:6,mathdef472:6,mathdef473:6,mathdef474:6,mathdef475:6,mathdef476:6,mathdef477:6,mathdef478:6,mathdef479:6,mathdef47:1,mathdef480:6,mathdef481:6,mathdef482:6,mathdef483:6,mathdef484:6,mathdef485:6,mathdef486:6,mathdef487:6,mathdef488:6,mathdef489:6,mathdef48:1,mathdef490:6,mathdef491:6,mathdef492:6,mathdef493:6,mathdef494:6,mathdef495:6,mathdef496:6,mathdef497:6,mathdef498:6,mathdef499:6,mathdef49:1,mathdef4:0,mathdef500:6,mathdef501:6,mathdef502:6,mathdef503:6,mathdef504:6,mathdef505:6,mathdef506:6,mathdef507:6,mathdef508:6,mathdef509:6,mathdef50:1,mathdef510:6,mathdef511:6,mathdef512:6,mathdef513:6,mathdef514:6,mathdef515:6,mathdef516:6,mathdef517:6,mathdef518:6,mathdef519:6,mathdef51:1,mathdef520:6,mathdef521:6,mathdef522:6,mathdef523:6,mathdef524:6,mathdef525:6,mathdef526:6,mathdef527:6,mathdef528:6,mathdef529:6,mathdef52:1,mathdef530:6,mathdef531:6,mathdef532:6,mathdef533:6,mathdef534:6,mathdef535:6,mathdef536:6,mathdef537:6,mathdef538:6,mathdef539:6,mathdef53:1,mathdef540:6,mathdef541:6,mathdef542:6,mathdef543:6,mathdef544:6,mathdef545:6,mathdef546:6,mathdef547:6,mathdef548:6,mathdef549:6,mathdef54:1,mathdef550:6,mathdef551:6,mathdef552:6,mathdef553:6,mathdef554:6,mathdef555:6,mathdef556:6,mathdef557:6,mathdef558:6,mathdef559:6,mathdef55:1,mathdef560:6,mathdef561:6,mathdef562:6,mathdef563:6,mathdef564:6,mathdef565:6,mathdef566:6,mathdef567:6,mathdef568:6,mathdef569:6,mathdef56:1,mathdef570:6,mathdef571:6,mathdef572:6,mathdef573:6,mathdef574:6,mathdef575:6,mathdef576:6,mathdef577:6,mathdef578:6,mathdef579:6,mathdef57:1,mathdef580:6,mathdef581:6,mathdef582:6,mathdef583:6,mathdef584:6,mathdef585:6,mathdef586:6,mathdef587:6,mathdef588:6,mathdef589:6,mathdef58:1,mathdef590:6,mathdef591:6,mathdef592:6,mathdef593:6,mathdef594:6,mathdef595:6,mathdef596:6,mathdef597:6,mathdef598:6,mathdef599:6,mathdef59:1,mathdef5:0,mathdef600:6,mathdef601:6,mathdef602:6,mathdef603:6,mathdef604:6,mathdef605:6,mathdef606:6,mathdef607:6,mathdef608:6,mathdef609:6,mathdef60:1,mathdef610:6,mathdef611:6,mathdef612:6,mathdef613:6,mathdef614:6,mathdef615:6,mathdef616:6,mathdef617:6,mathdef618:6,mathdef619:6,mathdef61:1,mathdef620:6,mathdef621:6,mathdef622:6,mathdef623:6,mathdef624:6,mathdef625:6,mathdef626:6,mathdef627:6,mathdef628:6,mathdef629:6,mathdef62:1,mathdef630:6,mathdef631:6,mathdef632:6,mathdef633:6,mathdef634:6,mathdef635:6,mathdef636:6,mathdef637:6,mathdef638:6,mathdef639:6,mathdef63:1,mathdef640:6,mathdef641:6,mathdef642:6,mathdef643:6,mathdef644:6,mathdef645:6,mathdef646:6,mathdef647:6,mathdef648:6,mathdef649:6,mathdef64:1,mathdef650:6,mathdef651:6,mathdef652:6,mathdef653:6,mathdef654:6,mathdef655:6,mathdef656:6,mathdef657:6,mathdef658:6,mathdef659:6,mathdef65:1,mathdef660:6,mathdef661:6,mathdef662:6,mathdef663:6,mathdef664:6,mathdef665:6,mathdef666:6,mathdef667:6,mathdef668:6,mathdef669:6,mathdef66:1,mathdef670:6,mathdef671:6,mathdef672:6,mathdef673:6,mathdef674:6,mathdef675:6,mathdef676:6,mathdef677:6,mathdef678:6,mathdef679:6,mathdef67:1,mathdef680:6,mathdef681:6,mathdef682:6,mathdef683:6,mathdef684:6,mathdef685:6,mathdef686:6,mathdef687:6,mathdef688:6,mathdef689:6,mathdef68:1,mathdef690:6,mathdef691:6,mathdef692:6,mathdef693:6,mathdef694:6,mathdef695:6,mathdef696:6,mathdef697:6,mathdef698:6,mathdef699:6,mathdef69:1,mathdef6:0,mathdef700:6,mathdef701:6,mathdef702:6,mathdef703:6,mathdef704:6,mathdef705:6,mathdef706:6,mathdef707:6,mathdef708:6,mathdef709:6,mathdef70:1,mathdef710:6,mathdef711:6,mathdef712:6,mathdef713:6,mathdef714:6,mathdef715:6,mathdef716:6,mathdef717:6,mathdef718:6,mathdef719:6,mathdef71:1,mathdef720:6,mathdef721:6,mathdef722:6,mathdef723:6,mathdef724:6,mathdef725:6,mathdef726:6,mathdef727:6,mathdef728:6,mathdef729:6,mathdef72:1,mathdef730:6,mathdef731:6,mathdef732:6,mathdef733:6,mathdef734:6,mathdef735:6,mathdef736:6,mathdef737:6,mathdef738:6,mathdef739:6,mathdef73:1,mathdef740:6,mathdef741:6,mathdef742:6,mathdef743:6,mathdef744:6,mathdef745:6,mathdef746:6,mathdef747:6,mathdef748:6,mathdef749:6,mathdef74:1,mathdef750:6,mathdef751:6,mathdef752:6,mathdef753:6,mathdef754:6,mathdef755:6,mathdef756:6,mathdef757:6,mathdef758:6,mathdef759:6,mathdef75:1,mathdef760:6,mathdef761:6,mathdef762:6,mathdef763:6,mathdef764:6,mathdef765:6,mathdef766:6,mathdef767:6,mathdef768:6,mathdef769:6,mathdef76:1,mathdef770:6,mathdef771:6,mathdef772:6,mathdef773:6,mathdef774:6,mathdef775:6,mathdef776:6,mathdef777:6,mathdef778:6,mathdef779:6,mathdef77:1,mathdef780:6,mathdef781:6,mathdef782:6,mathdef783:6,mathdef784:6,mathdef785:6,mathdef786:6,mathdef787:6,mathdef788:6,mathdef789:6,mathdef78:1,mathdef790:6,mathdef791:6,mathdef792:6,mathdef793:6,mathdef794:6,mathdef795:6,mathdef796:6,mathdef797:6,mathdef798:6,mathdef799:6,mathdef79:2,mathdef7:0,mathdef800:6,mathdef801:6,mathdef802:6,mathdef803:6,mathdef804:6,mathdef805:6,mathdef806:6,mathdef807:6,mathdef808:6,mathdef809:6,mathdef80:2,mathdef810:6,mathdef811:6,mathdef812:6,mathdef813:6,mathdef814:6,mathdef815:6,mathdef816:6,mathdef817:6,mathdef818:6,mathdef819:6,mathdef81:2,mathdef820:6,mathdef821:6,mathdef822:6,mathdef823:6,mathdef824:6,mathdef825:6,mathdef826:6,mathdef827:6,mathdef828:6,mathdef829:6,mathdef82:2,mathdef830:6,mathdef831:6,mathdef832:6,mathdef833:6,mathdef834:6,mathdef835:6,mathdef836:6,mathdef837:6,mathdef838:6,mathdef839:6,mathdef83:2,mathdef840:6,mathdef841:6,mathdef842:6,mathdef843:6,mathdef844:6,mathdef845:6,mathdef846:6,mathdef847:6,mathdef848:6,mathdef849:6,mathdef84:2,mathdef850:6,mathdef851:6,mathdef852:6,mathdef853:6,mathdef854:6,mathdef855:6,mathdef856:6,mathdef857:6,mathdef858:6,mathdef859:6,mathdef85:2,mathdef860:6,mathdef861:6,mathdef862:6,mathdef863:6,mathdef864:6,mathdef865:6,mathdef866:6,mathdef867:6,mathdef868:6,mathdef869:6,mathdef86:2,mathdef870:6,mathdef871:6,mathdef872:6,mathdef873:6,mathdef874:6,mathdef875:6,mathdef876:6,mathdef877:6,mathdef878:6,mathdef879:6,mathdef87:2,mathdef880:6,mathdef881:6,mathdef882:6,mathdef883:6,mathdef884:6,mathdef885:6,mathdef886:6,mathdef887:6,mathdef888:6,mathdef889:6,mathdef88:2,mathdef890:6,mathdef891:6,mathdef892:6,mathdef893:6,mathdef894:6,mathdef895:6,mathdef896:6,mathdef897:6,mathdef898:6,mathdef899:6,mathdef89:2,mathdef8:0,mathdef900:6,mathdef901:6,mathdef902:6,mathdef903:6,mathdef904:6,mathdef905:6,mathdef906:6,mathdef907:6,mathdef908:6,mathdef909:6,mathdef90:2,mathdef910:6,mathdef911:6,mathdef912:6,mathdef913:6,mathdef914:6,mathdef915:6,mathdef916:6,mathdef917:6,mathdef918:6,mathdef919:6,mathdef91:2,mathdef920:6,mathdef921:6,mathdef922:6,mathdef923:6,mathdef924:6,mathdef925:6,mathdef926:6,mathdef927:6,mathdef928:6,mathdef929:6,mathdef92:2,mathdef930:6,mathdef931:6,mathdef932:6,mathdef933:6,mathdef934:6,mathdef935:6,mathdef936:6,mathdef937:6,mathdef938:6,mathdef939:6,mathdef93:2,mathdef940:6,mathdef941:6,mathdef942:6,mathdef943:6,mathdef944:6,mathdef945:6,mathdef946:6,mathdef947:6,mathdef948:6,mathdef949:6,mathdef94:2,mathdef950:6,mathdef951:6,mathdef952:6,mathdef953:6,mathdef954:6,mathdef955:6,mathdef956:6,mathdef957:6,mathdef958:6,mathdef959:6,mathdef95:2,mathdef960:6,mathdef961:6,mathdef962:6,mathdef963:6,mathdef964:6,mathdef965:6,mathdef966:6,mathdef967:6,mathdef968:6,mathdef969:6,mathdef96:2,mathdef970:6,mathdef971:6,mathdef972:6,mathdef973:6,mathdef974:6,mathdef975:6,mathdef976:6,mathdef977:6,mathdef978:6,mathdef979:6,mathdef97:2,mathdef980:6,mathdef981:6,mathdef982:6,mathdef983:6,mathdef984:6,mathdef985:6,mathdef986:6,mathdef987:6,mathdef988:6,mathdef989:6,mathdef98:2,mathdef990:6,mathdef991:6,mathdef992:6,mathdef993:6,mathdef994:6,mathdef995:6,mathdef996:6,mathdef997:6,mathdef998:6,mathdef999:6,mathdef99:2,mathdef9:0,mathemat:[16,20,39],mathit:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathrel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathrm:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathsf:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathtt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],matrix:25,max:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],maximum:[13,14,18,21,24,30,43],mbox:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],me:36,mean:[18,21,25,28,30,35,39],meaning:[25,43],meant:0,mechanis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],media:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meet:[3,41],mem:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memarg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],membind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memori:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],memsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mere:[29,42],messag:3,met:[0,3,39],meta:[2,10,13,20,21,26,29,30,31,32],mi:[3,9],michael:[9,16,39],might:[21,28],min:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],minimum:[4,30],mirror:[10,32,34,36],miss:28,mit:[16,39],mitig:24,mm:[1,28],mobil:24,mod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mode:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],model:[16,21,24,25,28],modern:24,modif:[9,16,18],modifi:[1,3,9,16,18],modul:[0,1,4,5,6,7,8,10,11,12,14,15,16,17,18,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],modular:24,modulebodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulefield:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],moduleinst:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulo:20,more:[1,16,18,25,28,31,32,38,39,41],moreov:[19,21,26,29,31,38,39,43],most:[2,9,13,16,18,20,21,26,28,29,31,32,36,41,42,43],mp:20,mt:[3,9,13,36,42],mul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],multi:1,multipl:[0,10,18,19,20,21,26,28,29,30,31,32,36,37,41],multipli:[9,20],must:[0,2,3,4,9,10,13,15,18,19,20,21,26,28,29,32,34,35,36,38,39,41,42,43],mut:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],mutabl:[14,18,21,25,29,30,41],mutat:[9,16,18,19,21],mutual:[9,19,42],n:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],n_0:18,n_1:[9,16,18,43],n_2:[9,16,43],n_:18,n_k:18,name:[0,1,4,5,6,7,8,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,43],nameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namedata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namespac:36,namesubsect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nan:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],narrow_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nat:0,nativ:24,natur:[21,31,34],navig:13,ne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],necessari:[0,9,19,28],necessarili:29,need:[0,2,3,13,18,25,42],neg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],negat:20,neither:[20,30],neq:[13,18,20,21,35,36,38],nest:[4,12,21,25,26,28,34,35],never:[0,9,19,21],newli:28,next:[16,21,35],nj:41,nm:[13,36],nmag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nn:[1,28],non:[3,9,10,15,18,20,21,26,32,42,43],none:8,nontermin:[10,26,32],nontrap:1,nop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],nor:[4,20,24,30],normal:[31,38],notabl:9,notat:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],note:16,noth:[3,18,28,42],notin:34,notion:[9,18,19,41],now:[18,19],num:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],number:[0,1,4,8,9,10,11,13,15,18,19,20,21,25,27,28,31,32,33,36,38,41,42],numer:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],numtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],o:[12,24,34],object:[3,19,21,24,30],observ:[19,20,21,25,30],occasion:28,occur:[0,2,9,12,13,14,16,18,19,20,21,25,29,31,34,35,36,38,39,41,42],occurr:[10,12,21,26,32,35],off:[0,16,18,41],offer:[16,39],offset:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],ok:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],old:[9,18],omit:[0,12,13,16,32,34,36,39],onc:[2,13,19,25,29],one:[0,1,2,9,10,12,13,16,18,19,20,21,25,26,28,29,32,34,36,39,41,43],ones:[9,15,20,39],onli:[0,2,3,9,10,12,16,18,19,21,24,25,28,29,31,32,34,35,36,37,39,41,42,43],onto:18,op:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],op_t:18,opaqu:[25,29,30],opcod:[5,6,8,12],opdtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],open:24,oper:[1,3,4,6,16,17,18,21,24,25,28,30,31],operand:[0,9,16,18,20,21,25,28,34,41],oplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],opposit:20,optim:[18,28],option:[1,10,13,25,26,28,30,32,34,36,37,38,39],order:[0,2,3,9,10,12,13,15,16,19,20,21,25,28,29,30,31,32,36,42],organ:[13,25,29],origin:[0,1,9,16,18,20,21],other:[0,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,31,32,34,35,38,39,41,42],otherwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],out:[0,4,13,20,21,28,29,30,32,39],outcom:[9,18,21,42],outer:21,outermost:28,output:[20,28,30,41],outsid:[9,10,21,25,28,38,39],outward:28,over:[0,3,4,13,20,21,26,28,29,30,31,32,36,39,42],overflow:38,overlap:[28,35,36],overload:29,overview:[1,22,23],own:[9,19,21,24,25,29,30],p:[20,38],p_1:20,p_2:20,pack:[20,25,28,30,41],page:[3,9,18,19,21,28,29,30,36],pair:[2,3,10,13,18,20,25,29,36],parallel:[1,13,24],paralleliz:24,param:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],paramet:[1,3,4,14,18,19,25,29,30,32,36,37,39,42],parameter:13,parametr:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],parenthes:[10,26,31,32,34,35],pars:[3,10,32,34],part:[2,3,16,18,21,24,25,26,28,39,41],parti:13,partial:[18,20],particular:[16,20,24,25,29],particularli:42,pass:[0,3,13,19,21,24,30,42],passiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],path:26,pattern:[12,15,30],payload:[20,31,38],per:[1,2,3,16,18,32,41],perform:[0,1,16,18,19,21,24,25,28,41,42],permit:20,phantom:[12,34],phase:23,phrase:[10,34,39],physic:4,pick:[10,20,41],piec:39,pierc:[16,39],place:[13,14,16,19,21,24,28,32,36,39],placehold:20,placement:13,plain:[12,20,32,34,43],plaininstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],platform:24,pldi:[9,16,39],pm:[20,31,38],pmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],pmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],point:[1,3,11,17,18,21,24,26,27,28,30,33,41],pointer:25,pointwis:[19,20],polici:24,polymorph:[0,41],pop:[0,16,18,19,25,28,41],pop_ctrl:0,pop_val:0,popcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],portabl:24,posit:[8,12,14,15,18,20,31,34,39],possibl:[3,9,10,12,13,14,18,19,20,21,24,26,28,29,30,31,32,35,36,41],post:[5,9,18],potenti:24,power:[20,28],practic:[18,19,21,25],pre:[5,9,18,19,42],preambl:13,preced:[14,20,29,36],preceq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],precis:[9,16,18,21,24,30],predic:20,prefix:[12,28,41],premis:39,prepend:[0,9,39,41],prescrib:[13,28,41],presenc:[0,13,16,18],present:[0,12,13,14,19,21,29,41],preserv:[9,21,29,30],press:[16,39],presum:38,prevent:[24,28,38],previou:[9,28],previous:36,primari:2,primarili:[19,39],primit:[20,31],printabl:[2,38],privileg:24,proce:[21,39],proceed:[9,16,39],process:[25,30,31,43],produc:[13,16,18,19,20,21,25,28,29,36,39,41],product:[10,15,26,32,35,36,38],program:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],progress:9,project:1,promot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],proof:[9,16,39],prop:9,propag:21,proper:0,properti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],propos:1,proposit:39,prose:[17,40],prove:9,provid:[1,2,3,10,19,21,24,25,26,28,29,32,38,39,41,43],pseudo:[0,28,34,35],pth:26,pure:0,purg:0,purpos:[0,2,19,21,37],push:[0,16,18,19,21,25,28,41],push_ctrl:0,push_val:0,put:24,q15mulr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],q:[20,38],q_1:20,q_2:20,qquad:[3,9,10,13,14,15,18,19,20,21,31,32,34,35,36,37,38,39,41,42,43],quad:[9,13,16,18,19,21,29,32,34,36,42,43],qualif:20,quiet:[20,31],quot:32,quotat:38,r:[3,9,18,19,20,21,26,38],r_1:26,r_2:26,rang:[1,3,4,12,13,20,21,24,26,28,29,30,31,38,43],rather:21,ration:20,raw:[25,29,31,36,38],rcl:21,rcll:19,re:19,reach:[3,9,18,21],reachabl:0,read:[9,13,16,20,28,39],readabl:32,reader:[16,39],readili:[16,39],real:[20,25],reason:[4,24],recent:[16,41],recogn:35,recommend:[10,20,32],record:[0,13,16,21,26,32,39],rectifi:20,recurs:[19,25,26,32,34,39,41,42],reduc:[16,18,21],reduct:[16,18,21],ref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],refer:[3,8,9,11,16,17,21,25,27,29,33,36,39,40,42],referenc:[18,19,21,25,28,29,36,37],refin:[0,3],reftyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],regard:[20,34],regardless:[18,28,30],region:28,regist:25,regular:[3,9,34,36],regularli:18,reinterpret:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],reject:4,rel:[9,18,19,20,21,28,34,39,41],relat:[1,9,19,20,28],releas:[5,22,24],relev:[10,21,24,26,32,35,36,39],relop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],rem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],remain:9,remaind:[0,20],remov:[0,9,16,18,21],render:[2,16,32,39],reorder:1,repeat:[18,34],repeatedli:36,replac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],report:[4,19,25],repres:[0,2,12,13,16,20,21,25,28,31,34,35,38,39],represent:[0,1,10,15,16,17,21,24,25,26,30,31,38],repurpos:9,requir:[0,3,4,9,10,13,16,18,19,20,21,25,26,28,29,38,39,41,42],reserv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resiz:[0,30],resolv:[20,21,29,32,36],resourc:[4,18,24],respect:[0,1,3,9,10,12,13,14,16,18,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,43],respons:[3,24],rest:[19,35],restart:[21,28],restrict:[4,10,15,21,28,29,32,35,36,42,43],result:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43],resulttyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resum:28,retriev:28,reus:[21,24,36],revers:0,rewrit:32,right:[0,9,16,18,20,35],rightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],rlll:19,rllll:19,role:36,root:20,rossberg:[9,16,22,39],rotat:20,rotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],rotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],round:[24,36,38],rt:[14,42],rule:[9,10,13,16,18,19,21,22,26,32,34,35,38,39,41,42,43],run:[9,21,24],rundata:19,runelem:19,runtim:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s_0:19,s_1:[9,19],s_2:[9,19],s_3:19,s_4:19,s_5:19,s_:19,s_i:[19,26],s_n:19,safe:[24,25],safeti:9,sai:39,said:39,same:[4,9,10,13,14,18,20,21,26,28,29,31,32,34,36,39,41,42,43],san:26,sandbox:24,sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],satisfi:[3,9,18],satur:[12,20,28],scalar:[31,32,35,38],schuff:[9,16,39],scope:[9,10,21,23,25,36,39],second:[0,28,36],secondari:[2,19],section:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],secur:23,see:36,seen:24,seg:13,segment:[1,4,7,13,18,21,25,27,28,33,39,40,41],select:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],self:[0,24],semant:[0,2,3,9,13,16,18,19,21,22,23,24,39],semicolon:[35,38],sens:3,separ:[0,9,10,12,13,16,20,21,24,25,26,28,32,35,38],seq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sequenc:[2,3,5,7,9,10,12,13,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,38,39,40,42],serif:26,serv:[25,29,36],set:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sever:[12,20,24,28,41],shape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],share:21,shift:[20,28,34,39,41],shl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shortcut:28,shorten:26,shorthand:[10,19,20,26,28,32],should:2,show:0,shown:0,shr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shrink:9,shrunk:0,shuffl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],side:[10,15,21,24,25,26,32,34,36,39],sign:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signal:[20,21,31],signatur:[29,30],signed:[28,31,38],signif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signific:[20,31,38],significand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signless:20,sigplan:[9,16,39],simd:[1,28,30,31],similar:[0,20],similarli:[13,15,16,18,21,26,31],simpl:[21,24,25,31,42,43],simpler:21,simplest:31,simpli:[0,2,21,28],simplifi:13,sinc:[1,13,18,28,31,34],singl:[0,1,2,12,13,14,20,21,24,25,28,29,30,31,34,35,36,37],singleton:20,singular:[18,36,42],sint:14,situat:4,size:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],skeleton:[0,39],sketch:0,skip:13,slice:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],slower:18,small:14,smaller:[18,20,24,25,28,41,43],smallest:[20,29,31,36],so:[0,10,12,13,14,16,18,20,24,28,32,34,36,39,41],sole:34,some:[3,4,9,10,14,15,16,18,20,25,26,28,31,32,38,39,41,43],sometim:[29,31],soon:24,sort:25,sound:[0,5,16,18,22,39],sourc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],space:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],spec:1,special:[0,12,18,31,34],specif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],specifi:[3,4,9,16,19,20,21,25,28,29,32,36,39],speed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],spell:39,splat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],split:[1,13,24,26,36],sqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],squar:20,st:[13,36],stack:[0,4,16,17,18,19,25,28,29,39,41],stackrel:3,stacktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stage:19,stand:[24,38,39],standard:[9,16,20,24,30,31,39],start:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],start_typ:0,startsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],state:[3,9,16,21,25,29,34,39],statement:[28,39],statu:20,stem:4,step:[9,16,18,19,21],still:[0,4,15,16,18,29],stop:20,storag:[25,28,30,34],storagetyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],store16:34,store32:34,store64:34,store8:34,store:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],straightforward:0,strategi:4,stream:[13,16,35],streamabl:24,string:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43],stringchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],structur:[2,3,5,9,12,13,17,18,19,22,25,26,28,29,34,39],stylis:[16,39],sub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],subcategori:28,subclass:30,subject:24,subnorm:31,subrang:29,subset:[4,32,35],substanti:18,subsum:18,subtract:20,subtyp:40,succe:[3,18],suffici:9,sugar:[32,34],suitabl:[3,18,19,24,25,28,36,39,42],supersed:24,suppli:[19,21,29],support:[3,4,10,20,21,24,25,29,35,38],supset:9,surround:[0,21,36,39,41],swizzl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sym:[10,26,32],symbol:[3,4,10,26,32,34,35,36,38],syntact:[3,5,16,21,26,32,34,35,38],syntax:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],synthes:[10,32,36],system:[9,16,24,25,39],sz:18,t1:0,t2:0,t:[0,3,6,12,13,14,15,20,21,28,30,32,34,36,37,38,39],t_0:41,t_1:[6,9,19,32,36,37,39,42],t_2:[6,9,19,36,37,39,42],t_3:41,t_i:[9,13,19,32,41],t_j:41,t_n:32,ta:[18,36],tab:[13,18],tabl:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],tableaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabletyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],tableus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabul:35,take:[0,1,2,4,9,19,20,21,24,25,28,32],taken:21,target:[16,20,21,25,28],task:24,technic:20,techniqu:21,tee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],term:[10,16,18,21,26,32,36],termin:[4,9,10,12,15,16,18,21,26,28,29,32,35],ternari:[1,28],test:[1,20,28],testop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],text:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43],textual:[24,32,38],th:[18,26],than:[1,3,13,18,19,20,21,24,25,28,31,38,41,42,43],thei:[2,4,9,10,12,13,14,18,20,21,24,25,28,29,30,31,32,34,35,36,37,38,39,41,42],them:[0,3,9,16,20,21,25,28,29,31,34,36,39],themselv:[9,15,21,28,35,42],theorem:5,therebi:[16,25,36],therefor:[0,18,21,41],thereof:30,thi:[0,2,3,4,9,10,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,38,39,41,42,43],third:[13,28],thisisenough:34,thisshouldbeenough:[12,34],thorough:[16,39],those:[9,10,26,28,32,42],thread:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],three:[16,18,21,25,28],through:[0,3,13,18,21,25,28,29],thu:[10,14,20,25,29,32],ti:[3,20],tild:38,time:[1,4,9,10,18,19,21,24,26,28,29,32],titzer:[9,16,39],togeth:28,token:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],tool:36,top:[0,10,18,19],toplevel:36,total:15,touch:16,toward:[20,25],track:0,tracker:22,trail:[15,20],transfer:41,translat:24,transmit:24,transpar:30,trap:[0,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],treat:[3,12,26,28],tree:1,tripl:3,trunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],truncat:[12,20],tt:[3,9,13,36,42],tupl:16,turn:[2,4,13],two:[0,2,10,13,15,16,18,20,24,25,26,28,29,31,35,39,41,43],ty:36,type:[0,2,4,5,6,10,11,12,15,16,17,20,21,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],typebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typedef:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],typesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typewrit:[10,32],typic:[3,4,16,24,25,28],u16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u1:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u32:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ultim:21,unalign:[18,25],unambigu:[14,32],unari:[1,20,28],unchang:9,uncondit:[0,28,41],uncondition:39,unconstrain:41,undefin:[9,20],under:[0,9,18,21,25,30,39,41,42],underflow:0,underli:[18,20,31],underscor:38,understand:[16,39],unicod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unifi:21,uniniti:29,uninterpret:[13,15,21,29,31,38],union:30,uniqu:[2,21,29],unit:[28,29,30],univers:[24,43],unknown:[0,13],unless:[9,16,18],unlik:[12,15,25,28,29],unnam:[32,34],unnecessari:[16,32],unop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unravel:19,unreach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unsaf:24,unsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unspecif:3,unspecifi:20,until:[4,13,18],untyp:25,unus:15,unwind:28,up:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],updat:[3,19,26,34,36],upon:29,upper:20,us:[0,1,2,3,4,10,12,13,15,16,18,20,21,24,25,26,28,29,30,31,32,33,34,35,38,39],usabl:25,user:2,usual:[4,10,20,25,28,32],utf8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],utf:[2,15,24,31,32,38],v128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],v:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val_i:19,val_stack:0,val_typ:0,valid:[1,2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43],valtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],valu:[0,2,4,5,6,7,8,10,11,12,13,16,17,18,20,22,23,24,25,26,27,28,29,32,33,34,35,36,39,40,41,43],vari:[4,12,31],variabl:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],variant:[12,15],varieti:24,variou:[0,16,30],vbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vcvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vdash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vechaslongerinstructionnam:12,vechasreallylonginstructionnam:34,vector:[2,8,9,11,13,15,17,19,21,25,27,29,33,40,42],vectyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vee:[9,13,15,18,20,34,36,38],veebar:20,verbatim:34,veri:[13,16],verifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],version:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vextmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],via:[18,19],vibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],view:25,viminmaxop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],violat:18,virelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],virtual:[24,25],visatbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vishiftop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],visual:34,vitestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],viunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vm:24,vrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vulner:24,vunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],w3c:24,w:18,wa:28,wagner:[9,16,39],wai:[3,9,21,24,25],wasm:[10,24],wat:32,watt:9,we:[29,39,41],web:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],webassembl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wedg:[3,9,15,18,19,20,35,36,38],well:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],were:0,wf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],what:[1,39],when:[0,1,2,3,9,10,13,16,18,20,21,26,29,32,36,38,39,41,42,43],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wherea:12,whether:[0,9,13,14,21,28,29,31],which:[0,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,30,31,32,34,35,36,38,39,41,42,43],white:[32,33,34,38],whitespac:35,whose:[0,2,9,10,13,18,19,20,31,32,36,39,43],wide:[16,25,39],width:[18,20,21,25,28,30,31,41],wise:[16,18,20,26,28,41],within:[1,9,15,20,21,25,28,29,30,38,43],without:[4,12,13,18,41],word:[9,39],would:[0,13,18,21,41],wrap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],write:32,written:[9,10,20,26,28,30,32,34,36,38,39],ww:28,x:[1,6,8,10,12,13,19,20,26,28,29,32,34,35,36,39],x_1:[16,21],x_2:[16,21],x_3:[16,21],x_4:16,x_5:16,x_6:16,x_i:18,xor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],xref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],y:[6,12,13,29,34,36],yield:[3,18,28],z:[12,18,31,34,35,38],z_1:18,z_k:18,zakai:[9,16,39],zero:[10,12,15,18,19,20,28,29,31]},titles:["Validation Algorithm","Change History","Custom Sections","Embedding","Implementation Limitations","Appendix","Index of Instructions","Index of Semantic Rules","Index of Types","Soundness","Conventions","Binary Format","Instructions","Modules","Types","Values","Conventions","Execution","Instructions","Modules","Numerics","Runtime Structure","WebAssembly Specification","Introduction","Introduction","Overview","Conventions","Structure","Instructions","Modules","Types","Values","Conventions","Text Format","Instructions","Lexical Format","Modules","Types","Values","Conventions","Validation","Instructions","Modules","Types"],titleterms:{"0":1,"16":41,"2":1,"boolean":20,"byte":[3,15,31],"char":3,"const":[18,19,41],"export":[9,13,21,29,36,42],"float":[1,15,20,31,38],"function":[2,3,9,13,14,18,19,21,29,30,36,37,42,43],"import":[13,29,36,42,43],"int":[1,3],"null":[18,19,41],"return":[18,41],"static":7,_0:9,_1:[18,41,42],_2:[18,41,42],_:[18,20,41],_alloc:3,_decod:3,_export:3,_grow:3,_i16x8:18,_if:[18,41],_import:3,_indirect:[18,41],_init:3,_instanti:3,_invok:3,_lane:[18,41],_n:[9,20,41],_null:[18,41],_pairwis:[18,41],_pars:3,_read:3,_s:[18,20,41],_sat:20,_size:3,_splat:[18,41],_t_1:18,_tabl:[18,41],_true:18,_type:3,_u:20,_valid:3,_write:3,_zero:[18,41],abbrevi:[32,34,36,37],activ:[21,42],address:[18,21],administr:[9,21],algorithm:0,all:18,alloc:19,ani:18,appendix:[3,5],ast:[3,9,18,41,42],auxiliari:[10,26],b:[9,42],binari:[4,11],binop:[18,41],bitmask:[18,41],block:[18,21,41,43],blocktyp:[18,41],bodi:42,br:[18,41],bulk:1,c:[18,19,20,41],call:[18,41],chang:1,charact:35,code:[9,13],comment:35,concept:25,condit:3,configur:[9,21],consider:24,constant:[7,41],construct:7,context:[21,32,39],control:[9,12,18,28,34,41],convent:[10,16,21,26,28,29,30,31,32,38,39],convers:[1,20],convert:20,convert_:20,convert_u:20,copi:[18,41],count:13,custom:[2,13],cvtop:[18,41],data:[0,9,13,18,19,21,29,36,41,42],datainst:9,datamod:42,declar:42,demot:20,depend:24,desc:42,design:24,dot:[18,41],drop:[18,41],e:42,elem:[9,18,41,42],element:[9,13,19,21,29,36,42],eleminst:9,elemmod:42,els:[18,41],emb:3,embed:3,empti:41,end:[9,18,41],enter:18,epsilon:41,error:3,evalu:21,exec:[3,9,19,20],execut:[4,7,17],exit:18,exportdesc:42,exportinst:9,expr:42,express:[12,18,28,34,41],extadd:[18,41],extend:20,extend_:20,extend_u:20,extens:[1,7,9],extern:[9,19,21,30,43],externaddr:9,externtyp:[3,43],externv:[3,9,19],extmul:[18,41],extract:[18,41],f:9,fa:9,fab:20,fadd:20,fceil:20,fcopysign:20,fdiv:20,feq:20,ffloor:20,fge:20,fgt:20,fill:[18,41],fle:20,flt:20,fmax:20,fmin:20,fmul:20,fne:20,fnearest:20,fneg:20,fold:34,formal:[16,39],format:[4,11,33,35],fpmax:20,fpmin:20,frame:[9,21],from:18,fsqrt:20,fsub:20,ftrunc:20,func:[3,9,18,19,41,42,43],funcaddr:[3,9],funcinst:9,functyp:[3,9,43],get:[18,41],global:[3,9,13,14,18,19,21,29,30,36,37,41,42,43],globaladdr:3,globalinst:9,globaltyp:[3,42,43],goal:24,grammar:[10,26,32],grow:[18,19,41],half:[18,41],hf:9,histori:1,host:[9,18,19],hostcod:9,hostfunc:3,i32x4:18,i8x16:[18,41],i:[3,20],i_1:20,i_2:20,i_3:20,iab:20,iadd:20,iaddsat:20,iaddsat_:20,iaddsat_u:20,iand:20,iandnot:20,iavgr:20,iavgr_u:20,ibitselect:20,iclz:20,ictz:20,identifi:38,idiv:20,idiv_:20,idiv_u:20,ieq:20,ieqz:20,iextend:20,iextendn_:20,ig:20,ige_:20,ige_u:20,igt:20,igt_:20,igt_u:20,il:20,ile_:20,ile_u:20,ilt:20,ilt_:20,ilt_u:20,imax:20,imax_:20,imax_u:20,imin:20,imin_:20,imin_u:20,implement:4,importdesc:42,imul:20,index:[6,7,8],indic:[13,29,36],ine:20,ineg:20,init:[18,41,42],inot:20,instanc:[3,9,21],instanti:19,instr:[9,18,19,41],instruct:[1,6,9,12,18,19,21,28,34,41,42],integ:[15,20,31,38],interpret:20,introduct:[23,24],invoc:[18,19],invok:9,ior:20,ipopcnt:20,iq15mulrsat:20,iq15mulrsat_:20,irem:20,irem_:20,irem_u:20,irotl:20,irotr:20,ishap:41,ishl:20,ishr:20,ishr_:20,ishr_u:20,isub:20,isubsat:20,isubsat_:20,isubsat_u:20,ixor:20,l:[18,41],l_n:[18,41],label:[9,18,21,34],laneidx:41,lexic:35,limit:[4,9,14,30,37,43],load:[18,41],local:[2,9,18,41,42],loop:[18,41],m:[18,20,41,43],map:2,match:7,mathit:[3,9,18,41,42,43],mathrm:[3,20],mathsf:[9,18,19,20,41,42,43],max:43,mem:[3,19,42,43],memaddr:3,memarg:[18,41],meminst:9,memori:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],memtyp:[3,42,43],min:43,mode:42,modul:[2,3,9,13,19,21,29,36,42,43],moduleinst:[3,9],multipl:1,mut:[9,42,43],n:[3,18,20,41,43],name:[2,3,9,15,31,38,42],nan:20,narrow:[18,20,41],narrow_:20,narrow_u:20,non:[1,41],nop:[18,41],notat:[10,16,26,39],number:[14,30,37],numer:[12,18,19,20,28,34,41],offset:42,op:20,opcod:0,oper:20,overview:25,parametr:[12,18,28,34,41],passiv:42,phase:25,point:[15,20,31,38],post:3,pre:3,promot:20,propag:20,prose:[16,39],ref:[3,9,18,19,41],refer:[1,12,14,18,19,28,30,34,37,41],reftyp:43,reinterpret:20,releas:1,relop:[18,41],replac:[18,41],represent:20,result:[9,14,21,30],rightarrow:43,round:20,rule:7,runtim:[3,7,9,19,21],s:[9,20],scope:24,section:[2,13],secur:24,segment:[19,29,36,42],select:[18,41],semant:[7,25],sequenc:[0,41],set:[18,41],shape:[18,41],shuffl:[18,41],sign:[1,20],size:[18,41],sound:9,space:35,specif:22,splat:[18,41],stack:21,start:[13,29,36,42],storag:20,store:[3,7,9,18,21,41],string:38,structur:[0,4,21,27],subsect:2,subtyp:43,swizzl:[18,41],sx:[18,41],syntact:4,syntax:[3,9,18,19,41,42,43],t:[9,18,19,41,42],t_1:[18,20,41,43],t_2:[18,20,41,43],tabl:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],tableaddr:3,tableinst:9,tabletyp:[3,42,43],tee:[18,41],testop:[18,41],text:[4,33],theorem:9,thread:9,token:35,trap:[1,9],trunc:20,trunc_:20,trunc_sat_:20,trunc_sat_u:20,trunc_u:20,type:[1,3,7,8,9,13,14,18,19,29,30,36,37,41,42,43],typeidx:43,u32:3,u:20,unop:[18,41],unreach:[18,41],us:36,v128:[18,41],val:[3,9],valid:[0,4,9,40],valtyp:[18,41,43],valu:[1,3,9,14,15,19,21,30,31,37,38,42],variabl:[12,18,28,34,41],vbinop:[18,41],vcvtop:[18,41],vec:[18,41],vector:[1,10,12,14,18,20,26,28,30,31,32,34,37,41],vishiftop:[18,41],vrelop:[18,41],vtestop:41,vunop:[18,41],vvbinop:[18,41],vvternop:[18,41],vvtestop:41,vvunop:[18,41],webassembl:22,white:35,wrap:20,x:[18,41,42],xref:[3,9,18,19,20,41,42,43],y:[18,41],z:20,z_1:20,z_2:20}}) \ No newline at end of file +Search.setIndex({docnames:["appendix/algorithm","appendix/changes","appendix/custom","appendix/embedding","appendix/implementation","appendix/index","appendix/index-instructions","appendix/index-rules","appendix/index-types","appendix/properties","binary/conventions","binary/index","binary/instructions","binary/modules","binary/types","binary/values","exec/conventions","exec/index","exec/instructions","exec/modules","exec/numerics","exec/runtime","index","intro/index","intro/introduction","intro/overview","syntax/conventions","syntax/index","syntax/instructions","syntax/modules","syntax/types","syntax/values","text/conventions","text/index","text/instructions","text/lexical","text/modules","text/types","text/values","valid/conventions","valid/index","valid/instructions","valid/modules","valid/types"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,sphinx:56},filenames:["appendix/algorithm.rst","appendix/changes.rst","appendix/custom.rst","appendix/embedding.rst","appendix/implementation.rst","appendix/index.rst","appendix/index-instructions.rst","appendix/index-rules.rst","appendix/index-types.rst","appendix/properties.rst","binary/conventions.rst","binary/index.rst","binary/instructions.rst","binary/modules.rst","binary/types.rst","binary/values.rst","exec/conventions.rst","exec/index.rst","exec/instructions.rst","exec/modules.rst","exec/numerics.rst","exec/runtime.rst","index.rst","intro/index.rst","intro/introduction.rst","intro/overview.rst","syntax/conventions.rst","syntax/index.rst","syntax/instructions.rst","syntax/modules.rst","syntax/types.rst","syntax/values.rst","text/conventions.rst","text/index.rst","text/instructions.rst","text/lexical.rst","text/modules.rst","text/types.rst","text/values.rst","valid/conventions.rst","valid/index.rst","valid/instructions.rst","valid/modules.rst","valid/types.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,2,5,9,10,12,13,15,18,19,20,21,22,24,26,28,29,31,32,34,35,36,38,39,41],"00":[6,10,12,13,14,15,19,31,35],"01":[6,10,12,13,14],"02":[6,12,13],"03":[6,12,13,15],"04":[6,12,13],"05":[6,12,13],"06":[6,13,22,24],"07":[6,13],"08":6,"09":[6,35,38],"0a":[6,32,35,38],"0b":[6,12],"0c":[6,12],"0d":[6,12,35,38],"0e":[6,12],"0f":[6,10,12],"0x":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"1":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"10":[6,12,13,15,38],"100":12,"10000":15,"101":12,"102":12,"1024":20,"103":12,"104":12,"105":12,"106":12,"107":12,"108":12,"109":12,"10ffff":[31,35],"11":[6,12,13,31],"110":12,"110000":[15,38],"111":12,"1114112":31,"112":12,"113":12,"114":12,"115":12,"116":12,"117":12,"118":12,"119":12,"12":[6,12,13,15],"120":12,"121":12,"122":12,"123":12,"124":12,"125":12,"126":12,"127":12,"128":[12,18,20,21,25,28,30,31,41],"129":12,"13":[6,12],"130":12,"131":12,"132":12,"133":12,"134":12,"135":12,"136":12,"137":12,"138":12,"139":12,"14":[6,12,20],"140":12,"141":12,"142":12,"143":12,"144":12,"145":12,"146":12,"147":12,"148":12,"149":12,"15":[6,12,18,20,38],"150":12,"151":12,"152":12,"153":12,"155":12,"156":12,"157":12,"158":12,"159":12,"16":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"160":12,"161":12,"163":12,"164":12,"167":12,"168":12,"169":12,"16x4":[6,12,28,34],"17":[6,8,12],"170":12,"171":12,"172":12,"173":12,"174":12,"177":12,"18":[6,12,15],"181":12,"182":12,"183":12,"184":12,"185":12,"186":12,"188":12,"189":12,"19":[6,12],"190":12,"191":12,"192":12,"193":12,"195":12,"196":12,"199":12,"1a":[6,12],"1b":[6,12],"1c":[6,12],"1d":6,"1e":6,"1ex":[9,15,18,19,20,21,34,36,38,43],"1f":6,"2":[2,5,8,9,12,13,15,16,18,19,20,21,22,24,25,26,28,31,32,34,35,38,39,41,43],"20":[6,12,38],"200":12,"2002":[16,39],"201":12,"2017":[9,16,39],"2018":9,"2019":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"202":12,"2022":[22,24],"203":12,"204":12,"205":12,"206":12,"209":12,"21":[6,12],"213":12,"214":12,"215":12,"216":12,"217":12,"218":12,"219":12,"22":[6,12,22,24,38],"220":12,"221":12,"222":12,"223":12,"224":12,"225":12,"227":12,"228":12,"229":12,"23":[6,12,31],"230":12,"231":12,"232":12,"233":12,"234":12,"235":12,"236":12,"237":12,"239":12,"24":[6,12],"240":[12,18],"241":12,"242":12,"243":12,"244":12,"245":12,"246":12,"247":12,"248":12,"249":12,"25":[6,12],"250":12,"251":12,"252":12,"253":12,"254":12,"255":12,"256":31,"26":[6,12],"27":[6,12,38],"28":[6,12],"29":[6,12],"2a":[6,12],"2b":[6,12],"2c":[6,12],"2d":[6,12],"2e":[6,12],"2ex":[12,34],"2f":[6,12],"3":[1,8,12,13,15,20,30,31,34,41],"30":[6,12],"31":[6,12],"32":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"32x2":[6,12,28,34],"33":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"34":[6,12],"35":[6,12],"36":[6,12],"37":[6,12],"38":[6,12],"38th":[9,16,39],"39":[6,12],"3a":[6,12],"3b":[6,12],"3c":[6,12],"3d":[6,12],"3e":[6,12,15],"3ex":34,"3f":[6,12],"4":[1,8,12,13,15,20,25,31,34,35],"40":[6,8,12],"41":[6,8,12],"42":[6,12],"43":[6,12],"44":[6,12],"45":[6,12],"46":[6,12],"47":[6,12],"48":[6,12],"49":[6,12],"4a":[6,12],"4b":[6,12],"4c":[6,12],"4d":[6,12],"4e":[6,12],"4f":[6,12],"5":[1,8,12,13,20,32,38],"50":[6,12],"51":[6,12],"52":[6,12,31],"53":[6,12],"54":[6,12],"55":[6,12],"56":[6,12],"57":[6,12],"58":[6,12],"59":[6,12],"5a":[6,12],"5b":[6,12],"5c":[6,12,38],"5d":[6,12],"5e":[6,12],"5f":[6,8,12],"6":[1,12,13,15],"60":[6,8,12,14],"61":[6,8,12,13],"62":[6,12],"63":[6,12],"64":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"65":[6,12],"65536":21,"66":[6,12],"67":[6,12],"68":[6,12],"69":[6,12],"6a":[6,12],"6b":[6,12],"6c":[6,12],"6d":[6,12,13],"6e":[6,8,12],"6f":[6,8,12,14],"7":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"70":[6,8,12,14],"71":[6,8,12],"72":[6,12],"73":[6,12,13],"74":[6,12],"75":[6,12],"754":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"76":[6,12],"77":[6,12],"78":[6,12],"79":[6,12],"7a":[6,8,12],"7b":[6,8,12,14,15],"7c":[6,8,10,12,14],"7d":[6,8,10,12,14],"7e":[6,8,10,12,14,15],"7f":[6,8,10,12,14,15,38],"7th":9,"8":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"80":[6,12,15],"800":15,"81":[6,12],"82":[6,12],"83":[6,12,15],"84":[6,12],"85":[6,12],"86":[6,12],"87":[6,12],"88":[6,12],"89":[6,12],"8a":[6,12],"8b":[6,12],"8c":[6,12],"8d":[6,12],"8e":[6,12],"8f":[6,12],"8x8":[6,12,28,34],"9":[12,13,15,38],"90":[6,12],"91":[6,12],"92":[6,12],"93":[6,12],"94":[6,12],"95":[6,12],"96":[6,12],"97":[6,12],"98":[6,12],"99":[6,12],"9a":[6,12],"9b":[6,12],"9c":[6,12],"9d":[6,12],"9e":[6,12],"9f":[6,12],"abstract":[3,9,10,16,20,21,25,26,31,32,36,38,39],"boolean":[25,28],"break":[24,28],"byte":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43],"case":[0,3,4,9,10,13,14,16,18,20,24,26,28,32,34,36,38,39,41,43],"char":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"class":[3,29,30,31,34,35],"const":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"default":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"do":[0,2,3,9,16,18,19,28,36,38,39,41],"export":[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],"final":[0,9,19,21,25,39],"float":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,42,43],"function":[0,1,4,5,7,8,10,11,15,16,17,20,24,25,27,28,32,33,34,39,40,41],"import":[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],"int":[0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"long":[3,16,20,41],"new":[0,1,3,9,16,19,24,34,36,39,41],"null":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"return":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],"short":[26,29],"static":[9,19,21,25,28,29],"switch":0,"throw":28,"true":[0,20],"try":[3,18],"var":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"while":[9,13,18,19,28,29,31,35],A:[0,2,3,4,9,10,16,18,19,20,21,24,25,26,28,29,31,32,35,36,38,39,41,42],And:18,As:[3,15,16,20,24,28,36,41],At:[24,36],BE:[6,12],But:0,For:[0,3,4,9,10,12,13,15,16,18,19,20,21,25,26,28,29,32,34,35,39,41,42],If:[3,4,9,10,13,18,19,20,26,28,30,32,36,39,41,42,43],In:[0,3,9,10,12,13,14,16,18,19,20,21,24,25,28,29,30,31,32,34,36,38,39,41,43],It:[0,2,3,13,16,18,19,20,21,24,25,28,29,30,32,35,36],Its:[24,28,29,43],No:[9,10,18,24,31,34],Of:24,On:3,Or:[9,18,43],Such:[2,16,24,25,34,36,39,41],That:[0,9,10,20,21,30,35,36,38,39,41],The:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42,43],Their:[13,34],Then:[9,19,41,42,43],There:[9,16,20,21,25,41],These:[4,19,20,21,24,25,28,29,32],To:[9,12,16,24,32,39],_0:[2,13,18,19,21],_1:[2,7,9,12,13,14,26,34,36,39,43],_2:[2,7,9,12,13,14,26,34,36,39,43],_3:13,_4:[13,34],_5:13,_6:13,_7:13,_8:[13,20,34],_9:13,_:[1,6,12,13,15,19,21,28,34,36,38],_e:20,_f32:[28,34],_f32x4:[1,6,12,28,34],_f64:[28,34],_f64x2:[1,6,12,28,34],_f:[1,18,21,28],_high:[6,12,34],_i16x8:[1,6,12,28,34],_i32:[28,34],_i32x4:[1,6,12,28,34],_i64:[28,34],_i8x16:[1,6,12,28,34],_i:[1,3,9,19,26,28,34,36,41,42],_if:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_indirect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_low:[1,6,12,28,34],_m:[18,20,21],_n:[2,13,18,21,31,34,38,39],_null:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_pairwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_s:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_splat:[1,6,12,28,34],_t:[18,20,21],_tabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],_true:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],_x:18,_y:18,_zero:[1,6,12,28,34],a0:[6,12],a1:[6,12],a2:[6,12],a3:[6,12],a4:[6,12],a5:[6,12],a6:[6,12],a7:[6,12],a8:[6,12],a9:[6,12],a_1:[10,26,32],a_2:26,a_i:[10,26,32],a_n:[10,26,32],aa:[6,12],ab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],abbrevi:[21,24,33,38],abil:1,abl:[9,13],abort:[16,18,25,28],about:[3,9,16,21,24,39],abov:[0,4,9,18,31,35],abrupt:21,absent:[9,39,41],absolut:34,ac:[6,12],accept:30,access:[0,1,3,9,18,24,25,26,28,29,34,39,42],accord:[3,18,28,35,39],accordingli:[39,41],accumul:[0,21,41],acm:[9,16,39],acronym:24,across:24,activ:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],actual:[0,2,10,12,13,18,19,25,32,42],ad:[1,6,9,12,13,19,20,28],add:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],addit:[0,1,3,4,9,10,12,13,15,21,24,25,28,29,30,32,34,36,39],addition:[0,28],addr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],address:[3,9,17,19,25,28],adher:[9,18],admin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],administr:[5,17,18],adopt:[3,10,16,26,32,39],advantag:24,ae:[6,12],af:[6,12],affect:[2,18,19,28,35],aforement:24,after:[0,2,13,16,18,28,29,34],afterward:[0,16],again:20,against:[0,18,19,28,43],ahead:[24,35],akin:41,algorithm:[5,22,39,41],align:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alik:24,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocglob:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allochostfunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocmodul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],alloct:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],allocx:19,allow:[0,1,4,9,10,12,14,15,18,20,21,24,25,28,29,32,34,35,36,38,39,41,43],alon:[9,16,24,39],along:0,alreadi:[4,18,38],also:[1,3,9,10,12,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41],alter:25,altern:[10,20,28],alwai:[9,20,21,25,28,35,38,39,43],ambient:24,ambigu:21,amen:[16,39],among:[20,31],an:[0,1,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,42,43],analog:34,andnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],andrea:[9,16,22,39],ani:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],annot:[12,18,28,34,39,41],anonym:[25,36,37],anoth:[28,36,41],anyth:41,anywher:[21,34,37],aot:24,api:[19,24,25],appear:[2,10,18,26,32,34,36,42],append:[19,26,39],appendix:[0,1,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],appli:[9,16,18,20,21,32,36,39,43],applic:[4,10,16,20,24,32],approach:[16,39],appropri:[9,16,19,28],ar:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42,43],arbitrari:[1,20,31,32,38],arbitrarili:[21,41],architectur:24,argument:[3,9,12,18,19,20,21,25,28,34],arithmet:[20,31],ariti:[0,18,21],around:[25,34],arrai:[2,3,9,10,12,13,14,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,37,38,39,41,42],articl:[9,16,39],ascii:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ascrib:18,aspect:[0,4,24],assembl:25,assert:[3,16,18,19],assign:[2,21,32,35],associ:[0,2,9,18,19,21,28,30,32],assum:[3,4,9,16,19,20,21,26,32,35,39,41],assumpt:[9,24,39],ast:[6,7,8,10,12,13,14,15,16,19,20,21,26,28,29,30,31,32,34,35,36,37,38,39,43],ast_i:19,atom:[19,26],attach:2,attack:24,attribut:[10,20,32,36],augment:[10,26,32,36],authorit:24,automat:[3,9,25,29,36],aux:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],auxiliari:[0,3,11,15,18,19,20,21,27,29,30,31,34,36,41],avail:[18,24,25,28,29,39],averylonginstructionnameforvectext:34,avgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],avoid:[1,12,16,21,32],awai:28,axiom:39,b0:[6,12],b1:[6,12],b2:[6,12],b3:[6,12],b4:[6,12],b5:[6,12],b6:[6,12],b7:[6,12],b8:[6,12],b9:[6,12],b:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],b_1:[9,10,15,26],b_2:[9,15,26],b_3:15,b_4:15,b_:12,b_i:10,b_n:10,ba:[6,12],back:[0,18,25,28,41],backslash0asm:13,backslash:38,backward:[13,18,28,34,36],base:[18,20,25,28,29,31,34],basic:[10,21,25,28],bastien:[9,16,39],bb:[6,12],bc:[6,12],bd:[6,12],becaus:[18,19,20,21,24,41],becom:29,been:[0,1,16,19,21,24,29],befor:[4,13,19,24,29,32,36],beforehand:19,begin:[2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,26,28,29,30,31,32,34,35,36,37,38,39,41,42],behav:[9,21,28],behavior:[9,16,18,21,24,28],being:[13,24,28,41],below:[9,19,42],ben:[9,16,39],benjamin:[16,39],besid:[20,21],between:[3,20,25,31,32],beyond:[24,25],bf:[6,12],big:39,bigoplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bigwedg:18,biject:20,binari:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bind:[10,32,34,36],binop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitfield:13,bitmask:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bitwidth:28,bitwis:[20,28],block:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],blockchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockcom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blockinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],blocktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],bodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],book:[16,21,39],bool:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],bot:[9,18,41],both:[9,14,15,16,20,26,28,29,34,36,38,39,41,43],bottom:41,bound:[10,13,15,25,26,28,31,32,34,36,43],boundari:1,br:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],br_if:0,br_tabl:0,bracket:[12,28,30,34,35,38],branch:[0,18,21,25,28,34],breach:24,brief:[16,39],bring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],broadli:24,browser:24,bt:[6,12,18,34],bubbl:21,bytes_:[12,20],c0:[6,12,15],c1:[6,12],c2:[6,12,18],c3:[6,12],c4:[6,12],c5:6,c6:6,c7:6,c8:6,c9:6,c:[3,7,9,15,28,34,35,38,39,42,43],c_0:20,c_1:[18,20],c_2:18,c_3:18,c_:20,c_i:20,c_k:20,ca:6,cach:24,calcul:19,call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],calle:28,can:[0,1,2,3,9,10,12,13,14,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,36,38,39,41,42],candid:20,candidatepair:20,cannot:[0,12,19,24,25,28,29,35,37],canon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cap:[20,24],capabl:24,carri:[3,21],carriag:35,categori:[8,21,25,28,35],caught:25,caus:28,cb:6,cc:6,ccc:9,cd:6,cdot2:31,cdot64:18,cdot:[3,9,15,16,18,19,20,31,38,41],ce:6,ceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],certain:[9,16,20,21,25],certifi:9,cf:6,chang:[0,5,9,13,22,39],channel:24,chapter:35,charact:[4,15,24,31,32,33,38],check:[0,1,13,18,19,25,28,30,34,39,41,42,43],choic:[18,21,36,41],chosen:[20,41],clamp:20,classif:3,classifi:[9,19,30,39,41,42,43],claus:[20,36],clear:[21,30,31],clll:36,cllll:36,close:[10,28,32,42],closest:20,closur:[19,21],clutter:[16,32],clz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],code:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],codifi:9,coexist:14,coincid:[9,16,18],collect:[21,29,39],collid:12,com:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],combin:[1,20,36,37,41],combinatori:[10,26,32],come:28,comma:38,comment:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],common:[4,21,24,26],commun:24,compact:24,comparison:28,compat:[13,34,36],compil:[1,2,4,13,24,25,29],complement:[15,20,24,25,28,31],complementari:25,complet:[0,3,10,25,29,32,39],complex:[26,31],compon:[9,13,16,21,26,29,32,39,42],compos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],composit:[26,36],compound:[9,41],compress:[10,12,13],comput:[4,9,16,18,20,21,24,25,28,30,32],concat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],concaten:[3,9,13,18,19,26,42],concept:23,conceptu:25,concern:[24,28],concis:[16,26,39],conclus:39,concret:[4,26,32,39],condit:[5,9,10,15,18,19,20,25,26,28,32,34,36,39],confer:[9,16,39],config:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],configur:[5,7,16],conform:4,conjunct:20,connect:3,conrad:9,consecut:[0,4,21,36],consequ:[0,9,10,28,29,35,36,41,42],consid:[20,21,24,32,34,35],consider:23,consist:[0,2,9,12,13,16,18,19,20,21,25,28,29,34,35,36],constant:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],constitut:18,constrain:[30,41],constraint:[0,4,9,15,21,39,41],construct:[16,21,25,26,28,29,31,32,36,39,42],constructor:[8,14],consum:[18,24,28,39,41],cont:13,contain:[0,9,10,13,15,16,18,19,21,24,25,28,29,32,34,35,36,38,39,41,42],contemporari:24,content:[2,13,18,19,21,26,29,39,42],context:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,40,41,42,43],contigu:25,continu:[18,21,26,28],contract:24,contrast:[21,41],contribut:2,control:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],conveni:[16,20,21,28,32],convent:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,22,23,24,25,27,33,34,35,36,37,40,41,42,43],convers:[17,18,21,25,28],convert:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],convert_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],copi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],copysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],corollari:9,correct:9,correctli:38,correspond:[3,12,13,14,18,19,20,21,26,29,30,31,32,34,35,38,39,41],corrupt:24,could:25,count:[1,11,18,20,21],cours:24,courtesi:21,cover:9,cpp:9,crash:9,creat:[3,21,25],crucial:16,ctrl:0,ctrl_frame:0,ctrl_stack:0,ctxt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ctz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cup:20,current:[0,2,9,10,13,16,18,21,25,28,29,36,39,41],custom:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],customsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],cvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],d0:[6,12],d1:[6,12],d2:[6,12],d3:6,d4:6,d5:6,d6:6,d7:6,d7ff:[31,35],d800:[15,38],d8:6,d9:6,d:[13,18,20,36,38],d_0:20,d_1:[18,20],d_2:[18,20],d_:20,da:[6,18,36],dan:[9,16,39],data:[1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,43],dataaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datacountsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dataidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datainst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datamod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],datasec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],datastr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],db:6,dc:6,dd:6,de:6,deal:[10,26],debug:[13,24],debugg:2,decim:38,declar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],decod:[0,10,13,24,25],decompos:21,decreas:20,dedic:2,deduct:39,def:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],defer:[4,13],defin:[1,2,3,9,10,13,15,16,18,19,20,21,24,25,26,29,30,31,32,34,35,36,38,39,41,42,43],definit:[2,3,9,13,16,18,19,20,21,24,25,26,29,31,35,36,39,41,42],degre:41,delimit:[34,35],delta:28,demot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],denot:[10,13,14,18,20,21,26,28,29,30,31,32,38,39],dens:10,depend:[2,4,13,18,19,20,23,28,29,31,38,39,42],deploy:29,depth:[4,28],derek:[9,16,39],deriv:[3,9,10,16,39],desc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],describ:[0,9,13,16,21,24,26,28,29,31,39,41],descript:[3,7,13,16,29,32,36,39,42],descriptor:[29,34,36],design:[4,9,16,23,39],desktop:24,destin:28,detail:25,detect:0,determin:[0,16,19,20,28,30,31,34,42],determinist:[16,18,20,21],develop:24,devic:[19,24,42],df:6,diagnost:3,differ:[0,3,9,10,12,18,19,20,21,24,25,26,28,29,31,41,42],digit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dim:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],dimens:[4,41],dimension:2,dinstr:19,direct:[20,28],directli:[0,1,3,9,15,18,24,25,32,34,36],disallow:35,disambigu:35,discrep:24,disjoint:[9,42],disjunct:20,distinct:[25,31,32],distinguish:[10,13,21,28,29,31,32,34,41],distribut:25,div:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],diverg:[9,18],divid:[3,18,19,20,21,25,28,35,41],dividend:20,divis:[19,20],dmode:19,document:[24,37],documentari:36,doe:[0,3,9,13,18,19,20,24,28,35,38,39,42],dot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],doubl:[30,35],draft:[22,24],drawn:32,drop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],due:[3,18,19,31],dummi:19,dup:0,duplic:[0,28,32,36],dure:[4,9,18,21,29,30,43],dynam:[9,19,21,25,28],e000:[15,31,35,38],e0:[6,15],e1:6,e2:6,e3:6,e4:6,e5:6,e6:6,e7:6,e8:6,e9:6,e:[0,2,9,10,13,18,19,20,21,24,28,31,36,38],e_i:[13,42],ea:[6,18],each:[0,2,3,9,10,12,13,16,18,19,20,21,24,25,26,28,29,32,36,38,39,41,42,43],earlier:[18,36],eas:43,easi:[0,24],easili:[19,42],eb:6,ec:6,ed:6,editor:22,ee:6,ef:6,effect:[0,16,18,21,28,34,35,41,42],effector:35,effici:[24,41],einit:19,einstr:19,either:[0,9,10,12,15,16,18,19,20,21,24,25,26,28,29,30,31,32,35,36,38,41,43],el:[13,36],elem:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],elemaddr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],element:[0,1,3,4,7,10,11,14,17,18,20,25,26,27,28,30,33,38,39,40,41],elemexpr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],eleminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemkind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elemmod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],elemsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],elimin:21,ellips:26,els:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],elsewher:39,emb:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embed:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],embedd:[3,4,9,18,19,21,24,25,29,30],embodi:39,emploi:[24,26],empti:[0,3,9,10,12,13,16,18,19,20,21,26,29,32,34,36,39,42,43],emptyset:[9,13],emul:25,enabl:[4,13,21,24],encapsul:9,enclos:[28,32,35,38],encod:[2,10,12,13,14,15,21,24,25,31,32,38,39],encompass:24,end:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],end_typ:0,endian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],enforc:[15,28,34,36,39,41],enough:28,enrich:1,ensur:[0,9,18,19,21,25,36],enter:[0,16,28],entir:[16,21,29,36,41,42],entiti:[21,25,29,30],entri:[1,3,13,18,19,21,28,30,32,34,39],enumer:0,environ:[3,4,24,25,29],eof:35,epsilon:[3,8,9,10,12,13,14,16,18,19,20,21,26,32,34,36,37,38,42,43],eq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],equal:[3,9,10,19,20,21,24,26,41,43],equat:20,equiv:[32,34,36,37],equival:[13,16,29,39],eqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],err:18,error:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],error_if:0,escap:38,especi:24,establish:24,et:[13,14,19,36,37,42],ev:3,evalu:[9,16,18,19],even:[0,3,20,21,29],event:4,ever:13,everi:[3,4,9,13,16,18,29,31,39],ex:[3,13,19,36],exact:[20,28],exactli:[10,20,21],exampl:[0,3,9,10,15,16,18,20,21,25,28,29,32,34,35,39,41],exce:[15,21],exceed:[4,18],except:[9,10,12,13,16,20,26,32,35,38,41,42],exclud:20,exclus:[20,35],exec:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],execut:[5,6,9,16,18,19,21,22,24,25,28,30,41],exist:[0,3,9,18,19,20,21,24,34,36,39],exit:[0,16],expand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expans:[10,20,26,32,36,38],expect:[0,3,4,9,13,18,19,28,41],experi:2,explan:[16,39],explanatori:0,explicit:[9,12,13,21,26,34,36,38],explicitli:[3,9,16,18,39],expon:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],exportinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],exportsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],expr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],express:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],extadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extend16:34,extend32:34,extend8:34,extend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extend_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extens:[0,5,10,12,13,18,20,28,32,39],extern:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42],externaddr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],externtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],externv:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],extmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],extra:9,extract:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],f0:[6,15],f1:6,f2:6,f32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f3:6,f4:6,f5:6,f64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f6:6,f7:6,f8:6,f9:6,f:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],f_:19,fa:6,fab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fact:[0,18,34,35],fadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fail:[18,19],failur:[3,18,19],fall:[18,25,35],fals:0,farther:28,fashion:[21,29,30],fast:24,fb:6,fbia:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fbit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fc:[6,12],fceil:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fcopysign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fd:[6,12],fdiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fe:[6,15],featur:[4,24],feed:35,feq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],few:[10,16,32],ff:[6,15,31],ffloor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],field:[13,19,26,36,39,42],file:[10,32,36],fill:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],filter:[21,29,30],finit:9,first:[0,4,19,20,26,28,29,30,36,41],fit:19,fix:[4,26,31],flag:[0,14,20],flat:[0,26],flavor:28,fle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],floor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],flow:[25,28],flt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fn:36,fne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fnearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fneg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fold:[4,33],foldedinstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],follow:[0,1,2,3,4,9,10,12,13,14,15,16,18,19,20,21,24,25,26,28,29,30,32,34,35,36,38,39,43],font:[10,26,32],foral:[9,20],foreach:0,forev:9,form:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],formal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],format:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,37,38,39,40,41,42,43],formed:[25,36,42],former:[0,10,32],formul:39,forth:10,forward:[13,28,29],found:[16,39],four:[21,25,28],fpmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fpmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],frac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fraction:38,frame:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],free:[19,29,39],freed:28,frelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fresh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],from:[0,3,4,9,10,13,16,19,20,21,24,25,26,28,29,30,31,32,34,35,36,37,39,41,42],front:39,fshape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],fsub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ft:[3,13,18,36,42],ftestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ftrunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],full:25,fulli:[4,24,41],func:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],funcaddr:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],funcsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],functyp:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],funop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],further:[13,15,16,25,28,41],furthermor:[9,13,16,18,36,38,42],futur:[4,9,12,13,14,18,20,21,24,28,29,30,41,42],g:[0,2,9,19,24,31],gap:12,garbag:21,ge:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gener:[0,1,9,10,13,16,18,20,26,32,39],geq:[10,12,15,20,26,31,32,38,43],get:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],gi:3,ginit:19,github:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],give:[16,39],given:[2,4,9,10,16,18,19,20,21,24,25,26,28,29,30,32,34,36,38,39,41,43],gl:36,glob:[13,18],global:[0,1,2,4,5,6,7,8,10,11,12,15,16,17,20,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],globaladdr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globalsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],globaltyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],go:29,goal:23,gohman:[9,16,39],grammar:[3,11,13,27,28,31,33,34,35,36,38],grave:38,greater:20,group:[2,24,28,34],grow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],growmem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],grown:25,growtabl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],gt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],guarante:[3,16,24,25],h:38,ha:[0,1,2,3,9,10,13,16,18,19,20,21,24,25,26,29,31,32,39,41],haa:[9,16,39],had:10,half:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],hand:[3,21],handl:[0,20,21,25,34],happen:19,hardwar:[18,24,28],hat:38,have:[1,4,10,12,13,18,20,21,24,26,28,29,31,32,34,37,39,41,43],head:34,heap:37,heaptyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],height:[0,21,25,28],help:20,henc:[3,20,21,24,38,39],here:[0,3,10,13,18,19,21,35,39,41,43],heterogen:28,hexadecim:[10,31,38],hexdigit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfloat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexfrac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hexnum:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hf:18,hfill:19,hh:38,high:[18,24,28],hint:[2,18,28],histori:[5,22],hold:[9,18,20,21,30,39],hole:21,holman:[9,16,39],hookrightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hop:21,horizont:35,host:[3,21,24,25,29],hostcod:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],hostfunc:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],how:[19,24,25,28,29,34,41],howev:[0,2,4,10,13,15,18,19,21,24,25,28,29,31,32,34,36,39,42,43],hspace:34,http:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i16x8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i2:20,i32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i32x4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i64x2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i8x16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],i:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],i_1:18,i_2:18,iab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iadd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iaddsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iandnot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iavgr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ibitselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iclz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ictz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],id:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idc:36,idchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ident:21,identifi:[4,13,20,21,29,32,33,34,36,37],idiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idiv_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],idx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ieqz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextend:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iextendn_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ift:42,ig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ige_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ignor:[2,13,35],igt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],igt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ij:[19,41],il:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ile_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ill:39,ilt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ilt_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],im:[3,13,19,36],imax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imax_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],imin_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],immateri:36,immedi:[1,12,25,28,34,39],immin:21,immut:[9,21,25,29,30,31],implement:[0,2,3,5,9,10,13,16,18,19,21,22,25,29,39,41],impli:[9,28,34],implic:39,implicit:[3,16,21,25,28],implicitli:[9,10,16,25,26,28,29,32,35,39],importdesc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],importsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],impos:[4,36,41],improv:2,imt:42,imul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],includ:[4,9,14,16,19,20,21,25,28,29,31,34,36,39],incompat:13,increas:[2,13,28],increment:[13,24],independ:[24,39],index:[0,1,2,3,4,5,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indic:[0,2,3,4,11,12,14,18,21,25,26,27,28,32,33,34,35,38,39,41,42],indirect:[2,21,28],indirectli:[3,25,28],indirectnameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],indirectnamemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],individu:[2,4,18,19,21,28,30,36,39,41],ine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ineg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],inf:38,infer:36,infin:[20,31,38],infinit:30,inform:[13,24,39],infrequ:13,infti:[20,31,38],inher:[9,30],inherit:32,init:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],initi:[0,3,13,16,18,19,25,28,29,36,41,42],inject:1,inlin:[28,34,36],inner:21,innermost:28,inot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],input:[20,28,30,35,41],insert:[13,34,36,38,41],insid:[9,21,24,29,35,39],inspect:24,instanc:[4,5,7,16,17,18,19,25],instanti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],instead:[0,1,13,16,24,25,35,42],instr:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],instruct:[0,2,3,4,5,7,8,10,11,13,14,15,16,17,20,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,43],instrument:9,integ:[1,10,11,12,17,18,21,25,27,28,30,32,33],integr:[0,1,20,21,24],intend:[0,3,13,18,24,28,29],interact:[3,21,24],interchang:31,interdepend:[4,21],interest:[16,39],interfac:[3,24],interleav:[19,21],intern:[25,42],interoper:24,interpret:[3,4,13,16,21,25,26,28,30,31,38],introduc:[1,10,28,30,39],introduct:[16,22,39],intuit:[16,21,28,39],invalid:[0,4,13,41],invari:[0,9,16,21],invers:20,invert:20,invoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],invok:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],involv:28,io:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ior:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ipopcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],iq15mulrsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irem_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],irotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],is_empti:0,is_num:0,is_ref:0,is_vec:0,isa:24,ishap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],ishl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ishr_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isol:24,issu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],isubsat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ital:26,item:[4,36],iter:[10,18,26,32],itestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],its:[0,3,4,9,12,13,16,18,19,20,21,24,25,26,28,29,31,34,36,38,39,42],itself:[2,9,16,19,21,25,28,29,38,39,42],itt:42,iunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ixor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],j:[18,19,20],j_1:20,j_2:20,j_3:20,jf:[9,16,39],jit:24,judgement:[7,9,39],judgment:39,jump:[16,18,28],just:[4,19,20,24,36,42],k:[7,18,19,20,21,43],keep:21,keyword:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ki:[3,9,18,19,21,36],kind:[9,13,19,21,29,30],known:[0,1,21,25,28,30,31],l:[6,9,10,12,13,14,15,19,20,21,29,32,34,35,36,37,38,39,42],l_i:[18,41],l_n:[12,34],label:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43],label_typ:0,labelbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],labelidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lane:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],laneidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],languag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],larg:[4,21,26],larger:[3,18,19,20,28,41,42,43],largest:20,last:[0,4],later:[16,29],latest:22,latter:[0,18,31,32,36],layer:[10,24],layout:24,lcl:[15,18,19,21,36],lcll:[20,34],lclll:3,lclllllcl:31,le:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],lead:[10,20,31],least:[16,18],leav:[4,21],leb128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],left:[20,21,35,39],leftrightarrow:20,len:19,length:[3,4,9,10,12,13,15,18,19,20,21,26,31,32,36,41,42],leq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],less:20,let:[0,3,9,18,19,20,41,42],level:[24,25,29],lexic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],li:[20,28],lie:38,lieu:38,life:21,lift:[20,28,29,42],like:[0,2,3,4,13,20,21,24,25,28,29,30,31,32,34,39,41],likewis:[0,2],lim:[14,37],limit:[0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,39,40,41,42],line:35,linear:[9,10,21,24,25,28,29,30],linechar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],linecom:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],list:[0,4,18,19,21,29,32,34,36,39],liter:[4,12,31,32,35,36,38],littl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],littleendian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],live:19,ll:[16,21,32,39],llcl:[21,28,29],llcll:[2,10,15,31,32,36,37],llclll:[2,10,12,13,14,15,31,32,34,35,36,37,38],llcllll:[12,13,34,36],llclllll:15,llcllllllll:36,lll:[18,20,21,36,41],llll:[3,21,28,29,30,31,32,35,39,41],lllll:[26,29,34],load16:34,load16x4:34,load32:34,load32x2:34,load64:34,load8:34,load8x8:34,load:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],local:[0,1,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,43],localbind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],localnamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],locat:9,logic:[0,21],longer:[1,21,28],longest:35,longrightarrow:[3,9],look:[21,35,36,39],lookup:41,loop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],loss:12,low:[18,24,25,28],lower:20,lt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],luke:[9,16,39],m:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],m_0:[18,31],m_1:[36,43],m_1m_2:31,m_2:[36,43],m_:18,m_k:18,m_m:31,ma:18,machin:[3,9,16,21,24,25,28],made:[13,18,21,31,32],mag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],magnitud:[20,31,38],mai:[0,1,2,3,4,10,12,13,16,18,19,20,21,24,25,26,28,29,30,31,34,35,36,37,38,41,42,43],main:[0,1,3,24,25,31],maintain:[0,21,25,36],make:[2,9,21,24,41],malform:[13,15],mandatori:34,mani:[10,24,26,32],manipul:[0,1,3,21,25,26,28,39,41],manner:[0,4,20,24,39,41],mantissa:31,map:[18,26,30,36,41,42],mark:[0,18,21,38],marker:[21,28],match:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbb:20,mathbf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathbin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathdef1000:6,mathdef1001:6,mathdef1002:6,mathdef1003:6,mathdef1004:6,mathdef1005:6,mathdef1006:6,mathdef1007:6,mathdef1008:6,mathdef1009:6,mathdef100:2,mathdef1010:6,mathdef1011:6,mathdef1012:6,mathdef1013:6,mathdef1014:6,mathdef1015:6,mathdef1016:6,mathdef1017:6,mathdef1018:6,mathdef1019:6,mathdef101:2,mathdef1020:6,mathdef1021:6,mathdef1022:6,mathdef1023:6,mathdef1024:6,mathdef1025:6,mathdef1026:6,mathdef1027:6,mathdef1028:6,mathdef1029:6,mathdef102:2,mathdef1030:6,mathdef1031:6,mathdef1032:6,mathdef1033:6,mathdef1034:6,mathdef1035:6,mathdef1036:7,mathdef1037:7,mathdef1038:7,mathdef1039:7,mathdef103:2,mathdef1040:7,mathdef1041:7,mathdef1042:7,mathdef1043:7,mathdef1044:7,mathdef1045:7,mathdef1046:7,mathdef1047:7,mathdef1048:7,mathdef1049:7,mathdef104:2,mathdef1050:7,mathdef1051:7,mathdef1052:7,mathdef1053:7,mathdef1054:7,mathdef1055:7,mathdef1056:7,mathdef1057:7,mathdef1058:7,mathdef1059:7,mathdef105:2,mathdef1060:7,mathdef1061:7,mathdef1062:7,mathdef1063:7,mathdef1064:7,mathdef1065:7,mathdef1066:7,mathdef1067:7,mathdef1068:7,mathdef1069:7,mathdef106:2,mathdef1070:7,mathdef1071:7,mathdef1072:7,mathdef1073:7,mathdef1074:7,mathdef1075:8,mathdef1076:8,mathdef1077:8,mathdef1078:8,mathdef1079:8,mathdef107:2,mathdef1080:8,mathdef1081:8,mathdef1082:8,mathdef1083:8,mathdef1084:8,mathdef1085:8,mathdef1086:8,mathdef1087:8,mathdef1088:8,mathdef1089:8,mathdef108:2,mathdef1090:8,mathdef1091:8,mathdef1092:8,mathdef1093:8,mathdef1094:8,mathdef1095:8,mathdef1096:8,mathdef1097:8,mathdef1098:8,mathdef1099:8,mathdef109:2,mathdef10:0,mathdef1100:8,mathdef1101:8,mathdef1102:8,mathdef1103:8,mathdef1104:8,mathdef1105:8,mathdef1106:8,mathdef1107:8,mathdef1108:8,mathdef1109:8,mathdef110:2,mathdef1110:8,mathdef1111:8,mathdef1112:8,mathdef1113:8,mathdef1114:8,mathdef1115:8,mathdef1116:8,mathdef1117:8,mathdef1118:8,mathdef1119:8,mathdef111:2,mathdef1120:8,mathdef1121:8,mathdef1122:8,mathdef1123:8,mathdef1124:8,mathdef1125:8,mathdef1126:8,mathdef1127:8,mathdef1128:8,mathdef1129:9,mathdef112:2,mathdef1130:9,mathdef1131:9,mathdef1132:9,mathdef1133:9,mathdef1134:9,mathdef1135:9,mathdef1136:9,mathdef1137:9,mathdef1138:9,mathdef1139:9,mathdef113:2,mathdef1140:9,mathdef1141:9,mathdef1142:9,mathdef1143:9,mathdef1144:9,mathdef1145:9,mathdef1146:9,mathdef1147:9,mathdef1148:9,mathdef1149:9,mathdef114:2,mathdef1150:9,mathdef1151:9,mathdef1152:9,mathdef1153:9,mathdef1154:9,mathdef1155:9,mathdef1156:9,mathdef1157:9,mathdef1158:9,mathdef1159:9,mathdef115:2,mathdef1160:9,mathdef1161:9,mathdef1162:9,mathdef1163:9,mathdef1164:9,mathdef1165:9,mathdef1166:9,mathdef1167:9,mathdef1168:10,mathdef1169:10,mathdef116:2,mathdef1170:10,mathdef1171:10,mathdef1172:10,mathdef1173:10,mathdef1174:10,mathdef1175:10,mathdef1176:10,mathdef1177:10,mathdef1178:10,mathdef1179:10,mathdef117:2,mathdef1180:10,mathdef1181:10,mathdef1182:10,mathdef1183:10,mathdef1184:10,mathdef1185:10,mathdef1186:10,mathdef1187:10,mathdef1188:10,mathdef1189:10,mathdef118:2,mathdef1190:10,mathdef1191:10,mathdef1192:10,mathdef1193:10,mathdef1194:10,mathdef1195:10,mathdef1196:10,mathdef1197:10,mathdef1198:10,mathdef1199:10,mathdef119:2,mathdef11:0,mathdef1200:10,mathdef1201:10,mathdef1202:10,mathdef1203:10,mathdef1204:10,mathdef1205:10,mathdef1206:10,mathdef1207:10,mathdef1208:10,mathdef1209:10,mathdef120:3,mathdef1210:10,mathdef1211:10,mathdef1212:10,mathdef1213:10,mathdef1214:10,mathdef1215:10,mathdef1216:10,mathdef1217:10,mathdef1218:11,mathdef1219:11,mathdef121:3,mathdef1220:11,mathdef1221:11,mathdef1222:11,mathdef1223:11,mathdef1224:11,mathdef1225:11,mathdef1226:11,mathdef1227:11,mathdef1228:11,mathdef1229:11,mathdef122:3,mathdef1230:11,mathdef1231:11,mathdef1232:11,mathdef1233:11,mathdef1234:11,mathdef1235:11,mathdef1236:11,mathdef1237:11,mathdef1238:11,mathdef1239:11,mathdef123:3,mathdef1240:11,mathdef1241:11,mathdef1242:11,mathdef1243:11,mathdef1244:11,mathdef1245:11,mathdef1246:11,mathdef1247:11,mathdef1248:11,mathdef1249:11,mathdef124:3,mathdef1250:11,mathdef1251:11,mathdef1252:11,mathdef1253:11,mathdef1254:11,mathdef1255:11,mathdef1256:11,mathdef1257:12,mathdef1258:12,mathdef1259:12,mathdef125:3,mathdef1260:12,mathdef1261:12,mathdef1262:12,mathdef1263:12,mathdef1264:12,mathdef1265:12,mathdef1266:12,mathdef1267:12,mathdef1268:12,mathdef1269:12,mathdef126:3,mathdef1270:12,mathdef1271:12,mathdef1272:12,mathdef1273:12,mathdef1274:12,mathdef1275:12,mathdef1276:12,mathdef1277:12,mathdef1278:12,mathdef1279:12,mathdef127:3,mathdef1280:12,mathdef1281:12,mathdef1282:12,mathdef1283:12,mathdef1284:12,mathdef1285:12,mathdef1286:12,mathdef1287:12,mathdef1288:12,mathdef1289:12,mathdef128:3,mathdef1290:12,mathdef1291:12,mathdef1292:12,mathdef1293:12,mathdef1294:12,mathdef1295:12,mathdef1296:12,mathdef1297:12,mathdef1298:12,mathdef1299:12,mathdef129:3,mathdef12:0,mathdef1300:12,mathdef1301:12,mathdef1302:12,mathdef1303:12,mathdef1304:12,mathdef1305:12,mathdef1306:12,mathdef1307:12,mathdef1308:12,mathdef1309:12,mathdef130:3,mathdef1310:12,mathdef1311:12,mathdef1312:12,mathdef1313:12,mathdef1314:12,mathdef1315:12,mathdef1316:12,mathdef1317:12,mathdef1318:12,mathdef1319:12,mathdef131:3,mathdef1320:12,mathdef1321:12,mathdef1322:12,mathdef1323:12,mathdef1324:12,mathdef1325:12,mathdef1326:12,mathdef1327:12,mathdef1328:12,mathdef1329:12,mathdef132:3,mathdef1330:12,mathdef1331:12,mathdef1332:12,mathdef1333:12,mathdef1334:12,mathdef1335:12,mathdef1336:12,mathdef1337:12,mathdef1338:12,mathdef1339:12,mathdef133:3,mathdef1340:12,mathdef1341:12,mathdef1342:12,mathdef1343:12,mathdef1344:12,mathdef1345:12,mathdef1346:12,mathdef1347:12,mathdef1348:12,mathdef1349:12,mathdef134:3,mathdef1350:12,mathdef1351:12,mathdef1352:12,mathdef1353:12,mathdef1354:12,mathdef1355:12,mathdef1356:12,mathdef1357:12,mathdef1358:12,mathdef1359:12,mathdef135:3,mathdef1360:12,mathdef1361:12,mathdef1362:12,mathdef1363:12,mathdef1364:12,mathdef1365:12,mathdef1366:12,mathdef1367:12,mathdef1368:12,mathdef1369:12,mathdef136:3,mathdef1370:12,mathdef1371:12,mathdef1372:12,mathdef1373:12,mathdef1374:12,mathdef1375:12,mathdef1376:12,mathdef1377:12,mathdef1378:12,mathdef1379:12,mathdef137:3,mathdef1380:12,mathdef1381:12,mathdef1382:12,mathdef1383:12,mathdef1384:12,mathdef1385:12,mathdef1386:12,mathdef1387:12,mathdef1388:12,mathdef1389:12,mathdef138:3,mathdef1390:12,mathdef1391:12,mathdef1392:12,mathdef1393:12,mathdef1394:12,mathdef1395:12,mathdef1396:12,mathdef1397:12,mathdef1398:12,mathdef1399:12,mathdef139:3,mathdef13:0,mathdef1400:12,mathdef1401:12,mathdef1402:12,mathdef1403:12,mathdef1404:12,mathdef1405:12,mathdef1406:12,mathdef1407:12,mathdef1408:12,mathdef1409:12,mathdef140:3,mathdef1410:12,mathdef1411:12,mathdef1412:12,mathdef1413:12,mathdef1414:12,mathdef1415:12,mathdef1416:12,mathdef1417:12,mathdef1418:12,mathdef1419:12,mathdef141:3,mathdef1420:12,mathdef1421:12,mathdef1422:12,mathdef1423:12,mathdef1424:12,mathdef1425:12,mathdef1426:12,mathdef1427:12,mathdef1428:12,mathdef1429:12,mathdef142:3,mathdef1430:12,mathdef1431:12,mathdef1432:12,mathdef1433:12,mathdef1434:12,mathdef1435:12,mathdef1436:12,mathdef1437:12,mathdef1438:12,mathdef1439:12,mathdef143:3,mathdef1440:12,mathdef1441:12,mathdef1442:12,mathdef1443:12,mathdef1444:12,mathdef1445:12,mathdef1446:12,mathdef1447:12,mathdef1448:12,mathdef1449:12,mathdef144:3,mathdef1450:12,mathdef1451:12,mathdef1452:12,mathdef1453:12,mathdef1454:12,mathdef1455:12,mathdef1456:12,mathdef1457:12,mathdef1458:12,mathdef1459:12,mathdef145:3,mathdef1460:12,mathdef1461:12,mathdef1462:12,mathdef1463:12,mathdef1464:12,mathdef1465:12,mathdef1466:12,mathdef1467:12,mathdef1468:12,mathdef1469:12,mathdef146:3,mathdef1470:12,mathdef1471:12,mathdef1472:12,mathdef1473:12,mathdef1474:12,mathdef1475:12,mathdef1476:12,mathdef1477:12,mathdef1478:12,mathdef1479:12,mathdef147:3,mathdef1480:12,mathdef1481:12,mathdef1482:12,mathdef1483:12,mathdef1484:12,mathdef1485:12,mathdef1486:12,mathdef1487:12,mathdef1488:12,mathdef1489:12,mathdef148:3,mathdef1490:12,mathdef1491:12,mathdef1492:12,mathdef1493:12,mathdef1494:12,mathdef1495:12,mathdef1496:12,mathdef1497:12,mathdef1498:12,mathdef1499:12,mathdef149:3,mathdef14:0,mathdef1500:12,mathdef1501:12,mathdef1502:12,mathdef1503:12,mathdef1504:12,mathdef1505:12,mathdef1506:12,mathdef1507:12,mathdef1508:12,mathdef1509:12,mathdef150:3,mathdef1510:12,mathdef1511:12,mathdef1512:12,mathdef1513:12,mathdef1514:12,mathdef1515:12,mathdef1516:12,mathdef1517:12,mathdef1518:12,mathdef1519:12,mathdef151:3,mathdef1520:12,mathdef1521:12,mathdef1522:12,mathdef1523:12,mathdef1524:12,mathdef1525:12,mathdef1526:12,mathdef1527:12,mathdef1528:12,mathdef1529:12,mathdef152:3,mathdef1530:12,mathdef1531:12,mathdef1532:12,mathdef1533:12,mathdef1534:12,mathdef1535:12,mathdef1536:12,mathdef1537:12,mathdef1538:12,mathdef1539:12,mathdef153:3,mathdef1540:12,mathdef1541:12,mathdef1542:12,mathdef1543:12,mathdef1544:12,mathdef1545:12,mathdef1546:12,mathdef1547:12,mathdef1548:12,mathdef1549:12,mathdef154:3,mathdef1550:12,mathdef1551:12,mathdef1552:12,mathdef1553:12,mathdef1554:12,mathdef1555:12,mathdef1556:12,mathdef1557:12,mathdef1558:12,mathdef1559:12,mathdef155:3,mathdef1560:12,mathdef1561:12,mathdef1562:12,mathdef1563:12,mathdef1564:12,mathdef1565:12,mathdef1566:12,mathdef1567:12,mathdef1568:12,mathdef1569:12,mathdef156:3,mathdef1570:12,mathdef1571:12,mathdef1572:12,mathdef1573:12,mathdef1574:12,mathdef1575:12,mathdef1576:12,mathdef1577:12,mathdef1578:12,mathdef1579:12,mathdef157:3,mathdef1580:12,mathdef1581:12,mathdef1582:12,mathdef1583:12,mathdef1584:12,mathdef1585:12,mathdef1586:12,mathdef1587:12,mathdef1588:12,mathdef1589:12,mathdef158:3,mathdef1590:12,mathdef1591:12,mathdef1592:12,mathdef1593:12,mathdef1594:12,mathdef1595:12,mathdef1596:12,mathdef1597:12,mathdef1598:12,mathdef1599:12,mathdef159:4,mathdef15:0,mathdef1600:12,mathdef1601:12,mathdef1602:12,mathdef1603:12,mathdef1604:12,mathdef1605:12,mathdef1606:12,mathdef1607:12,mathdef1608:12,mathdef1609:12,mathdef160:4,mathdef1610:12,mathdef1611:12,mathdef1612:12,mathdef1613:12,mathdef1614:12,mathdef1615:12,mathdef1616:12,mathdef1617:12,mathdef1618:12,mathdef1619:12,mathdef161:4,mathdef1620:12,mathdef1621:12,mathdef1622:12,mathdef1623:12,mathdef1624:12,mathdef1625:12,mathdef1626:12,mathdef1627:12,mathdef1628:12,mathdef1629:12,mathdef162:4,mathdef1630:12,mathdef1631:12,mathdef1632:12,mathdef1633:12,mathdef1634:12,mathdef1635:12,mathdef1636:12,mathdef1637:12,mathdef1638:12,mathdef1639:12,mathdef163:4,mathdef1640:12,mathdef1641:12,mathdef1642:12,mathdef1643:12,mathdef1644:12,mathdef1645:12,mathdef1646:12,mathdef1647:12,mathdef1648:12,mathdef1649:12,mathdef164:4,mathdef1650:12,mathdef1651:12,mathdef1652:12,mathdef1653:12,mathdef1654:12,mathdef1655:12,mathdef1656:12,mathdef1657:12,mathdef1658:12,mathdef1659:12,mathdef165:4,mathdef1660:12,mathdef1661:12,mathdef1662:12,mathdef1663:12,mathdef1664:12,mathdef1665:12,mathdef1666:12,mathdef1667:12,mathdef1668:12,mathdef1669:12,mathdef166:4,mathdef1670:12,mathdef1671:12,mathdef1672:12,mathdef1673:12,mathdef1674:12,mathdef1675:12,mathdef1676:12,mathdef1677:12,mathdef1678:12,mathdef1679:12,mathdef167:4,mathdef1680:12,mathdef1681:12,mathdef1682:12,mathdef1683:12,mathdef1684:12,mathdef1685:12,mathdef1686:12,mathdef1687:12,mathdef1688:12,mathdef1689:12,mathdef168:4,mathdef1690:12,mathdef1691:12,mathdef1692:12,mathdef1693:12,mathdef1694:12,mathdef1695:12,mathdef1696:12,mathdef1697:12,mathdef1698:12,mathdef1699:12,mathdef169:4,mathdef16:0,mathdef1700:12,mathdef1701:12,mathdef1702:12,mathdef1703:12,mathdef1704:12,mathdef1705:12,mathdef1706:12,mathdef1707:12,mathdef1708:12,mathdef1709:12,mathdef170:4,mathdef1710:12,mathdef1711:12,mathdef1712:12,mathdef1713:12,mathdef1714:12,mathdef1715:12,mathdef1716:12,mathdef1717:12,mathdef1718:12,mathdef1719:12,mathdef171:4,mathdef1720:12,mathdef1721:12,mathdef1722:12,mathdef1723:12,mathdef1724:12,mathdef1725:12,mathdef1726:12,mathdef1727:12,mathdef1728:12,mathdef1729:12,mathdef172:4,mathdef1730:12,mathdef1731:12,mathdef1732:12,mathdef1733:12,mathdef1734:12,mathdef1735:12,mathdef1736:12,mathdef1737:12,mathdef1738:12,mathdef1739:12,mathdef173:4,mathdef1740:12,mathdef1741:12,mathdef1742:12,mathdef1743:12,mathdef1744:12,mathdef1745:12,mathdef1746:12,mathdef1747:12,mathdef1748:12,mathdef1749:13,mathdef174:4,mathdef1750:13,mathdef1751:13,mathdef1752:13,mathdef1753:13,mathdef1754:13,mathdef1755:13,mathdef1756:13,mathdef1757:13,mathdef1758:13,mathdef1759:13,mathdef175:4,mathdef1760:13,mathdef1761:13,mathdef1762:13,mathdef1763:13,mathdef1764:13,mathdef1765:13,mathdef1766:13,mathdef1767:13,mathdef1768:13,mathdef1769:13,mathdef176:4,mathdef1770:13,mathdef1771:13,mathdef1772:13,mathdef1773:13,mathdef1774:13,mathdef1775:13,mathdef1776:13,mathdef1777:13,mathdef1778:13,mathdef1779:13,mathdef177:4,mathdef1780:13,mathdef1781:13,mathdef1782:13,mathdef1783:13,mathdef1784:13,mathdef1785:13,mathdef1786:13,mathdef1787:13,mathdef1788:13,mathdef1789:13,mathdef178:4,mathdef1790:13,mathdef1791:13,mathdef1792:13,mathdef1793:13,mathdef1794:13,mathdef1795:13,mathdef1796:13,mathdef1797:13,mathdef1798:13,mathdef1799:13,mathdef179:4,mathdef17:0,mathdef1800:13,mathdef1801:13,mathdef1802:13,mathdef1803:13,mathdef1804:13,mathdef1805:13,mathdef1806:13,mathdef1807:13,mathdef1808:13,mathdef1809:13,mathdef180:4,mathdef1810:13,mathdef1811:13,mathdef1812:13,mathdef1813:13,mathdef1814:13,mathdef1815:13,mathdef1816:13,mathdef1817:14,mathdef1818:14,mathdef1819:14,mathdef181:4,mathdef1820:14,mathdef1821:14,mathdef1822:14,mathdef1823:14,mathdef1824:14,mathdef1825:14,mathdef1826:14,mathdef1827:14,mathdef1828:14,mathdef1829:14,mathdef182:4,mathdef1830:14,mathdef1831:14,mathdef1832:14,mathdef1833:14,mathdef1834:14,mathdef1835:14,mathdef1836:14,mathdef1837:14,mathdef1838:14,mathdef1839:14,mathdef183:4,mathdef1840:14,mathdef1841:14,mathdef1842:14,mathdef1843:14,mathdef1844:14,mathdef1845:14,mathdef1846:14,mathdef1847:14,mathdef1848:14,mathdef1849:14,mathdef184:4,mathdef1850:14,mathdef1851:14,mathdef1852:14,mathdef1853:14,mathdef1854:14,mathdef1855:14,mathdef1856:14,mathdef1857:14,mathdef1858:14,mathdef1859:14,mathdef185:4,mathdef1860:14,mathdef1861:14,mathdef1862:14,mathdef1863:14,mathdef1864:14,mathdef1865:14,mathdef1866:14,mathdef1867:14,mathdef1868:14,mathdef1869:15,mathdef186:4,mathdef1870:15,mathdef1871:15,mathdef1872:15,mathdef1873:15,mathdef1874:15,mathdef1875:15,mathdef1876:15,mathdef1877:15,mathdef1878:15,mathdef1879:15,mathdef187:4,mathdef1880:15,mathdef1881:15,mathdef1882:15,mathdef1883:15,mathdef1884:15,mathdef1885:15,mathdef1886:15,mathdef1887:15,mathdef1888:15,mathdef1889:15,mathdef188:4,mathdef1890:15,mathdef1891:15,mathdef1892:15,mathdef1893:15,mathdef1894:15,mathdef1895:15,mathdef1896:15,mathdef1897:15,mathdef1898:15,mathdef1899:15,mathdef189:4,mathdef18:0,mathdef1900:15,mathdef1901:15,mathdef1902:15,mathdef1903:15,mathdef1904:15,mathdef1905:15,mathdef1906:15,mathdef1907:15,mathdef1908:15,mathdef1909:15,mathdef190:4,mathdef1910:15,mathdef1911:15,mathdef1912:15,mathdef1913:15,mathdef1914:15,mathdef1915:15,mathdef1916:15,mathdef1917:15,mathdef1918:15,mathdef1919:15,mathdef191:4,mathdef1920:15,mathdef1921:15,mathdef1922:15,mathdef1923:15,mathdef1924:15,mathdef1925:15,mathdef1926:15,mathdef1927:15,mathdef1928:15,mathdef1929:15,mathdef192:4,mathdef1930:15,mathdef1931:15,mathdef1932:15,mathdef1933:15,mathdef1934:15,mathdef1935:15,mathdef1936:15,mathdef1937:15,mathdef1938:15,mathdef1939:15,mathdef193:4,mathdef1940:15,mathdef1941:15,mathdef1942:15,mathdef1943:15,mathdef1944:15,mathdef1945:15,mathdef1946:15,mathdef1947:15,mathdef1948:15,mathdef1949:15,mathdef194:4,mathdef1950:16,mathdef1951:16,mathdef1952:16,mathdef1953:16,mathdef1954:16,mathdef1955:16,mathdef1956:16,mathdef1957:16,mathdef1958:16,mathdef1959:16,mathdef195:4,mathdef1960:16,mathdef1961:16,mathdef1962:16,mathdef1963:16,mathdef1964:16,mathdef1965:16,mathdef1966:16,mathdef1967:16,mathdef1968:16,mathdef1969:16,mathdef196:4,mathdef1970:16,mathdef1971:16,mathdef1972:16,mathdef1973:16,mathdef1974:16,mathdef1975:16,mathdef1976:16,mathdef1977:16,mathdef1978:16,mathdef1979:16,mathdef197:4,mathdef1980:16,mathdef1981:16,mathdef1982:16,mathdef1983:16,mathdef1984:16,mathdef1985:16,mathdef1986:16,mathdef1987:16,mathdef1988:16,mathdef1989:17,mathdef198:5,mathdef1990:17,mathdef1991:17,mathdef1992:17,mathdef1993:17,mathdef1994:17,mathdef1995:17,mathdef1996:17,mathdef1997:17,mathdef1998:17,mathdef1999:17,mathdef199:5,mathdef19:0,mathdef1:0,mathdef2000:17,mathdef2001:17,mathdef2002:17,mathdef2003:17,mathdef2004:17,mathdef2005:17,mathdef2006:17,mathdef2007:17,mathdef2008:17,mathdef2009:17,mathdef200:5,mathdef2010:17,mathdef2011:17,mathdef2012:17,mathdef2013:17,mathdef2014:17,mathdef2015:17,mathdef2016:17,mathdef2017:17,mathdef2018:17,mathdef2019:17,mathdef201:5,mathdef2020:17,mathdef2021:17,mathdef2022:17,mathdef2023:17,mathdef2024:17,mathdef2025:17,mathdef2026:17,mathdef2027:17,mathdef2028:18,mathdef2029:18,mathdef202:5,mathdef2030:18,mathdef2031:18,mathdef2032:18,mathdef2033:18,mathdef2034:18,mathdef2035:18,mathdef2036:18,mathdef2037:18,mathdef2038:18,mathdef2039:18,mathdef203:5,mathdef2040:18,mathdef2041:18,mathdef2042:18,mathdef2043:18,mathdef2044:18,mathdef2045:18,mathdef2046:18,mathdef2047:18,mathdef2048:18,mathdef2049:18,mathdef204:5,mathdef2050:18,mathdef2051:18,mathdef2052:18,mathdef2053:18,mathdef2054:18,mathdef2055:18,mathdef2056:18,mathdef2057:18,mathdef2058:18,mathdef2059:18,mathdef205:5,mathdef2060:18,mathdef2061:18,mathdef2062:18,mathdef2063:18,mathdef2064:18,mathdef2065:18,mathdef2066:18,mathdef2067:19,mathdef2068:19,mathdef2069:19,mathdef206:5,mathdef2070:19,mathdef2071:19,mathdef2072:19,mathdef2073:19,mathdef2074:19,mathdef2075:19,mathdef2076:19,mathdef2077:19,mathdef2078:19,mathdef2079:19,mathdef207:5,mathdef2080:19,mathdef2081:19,mathdef2082:19,mathdef2083:19,mathdef2084:19,mathdef2085:19,mathdef2086:19,mathdef2087:19,mathdef2088:19,mathdef2089:19,mathdef208:5,mathdef2090:19,mathdef2091:19,mathdef2092:19,mathdef2093:19,mathdef2094:19,mathdef2095:19,mathdef2096:19,mathdef2097:19,mathdef2098:19,mathdef2099:19,mathdef209:5,mathdef20:0,mathdef2100:19,mathdef2101:19,mathdef2102:19,mathdef2103:19,mathdef2104:19,mathdef2105:19,mathdef2106:19,mathdef2107:19,mathdef2108:19,mathdef2109:19,mathdef210:5,mathdef2110:20,mathdef2111:20,mathdef2112:20,mathdef2113:20,mathdef2114:20,mathdef2115:20,mathdef2116:20,mathdef2117:20,mathdef2118:20,mathdef2119:20,mathdef211:5,mathdef2120:20,mathdef2121:20,mathdef2122:20,mathdef2123:20,mathdef2124:20,mathdef2125:20,mathdef2126:20,mathdef2127:20,mathdef2128:20,mathdef2129:20,mathdef212:5,mathdef2130:20,mathdef2131:20,mathdef2132:20,mathdef2133:20,mathdef2134:20,mathdef2135:20,mathdef2136:20,mathdef2137:20,mathdef2138:20,mathdef2139:20,mathdef213:5,mathdef2140:20,mathdef2141:20,mathdef2142:20,mathdef2143:20,mathdef2144:20,mathdef2145:20,mathdef2146:20,mathdef2147:20,mathdef2148:20,mathdef2149:21,mathdef214:5,mathdef2150:21,mathdef2151:21,mathdef2152:21,mathdef2153:21,mathdef2154:21,mathdef2155:21,mathdef2156:21,mathdef2157:21,mathdef2158:21,mathdef2159:21,mathdef215:5,mathdef2160:21,mathdef2161:21,mathdef2162:21,mathdef2163:21,mathdef2164:21,mathdef2165:21,mathdef2166:21,mathdef2167:21,mathdef2168:21,mathdef2169:21,mathdef216:5,mathdef2170:21,mathdef2171:21,mathdef2172:21,mathdef2173:21,mathdef2174:21,mathdef2175:21,mathdef2176:21,mathdef2177:21,mathdef2178:21,mathdef2179:21,mathdef217:5,mathdef2180:21,mathdef2181:21,mathdef2182:21,mathdef2183:21,mathdef2184:21,mathdef2185:21,mathdef2186:21,mathdef2187:21,mathdef2188:22,mathdef2189:22,mathdef218:5,mathdef2190:22,mathdef2191:22,mathdef2192:22,mathdef2193:22,mathdef2194:22,mathdef2195:22,mathdef2196:22,mathdef2197:22,mathdef2198:22,mathdef2199:22,mathdef219:5,mathdef21:0,mathdef2200:22,mathdef2201:22,mathdef2202:22,mathdef2203:22,mathdef2204:22,mathdef2205:22,mathdef2206:22,mathdef2207:22,mathdef2208:22,mathdef2209:22,mathdef220:5,mathdef2210:22,mathdef2211:22,mathdef2212:22,mathdef2213:22,mathdef2214:22,mathdef2215:22,mathdef2216:22,mathdef2217:22,mathdef2218:22,mathdef2219:22,mathdef221:5,mathdef2220:22,mathdef2221:22,mathdef2222:22,mathdef2223:22,mathdef2224:22,mathdef2225:22,mathdef2226:22,mathdef2227:23,mathdef2228:23,mathdef2229:23,mathdef222:5,mathdef2230:23,mathdef2231:23,mathdef2232:23,mathdef2233:23,mathdef2234:23,mathdef2235:23,mathdef2236:23,mathdef2237:23,mathdef2238:23,mathdef2239:23,mathdef223:5,mathdef2240:23,mathdef2241:23,mathdef2242:23,mathdef2243:23,mathdef2244:23,mathdef2245:23,mathdef2246:23,mathdef2247:23,mathdef2248:23,mathdef2249:23,mathdef224:5,mathdef2250:23,mathdef2251:23,mathdef2252:23,mathdef2253:23,mathdef2254:23,mathdef2255:23,mathdef2256:23,mathdef2257:23,mathdef2258:23,mathdef2259:23,mathdef225:5,mathdef2260:23,mathdef2261:23,mathdef2262:23,mathdef2263:23,mathdef2264:23,mathdef2265:23,mathdef2266:24,mathdef2267:24,mathdef2268:24,mathdef2269:24,mathdef226:5,mathdef2270:24,mathdef2271:24,mathdef2272:24,mathdef2273:24,mathdef2274:24,mathdef2275:24,mathdef2276:24,mathdef2277:24,mathdef2278:24,mathdef2279:24,mathdef227:5,mathdef2280:24,mathdef2281:24,mathdef2282:24,mathdef2283:24,mathdef2284:24,mathdef2285:24,mathdef2286:24,mathdef2287:24,mathdef2288:24,mathdef2289:24,mathdef228:5,mathdef2290:24,mathdef2291:24,mathdef2292:24,mathdef2293:24,mathdef2294:24,mathdef2295:24,mathdef2296:24,mathdef2297:24,mathdef2298:24,mathdef2299:24,mathdef229:5,mathdef22:0,mathdef2300:24,mathdef2301:24,mathdef2302:24,mathdef2303:24,mathdef2304:24,mathdef2305:25,mathdef2306:25,mathdef2307:25,mathdef2308:25,mathdef2309:25,mathdef230:5,mathdef2310:25,mathdef2311:25,mathdef2312:25,mathdef2313:25,mathdef2314:25,mathdef2315:25,mathdef2316:25,mathdef2317:25,mathdef2318:25,mathdef2319:25,mathdef231:5,mathdef2320:25,mathdef2321:25,mathdef2322:25,mathdef2323:25,mathdef2324:25,mathdef2325:25,mathdef2326:25,mathdef2327:25,mathdef2328:25,mathdef2329:25,mathdef232:5,mathdef2330:25,mathdef2331:25,mathdef2332:25,mathdef2333:25,mathdef2334:25,mathdef2335:25,mathdef2336:25,mathdef2337:25,mathdef2338:25,mathdef2339:25,mathdef233:5,mathdef2340:25,mathdef2341:25,mathdef2342:25,mathdef2343:25,mathdef2344:26,mathdef2345:26,mathdef2346:26,mathdef2347:26,mathdef2348:26,mathdef2349:26,mathdef234:5,mathdef2350:26,mathdef2351:26,mathdef2352:26,mathdef2353:26,mathdef2354:26,mathdef2355:26,mathdef2356:26,mathdef2357:26,mathdef2358:26,mathdef2359:26,mathdef235:5,mathdef2360:26,mathdef2361:26,mathdef2362:26,mathdef2363:26,mathdef2364:26,mathdef2365:26,mathdef2366:26,mathdef2367:26,mathdef2368:26,mathdef2369:26,mathdef236:5,mathdef2370:26,mathdef2371:26,mathdef2372:26,mathdef2373:26,mathdef2374:26,mathdef2375:26,mathdef2376:26,mathdef2377:26,mathdef2378:26,mathdef2379:26,mathdef237:6,mathdef2380:26,mathdef2381:26,mathdef2382:26,mathdef2383:27,mathdef2384:27,mathdef2385:27,mathdef2386:27,mathdef2387:27,mathdef2388:27,mathdef2389:27,mathdef238:6,mathdef2390:27,mathdef2391:27,mathdef2392:27,mathdef2393:27,mathdef2394:27,mathdef2395:27,mathdef2396:27,mathdef2397:27,mathdef2398:27,mathdef2399:27,mathdef239:6,mathdef23:0,mathdef2400:27,mathdef2401:27,mathdef2402:27,mathdef2403:27,mathdef2404:27,mathdef2405:27,mathdef2406:27,mathdef2407:27,mathdef2408:27,mathdef2409:27,mathdef240:6,mathdef2410:27,mathdef2411:27,mathdef2412:27,mathdef2413:27,mathdef2414:27,mathdef2415:27,mathdef2416:27,mathdef2417:27,mathdef2418:27,mathdef2419:27,mathdef241:6,mathdef2420:27,mathdef2421:27,mathdef2422:28,mathdef2423:28,mathdef2424:28,mathdef2425:28,mathdef2426:28,mathdef2427:28,mathdef2428:28,mathdef2429:28,mathdef242:6,mathdef2430:28,mathdef2431:28,mathdef2432:28,mathdef2433:28,mathdef2434:28,mathdef2435:28,mathdef2436:28,mathdef2437:28,mathdef2438:28,mathdef2439:28,mathdef243:6,mathdef2440:28,mathdef2441:28,mathdef2442:28,mathdef2443:28,mathdef2444:28,mathdef2445:28,mathdef2446:28,mathdef2447:28,mathdef2448:28,mathdef2449:28,mathdef244:6,mathdef2450:28,mathdef2451:28,mathdef2452:28,mathdef2453:28,mathdef2454:28,mathdef2455:28,mathdef2456:28,mathdef2457:28,mathdef2458:28,mathdef2459:28,mathdef245:6,mathdef2460:28,mathdef2461:28,mathdef2462:28,mathdef2463:29,mathdef2464:29,mathdef2465:29,mathdef2466:29,mathdef2467:29,mathdef2468:29,mathdef2469:29,mathdef246:6,mathdef2470:29,mathdef2471:29,mathdef2472:29,mathdef2473:29,mathdef2474:29,mathdef2475:29,mathdef2476:29,mathdef2477:29,mathdef2478:29,mathdef2479:29,mathdef247:6,mathdef2480:29,mathdef2481:29,mathdef2482:29,mathdef2483:29,mathdef2484:29,mathdef2485:29,mathdef2486:29,mathdef2487:29,mathdef2488:29,mathdef2489:29,mathdef248:6,mathdef2490:29,mathdef2491:29,mathdef2492:29,mathdef2493:29,mathdef2494:29,mathdef2495:29,mathdef2496:29,mathdef2497:29,mathdef2498:29,mathdef2499:29,mathdef249:6,mathdef24:0,mathdef2500:29,mathdef2501:29,mathdef2502:30,mathdef2503:30,mathdef2504:30,mathdef2505:30,mathdef2506:30,mathdef2507:30,mathdef2508:30,mathdef2509:30,mathdef250:6,mathdef2510:30,mathdef2511:30,mathdef2512:30,mathdef2513:30,mathdef2514:30,mathdef2515:30,mathdef2516:30,mathdef2517:30,mathdef2518:30,mathdef2519:30,mathdef251:6,mathdef2520:30,mathdef2521:30,mathdef2522:30,mathdef2523:30,mathdef2524:30,mathdef2525:30,mathdef2526:30,mathdef2527:30,mathdef2528:30,mathdef2529:30,mathdef252:6,mathdef2530:30,mathdef2531:30,mathdef2532:30,mathdef2533:30,mathdef2534:30,mathdef2535:30,mathdef2536:30,mathdef2537:30,mathdef2538:30,mathdef2539:30,mathdef253:6,mathdef2540:30,mathdef2541:31,mathdef2542:31,mathdef2543:31,mathdef2544:31,mathdef2545:31,mathdef2546:31,mathdef2547:31,mathdef2548:31,mathdef2549:31,mathdef254:6,mathdef2550:31,mathdef2551:31,mathdef2552:31,mathdef2553:31,mathdef2554:31,mathdef2555:31,mathdef2556:31,mathdef2557:31,mathdef2558:31,mathdef2559:31,mathdef255:6,mathdef2560:31,mathdef2561:31,mathdef2562:31,mathdef2563:31,mathdef2564:31,mathdef2565:31,mathdef2566:31,mathdef2567:31,mathdef2568:31,mathdef2569:31,mathdef256:6,mathdef2570:31,mathdef2571:31,mathdef2572:31,mathdef2573:31,mathdef2574:31,mathdef2575:31,mathdef2576:31,mathdef2577:31,mathdef2578:31,mathdef2579:31,mathdef257:6,mathdef2580:31,mathdef2581:31,mathdef2582:31,mathdef2583:31,mathdef2584:31,mathdef2585:31,mathdef2586:32,mathdef2587:32,mathdef2588:32,mathdef2589:32,mathdef258:6,mathdef2590:32,mathdef2591:32,mathdef2592:32,mathdef2593:32,mathdef2594:32,mathdef2595:32,mathdef2596:32,mathdef2597:32,mathdef2598:32,mathdef2599:32,mathdef259:6,mathdef25:0,mathdef2600:32,mathdef2601:32,mathdef2602:32,mathdef2603:32,mathdef2604:32,mathdef2605:32,mathdef2606:32,mathdef2607:32,mathdef2608:32,mathdef2609:32,mathdef260:6,mathdef2610:32,mathdef2611:32,mathdef2612:32,mathdef2613:32,mathdef2614:32,mathdef2615:32,mathdef2616:32,mathdef2617:32,mathdef2618:32,mathdef2619:32,mathdef261:6,mathdef2620:32,mathdef2621:32,mathdef2622:32,mathdef2623:32,mathdef2624:32,mathdef2625:32,mathdef2626:32,mathdef2627:32,mathdef2628:32,mathdef2629:32,mathdef262:6,mathdef2630:32,mathdef2631:33,mathdef2632:33,mathdef2633:33,mathdef2634:33,mathdef2635:33,mathdef2636:33,mathdef2637:33,mathdef2638:33,mathdef2639:33,mathdef263:6,mathdef2640:33,mathdef2641:33,mathdef2642:33,mathdef2643:33,mathdef2644:33,mathdef2645:33,mathdef2646:33,mathdef2647:33,mathdef2648:33,mathdef2649:33,mathdef264:6,mathdef2650:33,mathdef2651:33,mathdef2652:33,mathdef2653:33,mathdef2654:33,mathdef2655:33,mathdef2656:33,mathdef2657:33,mathdef2658:33,mathdef2659:33,mathdef265:6,mathdef2660:33,mathdef2661:33,mathdef2662:33,mathdef2663:33,mathdef2664:33,mathdef2665:33,mathdef2666:33,mathdef2667:33,mathdef2668:33,mathdef2669:33,mathdef266:6,mathdef2670:34,mathdef2671:34,mathdef2672:34,mathdef2673:34,mathdef2674:34,mathdef2675:34,mathdef2676:34,mathdef2677:34,mathdef2678:34,mathdef2679:34,mathdef267:6,mathdef2680:34,mathdef2681:34,mathdef2682:34,mathdef2683:34,mathdef2684:34,mathdef2685:34,mathdef2686:34,mathdef2687:34,mathdef2688:34,mathdef2689:34,mathdef268:6,mathdef2690:34,mathdef2691:34,mathdef2692:34,mathdef2693:34,mathdef2694:34,mathdef2695:34,mathdef2696:34,mathdef2697:34,mathdef2698:34,mathdef2699:34,mathdef269:6,mathdef26:0,mathdef2700:34,mathdef2701:34,mathdef2702:34,mathdef2703:34,mathdef2704:34,mathdef2705:34,mathdef2706:34,mathdef2707:34,mathdef2708:34,mathdef2709:34,mathdef270:6,mathdef2710:34,mathdef2711:34,mathdef2712:34,mathdef2713:34,mathdef2714:34,mathdef2715:34,mathdef2716:34,mathdef2717:34,mathdef2718:34,mathdef2719:34,mathdef271:6,mathdef2720:34,mathdef2721:34,mathdef2722:34,mathdef2723:34,mathdef2724:34,mathdef2725:34,mathdef2726:34,mathdef2727:34,mathdef2728:34,mathdef2729:34,mathdef272:6,mathdef2730:34,mathdef2731:34,mathdef2732:34,mathdef2733:34,mathdef2734:34,mathdef2735:34,mathdef2736:34,mathdef2737:34,mathdef2738:34,mathdef2739:34,mathdef273:6,mathdef2740:34,mathdef2741:34,mathdef2742:34,mathdef2743:34,mathdef2744:34,mathdef2745:34,mathdef2746:34,mathdef2747:34,mathdef2748:34,mathdef2749:34,mathdef274:6,mathdef2750:34,mathdef2751:34,mathdef2752:34,mathdef2753:34,mathdef2754:34,mathdef2755:34,mathdef2756:34,mathdef2757:34,mathdef2758:34,mathdef2759:34,mathdef275:6,mathdef2760:34,mathdef2761:34,mathdef2762:34,mathdef2763:34,mathdef2764:34,mathdef2765:34,mathdef2766:34,mathdef2767:34,mathdef2768:34,mathdef2769:34,mathdef276:6,mathdef2770:34,mathdef2771:34,mathdef2772:34,mathdef2773:34,mathdef2774:34,mathdef2775:34,mathdef2776:34,mathdef2777:34,mathdef2778:34,mathdef2779:34,mathdef277:6,mathdef2780:34,mathdef2781:34,mathdef2782:34,mathdef2783:34,mathdef2784:34,mathdef2785:34,mathdef2786:34,mathdef2787:34,mathdef2788:34,mathdef2789:34,mathdef278:6,mathdef2790:34,mathdef2791:34,mathdef2792:34,mathdef2793:34,mathdef2794:34,mathdef2795:34,mathdef2796:34,mathdef2797:34,mathdef2798:34,mathdef2799:34,mathdef279:6,mathdef27:0,mathdef2800:34,mathdef2801:34,mathdef2802:34,mathdef2803:34,mathdef2804:34,mathdef2805:34,mathdef2806:34,mathdef2807:34,mathdef2808:34,mathdef2809:34,mathdef280:6,mathdef2810:34,mathdef2811:34,mathdef2812:34,mathdef2813:34,mathdef2814:34,mathdef2815:34,mathdef2816:34,mathdef2817:34,mathdef2818:34,mathdef2819:34,mathdef281:6,mathdef2820:34,mathdef2821:34,mathdef2822:34,mathdef2823:34,mathdef2824:34,mathdef2825:34,mathdef2826:34,mathdef2827:34,mathdef2828:34,mathdef2829:34,mathdef282:6,mathdef2830:34,mathdef2831:34,mathdef2832:34,mathdef2833:34,mathdef2834:34,mathdef2835:34,mathdef2836:34,mathdef2837:34,mathdef2838:34,mathdef2839:34,mathdef283:6,mathdef2840:34,mathdef2841:34,mathdef2842:34,mathdef2843:34,mathdef2844:34,mathdef2845:34,mathdef2846:34,mathdef2847:34,mathdef2848:34,mathdef2849:34,mathdef284:6,mathdef2850:34,mathdef2851:34,mathdef2852:34,mathdef2853:34,mathdef2854:34,mathdef2855:34,mathdef2856:34,mathdef2857:34,mathdef2858:34,mathdef2859:34,mathdef285:6,mathdef2860:34,mathdef2861:34,mathdef2862:34,mathdef2863:34,mathdef2864:34,mathdef2865:34,mathdef2866:34,mathdef2867:34,mathdef2868:34,mathdef2869:34,mathdef286:6,mathdef2870:34,mathdef2871:34,mathdef2872:34,mathdef2873:34,mathdef2874:34,mathdef2875:34,mathdef2876:34,mathdef2877:34,mathdef2878:34,mathdef2879:34,mathdef287:6,mathdef2880:34,mathdef2881:34,mathdef2882:34,mathdef2883:34,mathdef2884:34,mathdef2885:34,mathdef2886:34,mathdef2887:34,mathdef2888:34,mathdef2889:34,mathdef288:6,mathdef2890:34,mathdef2891:34,mathdef2892:34,mathdef2893:34,mathdef2894:34,mathdef2895:34,mathdef2896:34,mathdef2897:34,mathdef2898:34,mathdef2899:34,mathdef289:6,mathdef28:0,mathdef2900:34,mathdef2901:34,mathdef2902:34,mathdef2903:34,mathdef2904:34,mathdef2905:34,mathdef2906:34,mathdef2907:34,mathdef2908:34,mathdef2909:34,mathdef290:6,mathdef2910:34,mathdef2911:34,mathdef2912:34,mathdef2913:34,mathdef2914:34,mathdef2915:34,mathdef2916:34,mathdef2917:34,mathdef2918:34,mathdef2919:34,mathdef291:6,mathdef2920:34,mathdef2921:34,mathdef2922:34,mathdef2923:34,mathdef2924:34,mathdef2925:34,mathdef2926:34,mathdef2927:34,mathdef2928:34,mathdef2929:34,mathdef292:6,mathdef2930:34,mathdef2931:34,mathdef2932:34,mathdef2933:34,mathdef2934:34,mathdef2935:34,mathdef2936:34,mathdef2937:34,mathdef2938:34,mathdef2939:34,mathdef293:6,mathdef2940:34,mathdef2941:34,mathdef2942:34,mathdef2943:34,mathdef2944:34,mathdef2945:34,mathdef2946:34,mathdef2947:34,mathdef2948:34,mathdef2949:34,mathdef294:6,mathdef2950:34,mathdef2951:34,mathdef2952:34,mathdef2953:34,mathdef2954:34,mathdef2955:34,mathdef2956:34,mathdef2957:34,mathdef2958:34,mathdef2959:34,mathdef295:6,mathdef2960:34,mathdef2961:34,mathdef2962:34,mathdef2963:34,mathdef2964:34,mathdef2965:34,mathdef2966:34,mathdef2967:34,mathdef2968:34,mathdef2969:34,mathdef296:6,mathdef2970:34,mathdef2971:34,mathdef2972:34,mathdef2973:34,mathdef2974:34,mathdef2975:34,mathdef2976:34,mathdef2977:34,mathdef2978:34,mathdef2979:34,mathdef297:6,mathdef2980:34,mathdef2981:34,mathdef2982:34,mathdef2983:34,mathdef2984:34,mathdef2985:34,mathdef2986:34,mathdef2987:34,mathdef2988:34,mathdef2989:34,mathdef298:6,mathdef2990:34,mathdef2991:34,mathdef2992:34,mathdef2993:34,mathdef2994:34,mathdef2995:34,mathdef2996:34,mathdef2997:34,mathdef2998:34,mathdef2999:34,mathdef299:6,mathdef29:0,mathdef2:0,mathdef3000:34,mathdef3001:34,mathdef3002:34,mathdef3003:34,mathdef3004:34,mathdef3005:34,mathdef3006:34,mathdef3007:34,mathdef3008:34,mathdef3009:34,mathdef300:6,mathdef3010:34,mathdef3011:34,mathdef3012:34,mathdef3013:34,mathdef3014:34,mathdef3015:34,mathdef3016:34,mathdef3017:34,mathdef3018:34,mathdef3019:34,mathdef301:6,mathdef3020:34,mathdef3021:34,mathdef3022:34,mathdef3023:34,mathdef3024:34,mathdef3025:34,mathdef3026:34,mathdef3027:34,mathdef3028:34,mathdef3029:34,mathdef302:6,mathdef3030:34,mathdef3031:34,mathdef3032:34,mathdef3033:34,mathdef3034:34,mathdef3035:34,mathdef3036:34,mathdef3037:34,mathdef3038:34,mathdef3039:34,mathdef303:6,mathdef3040:34,mathdef3041:34,mathdef3042:34,mathdef3043:34,mathdef3044:34,mathdef3045:34,mathdef3046:34,mathdef3047:34,mathdef3048:34,mathdef3049:34,mathdef304:6,mathdef3050:34,mathdef3051:34,mathdef3052:34,mathdef3053:34,mathdef3054:34,mathdef3055:34,mathdef3056:34,mathdef3057:34,mathdef3058:34,mathdef3059:34,mathdef305:6,mathdef3060:34,mathdef3061:34,mathdef3062:34,mathdef3063:34,mathdef3064:34,mathdef3065:34,mathdef3066:34,mathdef3067:34,mathdef3068:34,mathdef3069:34,mathdef306:6,mathdef3070:34,mathdef3071:34,mathdef3072:34,mathdef3073:34,mathdef3074:34,mathdef3075:34,mathdef3076:34,mathdef3077:34,mathdef3078:34,mathdef3079:34,mathdef307:6,mathdef3080:34,mathdef3081:34,mathdef3082:34,mathdef3083:34,mathdef3084:34,mathdef3085:34,mathdef3086:34,mathdef3087:34,mathdef3088:34,mathdef3089:34,mathdef308:6,mathdef3090:34,mathdef3091:34,mathdef3092:34,mathdef3093:34,mathdef3094:34,mathdef3095:34,mathdef3096:34,mathdef3097:34,mathdef3098:34,mathdef3099:34,mathdef309:6,mathdef30:0,mathdef3100:34,mathdef3101:34,mathdef3102:34,mathdef3103:34,mathdef3104:34,mathdef3105:34,mathdef3106:34,mathdef3107:34,mathdef3108:34,mathdef3109:34,mathdef310:6,mathdef3110:34,mathdef3111:34,mathdef3112:34,mathdef3113:34,mathdef3114:34,mathdef3115:34,mathdef3116:34,mathdef3117:34,mathdef3118:34,mathdef3119:34,mathdef311:6,mathdef3120:34,mathdef3121:34,mathdef3122:34,mathdef3123:34,mathdef3124:34,mathdef3125:34,mathdef3126:34,mathdef3127:34,mathdef3128:34,mathdef3129:34,mathdef312:6,mathdef3130:34,mathdef3131:34,mathdef3132:34,mathdef3133:34,mathdef3134:34,mathdef3135:34,mathdef3136:34,mathdef3137:34,mathdef3138:34,mathdef3139:34,mathdef313:6,mathdef3140:34,mathdef3141:34,mathdef3142:34,mathdef3143:34,mathdef3144:34,mathdef3145:34,mathdef3146:34,mathdef3147:34,mathdef3148:34,mathdef3149:34,mathdef314:6,mathdef3150:34,mathdef3151:34,mathdef3152:34,mathdef3153:34,mathdef3154:34,mathdef3155:34,mathdef3156:34,mathdef3157:34,mathdef3158:34,mathdef3159:34,mathdef315:6,mathdef3160:34,mathdef3161:34,mathdef3162:34,mathdef3163:34,mathdef3164:34,mathdef3165:34,mathdef3166:34,mathdef3167:34,mathdef3168:34,mathdef3169:34,mathdef316:6,mathdef3170:34,mathdef3171:34,mathdef3172:34,mathdef3173:34,mathdef3174:34,mathdef3175:34,mathdef3176:34,mathdef3177:34,mathdef3178:34,mathdef3179:34,mathdef317:6,mathdef3180:34,mathdef3181:34,mathdef3182:34,mathdef3183:34,mathdef3184:34,mathdef3185:34,mathdef3186:34,mathdef3187:34,mathdef3188:34,mathdef3189:34,mathdef318:6,mathdef3190:34,mathdef3191:34,mathdef3192:34,mathdef3193:34,mathdef3194:34,mathdef3195:34,mathdef3196:34,mathdef3197:34,mathdef3198:34,mathdef3199:34,mathdef319:6,mathdef31:0,mathdef3200:34,mathdef3201:34,mathdef3202:34,mathdef3203:34,mathdef3204:34,mathdef3205:34,mathdef3206:34,mathdef3207:34,mathdef3208:34,mathdef3209:34,mathdef320:6,mathdef3210:34,mathdef3211:34,mathdef3212:35,mathdef3213:35,mathdef3214:35,mathdef3215:35,mathdef3216:35,mathdef3217:35,mathdef3218:35,mathdef3219:35,mathdef321:6,mathdef3220:35,mathdef3221:35,mathdef3222:35,mathdef3223:35,mathdef3224:35,mathdef3225:35,mathdef3226:35,mathdef3227:35,mathdef3228:35,mathdef3229:35,mathdef322:6,mathdef3230:35,mathdef3231:35,mathdef3232:35,mathdef3233:35,mathdef3234:35,mathdef3235:35,mathdef3236:35,mathdef3237:35,mathdef3238:35,mathdef3239:35,mathdef323:6,mathdef3240:35,mathdef3241:35,mathdef3242:35,mathdef3243:35,mathdef3244:35,mathdef3245:35,mathdef3246:35,mathdef3247:35,mathdef3248:35,mathdef3249:35,mathdef324:6,mathdef3250:35,mathdef3251:35,mathdef3252:35,mathdef3253:35,mathdef3254:35,mathdef3255:35,mathdef3256:35,mathdef3257:35,mathdef3258:35,mathdef3259:35,mathdef325:6,mathdef3260:35,mathdef3261:35,mathdef3262:35,mathdef3263:35,mathdef3264:35,mathdef3265:35,mathdef3266:35,mathdef3267:35,mathdef3268:35,mathdef3269:35,mathdef326:6,mathdef3270:35,mathdef3271:35,mathdef3272:35,mathdef3273:35,mathdef3274:35,mathdef3275:35,mathdef3276:35,mathdef3277:35,mathdef3278:36,mathdef3279:36,mathdef327:6,mathdef3280:36,mathdef3281:36,mathdef3282:36,mathdef3283:36,mathdef3284:36,mathdef3285:36,mathdef3286:36,mathdef3287:36,mathdef3288:36,mathdef3289:36,mathdef328:6,mathdef3290:36,mathdef3291:36,mathdef3292:36,mathdef3293:36,mathdef3294:36,mathdef3295:36,mathdef3296:36,mathdef3297:36,mathdef3298:36,mathdef3299:36,mathdef329:6,mathdef32:0,mathdef3300:36,mathdef3301:36,mathdef3302:36,mathdef3303:36,mathdef3304:36,mathdef3305:36,mathdef3306:36,mathdef3307:36,mathdef3308:36,mathdef3309:36,mathdef330:6,mathdef3310:36,mathdef3311:36,mathdef3312:36,mathdef3313:36,mathdef3314:36,mathdef3315:36,mathdef3316:36,mathdef3317:36,mathdef3318:36,mathdef3319:36,mathdef331:6,mathdef3320:36,mathdef3321:36,mathdef3322:36,mathdef3323:36,mathdef3324:36,mathdef3325:36,mathdef3326:36,mathdef3327:36,mathdef3328:36,mathdef3329:36,mathdef332:6,mathdef3330:36,mathdef3331:36,mathdef3332:36,mathdef3333:36,mathdef3334:36,mathdef3335:36,mathdef3336:36,mathdef3337:36,mathdef3338:36,mathdef3339:36,mathdef333:6,mathdef3340:36,mathdef3341:36,mathdef3342:36,mathdef3343:36,mathdef3344:36,mathdef3345:36,mathdef3346:36,mathdef3347:36,mathdef3348:36,mathdef3349:36,mathdef334:6,mathdef3350:36,mathdef3351:36,mathdef3352:36,mathdef3353:36,mathdef3354:36,mathdef3355:36,mathdef3356:36,mathdef3357:36,mathdef3358:36,mathdef3359:36,mathdef335:6,mathdef3360:36,mathdef3361:36,mathdef3362:36,mathdef3363:36,mathdef3364:36,mathdef3365:36,mathdef3366:36,mathdef3367:36,mathdef3368:36,mathdef3369:36,mathdef336:6,mathdef3370:36,mathdef3371:36,mathdef3372:36,mathdef3373:36,mathdef3374:36,mathdef3375:36,mathdef3376:36,mathdef3377:36,mathdef3378:36,mathdef3379:36,mathdef337:6,mathdef3380:36,mathdef3381:36,mathdef3382:36,mathdef3383:36,mathdef3384:36,mathdef3385:36,mathdef3386:36,mathdef3387:36,mathdef3388:36,mathdef3389:36,mathdef338:6,mathdef3390:36,mathdef3391:36,mathdef3392:36,mathdef3393:36,mathdef3394:36,mathdef3395:36,mathdef3396:36,mathdef3397:36,mathdef3398:36,mathdef3399:36,mathdef339:6,mathdef33:0,mathdef3400:36,mathdef3401:36,mathdef3402:36,mathdef3403:36,mathdef3404:36,mathdef3405:36,mathdef3406:36,mathdef3407:36,mathdef3408:36,mathdef3409:36,mathdef340:6,mathdef3410:36,mathdef3411:36,mathdef3412:36,mathdef3413:36,mathdef3414:36,mathdef3415:36,mathdef3416:36,mathdef3417:36,mathdef3418:36,mathdef3419:36,mathdef341:6,mathdef3420:36,mathdef3421:36,mathdef3422:36,mathdef3423:36,mathdef3424:36,mathdef3425:36,mathdef3426:36,mathdef3427:36,mathdef3428:36,mathdef3429:36,mathdef342:6,mathdef3430:36,mathdef3431:36,mathdef3432:36,mathdef3433:36,mathdef3434:36,mathdef3435:36,mathdef3436:36,mathdef3437:36,mathdef3438:36,mathdef3439:36,mathdef343:6,mathdef3440:36,mathdef3441:36,mathdef3442:36,mathdef3443:36,mathdef3444:36,mathdef3445:36,mathdef3446:36,mathdef3447:36,mathdef3448:36,mathdef3449:36,mathdef344:6,mathdef3450:36,mathdef3451:36,mathdef3452:36,mathdef3453:36,mathdef3454:36,mathdef3455:36,mathdef3456:36,mathdef3457:36,mathdef3458:36,mathdef3459:36,mathdef345:6,mathdef3460:36,mathdef3461:36,mathdef3462:36,mathdef3463:36,mathdef3464:36,mathdef3465:36,mathdef3466:36,mathdef3467:36,mathdef3468:36,mathdef3469:36,mathdef346:6,mathdef3470:36,mathdef3471:36,mathdef3472:36,mathdef3473:36,mathdef3474:36,mathdef3475:36,mathdef3476:36,mathdef3477:36,mathdef3478:36,mathdef3479:36,mathdef347:6,mathdef3480:36,mathdef3481:36,mathdef3482:36,mathdef3483:36,mathdef3484:36,mathdef3485:36,mathdef3486:36,mathdef3487:36,mathdef3488:36,mathdef3489:36,mathdef348:6,mathdef3490:36,mathdef3491:36,mathdef3492:36,mathdef3493:36,mathdef3494:36,mathdef3495:36,mathdef3496:36,mathdef3497:36,mathdef3498:36,mathdef3499:36,mathdef349:6,mathdef34:0,mathdef3500:36,mathdef3501:36,mathdef3502:36,mathdef3503:36,mathdef3504:36,mathdef3505:36,mathdef3506:36,mathdef3507:36,mathdef3508:36,mathdef3509:36,mathdef350:6,mathdef3510:36,mathdef3511:36,mathdef3512:36,mathdef3513:36,mathdef3514:36,mathdef3515:36,mathdef3516:36,mathdef3517:36,mathdef3518:36,mathdef3519:36,mathdef351:6,mathdef3520:36,mathdef3521:36,mathdef3522:36,mathdef3523:36,mathdef3524:36,mathdef3525:36,mathdef3526:36,mathdef3527:36,mathdef3528:36,mathdef3529:36,mathdef352:6,mathdef3530:36,mathdef3531:36,mathdef3532:36,mathdef3533:36,mathdef3534:36,mathdef3535:36,mathdef3536:36,mathdef3537:36,mathdef3538:36,mathdef3539:36,mathdef353:6,mathdef3540:36,mathdef3541:36,mathdef3542:36,mathdef3543:36,mathdef3544:36,mathdef3545:36,mathdef3546:36,mathdef3547:36,mathdef3548:36,mathdef3549:36,mathdef354:6,mathdef3550:36,mathdef3551:36,mathdef3552:36,mathdef3553:36,mathdef3554:36,mathdef3555:36,mathdef3556:36,mathdef3557:36,mathdef3558:36,mathdef3559:36,mathdef355:6,mathdef3560:36,mathdef3561:36,mathdef3562:36,mathdef3563:36,mathdef3564:36,mathdef3565:36,mathdef3566:36,mathdef3567:36,mathdef3568:36,mathdef3569:36,mathdef356:6,mathdef3570:36,mathdef3571:36,mathdef3572:36,mathdef3573:36,mathdef3574:36,mathdef3575:36,mathdef3576:36,mathdef3577:36,mathdef3578:36,mathdef3579:36,mathdef357:6,mathdef3580:36,mathdef3581:36,mathdef3582:36,mathdef3583:36,mathdef3584:36,mathdef3585:36,mathdef3586:36,mathdef3587:36,mathdef3588:36,mathdef3589:36,mathdef358:6,mathdef3590:36,mathdef3591:36,mathdef3592:36,mathdef3593:36,mathdef3594:36,mathdef3595:36,mathdef3596:36,mathdef3597:36,mathdef3598:36,mathdef3599:36,mathdef359:6,mathdef35:0,mathdef3600:36,mathdef3601:36,mathdef3602:36,mathdef3603:36,mathdef3604:36,mathdef3605:36,mathdef3606:36,mathdef3607:36,mathdef3608:36,mathdef3609:36,mathdef360:6,mathdef3610:36,mathdef3611:36,mathdef3612:36,mathdef3613:36,mathdef3614:36,mathdef3615:36,mathdef3616:36,mathdef3617:36,mathdef3618:36,mathdef3619:36,mathdef361:6,mathdef3620:36,mathdef3621:36,mathdef3622:36,mathdef3623:36,mathdef3624:36,mathdef3625:36,mathdef3626:36,mathdef3627:36,mathdef3628:36,mathdef3629:36,mathdef362:6,mathdef3630:36,mathdef3631:36,mathdef3632:36,mathdef3633:36,mathdef3634:36,mathdef3635:36,mathdef3636:36,mathdef3637:36,mathdef3638:36,mathdef3639:36,mathdef363:6,mathdef3640:36,mathdef3641:36,mathdef3642:36,mathdef3643:36,mathdef3644:36,mathdef3645:36,mathdef3646:36,mathdef3647:36,mathdef3648:36,mathdef3649:36,mathdef364:6,mathdef3650:36,mathdef3651:36,mathdef3652:36,mathdef3653:36,mathdef3654:36,mathdef3655:36,mathdef3656:36,mathdef3657:36,mathdef3658:36,mathdef3659:36,mathdef365:6,mathdef3660:36,mathdef3661:36,mathdef3662:36,mathdef3663:36,mathdef3664:36,mathdef3665:36,mathdef3666:36,mathdef3667:36,mathdef3668:36,mathdef3669:36,mathdef366:6,mathdef3670:36,mathdef3671:36,mathdef3672:36,mathdef3673:36,mathdef3674:36,mathdef3675:36,mathdef3676:36,mathdef3677:36,mathdef3678:36,mathdef3679:36,mathdef367:6,mathdef3680:36,mathdef3681:36,mathdef3682:36,mathdef3683:36,mathdef3684:36,mathdef3685:36,mathdef3686:36,mathdef3687:36,mathdef3688:36,mathdef3689:37,mathdef368:6,mathdef3690:37,mathdef3691:37,mathdef3692:37,mathdef3693:37,mathdef3694:37,mathdef3695:37,mathdef3696:37,mathdef3697:37,mathdef3698:37,mathdef3699:37,mathdef369:6,mathdef36:0,mathdef3700:37,mathdef3701:37,mathdef3702:37,mathdef3703:37,mathdef3704:37,mathdef3705:37,mathdef3706:37,mathdef3707:37,mathdef3708:37,mathdef3709:37,mathdef370:6,mathdef3710:37,mathdef3711:37,mathdef3712:37,mathdef3713:37,mathdef3714:37,mathdef3715:37,mathdef3716:37,mathdef3717:37,mathdef3718:37,mathdef3719:37,mathdef371:6,mathdef3720:37,mathdef3721:37,mathdef3722:37,mathdef3723:37,mathdef3724:37,mathdef3725:37,mathdef3726:37,mathdef3727:37,mathdef3728:37,mathdef3729:37,mathdef372:6,mathdef3730:37,mathdef3731:37,mathdef3732:37,mathdef3733:37,mathdef3734:37,mathdef3735:37,mathdef3736:37,mathdef3737:37,mathdef3738:37,mathdef3739:37,mathdef373:6,mathdef3740:37,mathdef3741:37,mathdef3742:37,mathdef3743:37,mathdef3744:37,mathdef3745:37,mathdef3746:37,mathdef3747:37,mathdef3748:37,mathdef3749:37,mathdef374:6,mathdef3750:37,mathdef3751:37,mathdef3752:37,mathdef3753:37,mathdef3754:37,mathdef3755:37,mathdef3756:37,mathdef3757:37,mathdef3758:37,mathdef3759:37,mathdef375:6,mathdef3760:37,mathdef3761:38,mathdef3762:38,mathdef3763:38,mathdef3764:38,mathdef3765:38,mathdef3766:38,mathdef3767:38,mathdef3768:38,mathdef3769:38,mathdef376:6,mathdef3770:38,mathdef3771:38,mathdef3772:38,mathdef3773:38,mathdef3774:38,mathdef3775:38,mathdef3776:38,mathdef3777:38,mathdef3778:38,mathdef3779:38,mathdef377:6,mathdef3780:38,mathdef3781:38,mathdef3782:38,mathdef3783:38,mathdef3784:38,mathdef3785:38,mathdef3786:38,mathdef3787:38,mathdef3788:38,mathdef3789:38,mathdef378:6,mathdef3790:38,mathdef3791:38,mathdef3792:38,mathdef3793:38,mathdef3794:38,mathdef3795:38,mathdef3796:38,mathdef3797:38,mathdef3798:38,mathdef3799:38,mathdef379:6,mathdef37:0,mathdef3800:38,mathdef3801:38,mathdef3802:38,mathdef3803:38,mathdef3804:38,mathdef3805:38,mathdef3806:38,mathdef3807:38,mathdef3808:38,mathdef3809:38,mathdef380:6,mathdef3810:38,mathdef3811:38,mathdef3812:38,mathdef3813:38,mathdef3814:38,mathdef3815:38,mathdef3816:38,mathdef3817:38,mathdef3818:38,mathdef3819:38,mathdef381:6,mathdef3820:38,mathdef3821:38,mathdef3822:38,mathdef3823:38,mathdef3824:38,mathdef3825:38,mathdef3826:38,mathdef3827:38,mathdef3828:38,mathdef3829:38,mathdef382:6,mathdef3830:38,mathdef3831:38,mathdef3832:38,mathdef3833:38,mathdef3834:38,mathdef3835:38,mathdef3836:38,mathdef3837:38,mathdef3838:38,mathdef3839:38,mathdef383:6,mathdef3840:38,mathdef3841:38,mathdef3842:38,mathdef3843:38,mathdef3844:38,mathdef3845:38,mathdef3846:38,mathdef3847:38,mathdef3848:38,mathdef3849:38,mathdef384:6,mathdef3850:38,mathdef3851:38,mathdef3852:38,mathdef3853:38,mathdef3854:38,mathdef3855:38,mathdef3856:38,mathdef3857:38,mathdef3858:38,mathdef3859:38,mathdef385:6,mathdef3860:38,mathdef3861:38,mathdef3862:38,mathdef3863:38,mathdef3864:38,mathdef3865:38,mathdef3866:38,mathdef3867:38,mathdef3868:38,mathdef3869:38,mathdef386:6,mathdef3870:38,mathdef3871:38,mathdef3872:38,mathdef3873:38,mathdef3874:38,mathdef3875:38,mathdef3876:38,mathdef3877:38,mathdef3878:38,mathdef3879:38,mathdef387:6,mathdef3880:38,mathdef3881:38,mathdef3882:38,mathdef3883:38,mathdef3884:38,mathdef3885:38,mathdef3886:38,mathdef3887:38,mathdef3888:38,mathdef3889:38,mathdef388:6,mathdef3890:38,mathdef3891:38,mathdef3892:38,mathdef3893:38,mathdef3894:38,mathdef3895:39,mathdef3896:39,mathdef3897:39,mathdef3898:39,mathdef3899:39,mathdef389:6,mathdef38:0,mathdef3900:39,mathdef3901:39,mathdef3902:39,mathdef3903:39,mathdef3904:39,mathdef3905:39,mathdef3906:39,mathdef3907:39,mathdef3908:39,mathdef3909:39,mathdef390:6,mathdef3910:39,mathdef3911:39,mathdef3912:39,mathdef3913:39,mathdef3914:39,mathdef3915:39,mathdef3916:39,mathdef3917:39,mathdef3918:39,mathdef3919:39,mathdef391:6,mathdef3920:39,mathdef3921:39,mathdef3922:39,mathdef3923:39,mathdef3924:39,mathdef3925:39,mathdef3926:39,mathdef3927:39,mathdef3928:39,mathdef3929:39,mathdef392:6,mathdef3930:39,mathdef3931:39,mathdef3932:39,mathdef3933:39,mathdef3934:40,mathdef3935:40,mathdef3936:40,mathdef3937:40,mathdef3938:40,mathdef3939:40,mathdef393:6,mathdef3940:40,mathdef3941:40,mathdef3942:40,mathdef3943:40,mathdef3944:40,mathdef3945:40,mathdef3946:40,mathdef3947:40,mathdef3948:40,mathdef3949:40,mathdef394:6,mathdef3950:40,mathdef3951:40,mathdef3952:40,mathdef3953:40,mathdef3954:40,mathdef3955:40,mathdef3956:40,mathdef3957:40,mathdef3958:40,mathdef3959:40,mathdef395:6,mathdef3960:40,mathdef3961:40,mathdef3962:40,mathdef3963:40,mathdef3964:40,mathdef3965:40,mathdef3966:40,mathdef3967:40,mathdef3968:40,mathdef3969:40,mathdef396:6,mathdef3970:40,mathdef3971:40,mathdef3972:40,mathdef3973:41,mathdef3974:41,mathdef3975:41,mathdef3976:41,mathdef3977:41,mathdef3978:41,mathdef3979:41,mathdef397:6,mathdef3980:41,mathdef3981:41,mathdef3982:41,mathdef3983:41,mathdef3984:41,mathdef3985:41,mathdef3986:41,mathdef3987:41,mathdef3988:41,mathdef3989:41,mathdef398:6,mathdef3990:41,mathdef3991:41,mathdef3992:41,mathdef3993:41,mathdef3994:41,mathdef3995:41,mathdef3996:41,mathdef3997:41,mathdef3998:41,mathdef3999:41,mathdef399:6,mathdef39:0,mathdef3:0,mathdef4000:41,mathdef4001:41,mathdef4002:41,mathdef4003:41,mathdef4004:41,mathdef4005:41,mathdef4006:41,mathdef4007:41,mathdef4008:41,mathdef4009:41,mathdef400:6,mathdef4010:41,mathdef4011:41,mathdef4012:42,mathdef4013:42,mathdef4014:42,mathdef4015:42,mathdef4016:42,mathdef4017:42,mathdef4018:42,mathdef4019:42,mathdef401:6,mathdef4020:42,mathdef4021:42,mathdef4022:42,mathdef4023:42,mathdef4024:42,mathdef4025:42,mathdef4026:42,mathdef4027:42,mathdef4028:42,mathdef4029:42,mathdef402:6,mathdef4030:42,mathdef4031:42,mathdef4032:42,mathdef4033:42,mathdef4034:42,mathdef4035:42,mathdef4036:42,mathdef4037:42,mathdef4038:42,mathdef4039:42,mathdef403:6,mathdef4040:42,mathdef4041:42,mathdef4042:42,mathdef4043:42,mathdef4044:42,mathdef4045:42,mathdef4046:42,mathdef4047:42,mathdef4048:42,mathdef4049:42,mathdef404:6,mathdef4050:42,mathdef4051:43,mathdef4052:43,mathdef4053:43,mathdef4054:43,mathdef4055:43,mathdef4056:43,mathdef4057:43,mathdef4058:43,mathdef4059:43,mathdef405:6,mathdef4060:43,mathdef4061:43,mathdef4062:43,mathdef4063:43,mathdef4064:43,mathdef4065:43,mathdef4066:43,mathdef4067:43,mathdef4068:43,mathdef4069:43,mathdef406:6,mathdef4070:43,mathdef4071:43,mathdef4072:43,mathdef4073:43,mathdef4074:43,mathdef4075:43,mathdef4076:43,mathdef4077:43,mathdef4078:43,mathdef4079:43,mathdef407:6,mathdef4080:43,mathdef4081:43,mathdef4082:43,mathdef4083:43,mathdef4084:43,mathdef4085:43,mathdef4086:43,mathdef4087:43,mathdef4088:43,mathdef4089:43,mathdef408:6,mathdef409:6,mathdef40:1,mathdef410:6,mathdef411:6,mathdef412:6,mathdef413:6,mathdef414:6,mathdef415:6,mathdef416:6,mathdef417:6,mathdef418:6,mathdef419:6,mathdef41:1,mathdef420:6,mathdef421:6,mathdef422:6,mathdef423:6,mathdef424:6,mathdef425:6,mathdef426:6,mathdef427:6,mathdef428:6,mathdef429:6,mathdef42:1,mathdef430:6,mathdef431:6,mathdef432:6,mathdef433:6,mathdef434:6,mathdef435:6,mathdef436:6,mathdef437:6,mathdef438:6,mathdef439:6,mathdef43:1,mathdef440:6,mathdef441:6,mathdef442:6,mathdef443:6,mathdef444:6,mathdef445:6,mathdef446:6,mathdef447:6,mathdef448:6,mathdef449:6,mathdef44:1,mathdef450:6,mathdef451:6,mathdef452:6,mathdef453:6,mathdef454:6,mathdef455:6,mathdef456:6,mathdef457:6,mathdef458:6,mathdef459:6,mathdef45:1,mathdef460:6,mathdef461:6,mathdef462:6,mathdef463:6,mathdef464:6,mathdef465:6,mathdef466:6,mathdef467:6,mathdef468:6,mathdef469:6,mathdef46:1,mathdef470:6,mathdef471:6,mathdef472:6,mathdef473:6,mathdef474:6,mathdef475:6,mathdef476:6,mathdef477:6,mathdef478:6,mathdef479:6,mathdef47:1,mathdef480:6,mathdef481:6,mathdef482:6,mathdef483:6,mathdef484:6,mathdef485:6,mathdef486:6,mathdef487:6,mathdef488:6,mathdef489:6,mathdef48:1,mathdef490:6,mathdef491:6,mathdef492:6,mathdef493:6,mathdef494:6,mathdef495:6,mathdef496:6,mathdef497:6,mathdef498:6,mathdef499:6,mathdef49:1,mathdef4:0,mathdef500:6,mathdef501:6,mathdef502:6,mathdef503:6,mathdef504:6,mathdef505:6,mathdef506:6,mathdef507:6,mathdef508:6,mathdef509:6,mathdef50:1,mathdef510:6,mathdef511:6,mathdef512:6,mathdef513:6,mathdef514:6,mathdef515:6,mathdef516:6,mathdef517:6,mathdef518:6,mathdef519:6,mathdef51:1,mathdef520:6,mathdef521:6,mathdef522:6,mathdef523:6,mathdef524:6,mathdef525:6,mathdef526:6,mathdef527:6,mathdef528:6,mathdef529:6,mathdef52:1,mathdef530:6,mathdef531:6,mathdef532:6,mathdef533:6,mathdef534:6,mathdef535:6,mathdef536:6,mathdef537:6,mathdef538:6,mathdef539:6,mathdef53:1,mathdef540:6,mathdef541:6,mathdef542:6,mathdef543:6,mathdef544:6,mathdef545:6,mathdef546:6,mathdef547:6,mathdef548:6,mathdef549:6,mathdef54:1,mathdef550:6,mathdef551:6,mathdef552:6,mathdef553:6,mathdef554:6,mathdef555:6,mathdef556:6,mathdef557:6,mathdef558:6,mathdef559:6,mathdef55:1,mathdef560:6,mathdef561:6,mathdef562:6,mathdef563:6,mathdef564:6,mathdef565:6,mathdef566:6,mathdef567:6,mathdef568:6,mathdef569:6,mathdef56:1,mathdef570:6,mathdef571:6,mathdef572:6,mathdef573:6,mathdef574:6,mathdef575:6,mathdef576:6,mathdef577:6,mathdef578:6,mathdef579:6,mathdef57:1,mathdef580:6,mathdef581:6,mathdef582:6,mathdef583:6,mathdef584:6,mathdef585:6,mathdef586:6,mathdef587:6,mathdef588:6,mathdef589:6,mathdef58:1,mathdef590:6,mathdef591:6,mathdef592:6,mathdef593:6,mathdef594:6,mathdef595:6,mathdef596:6,mathdef597:6,mathdef598:6,mathdef599:6,mathdef59:1,mathdef5:0,mathdef600:6,mathdef601:6,mathdef602:6,mathdef603:6,mathdef604:6,mathdef605:6,mathdef606:6,mathdef607:6,mathdef608:6,mathdef609:6,mathdef60:1,mathdef610:6,mathdef611:6,mathdef612:6,mathdef613:6,mathdef614:6,mathdef615:6,mathdef616:6,mathdef617:6,mathdef618:6,mathdef619:6,mathdef61:1,mathdef620:6,mathdef621:6,mathdef622:6,mathdef623:6,mathdef624:6,mathdef625:6,mathdef626:6,mathdef627:6,mathdef628:6,mathdef629:6,mathdef62:1,mathdef630:6,mathdef631:6,mathdef632:6,mathdef633:6,mathdef634:6,mathdef635:6,mathdef636:6,mathdef637:6,mathdef638:6,mathdef639:6,mathdef63:1,mathdef640:6,mathdef641:6,mathdef642:6,mathdef643:6,mathdef644:6,mathdef645:6,mathdef646:6,mathdef647:6,mathdef648:6,mathdef649:6,mathdef64:1,mathdef650:6,mathdef651:6,mathdef652:6,mathdef653:6,mathdef654:6,mathdef655:6,mathdef656:6,mathdef657:6,mathdef658:6,mathdef659:6,mathdef65:1,mathdef660:6,mathdef661:6,mathdef662:6,mathdef663:6,mathdef664:6,mathdef665:6,mathdef666:6,mathdef667:6,mathdef668:6,mathdef669:6,mathdef66:1,mathdef670:6,mathdef671:6,mathdef672:6,mathdef673:6,mathdef674:6,mathdef675:6,mathdef676:6,mathdef677:6,mathdef678:6,mathdef679:6,mathdef67:1,mathdef680:6,mathdef681:6,mathdef682:6,mathdef683:6,mathdef684:6,mathdef685:6,mathdef686:6,mathdef687:6,mathdef688:6,mathdef689:6,mathdef68:1,mathdef690:6,mathdef691:6,mathdef692:6,mathdef693:6,mathdef694:6,mathdef695:6,mathdef696:6,mathdef697:6,mathdef698:6,mathdef699:6,mathdef69:1,mathdef6:0,mathdef700:6,mathdef701:6,mathdef702:6,mathdef703:6,mathdef704:6,mathdef705:6,mathdef706:6,mathdef707:6,mathdef708:6,mathdef709:6,mathdef70:1,mathdef710:6,mathdef711:6,mathdef712:6,mathdef713:6,mathdef714:6,mathdef715:6,mathdef716:6,mathdef717:6,mathdef718:6,mathdef719:6,mathdef71:1,mathdef720:6,mathdef721:6,mathdef722:6,mathdef723:6,mathdef724:6,mathdef725:6,mathdef726:6,mathdef727:6,mathdef728:6,mathdef729:6,mathdef72:1,mathdef730:6,mathdef731:6,mathdef732:6,mathdef733:6,mathdef734:6,mathdef735:6,mathdef736:6,mathdef737:6,mathdef738:6,mathdef739:6,mathdef73:1,mathdef740:6,mathdef741:6,mathdef742:6,mathdef743:6,mathdef744:6,mathdef745:6,mathdef746:6,mathdef747:6,mathdef748:6,mathdef749:6,mathdef74:1,mathdef750:6,mathdef751:6,mathdef752:6,mathdef753:6,mathdef754:6,mathdef755:6,mathdef756:6,mathdef757:6,mathdef758:6,mathdef759:6,mathdef75:1,mathdef760:6,mathdef761:6,mathdef762:6,mathdef763:6,mathdef764:6,mathdef765:6,mathdef766:6,mathdef767:6,mathdef768:6,mathdef769:6,mathdef76:1,mathdef770:6,mathdef771:6,mathdef772:6,mathdef773:6,mathdef774:6,mathdef775:6,mathdef776:6,mathdef777:6,mathdef778:6,mathdef779:6,mathdef77:1,mathdef780:6,mathdef781:6,mathdef782:6,mathdef783:6,mathdef784:6,mathdef785:6,mathdef786:6,mathdef787:6,mathdef788:6,mathdef789:6,mathdef78:1,mathdef790:6,mathdef791:6,mathdef792:6,mathdef793:6,mathdef794:6,mathdef795:6,mathdef796:6,mathdef797:6,mathdef798:6,mathdef799:6,mathdef79:2,mathdef7:0,mathdef800:6,mathdef801:6,mathdef802:6,mathdef803:6,mathdef804:6,mathdef805:6,mathdef806:6,mathdef807:6,mathdef808:6,mathdef809:6,mathdef80:2,mathdef810:6,mathdef811:6,mathdef812:6,mathdef813:6,mathdef814:6,mathdef815:6,mathdef816:6,mathdef817:6,mathdef818:6,mathdef819:6,mathdef81:2,mathdef820:6,mathdef821:6,mathdef822:6,mathdef823:6,mathdef824:6,mathdef825:6,mathdef826:6,mathdef827:6,mathdef828:6,mathdef829:6,mathdef82:2,mathdef830:6,mathdef831:6,mathdef832:6,mathdef833:6,mathdef834:6,mathdef835:6,mathdef836:6,mathdef837:6,mathdef838:6,mathdef839:6,mathdef83:2,mathdef840:6,mathdef841:6,mathdef842:6,mathdef843:6,mathdef844:6,mathdef845:6,mathdef846:6,mathdef847:6,mathdef848:6,mathdef849:6,mathdef84:2,mathdef850:6,mathdef851:6,mathdef852:6,mathdef853:6,mathdef854:6,mathdef855:6,mathdef856:6,mathdef857:6,mathdef858:6,mathdef859:6,mathdef85:2,mathdef860:6,mathdef861:6,mathdef862:6,mathdef863:6,mathdef864:6,mathdef865:6,mathdef866:6,mathdef867:6,mathdef868:6,mathdef869:6,mathdef86:2,mathdef870:6,mathdef871:6,mathdef872:6,mathdef873:6,mathdef874:6,mathdef875:6,mathdef876:6,mathdef877:6,mathdef878:6,mathdef879:6,mathdef87:2,mathdef880:6,mathdef881:6,mathdef882:6,mathdef883:6,mathdef884:6,mathdef885:6,mathdef886:6,mathdef887:6,mathdef888:6,mathdef889:6,mathdef88:2,mathdef890:6,mathdef891:6,mathdef892:6,mathdef893:6,mathdef894:6,mathdef895:6,mathdef896:6,mathdef897:6,mathdef898:6,mathdef899:6,mathdef89:2,mathdef8:0,mathdef900:6,mathdef901:6,mathdef902:6,mathdef903:6,mathdef904:6,mathdef905:6,mathdef906:6,mathdef907:6,mathdef908:6,mathdef909:6,mathdef90:2,mathdef910:6,mathdef911:6,mathdef912:6,mathdef913:6,mathdef914:6,mathdef915:6,mathdef916:6,mathdef917:6,mathdef918:6,mathdef919:6,mathdef91:2,mathdef920:6,mathdef921:6,mathdef922:6,mathdef923:6,mathdef924:6,mathdef925:6,mathdef926:6,mathdef927:6,mathdef928:6,mathdef929:6,mathdef92:2,mathdef930:6,mathdef931:6,mathdef932:6,mathdef933:6,mathdef934:6,mathdef935:6,mathdef936:6,mathdef937:6,mathdef938:6,mathdef939:6,mathdef93:2,mathdef940:6,mathdef941:6,mathdef942:6,mathdef943:6,mathdef944:6,mathdef945:6,mathdef946:6,mathdef947:6,mathdef948:6,mathdef949:6,mathdef94:2,mathdef950:6,mathdef951:6,mathdef952:6,mathdef953:6,mathdef954:6,mathdef955:6,mathdef956:6,mathdef957:6,mathdef958:6,mathdef959:6,mathdef95:2,mathdef960:6,mathdef961:6,mathdef962:6,mathdef963:6,mathdef964:6,mathdef965:6,mathdef966:6,mathdef967:6,mathdef968:6,mathdef969:6,mathdef96:2,mathdef970:6,mathdef971:6,mathdef972:6,mathdef973:6,mathdef974:6,mathdef975:6,mathdef976:6,mathdef977:6,mathdef978:6,mathdef979:6,mathdef97:2,mathdef980:6,mathdef981:6,mathdef982:6,mathdef983:6,mathdef984:6,mathdef985:6,mathdef986:6,mathdef987:6,mathdef988:6,mathdef989:6,mathdef98:2,mathdef990:6,mathdef991:6,mathdef992:6,mathdef993:6,mathdef994:6,mathdef995:6,mathdef996:6,mathdef997:6,mathdef998:6,mathdef999:6,mathdef99:2,mathdef9:0,mathemat:[16,20,39],mathit:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathrel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathrm:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mathsf:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mathtt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],matrix:25,max:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],maximum:[13,14,18,21,24,30,43],mbox:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],me:36,mean:[18,21,25,28,30,35,39],meaning:[25,43],meant:0,mechanis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],media:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meet:[3,41],mem:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memarg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],membind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],meminst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memori:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],memsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],memtyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],memus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mere:[29,42],messag:3,met:[0,3,39],meta:[2,10,13,20,21,26,29,30,31,32],mi:[3,9],michael:[9,16,39],might:[21,28],min:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],minimum:[4,30],mirror:[10,32,34,36],miss:28,mit:[16,39],mitig:24,mm:[1,28],mobil:24,mod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],mode:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],model:[16,21,24,25,28],modern:24,modif:[9,16,18],modifi:[1,3,9,16,18],modul:[0,1,4,5,6,7,8,10,11,12,14,15,16,17,18,20,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41],modular:24,modulebodi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulefield:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],moduleinst:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulenamesubsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],modulo:20,more:[1,16,18,25,28,31,32,38,39,41],moreov:[19,21,26,29,31,38,39,43],most:[2,9,13,16,18,20,21,26,28,29,31,32,36,41,42,43],mp:20,mt:[3,9,13,36,42],mul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],multi:1,multipl:[0,10,18,19,20,21,26,28,29,30,31,32,36,37,41],multipli:[9,20],must:[0,2,3,4,9,10,13,15,18,19,20,21,26,28,29,32,34,35,36,38,39,41,42,43],mut:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],mutabl:[14,18,21,25,29,30,41],mutat:[9,16,18,19,21],mutual:[9,19,42],n:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],n_0:18,n_1:[9,16,18,43],n_2:[9,16,43],n_:18,n_k:18,name:[0,1,4,5,6,7,8,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,40,41,43],nameassoc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namedata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namemap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],namespac:36,namesubsect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nan:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],narrow_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],narrow_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nat:0,nativ:24,natur:[21,31,34],navig:13,ne:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nearest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],necessari:[0,9,19,28],necessarili:29,need:[0,2,3,13,18,25,42],neg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],negat:20,neither:[20,30],neq:[13,18,20,21,35,36,38],nest:[4,12,21,25,26,28,34,35],never:[0,9,19,21],newli:28,next:[16,21,35],nj:41,nm:[13,36],nmag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],nn:[1,28],non:[3,9,10,15,18,20,21,26,32,42,43],none:8,nontermin:[10,26,32],nontrap:1,nop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],nor:[4,20,24,30],normal:[31,38],notabl:9,notat:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43],note:16,noth:[3,18,28,42],notin:34,notion:[9,18,19,41],now:[18,19],num:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],number:[0,1,4,8,9,10,11,13,15,18,19,20,21,25,27,28,31,32,33,36,38,41,42],numer:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],numtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],o:[12,24,34],object:[3,19,21,24,30],observ:[19,20,21,25,30],occasion:28,occur:[0,2,9,12,13,14,16,18,19,20,21,25,29,31,34,35,36,38,39,41,42],occurr:[10,12,21,26,32,35],off:[0,16,18,41],offer:[16,39],offset:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],ok:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],old:[9,18],omit:[0,12,13,16,32,34,36,39],onc:[2,13,19,25,29],one:[0,1,2,9,10,12,13,16,18,19,20,21,25,26,28,29,32,34,36,39,41,43],ones:[9,15,20,39],onli:[0,2,3,9,10,12,16,18,19,21,24,25,28,29,31,32,34,35,36,37,39,41,42,43],onto:18,op:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],op_t:18,opaqu:[25,29,30],opcod:[5,6,8,12],opdtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],open:24,oper:[1,3,4,6,16,17,18,21,24,25,28,30,31],operand:[0,9,16,18,20,21,25,28,34,41],oplu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],opposit:20,optim:[18,28],option:[1,10,13,25,26,28,30,32,34,36,37,38,39],order:[0,2,3,9,10,12,13,15,16,19,20,21,25,28,29,30,31,32,36,42],organ:[13,25,29],origin:[0,1,9,16,18,20,21],other:[0,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,31,32,34,35,38,39,41,42],otherwis:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],out:[0,4,13,20,21,28,29,30,32,39],outcom:[9,18,21,42],outer:21,outermost:28,output:[20,28,30,41],outsid:[9,10,21,25,28,38,39],outward:28,over:[0,3,4,13,20,21,26,28,29,30,31,32,36,39,42],overflow:38,overlap:[28,35,36],overload:29,overview:[1,22,23],own:[9,19,21,24,25,29,30],p:[20,38],p_1:20,p_2:20,pack:[20,25,28,30,41],page:[3,9,18,19,21,28,29,30,36],pair:[2,3,10,13,18,20,25,29,36],parallel:[1,13,24],paralleliz:24,param:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],paramet:[1,3,4,14,18,19,25,29,30,32,36,37,39,42],parameter:13,parametr:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],parenthes:[10,26,31,32,34,35],pars:[3,10,32,34],part:[2,3,16,18,21,24,25,26,28,39,41],parti:13,partial:[18,20],particular:[16,20,24,25,29],particularli:42,pass:[0,3,13,19,21,24,30,42],passiv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43],path:26,pattern:[12,15,30],payload:[20,31,38],per:[1,2,3,16,18,32,41],perform:[0,1,16,18,19,21,24,25,28,41,42],permit:20,phantom:[12,34],phase:23,phrase:[10,34,39],physic:4,pick:[10,20,41],piec:39,pierc:[16,39],place:[13,14,16,19,21,24,28,32,36,39],placehold:20,placement:13,plain:[12,20,32,34,43],plaininstr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],platform:24,pldi:[9,16,39],pm:[20,31,38],pmax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],pmin:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],point:[1,3,11,17,18,21,24,26,27,28,30,33,41],pointer:25,pointwis:[19,20],polici:24,polymorph:[0,41],pop:[0,16,18,19,25,28,41],pop_ctrl:0,pop_val:0,popcnt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],portabl:24,posit:[8,12,14,15,18,20,31,34,39],possibl:[3,9,10,12,13,14,18,19,20,21,24,26,28,29,30,31,32,35,36,41],post:[5,9,18],potenti:24,power:[20,28],practic:[18,19,21,25],pre:[5,9,18,19,42],preambl:13,preced:[14,20,29,36],preceq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],precis:[9,16,18,21,24,30],predic:20,prefix:[12,28,41],premis:39,prepend:[0,9,39,41],prescrib:[13,28,41],presenc:[0,13,16,18],present:[0,12,13,14,19,21,29,41],preserv:[9,21,29,30],press:[16,39],presum:38,prevent:[24,28,38],previou:[9,28],previous:36,primari:2,primarili:[19,39],primit:[20,31],printabl:[2,38],privileg:24,proce:[21,39],proceed:[9,16,39],process:[25,30,31,43],produc:[13,16,18,19,20,21,25,28,29,36,39,41],product:[10,15,26,32,35,36,38],program:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],progress:9,project:1,promot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],proof:[9,16,39],prop:9,propag:21,proper:0,properti:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],propos:1,proposit:39,prose:[17,40],prove:9,provid:[1,2,3,10,19,21,24,25,26,28,29,32,38,39,41,43],pseudo:[0,28,34,35],pth:26,pure:0,purg:0,purpos:[0,2,19,21,37],push:[0,16,18,19,21,25,28,41],push_ctrl:0,push_val:0,put:24,q15mulr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],q:[20,38],q_1:20,q_2:20,qquad:[3,9,10,13,14,15,18,19,20,21,31,32,34,35,36,37,38,39,41,42,43],quad:[9,13,16,18,19,21,29,32,34,36,42,43],qualif:20,quiet:[20,31],quot:32,quotat:38,r:[3,9,18,19,20,21,26,38],r_1:26,r_2:26,rang:[1,3,4,12,13,20,21,24,26,28,29,30,31,38,43],rather:21,ration:20,raw:[25,29,31,36,38],rcl:21,rcll:19,re:19,reach:[3,9,18,21],reachabl:0,read:[9,13,16,20,28,39],readabl:32,reader:[16,39],readili:[16,39],real:[20,25],reason:[4,24],recent:[16,41],recogn:35,recommend:[10,20,32],record:[0,13,16,21,26,32,39],rectifi:20,recurs:[19,25,26,32,34,39,41,42],reduc:[16,18,21],reduct:[16,18,21],ref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],refer:[3,8,9,11,16,17,21,25,27,29,33,36,39,40,42],referenc:[18,19,21,25,28,29,36,37],refin:[0,3],reftyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],regard:[20,34],regardless:[18,28,30],region:28,regist:25,regular:[3,9,34,36],regularli:18,reinterpret:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],reject:4,rel:[9,18,19,20,21,28,34,39,41],relat:[1,9,19,20,28],releas:[5,22,24],relev:[10,21,24,26,32,35,36,39],relop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],rem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],remain:9,remaind:[0,20],remov:[0,9,16,18,21],render:[2,16,32,39],reorder:1,repeat:[18,34],repeatedli:36,replac:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],report:[4,19,25],repres:[0,2,12,13,16,20,21,25,28,31,34,35,38,39],represent:[0,1,10,15,16,17,21,24,25,26,30,31,38],repurpos:9,requir:[0,3,4,9,10,13,16,18,19,20,21,25,26,28,29,38,39,41,42],reserv:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resiz:[0,30],resolv:[20,21,29,32,36],resourc:[4,18,24],respect:[0,1,3,9,10,12,13,14,16,18,20,21,24,25,26,28,29,30,31,32,34,36,38,39,41,43],respons:[3,24],rest:[19,35],restart:[21,28],restrict:[4,10,15,21,28,29,32,35,36,42,43],result:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43],resulttyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],resum:28,retriev:28,reus:[21,24,36],revers:0,rewrit:32,right:[0,9,16,18,20,35],rightarrow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],rlll:19,rllll:19,role:36,root:20,rossberg:[9,16,22,39],rotat:20,rotl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],rotr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],round:[24,36,38],rt:[14,42],rule:[9,10,13,16,18,19,21,22,26,32,34,35,38,39,41,42,43],run:[9,21,24],rundata:19,runelem:19,runtim:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s32:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],s_0:19,s_1:[9,19],s_2:[9,19],s_3:19,s_4:19,s_5:19,s_:19,s_i:[19,26],s_n:19,safe:[24,25],safeti:9,sai:39,said:39,same:[4,9,10,13,14,18,20,21,26,28,29,31,32,34,36,39,41,42,43],san:26,sandbox:24,sat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],satisfi:[3,9,18],satur:[12,20,28],scalar:[31,32,35,38],schuff:[9,16,39],scope:[9,10,21,23,25,36,39],second:[0,28,36],secondari:[2,19],section:[0,1,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],secur:23,see:36,seen:24,seg:13,segment:[1,4,7,13,18,21,25,27,28,33,39,40,41],select:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],self:[0,24],semant:[0,2,3,9,13,16,18,19,21,22,23,24,39],semicolon:[35,38],sens:3,separ:[0,9,10,12,13,16,20,21,24,25,26,28,32,35,38],seq:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],sequenc:[2,3,5,7,9,10,12,13,15,16,18,19,20,21,25,26,28,29,30,31,32,34,35,36,38,39,40,42],serif:26,serv:[25,29,36],set:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sever:[12,20,24,28,41],shape:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],share:21,shift:[20,28,34,39,41],shl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shortcut:28,shorten:26,shorthand:[10,19,20,26,28,32],should:2,show:0,shown:0,shr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],shrink:9,shrunk:0,shuffl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],side:[10,15,21,24,25,26,32,34,36,39],sign:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signal:[20,21,31],signatur:[29,30],signed:[28,31,38],signif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signific:[20,31,38],significand:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],signless:20,sigplan:[9,16,39],simd:[1,28,30,31],similar:[0,20],similarli:[13,15,16,18,21,26,31],simpl:[21,24,25,31,42,43],simpler:21,simplest:31,simpli:[0,2,21,28],simplifi:13,sinc:[1,13,18,28,31,34],singl:[0,1,2,12,13,14,20,21,24,25,28,29,30,31,34,35,36,37],singleton:20,singular:[18,36,42],sint:14,situat:4,size:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],skeleton:[0,39],sketch:0,skip:13,slice:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],slower:18,small:14,smaller:[18,20,24,25,28,41,43],smallest:[20,29,31,36],so:[0,10,12,13,14,16,18,20,24,28,32,34,36,39,41],sole:34,some:[3,4,9,10,14,15,16,18,20,25,26,28,31,32,38,39,41,43],sometim:[29,31],soon:24,sort:25,sound:[0,5,16,18,22,39],sourc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],space:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],spec:1,special:[0,12,18,31,34],specif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],specifi:[3,4,9,16,19,20,21,25,28,29,32,36,39],speed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],spell:39,splat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],split:[1,13,24,26,36],sqrt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],squar:20,st:[13,36],stack:[0,4,16,17,18,19,25,28,29,39,41],stackrel:3,stacktyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stage:19,stand:[24,38,39],standard:[9,16,20,24,30,31,39],start:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43],start_typ:0,startsec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],state:[3,9,16,21,25,29,34,39],statement:[28,39],statu:20,stem:4,step:[9,16,18,19,21],still:[0,4,15,16,18,29],stop:20,storag:[25,28,30,34],storagetyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],store16:34,store32:34,store64:34,store8:34,store:[0,1,2,4,5,6,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],straightforward:0,strategi:4,stream:[13,16,35],streamabl:24,string:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43],stringchar:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringelem:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],stringref:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],structur:[2,3,5,9,12,13,17,18,19,22,25,26,28,29,34,39],stylis:[16,39],sub:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],subcategori:28,subclass:30,subject:24,subnorm:31,subrang:29,subset:[4,32,35],substanti:18,subsum:18,subtract:20,subtyp:40,succe:[3,18],suffici:9,sugar:[32,34],suitabl:[3,18,19,24,25,28,36,39,42],supersed:24,suppli:[19,21,29],support:[3,4,10,20,21,24,25,29,35,38],supset:9,surround:[0,21,36,39,41],swizzl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],sym:[10,26,32],symbol:[3,4,10,26,32,34,35,36,38],syntact:[3,5,16,21,26,32,34,35,38],syntax:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],synthes:[10,32,36],system:[9,16,24,25,39],sz:18,t1:0,t2:0,t:[0,3,6,12,13,14,15,20,21,28,30,32,34,36,37,38,39],t_0:41,t_1:[6,9,19,32,36,37,39,42],t_2:[6,9,19,36,37,39,42],t_3:41,t_i:[9,13,19,32,41],t_j:41,t_n:32,ta:[18,36],tab:[13,18],tabl:[0,2,4,5,6,7,8,10,11,15,16,17,20,22,23,24,25,26,27,31,32,33,35,38,39,40],tableaddr:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tableinst:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tablesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabletyp:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],tableus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],tabul:35,take:[0,1,2,4,9,19,20,21,24,25,28,32],taken:21,target:[16,20,21,25,28],task:24,technic:20,techniqu:21,tee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],term:[10,16,18,21,26,32,36],termin:[4,9,10,12,15,16,18,21,26,28,29,32,35],ternari:[1,28],test:[1,20,28],testop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],text:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43],textual:[24,32,38],th:[18,26],than:[1,3,13,18,19,20,21,24,25,28,31,38,41,42,43],thei:[2,4,9,10,12,13,14,18,20,21,24,25,28,29,30,31,32,34,35,36,37,38,39,41,42],them:[0,3,9,16,20,21,25,28,29,31,34,36,39],themselv:[9,15,21,28,35,42],theorem:5,therebi:[16,25,36],therefor:[0,18,21,41],thereof:30,thi:[0,2,3,4,9,10,13,15,16,18,19,20,21,24,25,26,28,29,30,31,32,34,35,38,39,41,42,43],third:[13,28],thisisenough:34,thisshouldbeenough:[12,34],thorough:[16,39],those:[9,10,26,28,32,42],thread:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],three:[16,18,21,25,28],through:[0,3,13,18,21,25,28,29],thu:[10,14,20,25,29,32],ti:[3,20],tild:38,time:[1,4,9,10,18,19,21,24,26,28,29,32],titzer:[9,16,39],togeth:28,token:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43],tool:36,top:[0,10,18,19],toplevel:36,total:15,touch:16,toward:[20,25],track:0,tracker:22,trail:[15,20],transfer:41,translat:24,transmit:24,transpar:30,trap:[0,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],treat:[3,12,26,28],tree:1,tripl:3,trunc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_sat_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],trunc_u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],truncat:[12,20],tt:[3,9,13,36,42],tupl:16,turn:[2,4,13],two:[0,2,10,13,15,16,18,20,24,25,26,28,29,31,35,39,41,43],ty:36,type:[0,2,4,5,6,10,11,12,15,16,17,20,21,22,23,24,25,26,27,28,31,32,33,34,35,38,39,40],typebind:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typedef:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeidx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],typesec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typeus:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],typewrit:[10,32],typic:[3,4,16,24,25,28],u16:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u1:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u32:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u64:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],u:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],ultim:21,unalign:[18,25],unambigu:[14,32],unari:[1,20,28],unchang:9,uncondit:[0,28,41],uncondition:39,unconstrain:41,undefin:[9,20],under:[0,9,18,21,25,30,39,41,42],underflow:0,underli:[18,20,31],underscor:38,understand:[16,39],unicod:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unifi:21,uniniti:29,uninterpret:[13,15,21,29,31,38],union:30,uniqu:[2,21,29],unit:[28,29,30],univers:[24,43],unknown:[0,13],unless:[9,16,18],unlik:[12,15,25,28,29],unnam:[32,34],unnecessari:[16,32],unop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unravel:19,unreach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],unsaf:24,unsign:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],unspecif:3,unspecifi:20,until:[4,13,18],untyp:25,unus:15,unwind:28,up:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],updat:[3,19,26,34,36],upon:29,upper:20,us:[0,1,2,3,4,10,12,13,15,16,18,20,21,24,25,26,28,29,30,31,32,33,34,35,38,39],usabl:25,user:2,usual:[4,10,20,25,28,32],utf8:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],utf:[2,15,24,31,32,38],v128:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],v:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],val_i:19,val_stack:0,val_typ:0,valid:[1,2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43],valtyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42],valu:[0,2,4,5,6,7,8,10,11,12,13,16,17,18,20,22,23,24,25,26,27,28,29,32,33,34,35,36,39,40,41,43],vari:[4,12,31],variabl:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,36,37,38,39,40,42,43],variant:[12,15],varieti:24,variou:[0,16,30],vbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vcvtop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vdash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vechaslongerinstructionnam:12,vechasreallylonginstructionnam:34,vector:[2,8,9,11,13,15,17,19,21,25,27,29,33,40,42],vectyp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vee:[9,13,15,18,20,34,36,38],veebar:20,verbatim:34,veri:[13,16],verifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],version:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vextmul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vfunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],via:[18,19],vibinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],view:25,viminmaxop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],violat:18,virelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],virtual:[24,25],visatbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vishiftop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],visual:34,vitestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],viunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vm:24,vrelop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],vtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vulner:24,vunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvbinop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvternop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvtestop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],vvunop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43],w3c:24,w:18,wa:28,wagner:[9,16,39],wai:[3,9,21,24,25],wasm:[10,24],wat:32,watt:9,we:[29,39,41],web:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],webassembl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wedg:[3,9,15,18,19,20,35,36,38],well:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],were:0,wf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],what:[1,39],when:[0,1,2,3,9,10,13,16,18,20,21,26,29,32,36,38,39,41,42,43],where:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],wherea:12,whether:[0,9,13,14,21,28,29,31],which:[0,2,3,4,9,10,12,13,15,16,18,19,20,21,24,25,28,29,30,31,32,34,35,36,38,39,41,42,43],white:[32,33,34,38],whitespac:35,whose:[0,2,9,10,13,18,19,20,31,32,36,39,43],wide:[16,25,39],width:[18,20,21,25,28,30,31,41],wise:[16,18,20,26,28,41],within:[1,9,15,20,21,25,28,29,30,38,43],without:[4,12,13,18,41],word:[9,39],would:[0,13,18,21,41],wrap:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],write:32,written:[9,10,20,26,28,30,32,34,36,38,39],ww:28,x:[1,6,8,10,12,13,19,20,26,28,29,32,34,35,36,39],x_1:[16,21],x_2:[16,21],x_3:[16,21],x_4:16,x_5:16,x_6:16,x_i:18,xor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],xref:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],y:[6,12,13,29,34,36],yield:[3,18,28],z:[12,18,31,34,35,38],z_1:18,z_k:18,zakai:[9,16,39],zero:[10,12,15,18,19,20,28,29,31]},titles:["Validation Algorithm","Change History","Custom Sections","Embedding","Implementation Limitations","Appendix","Index of Instructions","Index of Semantic Rules","Index of Types","Soundness","Conventions","Binary Format","Instructions","Modules","Types","Values","Conventions","Execution","Instructions","Modules","Numerics","Runtime Structure","WebAssembly Specification","Introduction","Introduction","Overview","Conventions","Structure","Instructions","Modules","Types","Values","Conventions","Text Format","Instructions","Lexical Format","Modules","Types","Values","Conventions","Validation","Instructions","Modules","Types"],titleterms:{"0":1,"16":41,"2":1,"boolean":20,"byte":[3,15,31],"char":3,"const":[18,19,41],"export":[9,13,21,29,36,42],"float":[1,15,20,31,38],"function":[2,3,9,13,14,18,19,21,29,30,36,37,42,43],"import":[13,29,36,42,43],"int":[1,3],"null":[18,19,41],"return":[18,41],"static":7,_0:9,_1:[18,41,42],_2:[18,41,42],_:[18,20,41],_alloc:3,_decod:3,_export:3,_grow:3,_i16x8:18,_if:[18,41],_import:3,_indirect:[18,41],_init:3,_instanti:3,_invok:3,_lane:[18,41],_n:[9,20,41],_null:[18,41],_pairwis:[18,41],_pars:3,_read:3,_s:[18,20,41],_sat:20,_size:3,_splat:[18,41],_t_1:18,_tabl:[18,41],_true:18,_type:3,_u:20,_valid:3,_write:3,_zero:[18,41],abbrevi:[32,34,36,37],activ:[21,42],address:[18,21],administr:[9,21],algorithm:0,all:18,alloc:19,ani:18,appendix:[3,5],ast:[3,9,18,41,42],auxiliari:[10,26],b:[9,42],binari:[4,11],binop:[18,41],bitmask:[18,41],block:[18,21,41,43],blocktyp:[18,41],bodi:42,br:[18,41],bulk:1,c:[18,19,20,41],call:[18,41],chang:1,charact:35,code:[9,13],comment:35,concept:25,condit:3,configur:[9,21],consider:24,constant:[7,41],construct:7,context:[21,32,39],control:[9,12,18,28,34,41],convent:[10,16,21,26,28,29,30,31,32,38,39],convers:[1,20],convert:20,convert_:20,convert_u:20,copi:[18,41],count:13,custom:[2,13],cvtop:[18,41],data:[0,9,13,18,19,21,29,36,41,42],datainst:9,datamod:42,declar:42,demot:20,depend:24,desc:42,design:24,dot:[18,41],drop:[18,41],e:42,elem:[9,18,41,42],element:[9,13,19,21,29,36,42],eleminst:9,elemmod:42,els:[18,41],emb:3,embed:3,empti:41,end:[9,18,41],enter:18,epsilon:41,error:3,evalu:21,exec:[3,9,19,20],execut:[4,7,17],exit:18,exportdesc:42,exportinst:9,expr:42,express:[12,18,28,34,41],extadd:[18,41],extend:20,extend_:20,extend_u:20,extens:[1,7,9],extern:[9,19,21,30,43],externaddr:9,externtyp:[3,43],externv:[3,9,19],extmul:[18,41],extract:[18,41],f:9,fa:9,fab:20,fadd:20,fceil:20,fcopysign:20,fdiv:20,feq:20,ffloor:20,fge:20,fgt:20,fill:[18,41],fle:20,flt:20,fmax:20,fmin:20,fmul:20,fne:20,fnearest:20,fneg:20,fold:34,formal:[16,39],format:[4,11,33,35],fpmax:20,fpmin:20,frame:[9,21],from:18,fsqrt:20,fsub:20,ftrunc:20,func:[3,9,18,19,41,42,43],funcaddr:[3,9],funcinst:9,functyp:[3,9,43],get:[18,41],global:[3,9,13,14,18,19,21,29,30,36,37,41,42,43],globaladdr:3,globalinst:9,globaltyp:[3,42,43],goal:24,grammar:[10,26,32],grow:[18,19,41],half:[18,41],hf:9,histori:1,host:[9,18,19],hostcod:9,hostfunc:3,i32x4:18,i8x16:[18,41],i:[3,20],i_1:20,i_2:20,i_3:20,iab:20,iadd:20,iaddsat:20,iaddsat_:20,iaddsat_u:20,iand:20,iandnot:20,iavgr:20,iavgr_u:20,ibitselect:20,iclz:20,ictz:20,identifi:38,idiv:20,idiv_:20,idiv_u:20,ieq:20,ieqz:20,iextend:20,iextendn_:20,ig:20,ige_:20,ige_u:20,igt:20,igt_:20,igt_u:20,il:20,ile_:20,ile_u:20,ilt:20,ilt_:20,ilt_u:20,imax:20,imax_:20,imax_u:20,imin:20,imin_:20,imin_u:20,implement:4,importdesc:42,imul:20,index:[6,7,8],indic:[13,29,36],ine:20,ineg:20,init:[18,41,42],inot:20,instanc:[3,9,21],instanti:19,instr:[9,18,19,41],instruct:[1,6,9,12,18,19,21,28,34,41,42],integ:[15,20,31,38],interpret:20,introduct:[23,24],invoc:[18,19],invok:9,ior:20,ipopcnt:20,iq15mulrsat:20,iq15mulrsat_:20,irem:20,irem_:20,irem_u:20,irotl:20,irotr:20,ishap:41,ishl:20,ishr:20,ishr_:20,ishr_u:20,isub:20,isubsat:20,isubsat_:20,isubsat_u:20,ixor:20,l:[18,41],l_n:[18,41],label:[9,18,21,34],laneidx:41,lexic:35,limit:[4,9,14,30,37,43],load:[18,41],local:[2,9,18,41,42],loop:[18,41],m:[18,20,41,43],map:2,match:7,mathit:[3,9,18,41,42,43],mathrm:[3,20],mathsf:[9,18,19,20,41,42,43],max:43,mem:[3,19,42,43],memaddr:3,memarg:[18,41],meminst:9,memori:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],memtyp:[3,42,43],min:43,mode:42,modul:[2,3,9,13,19,21,29,36,42,43],moduleinst:[3,9],multipl:1,mut:[9,42,43],n:[3,18,20,41,43],name:[2,3,9,15,31,38,42],nan:20,narrow:[18,20,41],narrow_:20,narrow_u:20,non:[1,41],nop:[18,41],notat:[10,16,26,39],number:[14,30,37],numer:[12,18,19,20,28,34,41],offset:42,op:20,opcod:0,oper:20,overview:25,parametr:[12,18,28,34,41],passiv:42,phase:25,point:[15,20,31,38],post:3,pre:3,promot:20,propag:20,prose:[16,39],ref:[3,9,18,19,41],refer:[1,12,14,18,19,28,30,34,37,41],reftyp:43,reinterpret:20,releas:1,relop:[18,41],replac:[18,41],represent:20,result:[9,14,21,30],rightarrow:43,round:20,rule:7,runtim:[3,7,9,19,21],s:[9,20],scope:24,section:[2,13],secur:24,segment:[19,29,36,42],select:[18,41],semant:[7,25],sequenc:[0,41],set:[18,41],shape:[18,41],shuffl:[18,41],sign:[1,20],size:[18,41],sound:9,space:35,specif:22,splat:[18,41],stack:21,start:[13,29,36,42],storag:20,store:[3,7,9,18,21,41],string:38,structur:[0,4,21,27],subsect:2,subtyp:43,swizzl:[18,41],sx:[18,41],syntact:4,syntax:[3,9,18,19,41,42,43],t:[9,18,19,41,42],t_1:[18,20,41,43],t_2:[18,20,41,43],tabl:[1,3,9,12,13,14,18,19,21,28,29,30,34,36,37,41,42,43],tableaddr:3,tableinst:9,tabletyp:[3,42,43],tee:[18,41],testop:[18,41],text:[4,33],theorem:9,thread:9,token:35,trap:[1,9],trunc:20,trunc_:20,trunc_sat_:20,trunc_sat_u:20,trunc_u:20,type:[1,3,7,8,9,13,14,18,19,29,30,36,37,41,42,43],typeidx:43,u32:3,u:20,unop:[18,41],unreach:[18,41],us:36,v128:[18,41],val:[3,9],valid:[0,4,9,40],valtyp:[18,41,43],valu:[1,3,9,14,15,19,21,30,31,37,38,42],variabl:[12,18,28,34,41],vbinop:[18,41],vcvtop:[18,41],vec:[18,41],vector:[1,10,12,14,18,20,26,28,30,31,32,34,37,41],vishiftop:[18,41],vrelop:[18,41],vtestop:41,vunop:[18,41],vvbinop:[18,41],vvternop:[18,41],vvtestop:41,vvunop:[18,41],webassembl:22,white:35,wrap:20,x:[18,41,42],xref:[3,9,18,19,20,41,42,43],y:[18,41],z:20,z_1:20,z_2:20}}) \ No newline at end of file diff --git a/core/syntax/conventions.html b/core/syntax/conventions.html index 87e171b0..3477f839 100644 --- a/core/syntax/conventions.html +++ b/core/syntax/conventions.html @@ -6,7 +6,7 @@ - Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Conventions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/syntax/index.html b/core/syntax/index.html index 1ea446c5..e686359c 100644 --- a/core/syntax/index.html +++ b/core/syntax/index.html @@ -6,7 +6,7 @@ - Structure — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Structure — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/syntax/instructions.html b/core/syntax/instructions.html index 227af43b..183dd285 100644 --- a/core/syntax/instructions.html +++ b/core/syntax/instructions.html @@ -6,7 +6,7 @@ - Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/syntax/modules.html b/core/syntax/modules.html index 9b41c91f..fb5dc5ff 100644 --- a/core/syntax/modules.html +++ b/core/syntax/modules.html @@ -6,7 +6,7 @@ - Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Modules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/syntax/types.html b/core/syntax/types.html index 76ece205..24d3c25a 100644 --- a/core/syntax/types.html +++ b/core/syntax/types.html @@ -6,7 +6,7 @@ - Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Types — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/syntax/values.html b/core/syntax/values.html index ab13c1fc..6075634a 100644 --- a/core/syntax/values.html +++ b/core/syntax/values.html @@ -6,7 +6,7 @@ - Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Values — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/conventions.html b/core/text/conventions.html index 2896d4b5..1deaf0ba 100644 --- a/core/text/conventions.html +++ b/core/text/conventions.html @@ -6,7 +6,7 @@ - Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Conventions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/index.html b/core/text/index.html index 269f9248..0f9e2628 100644 --- a/core/text/index.html +++ b/core/text/index.html @@ -6,7 +6,7 @@ - Text Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Text Format — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/instructions.html b/core/text/instructions.html index 4589d9c7..b1fc319b 100644 --- a/core/text/instructions.html +++ b/core/text/instructions.html @@ -6,7 +6,7 @@ - Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/lexical.html b/core/text/lexical.html index bbd962da..e8583051 100644 --- a/core/text/lexical.html +++ b/core/text/lexical.html @@ -6,7 +6,7 @@ - Lexical Format — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Lexical Format — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/modules.html b/core/text/modules.html index 838660a9..0278b692 100644 --- a/core/text/modules.html +++ b/core/text/modules.html @@ -6,7 +6,7 @@ - Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Modules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/types.html b/core/text/types.html index 45e17456..6bdea72b 100644 --- a/core/text/types.html +++ b/core/text/types.html @@ -6,7 +6,7 @@ - Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Types — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/text/values.html b/core/text/values.html index be60f715..84a2f14f 100644 --- a/core/text/values.html +++ b/core/text/values.html @@ -6,7 +6,7 @@ - Values — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Values — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/valid/conventions.html b/core/valid/conventions.html index f2b18f4f..778af2ee 100644 --- a/core/valid/conventions.html +++ b/core/valid/conventions.html @@ -6,7 +6,7 @@ - Conventions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Conventions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/valid/index.html b/core/valid/index.html index cf58ab56..c4f8e0b8 100644 --- a/core/valid/index.html +++ b/core/valid/index.html @@ -6,7 +6,7 @@ - Validation — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Validation — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/valid/instructions.html b/core/valid/instructions.html index 388e27c0..f07cbc34 100644 --- a/core/valid/instructions.html +++ b/core/valid/instructions.html @@ -6,7 +6,7 @@ - Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/valid/modules.html b/core/valid/modules.html index bd150cca..3639ffee 100644 --- a/core/valid/modules.html +++ b/core/valid/modules.html @@ -6,7 +6,7 @@ - Modules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Modules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/valid/types.html b/core/valid/types.html index 380c829f..24cda8dc 100644 --- a/core/valid/types.html +++ b/core/valid/types.html @@ -6,7 +6,7 @@ - Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Types — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/js-api/index.html b/js-api/index.html index 0dfdf601..334f604f 100644 --- a/js-api/index.html +++ b/js-api/index.html @@ -4,9 +4,9 @@ WebAssembly JavaScript Interface - + - +

    E2XTrT5?P4O(bFAi1a%6enoT2mkwVl_ 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 C_>qbL diff --git a/core/_static/documentation_options.js b/core/_static/documentation_options.js index 5dae6739..3b0773cf 100644 --- a/core/_static/documentation_options.js +++ b/core/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2.0 + stringref (Draft 2022-04-27)', + VERSION: '2.0 + stringref (Draft 2022-06-22)', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/core/appendix/algorithm.html b/core/appendix/algorithm.html index 5b94883e..1fb1fe74 100644 --- a/core/appendix/algorithm.html +++ b/core/appendix/algorithm.html @@ -6,7 +6,7 @@ - Validation Algorithm — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Validation Algorithm — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/changes.html b/core/appendix/changes.html index 325dbe16..1bdc061b 100644 --- a/core/appendix/changes.html +++ b/core/appendix/changes.html @@ -6,7 +6,7 @@ - Change History — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Change History — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/custom.html b/core/appendix/custom.html index 4b9855d6..434de2fd 100644 --- a/core/appendix/custom.html +++ b/core/appendix/custom.html @@ -6,7 +6,7 @@ - Custom Sections — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Custom Sections — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/embedding.html b/core/appendix/embedding.html index 145be23a..953a0523 100644 --- a/core/appendix/embedding.html +++ b/core/appendix/embedding.html @@ -6,7 +6,7 @@ - Embedding — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Embedding — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/implementation.html b/core/appendix/implementation.html index 7abf7cbe..9c4cf7c2 100644 --- a/core/appendix/implementation.html +++ b/core/appendix/implementation.html @@ -6,7 +6,7 @@ - Implementation Limitations — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Implementation Limitations — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/index-instructions.html b/core/appendix/index-instructions.html index 8eaa5ffb..d110b6ad 100644 --- a/core/appendix/index-instructions.html +++ b/core/appendix/index-instructions.html @@ -6,7 +6,7 @@ - Index of Instructions — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Index of Instructions — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/index-rules.html b/core/appendix/index-rules.html index 2a244376..27614046 100644 --- a/core/appendix/index-rules.html +++ b/core/appendix/index-rules.html @@ -6,7 +6,7 @@ - Index of Semantic Rules — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Index of Semantic Rules — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/index-types.html b/core/appendix/index-types.html index c67f84ac..60aec66f 100644 --- a/core/appendix/index-types.html +++ b/core/appendix/index-types.html @@ -6,7 +6,7 @@ - Index of Types — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Index of Types — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/index.html b/core/appendix/index.html index b4c366f3..8c411b7d 100644 --- a/core/appendix/index.html +++ b/core/appendix/index.html @@ -6,7 +6,7 @@ - Appendix — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Appendix — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/appendix/properties.html b/core/appendix/properties.html index 2544f7b2..837ad3e3 100644 --- a/core/appendix/properties.html +++ b/core/appendix/properties.html @@ -6,7 +6,7 @@ - Soundness — WebAssembly 2.0 + stringref (Draft 2022-04-27) + Soundness — WebAssembly 2.0 + stringref (Draft 2022-06-22) diff --git a/core/bikeshed/index.html b/core/bikeshed/index.html index e04eefb1..82ebc670 100644 --- a/core/bikeshed/index.html +++ b/core/bikeshed/index.html @@ -4,9 +4,9 @@ WebAssembly Core Specification - + - + @@ -187,7 +187,7 @@

    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 z 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 z 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