From d5a06032b03ffe828242d8782aa5baf4adba7ea8d95f5b9da518c315c986eb5c Mon Sep 17 00:00:00 2001
From: Nadim Kobeissi
Date: Thu, 26 Jun 2025 13:13:47 +0200
Subject: [PATCH] Website: greatly improved materials viewing experience
---
assignments/problem-sets/problem-set-1.tex | 2 +-
assignments/problem-sets/problem-set-2.tex | 2 +-
assignments/problem-sets/problem-set-3.tex | 2 +-
slides/1-4.tex | 54 +-
slides/1-5.tex | 8 +-
slides/1-6.tex | 6 +-
slides/1-7.tex | 2 +-
slides/1-8.tex | 2 +-
slides/2-1.tex | 16 +-
slides/2-2.tex | 10 +-
slides/2-3.tex | 8 +-
website/index.html | 256 +-
website/labs/index.html | 40 +
website/papers/index.html | 40 +
website/problem-sets/index.html | 40 +
website/slides/index.html | 40 +
website/syllabus/index.html | 38 +
website/syllabus/syllabus.pdf | 3 +
website/view/cmaps/78-EUC-H.bcmap | Bin 0 -> 2404 bytes
website/view/cmaps/78-EUC-V.bcmap | Bin 0 -> 173 bytes
website/view/cmaps/78-H.bcmap | Bin 0 -> 2379 bytes
website/view/cmaps/78-RKSJ-H.bcmap | Bin 0 -> 2398 bytes
website/view/cmaps/78-RKSJ-V.bcmap | Bin 0 -> 173 bytes
website/view/cmaps/78-V.bcmap | Bin 0 -> 169 bytes
website/view/cmaps/78ms-RKSJ-H.bcmap | Bin 0 -> 2651 bytes
website/view/cmaps/78ms-RKSJ-V.bcmap | Bin 0 -> 290 bytes
website/view/cmaps/83pv-RKSJ-H.bcmap | Bin 0 -> 905 bytes
website/view/cmaps/90ms-RKSJ-H.bcmap | Bin 0 -> 721 bytes
website/view/cmaps/90ms-RKSJ-V.bcmap | Bin 0 -> 290 bytes
website/view/cmaps/90msp-RKSJ-H.bcmap | Bin 0 -> 715 bytes
website/view/cmaps/90msp-RKSJ-V.bcmap | Bin 0 -> 291 bytes
website/view/cmaps/90pv-RKSJ-H.bcmap | Bin 0 -> 982 bytes
website/view/cmaps/90pv-RKSJ-V.bcmap | Bin 0 -> 260 bytes
website/view/cmaps/Add-H.bcmap | Bin 0 -> 2419 bytes
website/view/cmaps/Add-RKSJ-H.bcmap | Bin 0 -> 2413 bytes
website/view/cmaps/Add-RKSJ-V.bcmap | Bin 0 -> 287 bytes
website/view/cmaps/Add-V.bcmap | Bin 0 -> 282 bytes
website/view/cmaps/Adobe-CNS1-0.bcmap | Bin 0 -> 317 bytes
website/view/cmaps/Adobe-CNS1-1.bcmap | Bin 0 -> 371 bytes
website/view/cmaps/Adobe-CNS1-2.bcmap | Bin 0 -> 376 bytes
website/view/cmaps/Adobe-CNS1-3.bcmap | Bin 0 -> 401 bytes
website/view/cmaps/Adobe-CNS1-4.bcmap | Bin 0 -> 405 bytes
website/view/cmaps/Adobe-CNS1-5.bcmap | Bin 0 -> 406 bytes
website/view/cmaps/Adobe-CNS1-6.bcmap | Bin 0 -> 406 bytes
website/view/cmaps/Adobe-CNS1-UCS2.bcmap | Bin 0 -> 41193 bytes
website/view/cmaps/Adobe-GB1-0.bcmap | Bin 0 -> 217 bytes
website/view/cmaps/Adobe-GB1-1.bcmap | Bin 0 -> 250 bytes
website/view/cmaps/Adobe-GB1-2.bcmap | Bin 0 -> 465 bytes
website/view/cmaps/Adobe-GB1-3.bcmap | Bin 0 -> 470 bytes
website/view/cmaps/Adobe-GB1-4.bcmap | Bin 0 -> 601 bytes
website/view/cmaps/Adobe-GB1-5.bcmap | Bin 0 -> 625 bytes
website/view/cmaps/Adobe-GB1-UCS2.bcmap | Bin 0 -> 33974 bytes
website/view/cmaps/Adobe-Japan1-0.bcmap | Bin 0 -> 225 bytes
website/view/cmaps/Adobe-Japan1-1.bcmap | Bin 0 -> 226 bytes
website/view/cmaps/Adobe-Japan1-2.bcmap | Bin 0 -> 233 bytes
website/view/cmaps/Adobe-Japan1-3.bcmap | Bin 0 -> 242 bytes
website/view/cmaps/Adobe-Japan1-4.bcmap | Bin 0 -> 337 bytes
website/view/cmaps/Adobe-Japan1-5.bcmap | Bin 0 -> 430 bytes
website/view/cmaps/Adobe-Japan1-6.bcmap | Bin 0 -> 485 bytes
website/view/cmaps/Adobe-Japan1-UCS2.bcmap | Bin 0 -> 40951 bytes
website/view/cmaps/Adobe-Korea1-0.bcmap | Bin 0 -> 241 bytes
website/view/cmaps/Adobe-Korea1-1.bcmap | Bin 0 -> 386 bytes
website/view/cmaps/Adobe-Korea1-2.bcmap | Bin 0 -> 391 bytes
website/view/cmaps/Adobe-Korea1-UCS2.bcmap | Bin 0 -> 23293 bytes
website/view/cmaps/B5-H.bcmap | Bin 0 -> 1086 bytes
website/view/cmaps/B5-V.bcmap | Bin 0 -> 142 bytes
website/view/cmaps/B5pc-H.bcmap | Bin 0 -> 1099 bytes
website/view/cmaps/B5pc-V.bcmap | Bin 0 -> 144 bytes
website/view/cmaps/CNS-EUC-H.bcmap | Bin 0 -> 1780 bytes
website/view/cmaps/CNS-EUC-V.bcmap | Bin 0 -> 1920 bytes
website/view/cmaps/CNS1-H.bcmap | Bin 0 -> 706 bytes
website/view/cmaps/CNS1-V.bcmap | Bin 0 -> 143 bytes
website/view/cmaps/CNS2-H.bcmap | Bin 0 -> 504 bytes
website/view/cmaps/CNS2-V.bcmap | 3 +
website/view/cmaps/ETHK-B5-H.bcmap | Bin 0 -> 4426 bytes
website/view/cmaps/ETHK-B5-V.bcmap | Bin 0 -> 158 bytes
website/view/cmaps/ETen-B5-H.bcmap | Bin 0 -> 1125 bytes
website/view/cmaps/ETen-B5-V.bcmap | Bin 0 -> 158 bytes
website/view/cmaps/ETenms-B5-H.bcmap | 3 +
website/view/cmaps/ETenms-B5-V.bcmap | Bin 0 -> 172 bytes
website/view/cmaps/EUC-H.bcmap | Bin 0 -> 578 bytes
website/view/cmaps/EUC-V.bcmap | Bin 0 -> 170 bytes
website/view/cmaps/Ext-H.bcmap | Bin 0 -> 2536 bytes
website/view/cmaps/Ext-RKSJ-H.bcmap | Bin 0 -> 2542 bytes
website/view/cmaps/Ext-RKSJ-V.bcmap | Bin 0 -> 218 bytes
website/view/cmaps/Ext-V.bcmap | Bin 0 -> 215 bytes
website/view/cmaps/GB-EUC-H.bcmap | Bin 0 -> 549 bytes
website/view/cmaps/GB-EUC-V.bcmap | Bin 0 -> 179 bytes
website/view/cmaps/GB-H.bcmap | 4 +
website/view/cmaps/GB-V.bcmap | Bin 0 -> 175 bytes
website/view/cmaps/GBK-EUC-H.bcmap | Bin 0 -> 14692 bytes
website/view/cmaps/GBK-EUC-V.bcmap | Bin 0 -> 180 bytes
website/view/cmaps/GBK2K-H.bcmap | Bin 0 -> 19662 bytes
website/view/cmaps/GBK2K-V.bcmap | Bin 0 -> 219 bytes
website/view/cmaps/GBKp-EUC-H.bcmap | Bin 0 -> 14686 bytes
website/view/cmaps/GBKp-EUC-V.bcmap | Bin 0 -> 181 bytes
website/view/cmaps/GBT-EUC-H.bcmap | Bin 0 -> 7290 bytes
website/view/cmaps/GBT-EUC-V.bcmap | Bin 0 -> 180 bytes
website/view/cmaps/GBT-H.bcmap | Bin 0 -> 7269 bytes
website/view/cmaps/GBT-V.bcmap | Bin 0 -> 176 bytes
website/view/cmaps/GBTpc-EUC-H.bcmap | Bin 0 -> 7298 bytes
website/view/cmaps/GBTpc-EUC-V.bcmap | Bin 0 -> 182 bytes
website/view/cmaps/GBpc-EUC-H.bcmap | Bin 0 -> 557 bytes
website/view/cmaps/GBpc-EUC-V.bcmap | Bin 0 -> 181 bytes
website/view/cmaps/H.bcmap | Bin 0 -> 553 bytes
website/view/cmaps/HKdla-B5-H.bcmap | Bin 0 -> 2654 bytes
website/view/cmaps/HKdla-B5-V.bcmap | Bin 0 -> 148 bytes
website/view/cmaps/HKdlb-B5-H.bcmap | Bin 0 -> 2414 bytes
website/view/cmaps/HKdlb-B5-V.bcmap | Bin 0 -> 148 bytes
website/view/cmaps/HKgccs-B5-H.bcmap | Bin 0 -> 2292 bytes
website/view/cmaps/HKgccs-B5-V.bcmap | Bin 0 -> 149 bytes
website/view/cmaps/HKm314-B5-H.bcmap | Bin 0 -> 1772 bytes
website/view/cmaps/HKm314-B5-V.bcmap | Bin 0 -> 149 bytes
website/view/cmaps/HKm471-B5-H.bcmap | Bin 0 -> 2171 bytes
website/view/cmaps/HKm471-B5-V.bcmap | Bin 0 -> 149 bytes
website/view/cmaps/HKscs-B5-H.bcmap | Bin 0 -> 4437 bytes
website/view/cmaps/HKscs-B5-V.bcmap | Bin 0 -> 159 bytes
website/view/cmaps/Hankaku.bcmap | Bin 0 -> 132 bytes
website/view/cmaps/Hiragana.bcmap | Bin 0 -> 124 bytes
website/view/cmaps/KSC-EUC-H.bcmap | Bin 0 -> 1848 bytes
website/view/cmaps/KSC-EUC-V.bcmap | Bin 0 -> 164 bytes
website/view/cmaps/KSC-H.bcmap | Bin 0 -> 1831 bytes
website/view/cmaps/KSC-Johab-H.bcmap | Bin 0 -> 16791 bytes
website/view/cmaps/KSC-Johab-V.bcmap | Bin 0 -> 166 bytes
website/view/cmaps/KSC-V.bcmap | Bin 0 -> 160 bytes
website/view/cmaps/KSCms-UHC-H.bcmap | Bin 0 -> 2787 bytes
website/view/cmaps/KSCms-UHC-HW-H.bcmap | Bin 0 -> 2789 bytes
website/view/cmaps/KSCms-UHC-HW-V.bcmap | Bin 0 -> 169 bytes
website/view/cmaps/KSCms-UHC-V.bcmap | Bin 0 -> 166 bytes
website/view/cmaps/KSCpc-EUC-H.bcmap | Bin 0 -> 2024 bytes
website/view/cmaps/KSCpc-EUC-V.bcmap | Bin 0 -> 166 bytes
website/view/cmaps/Katakana.bcmap | Bin 0 -> 100 bytes
website/view/cmaps/LICENSE | 36 +
website/view/cmaps/NWP-H.bcmap | Bin 0 -> 2765 bytes
website/view/cmaps/NWP-V.bcmap | Bin 0 -> 252 bytes
website/view/cmaps/RKSJ-H.bcmap | Bin 0 -> 534 bytes
website/view/cmaps/RKSJ-V.bcmap | Bin 0 -> 170 bytes
website/view/cmaps/Roman.bcmap | Bin 0 -> 96 bytes
website/view/cmaps/UniCNS-UCS2-H.bcmap | Bin 0 -> 48280 bytes
website/view/cmaps/UniCNS-UCS2-V.bcmap | Bin 0 -> 156 bytes
website/view/cmaps/UniCNS-UTF16-H.bcmap | Bin 0 -> 50419 bytes
website/view/cmaps/UniCNS-UTF16-V.bcmap | Bin 0 -> 156 bytes
website/view/cmaps/UniCNS-UTF32-H.bcmap | Bin 0 -> 52679 bytes
website/view/cmaps/UniCNS-UTF32-V.bcmap | Bin 0 -> 160 bytes
website/view/cmaps/UniCNS-UTF8-H.bcmap | Bin 0 -> 53629 bytes
website/view/cmaps/UniCNS-UTF8-V.bcmap | Bin 0 -> 157 bytes
website/view/cmaps/UniGB-UCS2-H.bcmap | Bin 0 -> 43366 bytes
website/view/cmaps/UniGB-UCS2-V.bcmap | Bin 0 -> 193 bytes
website/view/cmaps/UniGB-UTF16-H.bcmap | Bin 0 -> 44086 bytes
website/view/cmaps/UniGB-UTF16-V.bcmap | Bin 0 -> 178 bytes
website/view/cmaps/UniGB-UTF32-H.bcmap | Bin 0 -> 45738 bytes
website/view/cmaps/UniGB-UTF32-V.bcmap | Bin 0 -> 182 bytes
website/view/cmaps/UniGB-UTF8-H.bcmap | Bin 0 -> 46837 bytes
website/view/cmaps/UniGB-UTF8-V.bcmap | Bin 0 -> 181 bytes
website/view/cmaps/UniJIS-UCS2-H.bcmap | Bin 0 -> 25439 bytes
website/view/cmaps/UniJIS-UCS2-HW-H.bcmap | Bin 0 -> 119 bytes
website/view/cmaps/UniJIS-UCS2-HW-V.bcmap | Bin 0 -> 680 bytes
website/view/cmaps/UniJIS-UCS2-V.bcmap | Bin 0 -> 664 bytes
website/view/cmaps/UniJIS-UTF16-H.bcmap | Bin 0 -> 39443 bytes
website/view/cmaps/UniJIS-UTF16-V.bcmap | Bin 0 -> 643 bytes
website/view/cmaps/UniJIS-UTF32-H.bcmap | Bin 0 -> 40539 bytes
website/view/cmaps/UniJIS-UTF32-V.bcmap | Bin 0 -> 677 bytes
website/view/cmaps/UniJIS-UTF8-H.bcmap | Bin 0 -> 41695 bytes
website/view/cmaps/UniJIS-UTF8-V.bcmap | Bin 0 -> 678 bytes
website/view/cmaps/UniJIS2004-UTF16-H.bcmap | Bin 0 -> 39534 bytes
website/view/cmaps/UniJIS2004-UTF16-V.bcmap | Bin 0 -> 647 bytes
website/view/cmaps/UniJIS2004-UTF32-H.bcmap | Bin 0 -> 40630 bytes
website/view/cmaps/UniJIS2004-UTF32-V.bcmap | Bin 0 -> 681 bytes
website/view/cmaps/UniJIS2004-UTF8-H.bcmap | Bin 0 -> 41779 bytes
website/view/cmaps/UniJIS2004-UTF8-V.bcmap | Bin 0 -> 682 bytes
website/view/cmaps/UniJISPro-UCS2-HW-V.bcmap | Bin 0 -> 705 bytes
website/view/cmaps/UniJISPro-UCS2-V.bcmap | Bin 0 -> 689 bytes
website/view/cmaps/UniJISPro-UTF8-V.bcmap | Bin 0 -> 726 bytes
website/view/cmaps/UniJISX0213-UTF32-H.bcmap | Bin 0 -> 40517 bytes
website/view/cmaps/UniJISX0213-UTF32-V.bcmap | Bin 0 -> 684 bytes
.../view/cmaps/UniJISX02132004-UTF32-H.bcmap | Bin 0 -> 40608 bytes
.../view/cmaps/UniJISX02132004-UTF32-V.bcmap | Bin 0 -> 688 bytes
website/view/cmaps/UniKS-UCS2-H.bcmap | Bin 0 -> 25783 bytes
website/view/cmaps/UniKS-UCS2-V.bcmap | Bin 0 -> 178 bytes
website/view/cmaps/UniKS-UTF16-H.bcmap | Bin 0 -> 26327 bytes
website/view/cmaps/UniKS-UTF16-V.bcmap | Bin 0 -> 164 bytes
website/view/cmaps/UniKS-UTF32-H.bcmap | Bin 0 -> 26451 bytes
website/view/cmaps/UniKS-UTF32-V.bcmap | Bin 0 -> 168 bytes
website/view/cmaps/UniKS-UTF8-H.bcmap | Bin 0 -> 27790 bytes
website/view/cmaps/UniKS-UTF8-V.bcmap | Bin 0 -> 169 bytes
website/view/cmaps/V.bcmap | Bin 0 -> 166 bytes
website/view/cmaps/WP-Symbol.bcmap | Bin 0 -> 179 bytes
website/view/debugger.css | 114 +
website/view/debugger.mjs | 627 +
website/view/iccs/CGATS001Compat-v2-micro.icc | Bin 0 -> 8464 bytes
website/view/iccs/LICENSE | 116 +
website/view/images/altText_add.svg | 3 +
website/view/images/altText_disclaimer.svg | 3 +
website/view/images/altText_done.svg | 3 +
website/view/images/altText_spinner.svg | 3 +
website/view/images/altText_warning.svg | 3 +
website/view/images/annotation-check.svg | 3 +
website/view/images/annotation-comment.svg | 3 +
website/view/images/annotation-help.svg | 3 +
website/view/images/annotation-insert.svg | 3 +
website/view/images/annotation-key.svg | 3 +
.../view/images/annotation-newparagraph.svg | 3 +
website/view/images/annotation-noicon.svg | 3 +
website/view/images/annotation-note.svg | 3 +
website/view/images/annotation-paperclip.svg | 3 +
website/view/images/annotation-paragraph.svg | 3 +
website/view/images/annotation-pushpin.svg | 3 +
.../images/cursor-editorFreeHighlight.svg | 3 +
website/view/images/cursor-editorFreeText.svg | 3 +
website/view/images/cursor-editorInk.svg | 3 +
.../images/cursor-editorTextHighlight.svg | 3 +
website/view/images/editor-toolbar-delete.svg | 3 +
website/view/images/editor-toolbar-edit.svg | 3 +
website/view/images/findbarButton-next.svg | 3 +
.../view/images/findbarButton-previous.svg | 3 +
.../view/images/gv-toolbarButton-download.svg | 3 +
website/view/images/loading-icon.gif | 3 +
website/view/images/loading.svg | 3 +
.../view/images/messageBar_closingButton.svg | 3 +
website/view/images/messageBar_info.svg | 3 +
website/view/images/messageBar_warning.svg | 3 +
...ondaryToolbarButton-documentProperties.svg | 3 +
.../secondaryToolbarButton-firstPage.svg | 3 +
.../secondaryToolbarButton-handTool.svg | 3 +
.../secondaryToolbarButton-lastPage.svg | 3 +
.../secondaryToolbarButton-rotateCcw.svg | 3 +
.../secondaryToolbarButton-rotateCw.svg | 3 +
...econdaryToolbarButton-scrollHorizontal.svg | 3 +
.../secondaryToolbarButton-scrollPage.svg | 3 +
.../secondaryToolbarButton-scrollVertical.svg | 3 +
.../secondaryToolbarButton-scrollWrapped.svg | 3 +
.../secondaryToolbarButton-selectTool.svg | 3 +
.../secondaryToolbarButton-spreadEven.svg | 3 +
.../secondaryToolbarButton-spreadNone.svg | 3 +
.../secondaryToolbarButton-spreadOdd.svg | 3 +
.../view/images/toolbarButton-bookmark.svg | 3 +
.../toolbarButton-currentOutlineItem.svg | 3 +
.../view/images/toolbarButton-download.svg | 3 +
.../images/toolbarButton-editorFreeText.svg | 3 +
.../images/toolbarButton-editorHighlight.svg | 3 +
.../view/images/toolbarButton-editorInk.svg | 3 +
.../images/toolbarButton-editorSignature.svg | 3 +
.../view/images/toolbarButton-editorStamp.svg | 3 +
.../view/images/toolbarButton-menuArrow.svg | 3 +
.../view/images/toolbarButton-openFile.svg | 3 +
.../view/images/toolbarButton-pageDown.svg | 3 +
website/view/images/toolbarButton-pageUp.svg | 3 +
.../images/toolbarButton-presentationMode.svg | 3 +
website/view/images/toolbarButton-print.svg | 3 +
website/view/images/toolbarButton-search.svg | 3 +
.../toolbarButton-secondaryToolbarToggle.svg | 3 +
.../images/toolbarButton-sidebarToggle.svg | 3 +
.../images/toolbarButton-viewAttachments.svg | 3 +
.../view/images/toolbarButton-viewLayers.svg | 3 +
.../view/images/toolbarButton-viewOutline.svg | 3 +
.../images/toolbarButton-viewThumbnail.svg | 3 +
website/view/images/toolbarButton-zoomIn.svg | 3 +
website/view/images/toolbarButton-zoomOut.svg | 3 +
website/view/images/treeitem-collapsed.svg | 3 +
website/view/images/treeitem-expanded.svg | 3 +
website/view/index.html | 736 +
website/view/locale/ach/viewer.ftl | 275 +
website/view/locale/af/viewer.ftl | 262 +
website/view/locale/an/viewer.ftl | 307 +
website/view/locale/ar/viewer.ftl | 627 +
website/view/locale/ast/viewer.ftl | 251 +
website/view/locale/az/viewer.ftl | 307 +
website/view/locale/be/viewer.ftl | 618 +
website/view/locale/bg/viewer.ftl | 451 +
website/view/locale/bn/viewer.ftl | 297 +
website/view/locale/bo/viewer.ftl | 297 +
website/view/locale/br/viewer.ftl | 370 +
website/view/locale/brx/viewer.ftl | 268 +
website/view/locale/bs/viewer.ftl | 273 +
website/view/locale/ca/viewer.ftl | 343 +
website/view/locale/cak/viewer.ftl | 341 +
website/view/locale/ckb/viewer.ftl | 292 +
website/view/locale/cs/viewer.ftl | 621 +
website/view/locale/cy/viewer.ftl | 627 +
website/view/locale/da/viewer.ftl | 615 +
website/view/locale/de/viewer.ftl | 615 +
website/view/locale/dsb/viewer.ftl | 621 +
website/view/locale/el/viewer.ftl | 615 +
website/view/locale/en-CA/viewer.ftl | 610 +
website/view/locale/en-GB/viewer.ftl | 615 +
website/view/locale/en-US/viewer.ftl | 632 +
website/view/locale/eo/viewer.ftl | 615 +
website/view/locale/es-AR/viewer.ftl | 615 +
website/view/locale/es-CL/viewer.ftl | 615 +
website/view/locale/es-ES/viewer.ftl | 615 +
website/view/locale/es-MX/viewer.ftl | 580 +
website/view/locale/et/viewer.ftl | 318 +
website/view/locale/eu/viewer.ftl | 619 +
website/view/locale/fa/viewer.ftl | 378 +
website/view/locale/ff/viewer.ftl | 297 +
website/view/locale/fi/viewer.ftl | 615 +
website/view/locale/fr/viewer.ftl | 611 +
website/view/locale/fur/viewer.ftl | 615 +
website/view/locale/fy-NL/viewer.ftl | 615 +
website/view/locale/ga-IE/viewer.ftl | 263 +
website/view/locale/gd/viewer.ftl | 343 +
website/view/locale/gl/viewer.ftl | 414 +
website/view/locale/gn/viewer.ftl | 614 +
website/view/locale/gu-IN/viewer.ftl | 297 +
website/view/locale/he/viewer.ftl | 615 +
website/view/locale/hi-IN/viewer.ftl | 297 +
website/view/locale/hr/viewer.ftl | 544 +
website/view/locale/hsb/viewer.ftl | 621 +
website/view/locale/hu/viewer.ftl | 615 +
website/view/locale/hy-AM/viewer.ftl | 314 +
website/view/locale/hye/viewer.ftl | 318 +
website/view/locale/ia/viewer.ftl | 615 +
website/view/locale/id/viewer.ftl | 603 +
website/view/locale/is/viewer.ftl | 600 +
website/view/locale/it/viewer.ftl | 615 +
website/view/locale/ja/viewer.ftl | 603 +
website/view/locale/ka/viewer.ftl | 615 +
website/view/locale/kab/viewer.ftl | 595 +
website/view/locale/kk/viewer.ftl | 595 +
website/view/locale/km/viewer.ftl | 273 +
website/view/locale/kn/viewer.ftl | 263 +
website/view/locale/ko/viewer.ftl | 603 +
website/view/locale/lij/viewer.ftl | 297 +
website/view/locale/lo/viewer.ftl | 343 +
website/view/locale/locale.json | 1 +
website/view/locale/lt/viewer.ftl | 318 +
website/view/locale/ltg/viewer.ftl | 296 +
website/view/locale/lv/viewer.ftl | 297 +
website/view/locale/meh/viewer.ftl | 137 +
website/view/locale/mk/viewer.ftl | 265 +
website/view/locale/ml/viewer.ftl | 524 +
website/view/locale/mr/viewer.ftl | 289 +
website/view/locale/ms/viewer.ftl | 297 +
website/view/locale/my/viewer.ftl | 256 +
website/view/locale/nb-NO/viewer.ftl | 585 +
website/view/locale/ne-NP/viewer.ftl | 284 +
website/view/locale/nl/viewer.ftl | 615 +
website/view/locale/nn-NO/viewer.ftl | 609 +
website/view/locale/oc/viewer.ftl | 436 +
website/view/locale/pa-IN/viewer.ftl | 615 +
website/view/locale/pl/viewer.ftl | 618 +
website/view/locale/pt-BR/viewer.ftl | 615 +
website/view/locale/pt-PT/viewer.ftl | 615 +
website/view/locale/rm/viewer.ftl | 615 +
website/view/locale/ro/viewer.ftl | 302 +
website/view/locale/ru/viewer.ftl | 618 +
website/view/locale/sat/viewer.ftl | 355 +
website/view/locale/sc/viewer.ftl | 394 +
website/view/locale/scn/viewer.ftl | 124 +
website/view/locale/sco/viewer.ftl | 314 +
website/view/locale/si/viewer.ftl | 301 +
website/view/locale/sk/viewer.ftl | 621 +
website/view/locale/skr/viewer.ftl | 524 +
website/view/locale/sl/viewer.ftl | 621 +
website/view/locale/son/viewer.ftl | 256 +
website/view/locale/sq/viewer.ftl | 606 +
website/view/locale/sr/viewer.ftl | 451 +
website/view/locale/sv-SE/viewer.ftl | 615 +
website/view/locale/szl/viewer.ftl | 307 +
website/view/locale/ta/viewer.ftl | 273 +
website/view/locale/te/viewer.ftl | 289 +
website/view/locale/tg/viewer.ftl | 615 +
website/view/locale/th/viewer.ftl | 580 +
website/view/locale/tl/viewer.ftl | 307 +
website/view/locale/tr/viewer.ftl | 615 +
website/view/locale/trs/viewer.ftl | 247 +
website/view/locale/uk/viewer.ftl | 618 +
website/view/locale/ur/viewer.ftl | 298 +
website/view/locale/uz/viewer.ftl | 237 +
website/view/locale/vi/viewer.ftl | 603 +
website/view/locale/wo/viewer.ftl | 177 +
website/view/locale/xh/viewer.ftl | 262 +
website/view/locale/zh-CN/viewer.ftl | 603 +
website/view/locale/zh-TW/viewer.ftl | 603 +
website/view/pdf.mjs | 22634 ++++++
website/view/pdf.mjs.map | 1 +
website/view/pdf.sandbox.mjs | 218 +
website/view/pdf.sandbox.mjs.map | 1 +
website/view/pdf.worker.mjs | 57722 ++++++++++++++++
website/view/pdf.worker.mjs.map | 1 +
website/view/standard_fonts/FoxitDingbats.pfb | Bin 0 -> 29513 bytes
website/view/standard_fonts/FoxitFixed.pfb | Bin 0 -> 17597 bytes
.../view/standard_fonts/FoxitFixedBold.pfb | Bin 0 -> 18055 bytes
.../standard_fonts/FoxitFixedBoldItalic.pfb | Bin 0 -> 19151 bytes
.../view/standard_fonts/FoxitFixedItalic.pfb | Bin 0 -> 18746 bytes
website/view/standard_fonts/FoxitSerif.pfb | Bin 0 -> 19469 bytes
.../view/standard_fonts/FoxitSerifBold.pfb | Bin 0 -> 19395 bytes
.../standard_fonts/FoxitSerifBoldItalic.pfb | Bin 0 -> 20733 bytes
.../view/standard_fonts/FoxitSerifItalic.pfb | Bin 0 -> 21227 bytes
website/view/standard_fonts/FoxitSymbol.pfb | Bin 0 -> 16729 bytes
website/view/standard_fonts/LICENSE_FOXIT | 27 +
.../view/standard_fonts/LICENSE_LIBERATION | 102 +
.../standard_fonts/LiberationSans-Bold.ttf | 3 +
.../LiberationSans-BoldItalic.ttf | 3 +
.../standard_fonts/LiberationSans-Italic.ttf | 3 +
.../standard_fonts/LiberationSans-Regular.ttf | 3 +
website/view/viewer.css | 6420 ++
website/view/viewer.mjs | 18610 +++++
website/view/viewer.mjs.map | 1 +
website/view/wasm/LICENSE_OPENJPEG | 39 +
website/view/wasm/LICENSE_PDFJS_OPENJPEG | 22 +
website/view/wasm/LICENSE_PDFJS_QCMS | 22 +
website/view/wasm/LICENSE_QCMS | 21 +
website/view/wasm/openjpeg.wasm | Bin 0 -> 257382 bytes
website/view/wasm/openjpeg_nowasm_fallback.js | 29 +
website/view/wasm/qcms_bg.wasm | Bin 0 -> 94519 bytes
406 files changed, 159269 insertions(+), 184 deletions(-)
create mode 100644 website/labs/index.html
create mode 100644 website/papers/index.html
create mode 100644 website/problem-sets/index.html
create mode 100644 website/slides/index.html
create mode 100644 website/syllabus/index.html
create mode 100644 website/syllabus/syllabus.pdf
create mode 100644 website/view/cmaps/78-EUC-H.bcmap
create mode 100644 website/view/cmaps/78-EUC-V.bcmap
create mode 100644 website/view/cmaps/78-H.bcmap
create mode 100644 website/view/cmaps/78-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/78-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/78-V.bcmap
create mode 100644 website/view/cmaps/78ms-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/78ms-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/83pv-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/90ms-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/90ms-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/90msp-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/90msp-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/90pv-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/90pv-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/Add-H.bcmap
create mode 100644 website/view/cmaps/Add-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/Add-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/Add-V.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-0.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-1.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-2.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-3.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-4.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-5.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-6.bcmap
create mode 100644 website/view/cmaps/Adobe-CNS1-UCS2.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-0.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-1.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-2.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-3.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-4.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-5.bcmap
create mode 100644 website/view/cmaps/Adobe-GB1-UCS2.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-0.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-1.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-2.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-3.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-4.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-5.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-6.bcmap
create mode 100644 website/view/cmaps/Adobe-Japan1-UCS2.bcmap
create mode 100644 website/view/cmaps/Adobe-Korea1-0.bcmap
create mode 100644 website/view/cmaps/Adobe-Korea1-1.bcmap
create mode 100644 website/view/cmaps/Adobe-Korea1-2.bcmap
create mode 100644 website/view/cmaps/Adobe-Korea1-UCS2.bcmap
create mode 100644 website/view/cmaps/B5-H.bcmap
create mode 100644 website/view/cmaps/B5-V.bcmap
create mode 100644 website/view/cmaps/B5pc-H.bcmap
create mode 100644 website/view/cmaps/B5pc-V.bcmap
create mode 100644 website/view/cmaps/CNS-EUC-H.bcmap
create mode 100644 website/view/cmaps/CNS-EUC-V.bcmap
create mode 100644 website/view/cmaps/CNS1-H.bcmap
create mode 100644 website/view/cmaps/CNS1-V.bcmap
create mode 100644 website/view/cmaps/CNS2-H.bcmap
create mode 100644 website/view/cmaps/CNS2-V.bcmap
create mode 100644 website/view/cmaps/ETHK-B5-H.bcmap
create mode 100644 website/view/cmaps/ETHK-B5-V.bcmap
create mode 100644 website/view/cmaps/ETen-B5-H.bcmap
create mode 100644 website/view/cmaps/ETen-B5-V.bcmap
create mode 100644 website/view/cmaps/ETenms-B5-H.bcmap
create mode 100644 website/view/cmaps/ETenms-B5-V.bcmap
create mode 100644 website/view/cmaps/EUC-H.bcmap
create mode 100644 website/view/cmaps/EUC-V.bcmap
create mode 100644 website/view/cmaps/Ext-H.bcmap
create mode 100644 website/view/cmaps/Ext-RKSJ-H.bcmap
create mode 100644 website/view/cmaps/Ext-RKSJ-V.bcmap
create mode 100644 website/view/cmaps/Ext-V.bcmap
create mode 100644 website/view/cmaps/GB-EUC-H.bcmap
create mode 100644 website/view/cmaps/GB-EUC-V.bcmap
create mode 100644 website/view/cmaps/GB-H.bcmap
create mode 100644 website/view/cmaps/GB-V.bcmap
create mode 100644 website/view/cmaps/GBK-EUC-H.bcmap
create mode 100644 website/view/cmaps/GBK-EUC-V.bcmap
create mode 100644 website/view/cmaps/GBK2K-H.bcmap
create mode 100644 website/view/cmaps/GBK2K-V.bcmap
create mode 100644 website/view/cmaps/GBKp-EUC-H.bcmap
create mode 100644 website/view/cmaps/GBKp-EUC-V.bcmap
create mode 100644 website/view/cmaps/GBT-EUC-H.bcmap
create mode 100644 website/view/cmaps/GBT-EUC-V.bcmap
create mode 100644 website/view/cmaps/GBT-H.bcmap
create mode 100644 website/view/cmaps/GBT-V.bcmap
create mode 100644 website/view/cmaps/GBTpc-EUC-H.bcmap
create mode 100644 website/view/cmaps/GBTpc-EUC-V.bcmap
create mode 100644 website/view/cmaps/GBpc-EUC-H.bcmap
create mode 100644 website/view/cmaps/GBpc-EUC-V.bcmap
create mode 100644 website/view/cmaps/H.bcmap
create mode 100644 website/view/cmaps/HKdla-B5-H.bcmap
create mode 100644 website/view/cmaps/HKdla-B5-V.bcmap
create mode 100644 website/view/cmaps/HKdlb-B5-H.bcmap
create mode 100644 website/view/cmaps/HKdlb-B5-V.bcmap
create mode 100644 website/view/cmaps/HKgccs-B5-H.bcmap
create mode 100644 website/view/cmaps/HKgccs-B5-V.bcmap
create mode 100644 website/view/cmaps/HKm314-B5-H.bcmap
create mode 100644 website/view/cmaps/HKm314-B5-V.bcmap
create mode 100644 website/view/cmaps/HKm471-B5-H.bcmap
create mode 100644 website/view/cmaps/HKm471-B5-V.bcmap
create mode 100644 website/view/cmaps/HKscs-B5-H.bcmap
create mode 100644 website/view/cmaps/HKscs-B5-V.bcmap
create mode 100644 website/view/cmaps/Hankaku.bcmap
create mode 100644 website/view/cmaps/Hiragana.bcmap
create mode 100644 website/view/cmaps/KSC-EUC-H.bcmap
create mode 100644 website/view/cmaps/KSC-EUC-V.bcmap
create mode 100644 website/view/cmaps/KSC-H.bcmap
create mode 100644 website/view/cmaps/KSC-Johab-H.bcmap
create mode 100644 website/view/cmaps/KSC-Johab-V.bcmap
create mode 100644 website/view/cmaps/KSC-V.bcmap
create mode 100644 website/view/cmaps/KSCms-UHC-H.bcmap
create mode 100644 website/view/cmaps/KSCms-UHC-HW-H.bcmap
create mode 100644 website/view/cmaps/KSCms-UHC-HW-V.bcmap
create mode 100644 website/view/cmaps/KSCms-UHC-V.bcmap
create mode 100644 website/view/cmaps/KSCpc-EUC-H.bcmap
create mode 100644 website/view/cmaps/KSCpc-EUC-V.bcmap
create mode 100644 website/view/cmaps/Katakana.bcmap
create mode 100644 website/view/cmaps/LICENSE
create mode 100644 website/view/cmaps/NWP-H.bcmap
create mode 100644 website/view/cmaps/NWP-V.bcmap
create mode 100644 website/view/cmaps/RKSJ-H.bcmap
create mode 100644 website/view/cmaps/RKSJ-V.bcmap
create mode 100644 website/view/cmaps/Roman.bcmap
create mode 100644 website/view/cmaps/UniCNS-UCS2-H.bcmap
create mode 100644 website/view/cmaps/UniCNS-UCS2-V.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF16-H.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF16-V.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF8-H.bcmap
create mode 100644 website/view/cmaps/UniCNS-UTF8-V.bcmap
create mode 100644 website/view/cmaps/UniGB-UCS2-H.bcmap
create mode 100644 website/view/cmaps/UniGB-UCS2-V.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF16-H.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF16-V.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF8-H.bcmap
create mode 100644 website/view/cmaps/UniGB-UTF8-V.bcmap
create mode 100644 website/view/cmaps/UniJIS-UCS2-H.bcmap
create mode 100644 website/view/cmaps/UniJIS-UCS2-HW-H.bcmap
create mode 100644 website/view/cmaps/UniJIS-UCS2-HW-V.bcmap
create mode 100644 website/view/cmaps/UniJIS-UCS2-V.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF16-H.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF16-V.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF8-H.bcmap
create mode 100644 website/view/cmaps/UniJIS-UTF8-V.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF16-H.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF16-V.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF8-H.bcmap
create mode 100644 website/view/cmaps/UniJIS2004-UTF8-V.bcmap
create mode 100644 website/view/cmaps/UniJISPro-UCS2-HW-V.bcmap
create mode 100644 website/view/cmaps/UniJISPro-UCS2-V.bcmap
create mode 100644 website/view/cmaps/UniJISPro-UTF8-V.bcmap
create mode 100644 website/view/cmaps/UniJISX0213-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniJISX0213-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniJISX02132004-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniJISX02132004-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniKS-UCS2-H.bcmap
create mode 100644 website/view/cmaps/UniKS-UCS2-V.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF16-H.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF16-V.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF32-H.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF32-V.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF8-H.bcmap
create mode 100644 website/view/cmaps/UniKS-UTF8-V.bcmap
create mode 100644 website/view/cmaps/V.bcmap
create mode 100644 website/view/cmaps/WP-Symbol.bcmap
create mode 100644 website/view/debugger.css
create mode 100644 website/view/debugger.mjs
create mode 100755 website/view/iccs/CGATS001Compat-v2-micro.icc
create mode 100644 website/view/iccs/LICENSE
create mode 100644 website/view/images/altText_add.svg
create mode 100644 website/view/images/altText_disclaimer.svg
create mode 100644 website/view/images/altText_done.svg
create mode 100644 website/view/images/altText_spinner.svg
create mode 100644 website/view/images/altText_warning.svg
create mode 100644 website/view/images/annotation-check.svg
create mode 100644 website/view/images/annotation-comment.svg
create mode 100644 website/view/images/annotation-help.svg
create mode 100644 website/view/images/annotation-insert.svg
create mode 100644 website/view/images/annotation-key.svg
create mode 100644 website/view/images/annotation-newparagraph.svg
create mode 100644 website/view/images/annotation-noicon.svg
create mode 100644 website/view/images/annotation-note.svg
create mode 100644 website/view/images/annotation-paperclip.svg
create mode 100644 website/view/images/annotation-paragraph.svg
create mode 100644 website/view/images/annotation-pushpin.svg
create mode 100644 website/view/images/cursor-editorFreeHighlight.svg
create mode 100644 website/view/images/cursor-editorFreeText.svg
create mode 100644 website/view/images/cursor-editorInk.svg
create mode 100644 website/view/images/cursor-editorTextHighlight.svg
create mode 100644 website/view/images/editor-toolbar-delete.svg
create mode 100644 website/view/images/editor-toolbar-edit.svg
create mode 100644 website/view/images/findbarButton-next.svg
create mode 100644 website/view/images/findbarButton-previous.svg
create mode 100644 website/view/images/gv-toolbarButton-download.svg
create mode 100644 website/view/images/loading-icon.gif
create mode 100644 website/view/images/loading.svg
create mode 100644 website/view/images/messageBar_closingButton.svg
create mode 100644 website/view/images/messageBar_info.svg
create mode 100644 website/view/images/messageBar_warning.svg
create mode 100644 website/view/images/secondaryToolbarButton-documentProperties.svg
create mode 100644 website/view/images/secondaryToolbarButton-firstPage.svg
create mode 100644 website/view/images/secondaryToolbarButton-handTool.svg
create mode 100644 website/view/images/secondaryToolbarButton-lastPage.svg
create mode 100644 website/view/images/secondaryToolbarButton-rotateCcw.svg
create mode 100644 website/view/images/secondaryToolbarButton-rotateCw.svg
create mode 100644 website/view/images/secondaryToolbarButton-scrollHorizontal.svg
create mode 100644 website/view/images/secondaryToolbarButton-scrollPage.svg
create mode 100644 website/view/images/secondaryToolbarButton-scrollVertical.svg
create mode 100644 website/view/images/secondaryToolbarButton-scrollWrapped.svg
create mode 100644 website/view/images/secondaryToolbarButton-selectTool.svg
create mode 100644 website/view/images/secondaryToolbarButton-spreadEven.svg
create mode 100644 website/view/images/secondaryToolbarButton-spreadNone.svg
create mode 100644 website/view/images/secondaryToolbarButton-spreadOdd.svg
create mode 100644 website/view/images/toolbarButton-bookmark.svg
create mode 100644 website/view/images/toolbarButton-currentOutlineItem.svg
create mode 100644 website/view/images/toolbarButton-download.svg
create mode 100644 website/view/images/toolbarButton-editorFreeText.svg
create mode 100644 website/view/images/toolbarButton-editorHighlight.svg
create mode 100644 website/view/images/toolbarButton-editorInk.svg
create mode 100644 website/view/images/toolbarButton-editorSignature.svg
create mode 100644 website/view/images/toolbarButton-editorStamp.svg
create mode 100644 website/view/images/toolbarButton-menuArrow.svg
create mode 100644 website/view/images/toolbarButton-openFile.svg
create mode 100644 website/view/images/toolbarButton-pageDown.svg
create mode 100644 website/view/images/toolbarButton-pageUp.svg
create mode 100644 website/view/images/toolbarButton-presentationMode.svg
create mode 100644 website/view/images/toolbarButton-print.svg
create mode 100644 website/view/images/toolbarButton-search.svg
create mode 100644 website/view/images/toolbarButton-secondaryToolbarToggle.svg
create mode 100644 website/view/images/toolbarButton-sidebarToggle.svg
create mode 100644 website/view/images/toolbarButton-viewAttachments.svg
create mode 100644 website/view/images/toolbarButton-viewLayers.svg
create mode 100644 website/view/images/toolbarButton-viewOutline.svg
create mode 100644 website/view/images/toolbarButton-viewThumbnail.svg
create mode 100644 website/view/images/toolbarButton-zoomIn.svg
create mode 100644 website/view/images/toolbarButton-zoomOut.svg
create mode 100644 website/view/images/treeitem-collapsed.svg
create mode 100644 website/view/images/treeitem-expanded.svg
create mode 100644 website/view/index.html
create mode 100644 website/view/locale/ach/viewer.ftl
create mode 100644 website/view/locale/af/viewer.ftl
create mode 100644 website/view/locale/an/viewer.ftl
create mode 100644 website/view/locale/ar/viewer.ftl
create mode 100644 website/view/locale/ast/viewer.ftl
create mode 100644 website/view/locale/az/viewer.ftl
create mode 100644 website/view/locale/be/viewer.ftl
create mode 100644 website/view/locale/bg/viewer.ftl
create mode 100644 website/view/locale/bn/viewer.ftl
create mode 100644 website/view/locale/bo/viewer.ftl
create mode 100644 website/view/locale/br/viewer.ftl
create mode 100644 website/view/locale/brx/viewer.ftl
create mode 100644 website/view/locale/bs/viewer.ftl
create mode 100644 website/view/locale/ca/viewer.ftl
create mode 100644 website/view/locale/cak/viewer.ftl
create mode 100644 website/view/locale/ckb/viewer.ftl
create mode 100644 website/view/locale/cs/viewer.ftl
create mode 100644 website/view/locale/cy/viewer.ftl
create mode 100644 website/view/locale/da/viewer.ftl
create mode 100644 website/view/locale/de/viewer.ftl
create mode 100644 website/view/locale/dsb/viewer.ftl
create mode 100644 website/view/locale/el/viewer.ftl
create mode 100644 website/view/locale/en-CA/viewer.ftl
create mode 100644 website/view/locale/en-GB/viewer.ftl
create mode 100644 website/view/locale/en-US/viewer.ftl
create mode 100644 website/view/locale/eo/viewer.ftl
create mode 100644 website/view/locale/es-AR/viewer.ftl
create mode 100644 website/view/locale/es-CL/viewer.ftl
create mode 100644 website/view/locale/es-ES/viewer.ftl
create mode 100644 website/view/locale/es-MX/viewer.ftl
create mode 100644 website/view/locale/et/viewer.ftl
create mode 100644 website/view/locale/eu/viewer.ftl
create mode 100644 website/view/locale/fa/viewer.ftl
create mode 100644 website/view/locale/ff/viewer.ftl
create mode 100644 website/view/locale/fi/viewer.ftl
create mode 100644 website/view/locale/fr/viewer.ftl
create mode 100644 website/view/locale/fur/viewer.ftl
create mode 100644 website/view/locale/fy-NL/viewer.ftl
create mode 100644 website/view/locale/ga-IE/viewer.ftl
create mode 100644 website/view/locale/gd/viewer.ftl
create mode 100644 website/view/locale/gl/viewer.ftl
create mode 100644 website/view/locale/gn/viewer.ftl
create mode 100644 website/view/locale/gu-IN/viewer.ftl
create mode 100644 website/view/locale/he/viewer.ftl
create mode 100644 website/view/locale/hi-IN/viewer.ftl
create mode 100644 website/view/locale/hr/viewer.ftl
create mode 100644 website/view/locale/hsb/viewer.ftl
create mode 100644 website/view/locale/hu/viewer.ftl
create mode 100644 website/view/locale/hy-AM/viewer.ftl
create mode 100644 website/view/locale/hye/viewer.ftl
create mode 100644 website/view/locale/ia/viewer.ftl
create mode 100644 website/view/locale/id/viewer.ftl
create mode 100644 website/view/locale/is/viewer.ftl
create mode 100644 website/view/locale/it/viewer.ftl
create mode 100644 website/view/locale/ja/viewer.ftl
create mode 100644 website/view/locale/ka/viewer.ftl
create mode 100644 website/view/locale/kab/viewer.ftl
create mode 100644 website/view/locale/kk/viewer.ftl
create mode 100644 website/view/locale/km/viewer.ftl
create mode 100644 website/view/locale/kn/viewer.ftl
create mode 100644 website/view/locale/ko/viewer.ftl
create mode 100644 website/view/locale/lij/viewer.ftl
create mode 100644 website/view/locale/lo/viewer.ftl
create mode 100644 website/view/locale/locale.json
create mode 100644 website/view/locale/lt/viewer.ftl
create mode 100644 website/view/locale/ltg/viewer.ftl
create mode 100644 website/view/locale/lv/viewer.ftl
create mode 100644 website/view/locale/meh/viewer.ftl
create mode 100644 website/view/locale/mk/viewer.ftl
create mode 100644 website/view/locale/ml/viewer.ftl
create mode 100644 website/view/locale/mr/viewer.ftl
create mode 100644 website/view/locale/ms/viewer.ftl
create mode 100644 website/view/locale/my/viewer.ftl
create mode 100644 website/view/locale/nb-NO/viewer.ftl
create mode 100644 website/view/locale/ne-NP/viewer.ftl
create mode 100644 website/view/locale/nl/viewer.ftl
create mode 100644 website/view/locale/nn-NO/viewer.ftl
create mode 100644 website/view/locale/oc/viewer.ftl
create mode 100644 website/view/locale/pa-IN/viewer.ftl
create mode 100644 website/view/locale/pl/viewer.ftl
create mode 100644 website/view/locale/pt-BR/viewer.ftl
create mode 100644 website/view/locale/pt-PT/viewer.ftl
create mode 100644 website/view/locale/rm/viewer.ftl
create mode 100644 website/view/locale/ro/viewer.ftl
create mode 100644 website/view/locale/ru/viewer.ftl
create mode 100644 website/view/locale/sat/viewer.ftl
create mode 100644 website/view/locale/sc/viewer.ftl
create mode 100644 website/view/locale/scn/viewer.ftl
create mode 100644 website/view/locale/sco/viewer.ftl
create mode 100644 website/view/locale/si/viewer.ftl
create mode 100644 website/view/locale/sk/viewer.ftl
create mode 100644 website/view/locale/skr/viewer.ftl
create mode 100644 website/view/locale/sl/viewer.ftl
create mode 100644 website/view/locale/son/viewer.ftl
create mode 100644 website/view/locale/sq/viewer.ftl
create mode 100644 website/view/locale/sr/viewer.ftl
create mode 100644 website/view/locale/sv-SE/viewer.ftl
create mode 100644 website/view/locale/szl/viewer.ftl
create mode 100644 website/view/locale/ta/viewer.ftl
create mode 100644 website/view/locale/te/viewer.ftl
create mode 100644 website/view/locale/tg/viewer.ftl
create mode 100644 website/view/locale/th/viewer.ftl
create mode 100644 website/view/locale/tl/viewer.ftl
create mode 100644 website/view/locale/tr/viewer.ftl
create mode 100644 website/view/locale/trs/viewer.ftl
create mode 100644 website/view/locale/uk/viewer.ftl
create mode 100644 website/view/locale/ur/viewer.ftl
create mode 100644 website/view/locale/uz/viewer.ftl
create mode 100644 website/view/locale/vi/viewer.ftl
create mode 100644 website/view/locale/wo/viewer.ftl
create mode 100644 website/view/locale/xh/viewer.ftl
create mode 100644 website/view/locale/zh-CN/viewer.ftl
create mode 100644 website/view/locale/zh-TW/viewer.ftl
create mode 100644 website/view/pdf.mjs
create mode 100644 website/view/pdf.mjs.map
create mode 100644 website/view/pdf.sandbox.mjs
create mode 100644 website/view/pdf.sandbox.mjs.map
create mode 100644 website/view/pdf.worker.mjs
create mode 100644 website/view/pdf.worker.mjs.map
create mode 100644 website/view/standard_fonts/FoxitDingbats.pfb
create mode 100644 website/view/standard_fonts/FoxitFixed.pfb
create mode 100644 website/view/standard_fonts/FoxitFixedBold.pfb
create mode 100644 website/view/standard_fonts/FoxitFixedBoldItalic.pfb
create mode 100644 website/view/standard_fonts/FoxitFixedItalic.pfb
create mode 100644 website/view/standard_fonts/FoxitSerif.pfb
create mode 100644 website/view/standard_fonts/FoxitSerifBold.pfb
create mode 100644 website/view/standard_fonts/FoxitSerifBoldItalic.pfb
create mode 100644 website/view/standard_fonts/FoxitSerifItalic.pfb
create mode 100644 website/view/standard_fonts/FoxitSymbol.pfb
create mode 100644 website/view/standard_fonts/LICENSE_FOXIT
create mode 100644 website/view/standard_fonts/LICENSE_LIBERATION
create mode 100644 website/view/standard_fonts/LiberationSans-Bold.ttf
create mode 100644 website/view/standard_fonts/LiberationSans-BoldItalic.ttf
create mode 100644 website/view/standard_fonts/LiberationSans-Italic.ttf
create mode 100644 website/view/standard_fonts/LiberationSans-Regular.ttf
create mode 100644 website/view/viewer.css
create mode 100644 website/view/viewer.mjs
create mode 100644 website/view/viewer.mjs.map
create mode 100644 website/view/wasm/LICENSE_OPENJPEG
create mode 100644 website/view/wasm/LICENSE_PDFJS_OPENJPEG
create mode 100644 website/view/wasm/LICENSE_PDFJS_QCMS
create mode 100644 website/view/wasm/LICENSE_QCMS
create mode 100644 website/view/wasm/openjpeg.wasm
create mode 100644 website/view/wasm/openjpeg_nowasm_fallback.js
create mode 100644 website/view/wasm/qcms_bg.wasm
diff --git a/assignments/problem-sets/problem-set-1.tex b/assignments/problem-sets/problem-set-1.tex
index fd18801..c6cb081 100644
--- a/assignments/problem-sets/problem-set-1.tex
+++ b/assignments/problem-sets/problem-set-1.tex
@@ -11,7 +11,7 @@
\section*{Problem Set 1: Provable Security Foundations}
\begin{tcolorbox}[colframe=OliveGreen!30!white,colback=OliveGreen!5!white]
- \textbf{Instructions:} This problem set covers the foundations of provable security from parts 1.1\footnote{\url{https://appliedcryptography.page/slides/1-1.pdf}}, 1.2\footnote{\url{https://appliedcryptography.page/slides/1-2.pdf}} and 1.3\footnote{\url{https://appliedcryptography.page/slides/1-3.pdf}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
+ \textbf{Instructions:} This problem set covers the foundations of provable security from parts 1.1\footnote{\url{https://appliedcryptography.page/slides/\#1-1}}, 1.2\footnote{\url{https://appliedcryptography.page/slides/\#1-2}} and 1.3\footnote{\url{https://appliedcryptography.page/slides/\#1-3}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
\end{tcolorbox}
\section{Cryptographic Foundations (20 points)}
diff --git a/assignments/problem-sets/problem-set-2.tex b/assignments/problem-sets/problem-set-2.tex
index 817c239..78e997d 100644
--- a/assignments/problem-sets/problem-set-2.tex
+++ b/assignments/problem-sets/problem-set-2.tex
@@ -11,7 +11,7 @@
\section*{Problem Set 2: Symmetric Cryptography}
\begin{tcolorbox}[colframe=OliveGreen!30!white,colback=OliveGreen!5!white]
- \textbf{Instructions:} This problem set covers topics in provable security from parts 1.4\footnote{\url{https://appliedcryptography.page/slides/1-4.pdf}}, 1.5\footnote{\url{https://appliedcryptography.page/slides/1-5.pdf}} and 1.6\footnote{\url{https://appliedcryptography.page/slides/1-6.pdf}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
+ \textbf{Instructions:} This problem set covers topics in provable security from parts 1.4\footnote{\url{https://appliedcryptography.page/slides/\#1-4}}, 1.5\footnote{\url{https://appliedcryptography.page/slides/\#1-5}} and 1.6\footnote{\url{https://appliedcryptography.page/slides/\#1-6}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
\end{tcolorbox}
\section{Pseudorandomness (20 points)}
diff --git a/assignments/problem-sets/problem-set-3.tex b/assignments/problem-sets/problem-set-3.tex
index 3c44d6c..61210e0 100644
--- a/assignments/problem-sets/problem-set-3.tex
+++ b/assignments/problem-sets/problem-set-3.tex
@@ -11,7 +11,7 @@
\section*{Problem Set 3: Asymmetric Cryptography}
\begin{tcolorbox}[colframe=OliveGreen!30!white,colback=OliveGreen!5!white]
- \textbf{Instructions:} This problem set covers topics in provable security from parts 1.7\footnote{\url{https://appliedcryptography.page/slides/1-7.pdf}} and 1.8\footnote{\url{https://appliedcryptography.page/slides/1-8.pdf}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
+ \textbf{Instructions:} This problem set covers topics in provable security from parts 1.7\footnote{\url{https://appliedcryptography.page/slides/\#1-7}} and 1.8\footnote{\url{https://appliedcryptography.page/slides/\#1-8}} of the course. Submit your solutions as a neatly formatted PDF. You are encouraged to collaborate with classmates in studying the material, but your submitted solutions must be your own work. For proofs, clearly state your assumptions, steps, and conclusions.
\end{tcolorbox}
\section{Cryptographic Hardness and Real-World Implications (20 points)}
diff --git a/slides/1-4.tex b/slides/1-4.tex
index fa61f5d..637a283 100644
--- a/slides/1-4.tex
+++ b/slides/1-4.tex
@@ -1441,7 +1441,7 @@
\begin{columns}[c]
\begin{column}{0.4\textwidth}
\begin{itemize}[<+->]
- \item Luby and Rackoff proved that a 3-round Feistel cipher is indistinguishable from a pseudorandom permutation.\footnote{\url{https://appliedcryptography.page/papers/luby-rackoff.pdf}}
+ \item Luby and Rackoff proved that a 3-round Feistel cipher is indistinguishable from a pseudorandom permutation.\footnote{\url{https://appliedcryptography.page/papers/\#luby-rackoff}}
\item Can we also prove it using our provable security framework?
\end{itemize}
\end{column}
@@ -1520,7 +1520,7 @@
\begin{columns}[c]
\begin{column}{0.4\textwidth}
\begin{itemize}
- \item Luby and Rackoff proved that a 3-round Feistel cipher is indistinguishable from a pseudorandom permutation.\footnote{\url{https://appliedcryptography.page/papers/luby-rackoff.pdf}}
+ \item Luby and Rackoff proved that a 3-round Feistel cipher is indistinguishable from a pseudorandom permutation.\footnote{\url{https://appliedcryptography.page/papers/\#luby-rackoff}}
\item Can we also prove it using our provable security framework?
\item Yes, with the bad events proof technique!
\end{itemize}
@@ -2130,31 +2130,31 @@
\end{frame}
\begin{frame}{AES: security and attacks over time}
- \begin{columns}[c]
- \begin{column}{0.5\textwidth}
- \begin{itemize}[<+->]
- \item AES has been heavily analyzed for over 20 years.
- \item Best attacks against full AES have gradually improved:
- \begin{itemize}[<+->]
- \item 2011: Biclique attack (Bogdanov et al.) reduced complexity to $2^{126.1}$ for AES-128.
- \item Various side-channel attacks developed (power analysis, cache timing).\footnote{This is the main way to attack AES in practice. Side-channel attacks will be discussed in more depth later in the course.}
- \item Advances in meet-in-the-middle and related-key techniques.
- \end{itemize}
- \end{itemize}
- \end{column}
- \begin{column}{0.5\textwidth}
- \begin{itemize}[<+->]
- \item Despite these advances:
- \begin{itemize}[<+->]
- \item No practical attacks on full AES-128.
- \item Best attacks still require $\approx 2^{126}$ operations.
- \item At this complexity, attacks remain purely theoretical.
- \item Would require resources far exceeding global computing power.
- \end{itemize}
- \item Even quantum computers offer only modest advantage (Grover's algorithm reduces security to $2^{64}$ operations).\footnote{More on quantum computers and how they affect cryptography later in the course.}
- \end{itemize}
- \end{column}
- \end{columns}
+ \begin{columns}[c]
+ \begin{column}{0.5\textwidth}
+ \begin{itemize}[<+->]
+ \item AES has been heavily analyzed for over 20 years.
+ \item Best attacks against full AES have gradually improved:
+ \begin{itemize}[<+->]
+ \item 2011: Biclique attack (Bogdanov et al.) reduced complexity to $2^{126.1}$ for AES-128.
+ \item Various side-channel attacks developed (power analysis, cache timing).\footnote{This is the main way to attack AES in practice. Side-channel attacks will be discussed in more depth later in the course.}
+ \item Advances in meet-in-the-middle and related-key techniques.
+ \end{itemize}
+ \end{itemize}
+ \end{column}
+ \begin{column}{0.5\textwidth}
+ \begin{itemize}[<+->]
+ \item Despite these advances:
+ \begin{itemize}[<+->]
+ \item No practical attacks on full AES-128.
+ \item Best attacks still require $\approx 2^{126}$ operations.
+ \item At this complexity, attacks remain purely theoretical.
+ \item Would require resources far exceeding global computing power.
+ \end{itemize}
+ \item Even quantum computers offer only modest advantage (Grover's algorithm reduces security to $2^{64}$ operations).\footnote{More on quantum computers and how they affect cryptography later in the course.}
+ \end{itemize}
+ \end{column}
+ \end{columns}
\end{frame}
\begin{frame}[plain]
diff --git a/slides/1-5.tex b/slides/1-5.tex
index 1eb32bb..5292e34 100644
--- a/slides/1-5.tex
+++ b/slides/1-5.tex
@@ -640,7 +640,7 @@
\item This exposes an oracle that tells attackers: ``Does $\texttt{Dec}(K, C)$ have valid padding?''
\item Attackers can systematically exploit this to decrypt arbitrary ciphertexts.
\item Has led to major vulnerabilities in SSH and SSL/TLS protocols.
- \item Example: POODLE attack against SSL 3.0 affected millions of websites.\footnote{\url{https://appliedcryptography.page/papers/google-poodle.pdf}}
+ \item Example: POODLE attack against SSL 3.0 affected millions of websites.\footnote{\url{https://appliedcryptography.page/papers/\#google-poodle}}
\end{itemize}
\end{column}
\end{columns}
@@ -655,7 +655,7 @@
\item Response time reveals approximate numerical values inside $\texttt{Dec}(K, C)$.
\item Extremely subtle - even microsecond differences can leak information.
\item Successfully used to break older SSH and SSL/TLS implementations.
- \item Example: Lucky Thirteen attack against TLS revealed message contents through timing differences.\footnote{\url{https://appliedcryptography.page/papers/lucky-thirteen.pdf}}
+ \item Example: Lucky Thirteen attack against TLS revealed message contents through timing differences.\footnote{\url{https://appliedcryptography.page/papers/\#lucky-thirteen}}
\end{itemize}
\end{column}
\end{columns}
@@ -671,7 +671,7 @@
\item A valid gzip file (processed normally)
\item An invalid gzip file (error reported)
\end{itemize}
- \item This created an oracle revealing: ``Is $\texttt{Dec}(K, C)$ a valid gzip file?''\footnote{\url{https://appliedcryptography.page/papers/jhu-imessage.pdf}}
+ \item This created an oracle revealing: ``Is $\texttt{Dec}(K, C)$ a valid gzip file?''\footnote{\url{https://appliedcryptography.page/papers/\#jhu-imessage}}
\item Attackers who understood the gzip format could exploit this to:
\begin{itemize}
\item Silently recover private messages
@@ -1466,7 +1466,7 @@
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
\item \textbf{Key commitment}: a ciphertext should only decrypt to a valid plaintext under the key used to generate it.
- \item Most AEAD schemes (including AES-GCM) don't guarantee this property!\footnote{\url{https://appliedcryptography.page/papers/key-commitment.pdf}}
+ \item Most AEAD schemes (including AES-GCM) don't guarantee this property!\footnote{\url{https://appliedcryptography.page/papers/\#key-commitment}}
\item Attack scenario:
\begin{enumerate}
\item Attacker creates special ciphertext $C$.
diff --git a/slides/1-6.tex b/slides/1-6.tex
index c4e8ab0..116c0b2 100644
--- a/slides/1-6.tex
+++ b/slides/1-6.tex
@@ -541,7 +541,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item In 2017, Google and CWI Amsterdam researchers demonstrated the first practical collision for SHA-1.\footnote{\url{https://appliedcryptography.page/papers/shattered-sha1.pdf}}
+ \item In 2017, Google and CWI Amsterdam researchers demonstrated the first practical collision for SHA-1.\footnote{\url{https://appliedcryptography.page/papers/\#shattered-sha1}}
\item Created two different PDF files with identical SHA-1 hashes.
\item Required about 6,500 CPU years and 110 GPU years of computation.
\item Cost estimate: approximately \$110,000 using cloud computing.
@@ -907,7 +907,7 @@
\item Using less memory makes computation exponentially slower.
\end{itemize}
\item Even with custom hardware, attackers face similar costs to defenders.
- \item Proven to be maximally memory-hard!\footnote{\url{https://appliedcryptography.page/papers/scrypt-memory.pdf}}
+ \item Proven to be maximally memory-hard!\footnote{\url{https://appliedcryptography.page/papers/\#scrypt-memory}}
\end{itemize}
\end{column}
\end{columns}
@@ -1045,7 +1045,7 @@
\begin{itemize}
\item Researchers have constructed schemes that are:
\item Provably secure in the RO model, but,
- \item Provably insecure with any real hash function.\footnote{\url{https://appliedcryptography.page/papers/rom-methodology.pdf}}
+ \item Provably insecure with any real hash function.\footnote{\url{https://appliedcryptography.page/papers/\#rom-methodology}}
\end{itemize}
\end{itemize}
\end{column}
diff --git a/slides/1-7.tex b/slides/1-7.tex
index 3cf6cb6..e99b00b 100644
--- a/slides/1-7.tex
+++ b/slides/1-7.tex
@@ -627,7 +627,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Games proven NP-hard\footnote{\url{https://appliedcryptography.page/papers/nintendo-hard.pdf}}}:
+ \item \textbf{Games proven NP-hard\footnote{\url{https://appliedcryptography.page/papers/\#nintendo-hard}}}:
\begin{itemize}
\item Super Mario Bros. 1–3, The Lost Levels, Super Mario World
\item Donkey Kong Country 1–3
diff --git a/slides/1-8.tex b/slides/1-8.tex
index 8446377..146b65a 100644
--- a/slides/1-8.tex
+++ b/slides/1-8.tex
@@ -845,7 +845,7 @@
\end{itemize}
\item \textbf{Real-world example:} Found in TLS-ECDH implementations (2015).
\begin{itemize}
- \item Paper: ``Practical Invalid Curve Attacks on TLS-ECDH''\footnote{\url{https://appliedcryptography.page/papers/invalid-curve.pdf}}
+ \item Paper: ``Practical Invalid Curve Attacks on TLS-ECDH''\footnote{\url{https://appliedcryptography.page/papers/\#invalid-curve}}
\item Jager, Schwenk, and Somorovsky
\end{itemize}
\item \textbf{Prevention:} Always validate that points satisfy the correct curve equation.
diff --git a/slides/2-1.tex b/slides/2-1.tex
index 9ae5c60..b95d1af 100644
--- a/slides/2-1.tex
+++ b/slides/2-1.tex
@@ -1293,7 +1293,7 @@
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
\item \textbf{Target}: TLS's CBC (Cipher Block Chaining) mode with HMAC
- \item \textbf{The vulnerability}: Timing differences in MAC verification\footnote{\url{https://appliedcryptography.page/papers/lucky-thirteen.pdf}}
+ \item \textbf{The vulnerability}: Timing differences in MAC verification\footnote{\url{https://appliedcryptography.page/papers/\#lucky-thirteen}}
\begin{itemize}
\item TLS 1.0-1.2 used MAC-then-encrypt with CBC mode
\item Padding oracle attacks exploit timing differences
@@ -1363,7 +1363,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Full name}: Padding Oracle On Downgraded Legacy Encryption\footnote{\url{https://appliedcryptography.page/papers/google-poodle.pdf}}
+ \item \textbf{Full name}: Padding Oracle On Downgraded Legacy Encryption\footnote{\url{https://appliedcryptography.page/papers/\#google-poodle}}
\item \textbf{Target}: SSL 3.0 (ancient protocol from 1996)
\item \textbf{The setup}:
\begin{itemize}
@@ -1437,7 +1437,7 @@
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
\item \textbf{Discovered by}: Inria Prosecco team (future TLS 1.3 verifiers!)
- \item \textbf{Core problem}: TLS handshake can be \textbf{resumed} with different certificates\footnote{\url{https://appliedcryptography.page/papers/triple-handshakes.pdf}}
+ \item \textbf{Core problem}: TLS handshake can be \textbf{resumed} with different certificates\footnote{\url{https://appliedcryptography.page/papers/\#triple-handshakes}}
\begin{itemize}
\item Client connects to Server A, establishes session
\item Session can be resumed with Server B using different certificate
@@ -1503,7 +1503,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Not a protocol flaw}: Implementation bug in OpenSSL\footnote{\url{https://appliedcryptography.page/papers/matter-heartbleed.pdf}}
+ \item \textbf{Not a protocol flaw}: Implementation bug in OpenSSL\footnote{\url{https://appliedcryptography.page/papers/\#matter-heartbleed}}
\item \textbf{The vulnerability}: Buffer over-read in heartbeat extension
\begin{itemize}
\item Heartbeat: ``keep-alive'' mechanism for TLS
@@ -1602,7 +1602,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Research by}: Inria Prosecco team (again!)\footnote{\url{https://appliedcryptography.page/papers/smack-tls.pdf}}
+ \item \textbf{Research by}: Inria Prosecco team (again!)\footnote{\url{https://appliedcryptography.page/papers/\#smack-tls}}
\item \textbf{Two major attack classes discovered}:
\begin{itemize}
\item \textbf{SMACK}: State Machine AttaCKs
@@ -1803,7 +1803,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Research team}: 14 researchers from 10 institutions\footnote{\url{https://appliedcryptography.page/papers/imperfect-dh.pdf}}
+ \item \textbf{Research team}: 14 researchers from 10 institutions\footnote{\url{https://appliedcryptography.page/papers/\#imperfect-dh}}
\item \textbf{Target}: Diffie-Hellman key exchange in TLS
\item \textbf{Two main attacks}:
\begin{itemize}
@@ -1930,7 +1930,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Researchers}: Karthikeyan Bhargavan and Gaëtan Leurent (Inria)\footnote{\url{https://appliedcryptography.page/papers/inria-sweet32.pdf}}
+ \item \textbf{Researchers}: Karthikeyan Bhargavan and Gaëtan Leurent (Inria)\footnote{\url{https://appliedcryptography.page/papers/\#inria-sweet32}}
\item \textbf{Target}: 64-bit block ciphers (3DES, Blowfish)
\item \textbf{Core vulnerability}: Birthday paradox in block cipher usage
\begin{itemize}
@@ -2002,7 +2002,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{Researchers}: Karthikeyan Bhargavan and Gaëtan Leurent (Inria)\footnote{\url{https://appliedcryptography.page/papers/inria-collisions.pdf}}
+ \item \textbf{Researchers}: Karthikeyan Bhargavan and Gaëtan Leurent (Inria)\footnote{\url{https://appliedcryptography.page/papers/\#inria-collisions}}
\item \textbf{Novel attack class}: Hash collision attacks on protocol transcripts
\item \textbf{Core idea}:
\begin{itemize}
diff --git a/slides/2-2.tex b/slides/2-2.tex
index 54836f9..0756b82 100644
--- a/slides/2-2.tex
+++ b/slides/2-2.tex
@@ -292,7 +292,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{itemize}[<+->]
- \item \textbf{The Discovery:} Certain key patterns create predictable initial states\footnote{\url{https://appliedcryptography.page/papers/rc4-ksa.pdf}}
+ \item \textbf{The Discovery:} Certain key patterns create predictable initial states\footnote{\url{https://appliedcryptography.page/papers/\#rc4-ksa}}
\item \textbf{Weak Key Pattern:} Keys of the form $(K_1, K_2, \ldots, K_n, 3, 255, \ldots)$
\begin{itemize}[<+->]
\item When byte 3 of the key is 3, and byte 4 is 255
@@ -667,7 +667,7 @@
\begin{columns}[c]
\begin{column}{0.6\textwidth}
\begin{itemize}[<+->]
- \item \textbf{The discovery:} RC4's biases are exploitable in TLS:\footnote{\url{https://appliedcryptography.page/papers/rc4-tls.pdf}}
+ \item \textbf{The discovery:} RC4's biases are exploitable in TLS:\footnote{\url{https://appliedcryptography.page/papers/\#rc4-tls}}
\begin{itemize}[<+->]
\item First 256 bytes of keystream heavily biased
\item Certain byte positions more predictable than others
@@ -728,7 +728,7 @@
\item Took days or weeks to execute
\item Many dismissed it as theoretical
\end{itemize}
- \item \textbf{Insight:} Target password verifiers, not cookies\footnote{\url{https://appliedcryptography.page/papers/rc4-attacks.pdf}}
+ \item \textbf{Insight:} Target password verifiers, not cookies\footnote{\url{https://appliedcryptography.page/papers/\#rc4-attacks}}
\begin{itemize}[<+->]
\item Basic Authentication sends passwords in every request
\item IMAP/SMTP use similar repeated authentication
@@ -743,7 +743,7 @@
\item Exploit password character distributions
\item Use Mantin's ABSAB bias (positions 1-4)
\item Combine with dictionary attacks
- \item Other attack papers use similar techniques, including to break WPA-TKIP, a successor to WEP!\footnote{\url{https://appliedcryptography.page/papers/rc4-biases.pdf}}
+ \item Other attack papers use similar techniques, including to break WPA-TKIP, a successor to WEP!\footnote{\url{https://appliedcryptography.page/papers/\#rc4-biases}}
\end{itemize}
\end{itemize}
\end{column}
@@ -752,7 +752,7 @@
\begin{frame}{Mantin's ABSAB bias (2005)}
\begin{itemize}[<+->]
- \item \textbf{The discovery:} Certain digraph patterns repeat with anomalous frequency\footnote{\url{https://appliedcryptography.page/papers/rc4-absab.pdf}}
+ \item \textbf{The discovery:} Certain digraph patterns repeat with anomalous frequency\footnote{\url{https://appliedcryptography.page/papers/\#rc4-absab}}
\begin{itemize}[<+->]
\item Pattern: Two characters repeat after a gap (e.g., ABAB, ABCAB)
\item Occurs when value 1 is used to update index $j$ in RC4
diff --git a/slides/2-3.tex b/slides/2-3.tex
index b4e1bf0..b40491b 100644
--- a/slides/2-3.tex
+++ b/slides/2-3.tex
@@ -133,7 +133,7 @@
\begin{itemize}
\item \textbf{Usability nightmare}
\begin{itemize}
- \item ``Why Johnny Can't Encrypt'' (1999) - landmark usability study\footnote{\url{https://appliedcryptography.page/papers/johnny-cant.pdf}}
+ \item ``Why Johnny Can't Encrypt'' (1999) - landmark usability study\footnote{\url{https://appliedcryptography.page/papers/\#johnny-cant}}
\item Key management too complex for average users
\item Easy to make catastrophic mistakes
\end{itemize}
@@ -860,7 +860,7 @@
\begin{frame}{Enter HKDF: HMAC-based Key Derivation Function}
\begin{columns}[c]
\begin{column}{0.5\textwidth}
- \textbf{Motivated by real needs:}\footnote{\url{https://appliedcryptography.page/papers/hkdf-scheme.pdf}}
+ \textbf{Motivated by real needs:}\footnote{\url{https://appliedcryptography.page/papers/\#hkdf-scheme}}
\begin{itemize}
\item OTR, TLS, IPsec all needed KDFs
\item Each had ad-hoc solutions
@@ -1134,7 +1134,7 @@
\begin{frame}{Attacks on OTR version 2}
\begin{columns}
\begin{column}{0.5\textwidth}
- \textbf{Version Rollback Attack}\footnote{\url{https://appliedcryptography.page/papers/otr-analysis.pdf}}
+ \textbf{Version Rollback Attack}\footnote{\url{https://appliedcryptography.page/papers/\#otr-analysis}}
\begin{itemize}
\item Version negotiation happens before authentication
\item Attacker can force use of older, weaker version
@@ -1516,7 +1516,7 @@
\begin{columns}[c]
\begin{column}{1\textwidth}
\begin{center}
- \Large \textbf{The Promise and Reality of Post-Compromise Security}\footnote{\url{https://appliedcryptography.page/papers/pcs-impossibility.pdf}}
+ \Large \textbf{The Promise and Reality of Post-Compromise Security}\footnote{\url{https://appliedcryptography.page/papers/\#pcs-impossibility}}
\end{center}
\vspace{1em}
\begin{itemize}
diff --git a/website/index.html b/website/index.html
index 17119db..e8a5771 100755
--- a/website/index.html
+++ b/website/index.html
@@ -16,14 +16,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -189,60 +189,60 @@
- Felix Linker, Ralf Sasse and David Basin, A Formal Analysis of Apple’s iMessage PQ3 Protocol , USENIX Security Symposium, 2025.
- Mathy Vanhoef and Frank Piessens, All Your Biases Belong To Us: Breaking RC4 in WPA-TKIP and TLS , USENIX Security Symposium, 2015.
- Benjamin Beurdouche, Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Markulf Kohlweiss, Alfredo Pironti, Pierre-Yves Strub and Jean-Karim Zinzindohoué, A Messy State of the Union: Taming the Composite State Machines of TLS , IEEE Symposium on Security and Privacy, 2015.
- Martin R. Albrecht and Kenneth G. Paterson, Analysing Cryptography in the Wild: A Retrospective , IEEE Security & Privacy, 2024.
- Martin R. Albrecht, Lenka Mareková, Kenneth G. Paterson, Eyal Ronen and Igors Stepanovs, Analysis of the Telegram Key Exchange , IACR Eurocrypt, 2025.
- David Evans, Vladimir Kolesnikov and Mike Rosulek, A Pragmatic Introduction to Secure Multi-Party Computation , NOW Publishers, 2020.
- Christina Garman, Kenneth G. Paterson and Thyla Van der Merwe, Attacks Only Get Better: Password Recovery Attacks Against RC4 in TLS , USENIX Security Symposium, 2015.
- Nadim Kobeissi, Karthikeyan Bhargavan and Bruno Blanchet, Automated Verification for Secure Messaging Protocols and their Implementations: A Symbolic and Computational Approach , IEEE European Symposium on Security and Privacy, 2017.
- Théophile Wallez, A Verification Framework for Secure Group Messaging , PSL Université Paris, 2025.
- Greg Aloupis, Erik D. Demaine, Alan Guo and Giovanni Viglietta, Classic Nintendo Games are (Computationally) Hard , ACM Theoretical Computer Science, 2015.
- Platon Kotzias, Abbas Razaghpanah, Johanna Amann, Kenneth G. Paterson, Narseo Vallina-Rodriguez and Juan Caballero, Coming of Age: A Longitudinal Study of TLS Deployment , ACM IMC, 2018.
- Hugo Krawczyk, Cryptographic Extraction and Key Derivation: The HKDF Scheme , IACR Crypto, 2010.
- Christina Garman, Matthew Green, Gabriel Kaptchuk, Ian Miers and Michael Rushanan, Dancing on the Lip of the Volcano: Chosen Ciphertext Attacks on Apple iMessage , USENIX Security Symposium, 2016.
- Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig and Eric Wustrow, Elliptic Curve Cryptography in Practice , Financial Cryptography and Data Security, 2014.
- Joseph Bonneau and Andrew Morrison, Finite-State Security Analysis of OTR Version 2 , Stanford Computer Security Laboratory, 2006.
- Martin R. Albrecht, Benjamin Dowling and Daniel Jones, Formal Analysis of Multi-Device Group Messaging in WhatsApp , IACR Eurocrypt, 2025.
- Cas Cremers, Charlie Jacomme and Aurora Naska, Formal Analysis of Session-Handling in Secure Messaging: Lifting Security from Sessions to Conversations , USENIX Security Symposium, 2023.
- Karthikeyan Bhargavan, Charlie Jacomme, Franziskus Kiefer and Rolfe Schmidt, Formal Verification of the PQXDH Post-Quantum Key Agreement Protocol for End-to-End Secure Messaging , USENIX Security Symposium, 2024.
- Ange Albertini, Thai Duong, Shay Gueron, Stefan Kölbl, Atul Luykx, and Sophie Schmieg, How to Abuse and Fix Authenticated Encryption Without Key Commitment , USENIX Security Symposium, 2022.
- Michael Luby and Charles Rackoff, How To Construct Pseudorandom Permutations From Pseudorandom Functions , Society for Industrial and Applied Mathematics, 1988.
+ Felix Linker, Ralf Sasse and David Basin, A Formal Analysis of Apple’s iMessage PQ3 Protocol , USENIX Security Symposium, 2025.
+ Mathy Vanhoef and Frank Piessens, All Your Biases Belong To Us: Breaking RC4 in WPA-TKIP and TLS , USENIX Security Symposium, 2015.
+ Benjamin Beurdouche, Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Markulf Kohlweiss, Alfredo Pironti, Pierre-Yves Strub and Jean-Karim Zinzindohoué, A Messy State of the Union: Taming the Composite State Machines of TLS , IEEE Symposium on Security and Privacy, 2015.
+ Martin R. Albrecht and Kenneth G. Paterson, Analysing Cryptography in the Wild: A Retrospective , IEEE Security & Privacy, 2024.
+ Martin R. Albrecht, Lenka Mareková, Kenneth G. Paterson, Eyal Ronen and Igors Stepanovs, Analysis of the Telegram Key Exchange , IACR Eurocrypt, 2025.
+ David Evans, Vladimir Kolesnikov and Mike Rosulek, A Pragmatic Introduction to Secure Multi-Party Computation , NOW Publishers, 2020.
+ Christina Garman, Kenneth G. Paterson and Thyla Van der Merwe, Attacks Only Get Better: Password Recovery Attacks Against RC4 in TLS , USENIX Security Symposium, 2015.
+ Nadim Kobeissi, Karthikeyan Bhargavan and Bruno Blanchet, Automated Verification for Secure Messaging Protocols and their Implementations: A Symbolic and Computational Approach , IEEE European Symposium on Security and Privacy, 2017.
+ Théophile Wallez, A Verification Framework for Secure Group Messaging , PSL Université Paris, 2025.
+ Greg Aloupis, Erik D. Demaine, Alan Guo and Giovanni Viglietta, Classic Nintendo Games are (Computationally) Hard , ACM Theoretical Computer Science, 2015.
+ Platon Kotzias, Abbas Razaghpanah, Johanna Amann, Kenneth G. Paterson, Narseo Vallina-Rodriguez and Juan Caballero, Coming of Age: A Longitudinal Study of TLS Deployment , ACM IMC, 2018.
+ Hugo Krawczyk, Cryptographic Extraction and Key Derivation: The HKDF Scheme , IACR Crypto, 2010.
+ Christina Garman, Matthew Green, Gabriel Kaptchuk, Ian Miers and Michael Rushanan, Dancing on the Lip of the Volcano: Chosen Ciphertext Attacks on Apple iMessage , USENIX Security Symposium, 2016.
+ Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig and Eric Wustrow, Elliptic Curve Cryptography in Practice , Financial Cryptography and Data Security, 2014.
+ Joseph Bonneau and Andrew Morrison, Finite-State Security Analysis of OTR Version 2 , Stanford Computer Security Laboratory, 2006.
+ Martin R. Albrecht, Benjamin Dowling and Daniel Jones, Formal Analysis of Multi-Device Group Messaging in WhatsApp , IACR Eurocrypt, 2025.
+ Cas Cremers, Charlie Jacomme and Aurora Naska, Formal Analysis of Session-Handling in Secure Messaging: Lifting Security from Sessions to Conversations , USENIX Security Symposium, 2023.
+ Karthikeyan Bhargavan, Charlie Jacomme, Franziskus Kiefer and Rolfe Schmidt, Formal Verification of the PQXDH Post-Quantum Key Agreement Protocol for End-to-End Secure Messaging , USENIX Security Symposium, 2024.
+ Ange Albertini, Thai Duong, Shay Gueron, Stefan Kölbl, Atul Luykx, and Sophie Schmieg, How to Abuse and Fix Authenticated Encryption Without Key Commitment , USENIX Security Symposium, 2022.
+ Michael Luby and Charles Rackoff, How To Construct Pseudorandom Permutations From Pseudorandom Functions , Society for Industrial and Applied Mathematics, 1988.
Nick Sullivan, Killing RC4: The Long Goodbye , Cloudflare Blog, 2014.
- David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin and Paul Zimmermann, Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice , ACM CCS, 2015.
- Cas Cremers, Niklas Medinger and Aurora Naska, Impossibility Results for Post-Compromise Security in Real-World Communication Systems , IEEE Symposium on Security and Privacy, 2025.
- Chris Alexander and Ian Goldberg, Improved User Authentication in Off-The-Record Messaging , Workshop on Privacy in the Electronic Society, 2007.
+ David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin and Paul Zimmermann, Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice , ACM CCS, 2015.
+ Cas Cremers, Niklas Medinger and Aurora Naska, Impossibility Results for Post-Compromise Security in Real-World Communication Systems , IEEE Symposium on Security and Privacy, 2025.
+ Chris Alexander and Ian Goldberg, Improved User Authentication in Off-The-Record Messaging , Workshop on Privacy in the Electronic Society, 2007.
Henry de Valence, It's 255:19AM. Do you know what your validation criteria are? , hdevalence.ca, 2020.
- Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
- Paul Rösler, Christian Mainka and Jörg Schwenk, More is Less: On the End-to-End Security of Group Chats in Signal, WhatsApp, and Threema , IEEE European Symposium on Security and Privacy, 2018.
- Nikita Borisov, Ian Goldberg and Eric Brewer, Off-the-Record Communication, or, Why Not To Use PGP , Workshop on Privacy in the Electronic Society, 2004.
- Karthikeyan Bhargavan and Gaëtan Leurent, On the Practical (In-)Security of 64-bit Block Ciphers , ACM CCS, 2016.
- Nadhem AlFardan, Daniel J. Bernstein, Kenneth G. Paterson, Bertram Poettering and Jacob C. N. Schuldt, On the Security of RC4 in TLS , USENIX Security Symposium, 2013.
- Tibor Jager, Jörg Schwenk and Juraj Somorovsky, Practical Invalid Curve Attacks on TLS-ECDH , ESORICS, 2015.
- Itsik MantinPredicting and Distinguishing Attacks on RC4 Keystream Generator , IACR Eurocrypt, 2005.
- Cas Cremers and Dennis Jackson, Prime, Order Please! Revisiting Small Subgroup and Invalid Curve Attacks on Protocols using Diffie-Hellman , IEEE CSF, 2019.
- Project Everest Team, Project Everest: Perspectives from Developing Industrial-Grade High-Assurance Software , Microsoft Research, 2025.
+ Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
+ Paul Rösler, Christian Mainka and Jörg Schwenk, More is Less: On the End-to-End Security of Group Chats in Signal, WhatsApp, and Threema , IEEE European Symposium on Security and Privacy, 2018.
+ Nikita Borisov, Ian Goldberg and Eric Brewer, Off-the-Record Communication, or, Why Not To Use PGP , Workshop on Privacy in the Electronic Society, 2004.
+ Karthikeyan Bhargavan and Gaëtan Leurent, On the Practical (In-)Security of 64-bit Block Ciphers , ACM CCS, 2016.
+ Nadhem AlFardan, Daniel J. Bernstein, Kenneth G. Paterson, Bertram Poettering and Jacob C. N. Schuldt, On the Security of RC4 in TLS , USENIX Security Symposium, 2013.
+ Tibor Jager, Jörg Schwenk and Juraj Somorovsky, Practical Invalid Curve Attacks on TLS-ECDH , ESORICS, 2015.
+ Itsik MantinPredicting and Distinguishing Attacks on RC4 Keystream Generator , IACR Eurocrypt, 2005.
+ Cas Cremers and Dennis Jackson, Prime, Order Please! Revisiting Small Subgroup and Invalid Curve Attacks on Protocols using Diffie-Hellman , IEEE CSF, 2019.
+ Project Everest Team, Project Everest: Perspectives from Developing Industrial-Grade High-Assurance Software , Microsoft Research, 2025.
Matthew McPherrin, Reflections on a Year of Sunlight , Let's Encrypt Blog, 2025.
Daniel J. Bernstein and Tanja Lange, SafeCurves: choosing safe curves for elliptic-curve cryptography , SafeCurves, 2017.
- Joël Alwen, Binyi Chen, Krzysztof Pietrzak, Leonid Reyzin and Stefano Tessaro, Scrypt Is Maximally Memory-Hard , IACR Eurocrypt, 2017.
- Hugo Krawczyk, SIGMA: the 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and its Use in the IKE Protocols , IACR Crypto, 2003.
- Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography , IEEE Symposium on Security and Privacy, 2021.
+ Joël Alwen, Binyi Chen, Krzysztof Pietrzak, Leonid Reyzin and Stefano Tessaro, Scrypt Is Maximally Memory-Hard , IACR Eurocrypt, 2017.
+ Hugo Krawczyk, SIGMA: the 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and its Use in the IKE Protocols , IACR Crypto, 2003.
+ Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography , IEEE Symposium on Security and Privacy, 2021.
Tarek Galal, The Curves of ZoKrates , tgalal.com, 2025.
- Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini and Yarik Markov, The First Collision for Full SHA-1 , IACR Crypto, 2017.
- Zakir Durumeric, James Kasten, David Adrian, J. Alex Halderman, Michael Bailey, Frank Li, Nicholas Weaver, Johanna Amann, Jethro Beekman, Mathias Payer and Vern Paxson, The Matter of Heartbleed , ACM IMC, 2014.
- Ran Canetti, Oded Goldreich and Shai Halevi, The Random Oracle Model Methodology, Revisited , Journal of the ACM, 2004.
- Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
- Nicolas Gailly, Kelsey Melissaris and Yolan Romailler, tlock: Practical Timelock Encryption from Threshold BLS , IACR ePrint Archive, 2023.
- Mark Russinovich, Manuel Costa, Cédric Fournet, David Chisnall, Antoine Delignat-Lavaud, Sylvan Clebsch, Kapil Vaswani and Vikas Bhatia, Toward Confidential Cloud Computing , Communications of the ACM, 2021.
- Karthikeyan Bhargavan and Gaëtan Leurent, Transcript Collision Attacks: Breaking Authentication in TLS, IKE and SSH , Network and Distributed Systems Security Symposium, 2016.
- Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Alfredo Pironti and Pierre-Yves Strub, Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS , IEEE Symposium on Security and Privacy, 2014.
- Yevgeniy Dodis, Daniel Jost, Shuichi Katsumata, Thomas Prest and Rolfe Schmidt, Triple Ratchet: A Bandwidth Efficient Hybrid-Secure Signal Protocol , IACR Eurocrypt, 2025.
- Karthikeyan Bhargavan, Bruno Blanchet and Nadim Kobeissi, Verified Models and Reference Implementations for the TLS 1.3 Standard Candidate , IEEE Symposium on Security and Privacy, 2017.
- Scott Fluhrer, Istik Mantin and Adi Shamir, Weaknesses in the Key Scheduling Algorithm for RC4 , Selected Areas in Cryptography, 2001.
- Alma Whitten and J. D. Tygar, Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0 , Security and Usability: Designing Secure Systems that People Can Use, O'Reilly, 2005.
- Scott Ruoti, Jeff Andersen, Daniel Zappala and Kent Seamons, Why Johnny Still, Still Can't Encrypt: Evaluating the Usability of a Modern PGP Client , arXiv, 2015.
- Manuel Barbosa, Deirdre Connolly, João Diogo Duarte, Aaron Kaiser, Peter Schwabe, Karolin Varner and Baas Westerban, X-Wing: The Hybrid KEM You’ve Been Looking For , IACR Communications in Cryptology, 2024.
+ Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini and Yarik Markov, The First Collision for Full SHA-1 , IACR Crypto, 2017.
+ Zakir Durumeric, James Kasten, David Adrian, J. Alex Halderman, Michael Bailey, Frank Li, Nicholas Weaver, Johanna Amann, Jethro Beekman, Mathias Payer and Vern Paxson, The Matter of Heartbleed , ACM IMC, 2014.
+ Ran Canetti, Oded Goldreich and Shai Halevi, The Random Oracle Model Methodology, Revisited , Journal of the ACM, 2004.
+ Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
+ Nicolas Gailly, Kelsey Melissaris and Yolan Romailler, tlock: Practical Timelock Encryption from Threshold BLS , IACR ePrint Archive, 2023.
+ Mark Russinovich, Manuel Costa, Cédric Fournet, David Chisnall, Antoine Delignat-Lavaud, Sylvan Clebsch, Kapil Vaswani and Vikas Bhatia, Toward Confidential Cloud Computing , Communications of the ACM, 2021.
+ Karthikeyan Bhargavan and Gaëtan Leurent, Transcript Collision Attacks: Breaking Authentication in TLS, IKE and SSH , Network and Distributed Systems Security Symposium, 2016.
+ Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Alfredo Pironti and Pierre-Yves Strub, Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS , IEEE Symposium on Security and Privacy, 2014.
+ Yevgeniy Dodis, Daniel Jost, Shuichi Katsumata, Thomas Prest and Rolfe Schmidt, Triple Ratchet: A Bandwidth Efficient Hybrid-Secure Signal Protocol , IACR Eurocrypt, 2025.
+ Karthikeyan Bhargavan, Bruno Blanchet and Nadim Kobeissi, Verified Models and Reference Implementations for the TLS 1.3 Standard Candidate , IEEE Symposium on Security and Privacy, 2017.
+ Scott Fluhrer, Istik Mantin and Adi Shamir, Weaknesses in the Key Scheduling Algorithm for RC4 , Selected Areas in Cryptography, 2001.
+ Alma Whitten and J. D. Tygar, Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0 , Security and Usability: Designing Secure Systems that People Can Use, O'Reilly, 2005.
+ Scott Ruoti, Jeff Andersen, Daniel Zappala and Kent Seamons, Why Johnny Still, Still Can't Encrypt: Evaluating the Usability of a Modern PGP Client , arXiv, 2015.
+ Manuel Barbosa, Deirdre Connolly, João Diogo Duarte, Aaron Kaiser, Peter Schwabe, Karolin Varner and Baas Westerban, X-Wing: The Hybrid KEM You’ve Been Looking For , IACR Communications in Cryptology, 2024.
More to be added soon!
@@ -281,7 +281,7 @@
- A PDF copy of the Fall 2025 syllabus is available.
+ A PDF copy of the Fall 2025 syllabus is available.
@@ -296,7 +296,7 @@
-
Slides
+
Slides
Topic 1.1
Introduction
This introduction establishes the foundation for the entire course by covering the scope, objectives, and structure of applied cryptography. We'll discuss key themes that will recur throughout the semester, including the balance between theory and practice, the importance of formal security definitions, and the evolution of cryptographic thinking. Students will gain a clear understanding of what to expect from the course and how the various topics connect to form a coherent framework for secure system design.
@@ -309,7 +309,7 @@
-
Slides
+
Slides
Topic 1.2
One-Time Pad & The Provable Security Mindset
This topic introduces the concept of perfect secrecy through the One-Time Pad (OTP) encryption system and explores its mathematical proof of unconditional security. While theoretically unbreakable, we'll examine the severe practical limitations that make OTP challenging to deploy in real-world systems, including key generation, distribution, and management problems. The topic then transitions to Kerckhoff's fundamental principle—that a cryptosystem should remain secure even if everything about the system, except the key, is public knowledge. We'll discuss how this principle has shaped modern cryptographic design philosophy and why security through obscurity fails as a long-term strategy for protecting sensitive information.
@@ -323,7 +323,7 @@
-
Slides
+
Slides
Topic 1.3
Provable Security & Computational Cryptography
This topic begins by delving into the rigorous mathematical frameworks that allow cryptographers to provide formal security guarantees for cryptographic schemes. We'll examine how precise definitions of security properties create a foundation for meaningful analysis, and explore various adversarial models that capture different threat scenarios. The concept of reduction—proving that breaking a scheme is at least as hard as solving some well-studied mathematical problem—will be thoroughly explored. We then transition to modern computational cryptography, moving from unconditional security to a more practical approach where security is defined against computationally bounded adversaries. Students will learn about indistinguishability as a fundamental security concept, the bad-event technique for security proofs, and birthday probabilities in cryptographic attacks. The session provides essential mathematical foundations for understanding modern cryptographic security, including quantitative intuition about large numbers (like 2128 ) and tiny probabilities (like 2-80 ) that define practical security boundaries, preparing students for subsequent topics in pseudorandomness.
@@ -337,7 +337,7 @@
-
Slides
+
Slides
Topic 1.4
Pseudorandomness
This topic explores three fundamental pseudorandom primitives that enable practical cryptography. Pseudorandom generators (PRGs) solve one-time pad's key length limitation by expanding short seeds into longer outputs indistinguishable from random. Pseudorandom functions (PRFs) extend this by creating massive virtual dictionaries mapping inputs to pseudorandom outputs, allowing parties with a shared secret to derive unlimited pseudorandom data. Pseudorandom permutations (PRPs), also called block ciphers, provide both forward and inverse operations indistinguishable from random permutations. We'll examine key constructions including GGM (building PRFs from PRGs), the Feistel network (building invertible PRPs from non-invertible PRFs), and the PRF-PRP switching lemma that enables interchangeability in security proofs. Throughout, we'll emphasize crucial security principles like the PRF "Golden Rule" of preventing input repetition.
@@ -350,13 +350,13 @@
Optional Readings
-
Slides
+
Slides
Topic 1.5
Chosen-Plaintext & Chosen-Ciphertext Attacks
This topic explores advanced security models for symmetric-key encryption, beginning with chosen-plaintext attack (CPA) security, where ciphertexts must be indistinguishable from random strings. We'll examine why deterministic encryption cannot achieve this security level and explore solutions including randomized PRF-based schemes and block cipher modes like CBC and CTR, while explaining why ECB mode remains fundamentally insecure. The topic then advances to chosen-ciphertext attacks (CCA), where adversaries can decrypt chosen ciphertexts, demonstrating how even CPA-secure schemes like CTR mode remain vulnerable due to their malleability. We'll analyze practical format-oracle attacks that exploit information leakage during decryption to recover entire plaintexts, and examine how preventing adversaries from creating valid modified ciphertexts is essential for achieving comprehensive CCA security in real-world systems.
@@ -368,16 +368,16 @@
Optional Readings
- Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
- Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
- Christina Garman, Matthew Green, Gabriel Kaptchuk, Ian Miers and Michael Rushanan, Dancing on the Lip of the Volcano: Chosen Ciphertext Attacks on Apple iMessage , USENIX Security Symposium, 2016.
- Ange Albertini, Thai Duong, Shay Gueron, Stefan Kölbl, Atul Luykx, and Sophie Schmieg, How to Abuse and Fix Authenticated Encryption Without Key Commitment , USENIX Security Symposium, 2022.
+ Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
+ Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
+ Christina Garman, Matthew Green, Gabriel Kaptchuk, Ian Miers and Michael Rushanan, Dancing on the Lip of the Volcano: Chosen Ciphertext Attacks on Apple iMessage , USENIX Security Symposium, 2016.
+ Ange Albertini, Thai Duong, Shay Gueron, Stefan Kölbl, Atul Luykx, and Sophie Schmieg, How to Abuse and Fix Authenticated Encryption Without Key Commitment , USENIX Security Symposium, 2022.
-
Slides
+
Slides
Topic 1.6
Collision-Resistant Hash Functions
This topic explores collision-resistant hash functions, cryptographic primitives that convert arbitrary-length inputs to fixed-length outputs while making it computationally infeasible to find colliding inputs. We'll examine three essential properties—collision resistance, preimage resistance, and second preimage resistance—while exploring practical applications in password storage, data integrity verification, and proof-of-work systems. The topic introduces the counterintuitive birthday paradox, demonstrating why collisions can be found after approximately square-root-many attempts rather than brute force. We'll survey hash function evolution from broken algorithms like MD5 and SHA-1 to modern standards like SHA-2, SHA-3, and BLAKE3, while analyzing vulnerabilities including precomputation attacks using rainbow tables and length extension weaknesses in Merkle–Damgård constructions. The topic covers critical defensive techniques including properly salting hashes and implementing specialized password hashing algorithms like PBKDF2 and memory-hard functions such as Scrypt, which resist hardware acceleration attacks by requiring significant memory resources, providing comprehensive guidance for secure hash function implementation in real-world systems.
@@ -389,14 +389,14 @@
Optional Readings
- Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini and Yarik Markov, The First Collision for Full SHA-1 , IACR Crypto, 2017.
- Joël Alwen, Binyi Chen, Krzysztof Pietrzak, Leonid Reyzin and Stefano Tessaro, Scrypt Is Maximally Memory-Hard , IACR Eurocrypt, 2017.
- Ran Canetti, Oded Goldreich and Shai Halevi, The Random Oracle Model Methodology, Revisited , Journal of the ACM, 2004.
+ Marc Stevens, Elie Bursztein, Pierre Karpman, Ange Albertini and Yarik Markov, The First Collision for Full SHA-1 , IACR Crypto, 2017.
+ Joël Alwen, Binyi Chen, Krzysztof Pietrzak, Leonid Reyzin and Stefano Tessaro, Scrypt Is Maximally Memory-Hard , IACR Eurocrypt, 2017.
+ Ran Canetti, Oded Goldreich and Shai Halevi, The Random Oracle Model Methodology, Revisited , Journal of the ACM, 2004.
-
Slides
+
Slides
Topic 1.7
Hard Problems & Diffie-Hellman
This topic explores computational hardness problems that form the cornerstone of modern public-key cryptography, with particular focus on the discrete logarithm problem that underpins Diffie-Hellman key exchange. We'll examine how complexity theory provides a framework for classifying problems based on their computational difficulty, covering fundamental complexity classes including P, NP, and the famous unsolved P vs. NP problem. The topic then investigates the discrete logarithm problem in detail, analyzing its computational complexity and known algorithms, before exploring how this hard problem enables the revolutionary Diffie-Hellman protocol that allows two parties to establish a shared secret over an insecure channel. We'll examine the mathematical foundations of DH using modular exponentiation in prime fields, the computational hardness assumptions (CDH and DDH) that underpin its security, and protocol variants including anonymous and authenticated DH. The topic concludes by analyzing practical implementation considerations, security pitfalls, and how theoretical hardness assumptions translate into real-world cryptographic security.
@@ -408,13 +408,13 @@
Optional Readings
- Greg Aloupis, Erik D. Demaine, Alan Guo and Giovanni Viglietta, Classic Nintendo Games are (Computationally) Hard , ACM Theoretical Computer Science, 2015.
+ Greg Aloupis, Erik D. Demaine, Alan Guo and Giovanni Viglietta, Classic Nintendo Games are (Computationally) Hard , ACM Theoretical Computer Science, 2015.
-
Slides
+
Slides
Topic 1.8
Elliptic Curves & Digital Signatures
This topic explores elliptic curve cryptography (ECC), an approach that provides stronger security with smaller keys than traditional cryptosystems like RSA. We'll examine the mathematical foundations of elliptic curves and their group structure supporting point addition and scalar multiplication operations. The topic covers the elliptic curve discrete logarithm problem (ECDLP) that underpins ECC's security, and how it enables efficient implementations of key exchange (ECDH) and digital signatures (ECDSA and EdDSA/Ed25519). We'll analyze the advantages of ECC, including faster signing operations and significantly shorter keys and signatures compared to RSA, while examining critical implementation considerations that affect security. The topic concludes with guidance on selecting appropriate curves, comparing standardized options like NIST curves and Curve25519, and exploring potential vulnerabilities including invalid curve attacks, randomness failures, and interoperability challenges in modern ECC deployments.
@@ -426,9 +426,9 @@
Optional Readings
Daniel J. Bernstein and Tanja Lange, SafeCurves: choosing safe curves for elliptic-curve cryptography , SafeCurves, 2017.
- Tibor Jager, Jörg Schwenk and Juraj Somorovsky, Practical Invalid Curve Attacks on TLS-ECDH , ESORICS, 2015.
+ Tibor Jager, Jörg Schwenk and Juraj Somorovsky, Practical Invalid Curve Attacks on TLS-ECDH , ESORICS, 2015.
Henry de Valence, It's 255:19AM. Do you know what your validation criteria are? , hdevalence.ca, 2020.
- Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig and Eric Wustrow, Elliptic Curve Cryptography in Practice , Financial Cryptography and Data Security, 2014.
+ Joppe W. Bos, J. Alex Halderman, Nadia Heninger, Jonathan Moore, Michael Naehrig and Eric Wustrow, Elliptic Curve Cryptography in Practice , Financial Cryptography and Data Security, 2014.
@@ -446,7 +446,7 @@
-
Slides
+
Slides
Topic 2.1
Transport Layer Security
This topic examines the Transport Layer Security (TLS) protocol, the backbone of secure communication on the internet that secures billions of connections daily. We'll explore the evolution from SSL to modern TLS 1.3, analyzing the protocol architecture, handshake process, and the cryptographic primitives deployed at each stage. The session covers key exchange mechanisms, authentication methods, and the cipher suites that provide confidentiality and integrity protections. Students will learn about certificate validation, trust models, and the public key infrastructure (PKI) that underpins TLS security. We'll also investigate significant vulnerabilities that have affected TLS implementations throughout its history, including FREAK, Logjam, Heartbleed, and POODLE, analyzing how these vulnerabilities arose and the mitigations developed in response. The topic concludes with practical deployment considerations, performance optimizations like session resumption and 0-RTT, and the security trade-offs encountered when configuring TLS in production environments.
@@ -458,20 +458,20 @@
Optional Readings
Matthew McPherrin, Reflections on a Year of Sunlight , Let's Encrypt Blog, 2025.
- Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
- Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
- David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin and Paul Zimmermann, Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice , ACM CCS, 2015.
- Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Alfredo Pironti and Pierre-Yves Strub, Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS , IEEE Symposium on Security and Privacy, 2014.
- Benjamin Beurdouche, Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Markulf Kohlweiss, Alfredo Pironti, Pierre-Yves Strub and Jean-Karim Zinzindohoué, A Messy State of the Union: Taming the Composite State Machines of TLS , IEEE Symposium on Security and Privacy, 2015.
- Karthikeyan Bhargavan and Gaëtan Leurent, On the Practical (In-)Security of 64-bit Block Ciphers , ACM CCS, 2016.
- Karthikeyan Bhargavan and Gaëtan Leurent, Transcript Collision Attacks: Breaking Authentication in TLS, IKE and SSH , Network and Distributed Systems Security Symposium, 2016.
- Zakir Durumeric, James Kasten, David Adrian, J. Alex Halderman, Michael Bailey, Frank Li, Nicholas Weaver, Johanna Amann, Jethro Beekman, Mathias Payer and Vern Paxson, The Matter of Heartbleed , ACM IMC, 2014.
+ Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
+ Nadhem J. Alfardan and Kenneth G. Paterson, Lucky Thirteen: Breaking the TLS and DTLS Record Protocols , IEEE Symposium on Security and Privacy, 2013.
+ David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelin and Paul Zimmermann, Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice , ACM CCS, 2015.
+ Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Alfredo Pironti and Pierre-Yves Strub, Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS , IEEE Symposium on Security and Privacy, 2014.
+ Benjamin Beurdouche, Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cédric Fournet, Markulf Kohlweiss, Alfredo Pironti, Pierre-Yves Strub and Jean-Karim Zinzindohoué, A Messy State of the Union: Taming the Composite State Machines of TLS , IEEE Symposium on Security and Privacy, 2015.
+ Karthikeyan Bhargavan and Gaëtan Leurent, On the Practical (In-)Security of 64-bit Block Ciphers , ACM CCS, 2016.
+ Karthikeyan Bhargavan and Gaëtan Leurent, Transcript Collision Attacks: Breaking Authentication in TLS, IKE and SSH , Network and Distributed Systems Security Symposium, 2016.
+ Zakir Durumeric, James Kasten, David Adrian, J. Alex Halderman, Michael Bailey, Frank Li, Nicholas Weaver, Johanna Amann, Jethro Beekman, Mathias Payer and Vern Paxson, The Matter of Heartbleed , ACM IMC, 2014.
-
Slides
+
Slides
Topic 2.2
The Story of RC4
This topic presents a biographical narrative of RC4 (Rivest Cipher 4), tracing its remarkable journey from promising youth to eventual downfall in cryptographic history. We'll examine RC4's birth as a proprietary stream cipher at RSA Security in 1987, its meteoric rise to become the most widely deployed stream cipher in the world, and its golden era powering protocols like WEP, SSL, and TLS due to its simplicity and performance advantages. The topic then chronicles RC4's gradual decline as researchers uncovered a series of increasingly devastating weaknesses, starting with the 2001 Fluhrer-Mantin-Shamir attack on WEP, through the 2013 discovery of extensive biases in RC4-generated keystreams that enabled practical attacks against TLS, culminating in the 2015 "Bar Mitzvah" and RC4 NOMORE attacks that could recover passwords and other sensitive information from encrypted connections. We'll analyze how the security community responded to these revelations, including browser vendors' gradual restriction of RC4 ciphersuites and the IETF's eventual formal prohibition of RC4 in TLS in 2015, while drawing broader lessons about cryptographic lifecycle management, the importance of formal security analysis, and how the story of RC4 exemplifies both the evolution of cryptanalytic techniques and the challenges of maintaining backward compatibility in security protocols.
@@ -482,20 +482,20 @@
Optional Readings
- Scott Fluhrer, Istik Mantin and Adi Shamir, Weaknesses in the Key Scheduling Algorithm for RC4 , Selected Areas in Cryptography, 2001.
- Itsik MantinPredicting and Distinguishing Attacks on RC4 Keystream Generator , IACR Eurocrypt, 2005.
- Platon Kotzias, Abbas Razaghpanah, Johanna Amann, Kenneth G. Paterson, Narseo Vallina-Rodriguez and Juan Caballero, Coming of Age: A Longitudinal Study of TLS Deployment , ACM IMC, 2018.
- Nadhem AlFardan, Daniel J. Bernstein, Kenneth G. Paterson, Bertram Poettering and Jacob C. N. Schuldt, On the Security of RC4 in TLS , USENIX Security Symposium, 2013.
- Christina Garman, Kenneth G. Paterson and Thyla Van der Merwe, Attacks Only Get Better: Password Recovery Attacks Against RC4 in TLS , USENIX Security Symposium, 2015.
- Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
+ Scott Fluhrer, Istik Mantin and Adi Shamir, Weaknesses in the Key Scheduling Algorithm for RC4 , Selected Areas in Cryptography, 2001.
+ Itsik MantinPredicting and Distinguishing Attacks on RC4 Keystream Generator , IACR Eurocrypt, 2005.
+ Platon Kotzias, Abbas Razaghpanah, Johanna Amann, Kenneth G. Paterson, Narseo Vallina-Rodriguez and Juan Caballero, Coming of Age: A Longitudinal Study of TLS Deployment , ACM IMC, 2018.
+ Nadhem AlFardan, Daniel J. Bernstein, Kenneth G. Paterson, Bertram Poettering and Jacob C. N. Schuldt, On the Security of RC4 in TLS , USENIX Security Symposium, 2013.
+ Christina Garman, Kenneth G. Paterson and Thyla Van der Merwe, Attacks Only Get Better: Password Recovery Attacks Against RC4 in TLS , USENIX Security Symposium, 2015.
+ Bodo Möller, Thai Duong and Krzysztof Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback , Google, 2014.
Nick Sullivan, Killing RC4: The Long Goodbye , Cloudflare Blog, 2014.
- Mathy Vanhoef and Frank Piessens, All Your Biases Belong To Us: Breaking RC4 in WPA-TKIP and TLS , USENIX Security Symposium, 2015.
+ Mathy Vanhoef and Frank Piessens, All Your Biases Belong To Us: Breaking RC4 in WPA-TKIP and TLS , USENIX Security Symposium, 2015.
-
Slides
+
Slides
Topic 2.3
Secure Messaging
This topic traces the evolution of secure messaging from early failures to modern protocols, examining how cryptographic innovation has shaped private communication. We begin with PGP's usability challenges and fundamental limitations, understanding why "Johnny Can't Encrypt" despite decades of effort. The topic then explores Off-the-Record (OTR) messaging's revolutionary features—forward secrecy through ephemeral keys, deniable authentication via MACs instead of signatures, and automatic key exchange—demonstrating how synchronous protocols solved many of PGP's problems. We dive deep into authenticated key exchange protocols like SIGMA, examining how they prevent man-in-the-middle attacks while maintaining identity protection. The discussion covers proper key derivation functions (HKDF) for deriving multiple keys from shared secrets, addressing the shortcomings of ad-hoc approaches. We then transition to Signal's asynchronous messaging architecture, analyzing X3DH key exchange and the Double Ratchet's elegant combination of symmetric and Diffie-Hellman ratcheting. The topic critically examines post-compromise security's promises versus reality, revealing through formal analysis why perfect healing is impossible in practical systems that must handle state loss. We also contrast Signal's approach with alternatives like Telegram's controversial design choices. Throughout, we'll analyze the fundamental trade-offs between security guarantees, usability, and real-world deployment constraints that shape how billions of messages are protected daily. We'll also examine modern extensions including secure group messaging protocols like MLS (Messaging Layer Security) that scale encrypted conversations to thousands of participants, and post-quantum secure messaging advances such as Apple's PQ3 and Signal's PQXDH that protect against future quantum attackers.
@@ -507,23 +507,23 @@
Optional Readings
- Alma Whitten and J. D. Tygar, Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0 , Security and Usability: Designing Secure Systems that People Can Use, O'Reilly, 2005.
- Scott Ruoti, Jeff Andersen, Daniel Zappala and Kent Seamons, Why Johnny Still, Still Can't Encrypt: Evaluating the Usability of a Modern PGP Client , arXiv, 2015.
- Nikita Borisov, Ian Goldberg and Eric Brewer, Off-the-Record Communication, or, Why Not To Use PGP , Workshop on Privacy in the Electronic Society, 2004.
- Hugo Krawczyk, SIGMA: the 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and its Use in the IKE Protocols , IACR Crypto, 2003.
- Hugo Krawczyk, Cryptographic Extraction and Key Derivation: The HKDF Scheme , IACR Crypto, 2010.
- Joseph Bonneau and Andrew Morrison, Finite-State Security Analysis of OTR Version 2 , Stanford Computer Security Laboratory, 2006.
- Chris Alexander and Ian Goldberg, Improved User Authentication in Off-The-Record Messaging , Workshop on Privacy in the Electronic Society, 2007.
- Nadim Kobeissi, Karthikeyan Bhargavan and Bruno Blanchet, Automated Verification for Secure Messaging Protocols and their Implementations: A Symbolic and Computational Approach , IEEE European Symposium on Security and Privacy, 2017.
- Cas Cremers, Charlie Jacomme and Aurora Naska, Formal Analysis of Session-Handling in Secure Messaging: Lifting Security from Sessions to Conversations , USENIX Security Symposium, 2023.
- Cas Cremers, Niklas Medinger and Aurora Naska, Impossibility Results for Post-Compromise Security in Real-World Communication Systems , IEEE Symposium on Security and Privacy, 2025.
- Martin R. Albrecht, Lenka Mareková, Kenneth G. Paterson, Eyal Ronen and Igors Stepanovs, Analysis of the Telegram Key Exchange , IACR Eurocrypt, 2025.
- Martin R. Albrecht, Benjamin Dowling and Daniel Jones, Formal Analysis of Multi-Device Group Messaging in WhatsApp , IACR Eurocrypt, 2025.
- Paul Rösler, Christian Mainka and Jörg Schwenk, More is Less: On the End-to-End Security of Group Chats in Signal, WhatsApp, and Threema , IEEE European Symposium on Security and Privacy, 2018.
- Felix Linker, Ralf Sasse and David Basin, A Formal Analysis of Apple’s iMessage PQ3 Protocol , USENIX Security Symposium, 2025.
- Théophile Wallez, A Verification Framework for Secure Group Messaging , PSL Université Paris, 2025.
- Karthikeyan Bhargavan, Charlie Jacomme, Franziskus Kiefer and Rolfe Schmidt, Formal Verification of the PQXDH Post-Quantum Key Agreement Protocol for End-to-End Secure Messaging , USENIX Security Symposium, 2024.
- Yevgeniy Dodis, Daniel Jost, Shuichi Katsumata, Thomas Prest and Rolfe Schmidt, Triple Ratchet: A Bandwidth Efficient Hybrid-Secure Signal Protocol , IACR Eurocrypt, 2025.
+ Alma Whitten and J. D. Tygar, Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0 , Security and Usability: Designing Secure Systems that People Can Use, O'Reilly, 2005.
+ Scott Ruoti, Jeff Andersen, Daniel Zappala and Kent Seamons, Why Johnny Still, Still Can't Encrypt: Evaluating the Usability of a Modern PGP Client , arXiv, 2015.
+ Nikita Borisov, Ian Goldberg and Eric Brewer, Off-the-Record Communication, or, Why Not To Use PGP , Workshop on Privacy in the Electronic Society, 2004.
+ Hugo Krawczyk, SIGMA: the 'SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and its Use in the IKE Protocols , IACR Crypto, 2003.
+ Hugo Krawczyk, Cryptographic Extraction and Key Derivation: The HKDF Scheme , IACR Crypto, 2010.
+ Joseph Bonneau and Andrew Morrison, Finite-State Security Analysis of OTR Version 2 , Stanford Computer Security Laboratory, 2006.
+ Chris Alexander and Ian Goldberg, Improved User Authentication in Off-The-Record Messaging , Workshop on Privacy in the Electronic Society, 2007.
+ Nadim Kobeissi, Karthikeyan Bhargavan and Bruno Blanchet, Automated Verification for Secure Messaging Protocols and their Implementations: A Symbolic and Computational Approach , IEEE European Symposium on Security and Privacy, 2017.
+ Cas Cremers, Charlie Jacomme and Aurora Naska, Formal Analysis of Session-Handling in Secure Messaging: Lifting Security from Sessions to Conversations , USENIX Security Symposium, 2023.
+ Cas Cremers, Niklas Medinger and Aurora Naska, Impossibility Results for Post-Compromise Security in Real-World Communication Systems , IEEE Symposium on Security and Privacy, 2025.
+ Martin R. Albrecht, Lenka Mareková, Kenneth G. Paterson, Eyal Ronen and Igors Stepanovs, Analysis of the Telegram Key Exchange , IACR Eurocrypt, 2025.
+ Martin R. Albrecht, Benjamin Dowling and Daniel Jones, Formal Analysis of Multi-Device Group Messaging in WhatsApp , IACR Eurocrypt, 2025.
+ Paul Rösler, Christian Mainka and Jörg Schwenk, More is Less: On the End-to-End Security of Group Chats in Signal, WhatsApp, and Threema , IEEE European Symposium on Security and Privacy, 2018.
+ Felix Linker, Ralf Sasse and David Basin, A Formal Analysis of Apple’s iMessage PQ3 Protocol , USENIX Security Symposium, 2025.
+ Théophile Wallez, A Verification Framework for Secure Group Messaging , PSL Université Paris, 2025.
+ Karthikeyan Bhargavan, Charlie Jacomme, Franziskus Kiefer and Rolfe Schmidt, Formal Verification of the PQXDH Post-Quantum Key Agreement Protocol for End-to-End Secure Messaging , USENIX Security Symposium, 2024.
+ Yevgeniy Dodis, Daniel Jost, Shuichi Katsumata, Thomas Prest and Rolfe Schmidt, Triple Ratchet: A Bandwidth Efficient Hybrid-Secure Signal Protocol , IACR Eurocrypt, 2025.
@@ -536,7 +536,7 @@
Required Readings
- Mark Russinovich, Manuel Costa, Cédric Fournet, David Chisnall, Antoine Delignat-Lavaud, Sylvan Clebsch, Kapil Vaswani and Vikas Bhatia, Toward Confidential Cloud Computing , Communications of the ACM, 2021.
+ Mark Russinovich, Manuel Costa, Cédric Fournet, David Chisnall, Antoine Delignat-Lavaud, Sylvan Clebsch, Kapil Vaswani and Vikas Bhatia, Toward Confidential Cloud Computing , Communications of the ACM, 2021.
More to be added soon!
@@ -550,13 +550,13 @@
Required Readings
- Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography , IEEE Symposium on Security and Privacy, 2021.
+ Manuel Barbosa, Gilles Barthe, Karthikeyan Bhargavan, Bruno Blanchet, Cas Cremers, Kevin Liao and Bryan Parno, SoK: Computer-Aided Cryptography , IEEE Symposium on Security and Privacy, 2021.
More to be added soon!
Optional Readings
- Project Everest Team, Project Everest: Perspectives from Developing Industrial-Grade High-Assurance Software , Microsoft Research, 2025.
- Martin R. Albrecht and Kenneth G. Paterson, Analysing Cryptography in the Wild: A Retrospective , IEEE Security & Privacy, 2024.
+ Project Everest Team, Project Everest: Perspectives from Developing Industrial-Grade High-Assurance Software , Microsoft Research, 2025.
+ Martin R. Albrecht and Kenneth G. Paterson, Analysing Cryptography in the Wild: A Retrospective , IEEE Security & Privacy, 2024.
@@ -586,7 +586,7 @@
Optional Readings
- Manuel Barbosa, Deirdre Connolly, João Diogo Duarte, Aaron Kaiser, Peter Schwabe, Karolin Varner and Baas Westerban, X-Wing: The Hybrid KEM You’ve Been Looking For , IACR Communications in Cryptology, 2024.
+ Manuel Barbosa, Deirdre Connolly, João Diogo Duarte, Aaron Kaiser, Peter Schwabe, Karolin Varner and Baas Westerban, X-Wing: The Hybrid KEM You’ve Been Looking For , IACR Communications in Cryptology, 2024.
@@ -604,7 +604,7 @@
Optional Readings
@@ -617,7 +617,7 @@
@@ -630,7 +630,7 @@
@@ -645,7 +645,7 @@
- Check the Syllabus for detailed information on class grading criteria, as well as how lab sessions, problem sets and exams will be designed and presented.
+ Check the Syllabus for detailed information on class grading criteria, as well as how lab sessions, problem sets and exams will be designed and presented.
@@ -658,17 +658,17 @@
Problem sets will be assigned periodically throughout the semester to reinforce and deepen your understanding of the lecture material. Each set will include a range of exercises—some focused on theoretical proofs and problem-solving, others requiring short coding tasks or computational experiments. These assignments are designed to bridge the gap between abstract cryptographic concepts and their concrete applications. You are encouraged to start working on each problem set early and to seek guidance during office hours or lab sessions if you encounter difficulties.
-
+
This problem set focuses on the fundamental concepts of provable security covered in the first three topics of the course. It consists of four main sections: Cryptographic Foundations, which tests your understanding of basic security goals and perfect secrecy; Provable Security, which explores library interchangeability and formal security proofs; Computational Cryptography, which examines computational security concepts, distinguishability, and the bad events technique; and Application of Cryptographic Principles, which challenges you to analyze block cipher modes, evaluate real-world implementations, and design secure protocols. The assignments blend theoretical analysis with practical applications, requiring you to demonstrate both mathematical reasoning and applied cryptographic thinking. A bonus challenge on the discrete logarithm problem offers extra credit for those wanting to explore advanced concepts.
-
+
This problem set explores symmetric cryptography fundamentals covered in topics 1.4, 1.5 and 1.6, addressing four key areas: pseudorandomness, encryption security models, hash functions, and practical applications. In pseudorandomness, you'll analyze PRG constructions, PRF security requirements including the "Golden Rule," and Feistel cipher properties. The encryption security section examines why deterministic encryption fails CPA security, format oracle attacks against CPA-secure schemes, and authenticated encryption constructions including AES-GCM. The hash function component investigates collision resistance properties, construction methods like Merkle-Damgård versus Sponge, and specialized password hashing algorithms including memory-hard functions. Real-world case studies challenge you to apply these concepts to file storage systems, software update verification, and password management implementations.
-
+
This problem set covers concepts from topics 1.7 and 1.8 of the course, spanning three comprehensive areas: cryptographic hardness foundations, Diffie-Hellman security analysis, and elliptic curve implementation challenges. In cryptographic hardness, you'll analyze real-world implications of mathematical breakthroughs like P=NP and evaluate discrete logarithm security architectures including parameter selection and vulnerability assessment. The Diffie-Hellman section explores attack scenarios in hostile network environments, man-in-the-middle defenses, and protocol design challenges including SSH trust models. Elliptic curve security engineering examines curve selection controversies, invalid curve attacks, mobile performance optimization, and implementation vulnerabilities including side-channel attacks and nonce reuse scenarios. Finally, applied case studies challenge you to design complete key exchange protocols for secure messaging, analyze cryptocurrency signature scheme decisions, and architect enterprise-scale secure communication systems. Throughout, the assignments emphasize both mathematical security analysis and practical deployment considerations, requiring you to bridge theoretical cryptographic principles with real-world system design challenges.
@@ -683,22 +683,22 @@
Lab sessions will be held weekly to serve as a hands-on complement to the lectures. During each lab, you will experiment with real-world libraries, and even simulate attacks or vulnerabilities to understand why certain security practices are necessary. These sessions will also help you become comfortable with relevant tools and environments, including formal analysis tools. Attendance is mandatory, and lab participation will be graded based on preparedness, engagement, and the successful completion of in-lab activities. Labs offer an excellent opportunity for collaborative problem-solving and immediate feedback on your work.
-
+
In this lab, you will design and implement a secure password manager application. You'll learn about secure password storage techniques, key derivation functions, and encryption methods for sensitive data. The lab will guide you through implementing features such as master password protection, secure password generation, and encrypted storage. You'll also analyze potential vulnerabilities in your system and implement countermeasures to protect against common attacks like password cracking and memory scraping.
-
+
This lab focuses on building a secure messaging application implementing end-to-end encryption. You'll work with cryptographic libraries to implement key exchange protocols, message encryption, and authentication mechanisms. The lab covers essential features like perfect forward secrecy, deniability, and secure group messaging. You'll also explore practical challenges such as key verification, metadata protection, and secure key storage on devices. By the end of this lab, you'll understand the cryptographic foundations behind modern secure messaging platforms like Signal.
-
+
This lab introduces formal verification of security protocols using two complementary tools: Verifpal and Tamarin. You'll begin with Verifpal, a user-friendly tool designed for students, to model and analyze custom authentication and key exchange protocols. After gaining proficiency in identifying protocol vulnerabilities, you'll advance to Tamarin Prover to perform more sophisticated analyses with temporal properties and unbounded verification. Throughout the lab, you'll apply these tools to real-world protocols like TLS 1.3 fragments and Signal's X3DH, gaining practical experience in formal security verification. By the end of this lab, you'll understand how formal methods can mathematically prove security properties and detect subtle flaws that might otherwise remain hidden in manual security reviews.
-
+
In this creative lab, you'll implement the classic Battleship game with a cryptographic twist using zero-knowledge proofs. You'll learn how two mutually distrustful parties can play a fair game without revealing their ship placements except when a hit occurs. The lab will guide you through designing commitment schemes, validity proofs for ship placement, and secure mechanisms for torpedo shots and hit verification—all without requiring a trusted third party. This practical application of zero-knowledge techniques demonstrates how cryptography can enable secure computation between untrusting parties in a tangible, engaging context.
diff --git a/website/labs/index.html b/website/labs/index.html
new file mode 100644
index 0000000..22acbfc
--- /dev/null
+++ b/website/labs/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+ Applied Cryptography (CMPS 297AD/396AI): Lab Sessions Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/papers/index.html b/website/papers/index.html
new file mode 100644
index 0000000..8fc0cf9
--- /dev/null
+++ b/website/papers/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+ Applied Cryptography (CMPS 297AD/396AI): Papers Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/problem-sets/index.html b/website/problem-sets/index.html
new file mode 100644
index 0000000..7c27262
--- /dev/null
+++ b/website/problem-sets/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+ Applied Cryptography (CMPS 297AD/396AI): Problem Sets Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/slides/index.html b/website/slides/index.html
new file mode 100644
index 0000000..6857d2d
--- /dev/null
+++ b/website/slides/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+ Applied Cryptography (CMPS 297AD/396AI): Slides Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/syllabus/index.html b/website/syllabus/index.html
new file mode 100644
index 0000000..5c4bbe1
--- /dev/null
+++ b/website/syllabus/index.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+ Applied Cryptography (CMPS 297AD/396AI): Syllabus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/syllabus/syllabus.pdf b/website/syllabus/syllabus.pdf
new file mode 100644
index 0000000..baeb90c
--- /dev/null
+++ b/website/syllabus/syllabus.pdf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:173ed3304d3057bd4e3fe6d1966278e9991da71270566a755b3128dcc3137e30
+size 807398
diff --git a/website/view/cmaps/78-EUC-H.bcmap b/website/view/cmaps/78-EUC-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..4058d6665894818f6baf4d28f80184d9ff0928d18807cf5c7dadc6e9595a2fcc
GIT binary patch
literal 2404
zcmW+#SyWV47TvdAJ*r+6RRxF)G8F|XpkSd0DozL*KyfC)0pS@-L>YX5;1pdiNgJS`
zL=Y%uFUFQ8f-Z~Eh|{myy!p1b$i=bHX>
zys+`=ji%a~OD*o~?c2SXo4wxc?t%-A=Y8%IH=0{~_08^*hPNA=t~NHQExrp`wt~7k
z_y6}dyPJH?zNXf1lP7#Wch;suC58JBpV$uq9mEuPwC72IzEbHXNYZPniTj*hqlSv?
zy9b^WRK9;h_c*@u*1JTx7ix*U7ZnnFSLHey>!|EdL-u&xrn@*&5w$*NfflDK2+=
zkrwuXqTL7MnA~22Pf9KA4fr?~%bt+->oAUIcL2r-sbdR_la`KcFv>|sf##T_){a6L
zZz>&SFy1nCRKTb(b)1E9TI#5Vab|sosCYJ_)2Z3#X-H=>j7lt*z&MxFxdBF1Os5K?
znsnZRp`!DS7QR5yc^Ag{L_fj2D*Kc1G--`L4aVDMe-VreA^uVrKH@))*=&=)9L7b-
ze@e40Qn$YnMh&K$tX+cWC8^7XMR$0Y3r1~Bmq(SCsM3`${#?eYt^)$EU{}`}E&L@#
zcPxy$knT7b^=rCQu(H|Gy$41^e0MR7M!EYUjH_~YJq!)qEijtU-Ks^sqNeUP7|r3`
zf_Y15zzO4;B@hpz)f89@qm2a8VO%!{HsZCz64(smhCPrE<7P-e6ul({j>5RD%CBie
zpj>cy2lha%z&qF(Xw_WHRJkwOeAjk=HyD)rrC=oHemQ0;UH2QoOmYvvB&o*&W;XYP
zs+JX+-4iZyG9r441ct!gQz6g-rN^f!29ReQNEi0ZYj2)4&qthisov>87Kbo+0Qh$=>`~j8wQ^3-&*x>3Hw9>=-
zcY6s*N`t`uwl
zJ1hsAweX+N_@Hq1h-oMq>}c3f9AU@ILs^8KkcPH`l}kfA2z!$Z?FFl_4HaUk-ZFGV
zbNrNAhJ^G}&Y^0s)A2)B!Ol2`g^y>kAUv%!4GW9Tg$<`_j-OG}u&7jJ9o`OBjbTAg
z^$ZKU&W8@yg1sF++y-{RI%3npeois6iZGvTBnqqsQ~4MXj$I-nYr$%j5iuHDe6<}sNk|Fmn#UW714D_*&efd>yQ_i2~OPOauHUkuj&1aB|`CO7Re_m7mPE89T7)~S$Ht^iY1qXPZcOeCQn{%ODQ~p827A}Bq
zPhV(7m(#MC48Fs;m;s(|S=^zLZ$3wVhU)l+Zdlw$)+{y>Wyvm9l2ziFj!tF)!oDx|dspKQGU!)^ENB-zje1rJn-dodCW^Ovqk+2Y7)PjD4}-
zg_`Z3H071Z9I(Br0)NB&>I!&q+$#-%Z1586YnMv?MJr#&XtsY-`|DQlQpd7*1_xcs
k5om7%Ka{$hiq3Rpxm1<^LpLp-6zwQO#)>TPFtC#SKLc+9MgRZ+
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78-EUC-V.bcmap b/website/view/cmaps/78-EUC-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..3cc24eb4ce17453267d3b94c2b2fee2e9cae239061a7925e9b85ff846020ac31
GIT binary patch
literal 173
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TVQ!)88tSa;k;uAm5#wHeUdFwF
voJ@OznOOFQu?X&sb`)LsaBps_Jp&^YN;1fUS!@iAMpy(B8JB)#+{Xj}Q4TH^
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78-H.bcmap b/website/view/cmaps/78-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..316b31fff4b7cecd241840d2dc920545361bf0b25c3a4fd5a2c44f2c5ebc270f
GIT binary patch
literal 2379
zcmW+#`CAjo7Cn_tlXOB7KxC0E6;J^M1G0!Hh@b)rDv093(r8qa#RddiM!%k!=Kz6-
zAR+9oPaY$vEGl%>eDkNgKjqcDAL=`OZ&%$q=bl@p|JIdvKX}yBe&=qVJEy3~o0aSJ
z7P-rAb+`H4^^bb{e4V}Ss;-;eJrBBj)IQ&>Y+G4Jhx`Bgd)+<0USCiDKgoKZ&z*hf
zTvhq0+WJ$3P^#}Vsdh@6et)EU9RIrVD^XsATjF2DgvGz`>igTdVHlSz!$)8=
zkl`}TkwdM+YY0@hN4GKOM$Rv%dnytuTKz3?K2=
zVJ*kxZ-8-I@?X_#dDQK1f^i2cJ=Re{^sY2&!=^iO)CHqGZq%d7`BWJ#7Ju$x*XU`1
z_i=pmx)xbLF%}P_BWx@IM(3WfRP5wh#!6vyC5~0X=$6NB!+0Q%b;8gv)(4{pWBpo8
zAvKK+!03$}6U_U<15OwZErCQB{ieWP7y~4b0b|e{IEbGPOCT4ULyiuS9%D7Kcim5y<&RNNLKbV5?M_@Ml_!BUD
z#Vf07Jx2Gvsu8;#zczp_tCci!d=JC81TT_)OJ7H<^R4ifpq^T6mSw`ilRIqex
zcDbemt&GU2V_=zN>O9y1=TsfoLF-f-SXT5@hvqs-6M_UR+Zjv-JLCvvgL&oPaj+a)
zumUXC9K1l-VL5mOEFZyU%~ek2U<+6Qg0~4PB*AvViX6dCu;QHHQ?O&w^dYe0@^l_p
z37Ia|Top87TGT65rmumWz_bsnj7$saCoz2wtX!Jzz~5)(X$|l5J=23)!YPVS0$7C<
zN&-72hdf}X!$KKgXDp!{uu4nlC|DHr(K(@ZSbg@~C1!Y-O;vI(n~X7a%rq?x0HT_!Upz#45c<=E=9
z%$(O8XQ*XHNWbcwX$8BMIP(DPx^q_ecmo^4(Qq!!c)MA}20&B&r
zpr?9fgEM}u|Q=Y?I}N%O+r2j=-|&3Tq$UKp&&^B2K--1CiK
zy-D+rv2)nG5D(TDwvd9q4&u!r^Fq4jI!6yIWPv@jEeKEg%?r1|2FOAO*x>GkZmbI#
zkFaO~dyGY)@`+}zp%IIAu&0TO!joT2i^X8i%!{Si$#X0UiO-`KFR8X#nz7hUvX-Jv
zrlkr!)wxtjq@_kemYPWXQmbB*xAYiT*pK~hyec_gfVBZtu00EmY{H4Y7hH0In=Rn7
zrd*^6ZyLeFtZyEITTE}BgIn=d0$03mWtG&?rnd!}Qcs=lqQPy}cWK~u&%11Jhy7h0
zxHIZqi%PBz!oOeLb%}c3^^oNEF~IZy;@=nOo`m-oNZR{OvggAt-GdL=2)xNT171=RQ}dVa*r7lYVOePdNhaj=@g8o(E3NgnKlljVh}#;AzFH6fe85
z+KkXeX|)x6uXEL>T5i(x)jojlgLN%g;C_MWfd3Lw)^auF7L8pKT~4>J-N(|6#5K`|
z4C@zBFVpqKt(w|Bc=fOlez!{6v#}_vi9QS%Fz7{Bl|Mq@8>Ux`|+@q$AFw7>C4I6kt^o9ex(7TZee#E)apegrh#KtY~qKu7xj5;lw
z6#S@jGZVbnvUyY`9W|KBR2?1kz~)J^XS16qTXwNxbkD&pH%Z*8CD`g9t}QVumaS(b
z>br%+eNQ0!zUK>nzTZ%-9qr)9#LdU`tKcO`;H6?hPUuI$%fw)uj0Z2*Y!7Ja50N=-
z`_Te^#{A|N;KN^GfuPhQ2Wn*@M_1lcm`)(+ff)A06&+uoraMN
ZWxHCHd+DL=OQIb$$lQ?y)&e^@{{yR6zuEu*
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78-RKSJ-H.bcmap b/website/view/cmaps/78-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..848674758323508735e213433aff49efca16d93c5ab86c12c5af9e5fa91fa8d2
GIT binary patch
literal 2398
zcmW+%X4)d#tmFZT%e3CqAV65xJ4VEnS`dH
zL7+EQ*O3^3$f82sn)^Iqy?t_}J*`zImsoz3p0`
zy|l8@v3sw>QE9Ke(tX)&Z@Sal=kDya*LQu@-E*_MN9}W8DKXb}blCqN-)rx2_qu!f
z|99EscH2w#d|vN5biC;h2nIpOpu(y_p41TXQQ54v6J!szwG#WK!8X-8s5t+0hZO($
zz+kTYO|+EuO)`HR#>Q_Njyu22B+1`iFr|FkYf2fiwA+XBVr)ZoByOlliyd0PkQ@3b
zai|SHHAq8U_%RKexlu#6p*NO#0li7^mO(!)c@IE8L%g+`#jBXSF6d`v?=k4-4Blqw
z%?9rU=wAxnR_Nz5yl&0v^_YhZ&@ZG7+n`^>W;%}}aVdOB!8^{_tuf_R1*&}zMcSMb*
zL+{)+nuo2u(r69zu8h$m(7VOatI%(Xqn*$-jP^nA!Dzo0Golzq2cY-HjdK2d(SAPN
zEy6>+>9)I`SnL1m2J0X193?}1vjKQ^h7-*f13i6Q!NKQT@i
z4cQYGmprkH$P*Q$V4_wf{=Z?hP!;`u1-05hZ6cvDouF}M(0DCw%ww6jPH2KKahuR2
z+r$IVl;}wwmujBO08LArECAhRn&dO23zJ7cGtwrHsp7a|nr!35GqHP8!FR4O&Y=ocE^)T?cgup$`0XR19f&UY;AettCt<2&aSA3E@o8Lt;1=^l((T
z5cD%CTnc(b3LgZmCt(+8gE4%V(4#{57?xV3aHEzs=@G)b&oNWD1&b$za64XC2;nZ!
zkbJ_T@7*F;%=6J7L<~gogzj5v==m44HJ8?T{t{badoI9A8K<{Fn
z4|z|MLrUzt1@wN#Joo2o!#p?lfpNYDTlFq9BR4uc6XU`7c{)Z~bg{-hZ!
z%Jk$Gm}GeJ5X^+90+<~4R8-0I&j<~u@e$AcrztMmvqWNgmQQk@l@L5@B<5#Lr2JV6
z$$Fkl(w-{9}^>Jc)-K&c8SHRMYVB2!Q(s{>>N0nfit^7y#=&)+~s5oEWCwbpjk^SGdlB73j
zM0(?J$!`u2;f>3%`%S${KK=(=<*M=H3$W}1VD=8M93x@5n*4W9!J7fF{HmoKjCEn@
z62hm1rB<-*wk5YJ{j3x$^#N=LOv_mucXBKMe5Zlsy_)>9r((GbtiZB-0}B^2mT!X<
znpTp*iegsms^uR_%8G+$?E+TnITk}+Im&T2QdiCr*Ge}(mtg-7`&`Z+IyCD)J;K{v
zV0(nO4lsxGwj8W9>#Y-PulV*7SlRx!Zm@mwYL+VfqF|Ntczg@y)goYCMA2#m=Vga+
z^|B`a;>lTU!*mu|GlNwmu5lyxJJz_R2W)F+RPk3OcI^u9U5UcAeqh7~vYw+^e)Wj!
zJm#Qny$GzTZ2cetMcdZ9!K&pA3)m;}MzSjWrW9}3d9D+&8^<-vZyw7=3s?;{xTZ?V
zMi*FZ{5!t9pQgS`2XpOsSFV!Z73aGPn)!Fnr|K!Rk#P
zVpQ^n;{1@Rng8$8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TX>Oq#ygOX=*YO&pO=jMENuV)
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78-V.bcmap b/website/view/cmaps/78-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..42ea2b4f57532b5a8fab4fc91be27ab51a9348f7384a7744b1d92ae85b410ec3
GIT binary patch
literal 169
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TVs4@9k;tm3#JJa=mvL_(C)3_w
qCYHTnEP{KZ9Yqxr_vW_RGcZD-B!fJd#m3NRgheosQMHtD9}@un{3-|l
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78ms-RKSJ-H.bcmap b/website/view/cmaps/78ms-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..03d0fb3c41d439c2064d4b3fee088b9089e1bcbd3d233f25cead8eba75ed917f
GIT binary patch
literal 2651
zcmW+&>su379)3?IlVlPI_nQO=7v(Aj5fH&R7(l=(3boRT!dN4sTpU0UwHkd20)c>B
zl5n?bS84?+7Zv6VTibnh{|&dhz3ubte%bx9{j_KMVV?IlGv{}E-`~tRn)fx1_UpYJ
z%}rOjtT}~+w!QmpwnA&krS^+XYi)05m$S9gTG{q#d&l+m4yns|Dce}m(qjF6eW$g<
z+3D=){{O>Tr_-9f?}JK5*~!{65ZnhL_eHfB%z{z!J&v^D)zC+!d8NaVwML)61g
zL)3t&**cIMWF9CbAp^Cit)DM$7idCtX2BdE5^wI&L^3mynek^WK^AjaN>oayL>`K9
z3MU6XY#>S^b}mCn!Oj&Zd$4nrC~4SfAxb88t`Q|0JMB6phk4w^J5ClJx;W(^c6yA;
zVf5WXUoZNJPN_gYh*B*F4=iH93FS0D(1dTR^aE|!iNRKqZr~=Anw&vEspST9p?s(x
zJP73s87z@agQ8*30p%lM@C1~zn!!3Kb(+C?D4%eHjZn^62Ay)?pvyRI+UAQPZr(=a-RKi;INDH
zN1UAB{Ym1ze#9>dHgPDRKNsV7j2xdfX0MRq=D`-Ot2nexrqu;
zOU%Rxi60XU6YS%mao9T{GmHm6X_d`mF3<%1WGbjNV$ueh7(aOoG%0Da2{c)lG7*}>
zPel>Bhnq@}O^-x=Dj75l8*M>TnV{(*Q^lYeWU3l8(>zrJnk9!kav7#Bg6_3VwSZ=u
zz44&?0=?OwHr{&}G{@*=Z0*;2PZ65Sd(VRA!Fxd##zo%S0Gbc)WkL&xx0%qwKridN
zDA9XIju>|Z`BJp~pG@2`o40
z{WWsTgp2dDJSPnP1}vT8{LOfg&-vRxPbT?0L8~>>QJ|-Sr(+2{t)0#$w3eIB13kk{
zA0qT4GA)AE8K)iCY}HR!OZrJsKYf$x$ZQE{OWyL9sj*vZ1xOZj
z@z$-KzYN+#=Gjc#jF@l78Y8C{3wqF7SYS=wmIa>}ykG*oV_9JOe5P4o;@;IR9KrSh
z?LwJk^0^EPRm8sVA=$eauF))(mYNqU2)9^A$l`etv)Gt*VDT0(pNiDSHi`JpV5LXW
z`36Dn9f68$qLOl`To6>P9x5*j(_-x7I;c9s;~P-*n#cE`8t?@NRS5Zlm&nWy@Ug9C
z+I8oPD2Mq;I59j)AxTfN37*st#WuEQrKD3nS;A
z*&OyS14!bR$H~WEwmIy7sE~x2YN$p5swo+2U?5a;KGdN5F;Ii|Kn<}#4ShhMhReoz
z7t{#ja|6^!|G
zF)ld>mY81tE8v$-lcuFQhy5#&O-m-ENYPw-H5^6@!s#P-mO^jN#F|SNuwUS{L
zgw^8=_ab`rBjQ+XXLdFUzB%Bqf72od{@umB%7nU)du4-a)4$4tniK!Z4s}2O>H^f<
zf>%zc2ZXhFN&lmWHCD%?8!)bA01G@a*78|hR%q8Q%EFJX#I+{O#FKR+)co*uCS-wa
zok@DoynaUFe-eY&FR|Q(NMG*;hRq-wiL&V@7r(*Q95QcYKrPDMIE1N;T^sFCi-k=S
z)WgDNq{RI!W^G!TuN}dgCuP&mF4JZM)FaqroQhGKZBR=>U$fyo8vQyJs$_%p#y8C4nD)&zs1>nqWO#C*RvO+0N#s}2{x(`R{_4tjdlqU{;1-+o
z<3U@Y7+@NGkg}D6p>$!ZN+SRIFZ$Xg^3M&7R!Zi7i2JsfBI*eQZu7*l9medF&~E2|
zd|TfaYk!wYa^GDh$G+R;uzz=vw0xha5&mc)nw>IP_)TP{phU5F>>kQdD2Lc#h@F0t
c-la;q-(1!2s=%@!^LOuZa_4*AVfvHif0(Q+AOHXW
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/78ms-RKSJ-V.bcmap b/website/view/cmaps/78ms-RKSJ-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..be5bf42f8dcd080529faced9ca65afddbac39fada53a071bef5028e56afb90f2
GIT binary patch
literal 290
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TZElfUtQ+JV?4|3G$lSPsp*5L-
zp*4wtu{9x)to?*
z-GEF#OMV%BCslD3bEiU{_ISp9EDQ%Z8TPR=9292Q$H{O|h;bh`!$AqgeS8cDWf=Df
PG8~jmWNdF>+$RD6ERIW@
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/83pv-RKSJ-H.bcmap b/website/view/cmaps/83pv-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..4217fc92d36a403c5e6d142c6367c0b5c7dd8088fc7028b1948ab971848a3995
GIT binary patch
literal 905
zcmaiy;cpXl7{{OI+O^wmYtyl`HDmR3WD>!x+fX(zk2fF27#QYSGOjrry9(r-~(pVo1{Nw?mtLYJ4UUE`k0lkkCo*kO1UE(D(}Ha
zIX$MVRMvM&ErC!&C=p47ic-|WsE3L1&Ed_Vp)Ij3En2goQt2?lasb+wwgN2;Lt;6|
zwA_i2WgTGY5s;UQrFk$;02m7ZCI-O-t-D+~RMwf^W)!C+rc;Y3P7~9a-6+nSV0x#B
z;@u~h&i0`=n`3$}i{kw*rgPg+oO_k&gBcVbb~2ssKyiMW>7z*$A19bDw4u20BGV`1
zC_arcUEGA?Vv6arQ52ttm@dgEF74;u%JB9>6;J2#3n;#bF|D?uSWPosc^1W&VWz81
zD6Sr0`f4AFuf2cP{3zC#>6(h-+M*UPR}ZZ3Otn{i7_C0k7_RpF0@Zzp)zK+0oTa^*
zw4u^B0>!txwbtKNy55iCdXee70*deZm~JFd+{iNhFpJ{HZA>?}qPRK3^iu}K&mBy+
z6co26nSPl-@oO8??Kq0t<4kv+!-v;5Y52z#{B2@hzN>;4wmsUkBG4YIH)P39qY?Al
z&-;u-#D2+V?9k-9C&B0ku;<`WW7q$+Vyxj_#Xjl|yL;UscaO{N)9#?F&dc}K;$|A`
ze8QXqy8u=**sp^X2K#uO6#={Gx8h?Bj%vT*Jnrmp`kY>;$4NTfPM79$M&eedr~f9j
zS?YYFb5gPx0b5+mtNTAx&)Lh;5
ZujiWNPKIm#2-aGseD|Rg2PkC##Gk&38VCRY
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/90ms-RKSJ-H.bcmap b/website/view/cmaps/90ms-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..ecc11c01aa8cfd5e63023540deae33f60ca457e603c34deaa5233b5f92bfa3d8
GIT binary patch
literal 721
zcmW-eTTc^l5XJwq#gw8#R@%k}Gf`{k
zMMO~)MNz7F#ryrXv0C+m@CEc;pImvE1P@4ZMh0a$e!5_#hJh!c`*BVy;Neh
zTkWo5mpv{y40IUiYAY)$v->KYl_e^qm8H6=e}1|X^yMOVNa&R!*CX^Qk?RA!TI52Y
zyG8CW=pK;^oAnw)aZ=<>{nqqplU^rs@wxhDkvt)i10n@xy-}nD=&hzZk)D1k^M|e31e5HzTtO9tf
zi|}eE@HH3Vcq#Dse!}Z*z&9L(6AOSR{De1Kfp6IfCvCu!&9pYVV^v4ixO00S@Es@N
z)I#8?0O8%;!1sy>@6Q9izmxDmBk)5D;iCfJN2E$w1*a9@=~D-cn9ek)@cWNQhE@3W
zR*W>Mt{DX%Gw_p*giq^$pT-HF#ekpJ629;PzX%h)3<1A#6TYqnejOxy(+&K#g7BRT
z{H~MmeLL`nQo@gmfIqeoe%cG=pBD)D)}AcI{0gYeAA%j
u^{--}Rd*VGj9%#5gucOu!1#H2euZlOd%88>EDV>zJ*#d2{xOGaKc#=yUE^>7
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/90ms-RKSJ-V.bcmap b/website/view/cmaps/90ms-RKSJ-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..2c9a8133df871d7a6becc2fc550109853d76665fe296c542888a78cf7c725cac
GIT binary patch
literal 290
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TZE28OtQ+JV?4|3G$lSPsp*5L-
zp*4wtu{9x)to?*
z-GEF#OMV%BCslD3bEiU{_ISp9EDQ%Z8TPR=9292Q$H{O|h;bh`!$AqgeS8cDWf=Df
PG8~jmWNdF>+$RD6C)7)p
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/90msp-RKSJ-H.bcmap b/website/view/cmaps/90msp-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..bb631803d13d4c079243d8da6e75f96bd5d7199e1b7bb23d2388b2b589dc71e2
GIT binary patch
literal 715
zcmW-eTTc^l5XJw~VoNEO2&Pqmx?BQ85Gy1Kg5&B40vb?if-xX2vLIS5w2cHZ5is;3
zUQoQDs8tjNMNzzg8>r(=1dvVfUk4O5y@0Wb4U-e!1H*~A2RJ`p_EmhUK
zs|1K40Wc(gs}%5L55S7NSSf+n3@1T40ZQtSjKh6U6fCovgKDBFc+P4I2F&J=F+qf^
zjh0Zdd1J_~mn)$$R9BDTOt6QW6CGiHq9bDMk|H@Nw#a^17jYkvhNEA18d6O*i_N*t
zY3nuEb+qf~Y|2Q9qDB-#>D2`>}yh(Xyh
zBIC#a@D(JyS^<2upYU2Q@bw*pqou&3KEfMb;G4ySV}-zDX9#a~0^iOfypscbr;YG#
zEATxh;dnam_;JGfO~4QAgcE7N6ODuq8-O3#2p?O4AJ`z>C7g2s&v^;od4S&+63!O@&vz1jXb1k7L-e=3qL;^Px1}0SA^g5iYfXXF1DY`JMrWSXGZ@Ro2m>
pIdngIFSLC^+oeaK|2#XMub5T`8{&0BcPR@0tE+*R*O2w6;V*K+;HLlp
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/90msp-RKSJ-V.bcmap b/website/view/cmaps/90msp-RKSJ-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..6fc8fd8548b3f52ebf844403cdaffde9457626857688977700aa3b6f801af723
GIT binary patch
literal 291
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TV`-3ET%a4|9qgs+k;vS*f}u5;
zfuS{tfw46qk*(2@aj!owG3?DvWNLI~IN-y;a3IK0v~kS=
zzs90gM@9w+lw^69KH^V^*#(jJY2W1%d
Q2{Ig%O=N6uVB9AH0G^~w2LJ#7
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/90pv-RKSJ-H.bcmap b/website/view/cmaps/90pv-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..9541ffe2216c6a40887b879a35daec61779756226d664eca26f404adeacd748f
GIT binary patch
literal 982
zcmYk5|4&m_7{=fC_V$~FcBRllz;YErOmJ8++hA^It!GRTMB5r54uQ*hgD_a3?O>Qg
zNE>?Zg}J#o+1S{`sW_cFH=Ub$)7#5`!Y}(}W`Bao&fI=jPM+lRK6%c2&YPSg>?CM<
zW+5{%el8~+?CgxZ+#ZQ^O0iUWOp%fc*_<++mAXH8FP)i5XXKocYTFf?nv!1Rvrvn2(m;0KEDZ;!gAlr{{u%(1@dgG>izcT$PWK~?ipx=)_IQgqr&G0wpn4K+wZd7a2Du_)LOtF`wA~oghFl>n>k8?f2}y7AdG)u^
zuP5Wu^5)amger&E?G5|G-gzO&F~~7I(BNzEb~T5Zt7M@V4H&i_w-J)X;&7nsY;>E8
zweE65xUL+L?L{V7!)UkUCbaf|V2%4kYcgJ;Mva3jFRl31Bf@fIbyg*6w|YdSt8=nT
z?M34i08;^nIS63Qa!vu7V<4C#yw1$J)eXUT9jq*v2{ccEnFK2URt;FyU=Sly0GXAxOrZ8%I4*6Pud8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TZD~+YrW@oP?4|3G$lB=0xYwVT
zac>|e)81evmc3ytf_tMKMH?IU<~GSPFhZdugFKkU#t@7orT`U7WNe8a*{VThA~9Gr%CSO*f-#0yBUjg6t?Fpt2~UBn)B11;hq~NL-%c5#pd2
z6xkOIn&>r%oNXU0v`~?w9*NZsmUHeyghAQ+?iZ-tIE}r>$=I#;uVn1DD7Ap|Y}I
zeo-)3=CA1=?u+=_Z;g&chDQA-u75K;a$|TTJQnFMaMTPA`v0Fl>K}=WMn=Z}S!|C)
z`~`*0C+Zqn+ZzZ`6#Atn>`|1S`?sj-nm*^WO-Jn3=^>|kddy~~;%L%$mT=os{C{zn(U)6I|WfM+DmNt)-7
zg1KbqgVwne=tI7_OmM$*P5`c_&NV_Gw#;3Ee#0_11YN`281xa$jcanLk~k;i7)yTa
zhCY$@SkRwzJZ=OR)!YtS4lCZror1$1I3HgT@h&PJ3sjjR|4#{4ZXhjacrFsJp2
z9bBz=5*M~qDEptZ2#gEyPi}&+SY$kPYVuJj$6zH%keB$faQ|K
zQ($@S#Wt`5_QgK1{Dj3pEw)xkTq59E=A}Jg1@5JEutL{T0a(zobQCP)SgHpridi}h
zb`VQnX|Z*RW$A0MLs+^5R%%+hOjwy~X$Y)5v~(M+LRu~aJ8D@j0jng-<(gctq%4b_
zs^sNvuxczvz-pxB0kFD)-1tZ7U(LM%&5}uoGmZ
z4y?(%atu5htT}F_1+2xpB8aqFRz@|~F~z?k%sL&nD)u^KSh%}U;;DD$RcQ|LNw-V}CBkj+7`Z+)Ahhi_p^bp0gRk~O(S
ziQ5vrayxZPXne=CRStGHeya-XUcy#KIHpzU+PWf<=M6N|{k)M_pLdbu=e@M0=lLX6
z@j}dAbQAZBn2EuT?d=#<
z&%C`&9KVP>^Do_`^p{?e{%bN-
z?Wl(lOTUE?Cp7WUN*Lbz1V+MCIgCUn3?FTVku)Vn$s!?Tx*tZ`lnNuA7Qx6k48u=P
z!ce9}r|zTOF!swZvcirI(QHNH11}axUNU7S{NQvBckh?4X^Nbvpyk>8&r
zrSH#DHS2dbDfzvWsj;~)#HEEl7vrAsvh{{CxxF{scQRlmw5lQk?KEFgbjaQq-x<`
zN63M{u2Hr0?>!{&_Zg}>{~jl<&k~9I>?MVt10v;fhbiZamEcQ=s?wLDaC)Q+MxIdi
zfCEPUlnK0YYA=jJGmM}eMu;}TDE5F?O$EWL=~2RKLNE@~S{P-;Fpda>Q9*_JmH((*
z6Az>IzPKHqvVqspb{I`=7$-e2n*YfZe|lb@3!{~0k=={alP2CEfj3$m{DkJ1s4(dv
z@DAvuCf;e%OJv@K8S%UiGs38E!ertcctnexI1fDlT>%$oooeC((1oQ}p=U!s0DcX6
z0rWh=2cZ{Q`Soz(#F&NO6vx^T@%ryXiMMI4%>#5jfBX6&}f#u@B(W49ftwevY`QZfP4^1i`2PSF56W5q
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Add-RKSJ-H.bcmap b/website/view/cmaps/Add-RKSJ-H.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..1238dd85837c43671a2af05a5c87b61efe02a662f8072b308e57d5873de622b1
GIT binary patch
literal 2413
zcmW+&Yg<#t7JgTDc9NYyAOwPxTexVs69h$s#!VxNsHort6_ss`c;R9I;draTQz>^5
zB-}yKw$@sywYJqgd*Ivo8$RvnH=n29&!;oze3<>NJu~k+Yt~xN%$Pnj1Uj$X=(^l`
zsmEJVQQ<4x>ho22t1on(4|*GKboT_?yS@85zUb__*4d@?1TPfXtJ~VV|DWIO?Fx1W
zyL$iE*%%CZi;55I3)Iv%)_~9tqJGt=0zKYE^g(@B;gL7U}%yTf_E$7&sr%ouPqC<9T}qydj;K6ArB9ZcM_-~V+gdA@G8C4Sv)OB{4u
z_6}ynI0tu=Yq0T%_p6on<)%1`Q*oxb(wu!Jk1##LOgoVhlj5w&PRx$0HVv)}2JzSN
zQ1svv=U^*%l69~TdPB(&pf}P`DflNC+7A7wb!Z3lV>DD9iXKvJLjmZ=twRUFlQDE0
z`U%re6L^Ygs2TbxX{ZJI>6D?Mm>RYZo1ix*4LhNq!Ei40vt`5i(9g-k8hEN}_!9IM
zY50~V4XYTwD^@*^su2oB4~Oj|e&`o0BX!V&@<;>pi`gS5p|>g{ccEYMjM|}J-ZYx2
z$s?*VS}B-U;2zy0@G84aeD1G1$MURD}9&~}3tu@a#Q3Iv5M$O
zJ6L5#P#irE@kEvn2MPoShY0M3Kl4uX$!?oshCX$
z+bzweg4M{gnP7V?v$%d<}SB-25@H^Xc=K
z!7kVq?4jss6$@@+LHmM`Xr%?Qp-Z%|8SJvMAbh_PwNMInHFlvoUaZsPh-zItBz)_Fcdl88sIc}ZlZkCxiN{^3~?b$kQMRV{XI5?o@L1T7Pm%NSb#gtCY1@-Ts(Dhc*=LS`-4+SEBY}OH
z0Cu;74B7)jih*Ia!jSJtFf8In(WIIGfEV5qnJel6FAgd5s&h3ShTXQB4Z{(&S_JNk
zU#)@>jnxJ*9Ja4E!f=9@l&!YFhymZa`Dr3}sq3j_@0!2!dQ2P3h+07jA+PS(r|v*2atiEq1C2VUOq
z1K$x+R>JuHE_lWM7lN8+}oo?e^C7|Zd2S3l@#;CAu9i&
zh0+CEa&
z_S2@dK8#}NwGW2R`g$9T
zlFhIEFiK-z2f=swUiWFz$GsQ;aQ~)gH?)+$RR7O8l=^ckee%X)^1aC-=bK}J*f$rb
z;7u>dzhu$5U-Bsats_wI)=RN(>uJl|a}@WhmDFF81O8u|ss6WQD){Ycp#1kuB>#Sd
z@_s)-(eEUReHTZ?@3I5M?~au$E;rrIsR73IE0M@*l19U
hBiJ~FjYe!VVdI#~IGtd0&_=Ch`g=^e-y*oZ{{`ID*(m@3
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Add-RKSJ-V.bcmap b/website/view/cmaps/Add-RKSJ-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..b73b6853601a07d3b2d963bac4518a5f41bb606561f72a55420d636d99102afe
GIT binary patch
literal 287
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T<(QJ98{{4ArR$N%-RQ`;*Pnsm
zfDaG{aWn1>~Fdm56S{nsR6Mn5Gw+)3Jb$Qmev}EgS-IcxJ}{!
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Add-V.bcmap b/website/view/cmaps/Add-V.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..5c9722f5ac2ab4f0b3d1fe42f370e0349b153834df2c9bebbbef78aff57680c1
GIT binary patch
literal 282
zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe
z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>X?$E>ygNGht``8&6_OUQ99OMMjtU#KJf$^YlAa{AfKF&6QHh#7?i8gWe
mHX)Wa;Wmy$_VR4TgR($XYCxDx8|p%l=LmHM8lDo74dk4_$_P(g(w!-Hg>R!685l<
z1014^3aY5#2*)_VDe5@GIWEvZ6D?e#jSjAGjT_wJ4)^Hd0grgXGhWccE8ft@07Hy0
T#ycjM;sc-f!Z&`z(oFmT7oB|o
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-1.bcmap b/website/view/cmaps/Adobe-CNS1-1.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..ff58a4e989a15f31f776c2c5a6f4d791804707fde791f5aa40516c710584cf34
GIT binary patch
literal 371
zcmW;IQAa~@7{~FmUG^&eZ(!@RyK_0)E=Ic8c?GTgwb(lAe~#GII?0+zl4K@HGLs}p
zW|AaHlF3YxOp+u?l9{CMiRbhDcsy4>e>V}aa(Oi|o_55LVd#O7t{WnpvXWAmdE1d$
zTf`^FES0m=s3TLsfp8`x{{L;Eq%GC7cQmCG!NK8pBsOBkd_GNc=L=I&qQJ~z4n>qu
z#sU_xgk`K?6%|ymhIMRU6I-aEj&1B<7kk*p0S?hX6Gu442~Kf_b6nsOSGYzCH)x}S
qTioFu59s0%Pk6=)Uh#%^eBcvb_(l(X{NNYvjJLc7T(1JRsQm#8LY3P9
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-2.bcmap b/website/view/cmaps/Adobe-CNS1-2.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..1d0d51494da7d96cedd7a49a8b66d160bf2eeb051f50e836fdd25b121db09adc
GIT binary patch
literal 376
zcmW;I(MLmJ7{~FmF8eFqf1vHu-MQP$xfto9^A}WmtyrDyJxAWRfH^
z$xM>WB$*^hCP|WHk|gPS;`uy39?#XUt34QZGdVSu8udl5WtlyFrfG>-(jAt<$$7pU
z_e5f1#8nwr4f!$|?vAC?;{V?hN_tXF21iFq5svgH;`V@JheC#-XY*N`$TL%z#te#>
z!#ozSh$SqegcYn}4eQvzCbqDRGIp?wJ?!HE6;yGEBh*mGF-~xbGc?e|IWBOC7OrrO
s8{Fa!_h{n*k9fi}Uhs-HyrY8;eBuk=_`xr9Ay`2JI;cR?K~xuwKLRC}r~m)}
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-3.bcmap b/website/view/cmaps/Adobe-CNS1-3.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..8679e706067d6911ff4d597bda1be8110299a602651a7c34be0ba90af8cd349e
GIT binary patch
literal 401
zcmW;IK`TU26u|K}mcGN({Q|~g_m$`K@18oH)xWONo(l2>)7#w>sV2{J8=76$Q^{=5sg+*{Bi$FO
zOn+Bk@`34ybT(0+%;nVoeW;8MwHdTaUu%_UY|W(7ZGJiya~zo}4zw_eykU%>gi(xP
z921yC8Pk}-Eaote1uS9-%UHoG*07EZY+?)B*ugILu#W>A;t0n$!70vgjtgAk3fH*7
zE$(oS2UPHgDr$JbGhXnDH@xEmpZLNze((z!vY#y=Hi6g%Vk3yHAU1>84nl~yl$}3x
CU7_Cq
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-4.bcmap b/website/view/cmaps/Adobe-CNS1-4.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..262064e04bd1a2298d6fb5709dc54de26f50f019b59baff53abbd9e7d55511e1
GIT binary patch
literal 405
zcmW;IK`TU26u|K}mexMN{Q|~g_m#NRlK?k|s%#
zBuSDaNs^>Vk|arzB>7);fA`estp0Vij%1K8n7*FgNHu$&+t}i|o=RkbF0K4R80r2{
zrE}eZ$p@x0(wTUDBAZqJ_n|U6)Mn5weXUizsV$vMwfm`9%yDG8IMB){@`f>jQH)_6
z6PUylN+@FnvzWs?7O;pVETe)ItYQsStYZV4*upk;u!}wH;{b;^!ZA*8iZh(!0++bL
zHEwW=JJfKG2Rz~l&v?Nr-tdkOeBuk=_`xq^$bPnf*aTu5h>ak&g4hgVJBSS-C8t5k
F&L0K8qip~H
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-5.bcmap b/website/view/cmaps/Adobe-CNS1-5.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..a35d7898958e97d3693446bc132ab6ef9722840fc5157ed463bb9150a08e1860
GIT binary patch
literal 406
zcmW;IK`TU26u|K}mNve^{Q|~g_mN!#-X5)|zBpQ#PGx_A`luPwPmMBxy;KBx#c*Ns=T<
zk|arzv`LaANs=W0qwepXI-RF~O|>;06pCSYXIE?*JkPCbbY0J+azVQ_eldz|Ph_&a
z9YI(K!nWAvlC`OP-u&N3CbW?a`*rDCYm)WN*>tAG&m-sM?B#fFL=cp-tmD?eBm2E_=ODUrv*e4h&B+7AX-5*gJ=iQ5JCxG%FZ9F
CgrqG1
literal 0
HcmV?d00001
diff --git a/website/view/cmaps/Adobe-CNS1-UCS2.bcmap b/website/view/cmaps/Adobe-CNS1-UCS2.bcmap
new file mode 100644
index 0000000000000000000000000000000000000000000000000000000000000000..95957b77482df549379a66c64a3635e850c2ddceec92df5e88eda822233ba20d
GIT binary patch
literal 41193
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 20z1q=#Ujit91m(Gq?gLaI
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