From 393ebc1a50e32b59d1bf894eaec89d506f9b93b6 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 11 May 2026 20:34:52 +0000 Subject: [PATCH] WIP backup: snapshot all local notes, slides, tutorials, and kernel work Backup commit grouping all in-progress local work so nothing is lost: - Modified CK-UA kernel + example sources (unified_attention.cpp, unified_attention_kernel.hpp) and CMake/build files. - Updated dispatcher README and ctypes_utils.py. - New unified_attention example notes: PARAMETERS.md, VARIABLES.md. - New unified_attention instances for d128 fp16/bf16 (mask/nmask, gqa6). - New 99_toy_tutorial/ collection: bank-conflict investigations (test_*.cpp, *.js, *.gdb, *.asm, *.md), tile distribution / row reduction / calling_gemm / thread_buffer tutorials. - Slide decks and supporting assets (bank_conflict_slides.qmd/.html, tile_distribution_slides.qmd, assets/, *_files/, step1_reshape_only, xor_full_steps_simple). - GDB helper script (break_on_ds_read.gdb). Not intended for upstream review; pure WIP snapshot. --- CMakeLists.txt | 17 +- CMakePresets.json | 39 + assets/bank_conflict_numbers.csv | 7 + assets/bank_rules_interactive.html | 354 + assets/coalescing_interactive.html | 261 + assets/coalescing_model.py | 241 + assets/step1_reshape_only.html | 638 + assets/xor_full_steps_simple.html | 401 + bank_conflict_slides.html | 1405 + bank_conflict_slides.qmd | 913 + .../figure-revealjs/cell-2-output-1.png | Bin 0 -> 46112 bytes .../figure-revealjs/cell-3-output-1.png | Bin 0 -> 32268 bytes .../figure-revealjs/cell-4-output-1.png | Bin 0 -> 38186 bytes .../figure-revealjs/cell-5-output-1.png | Bin 0 -> 204624 bytes .../figure-revealjs/cell-6-output-1.png | Bin 0 -> 48547 bytes .../figure-revealjs/cell-7-output-1.png | Bin 0 -> 37986 bytes .../figure-revealjs/cell-8-output-1.png | Bin 0 -> 38186 bytes .../figure-revealjs/cell-9-output-1.png | Bin 0 -> 150943 bytes .../libs/clipboard/clipboard.min.js | 7 + .../libs/quarto-html/light-border.css | 1 + .../libs/quarto-html/popper.min.js | 6 + .../libs/quarto-html/quarto-html.min.css | 1 + .../quarto-syntax-highlighting.css | 180 + .../libs/quarto-html/tabby.min.js | 418 + .../libs/quarto-html/tippy.css | 1 + .../libs/quarto-html/tippy.umd.min.js | 2 + .../libs/revealjs/dist/reset.css | 30 + .../libs/revealjs/dist/reveal.css | 8 + .../libs/revealjs/dist/reveal.esm.js | 9 + .../libs/revealjs/dist/reveal.esm.js.map | 1 + .../libs/revealjs/dist/reveal.js | 9 + .../libs/revealjs/dist/reveal.js.map | 1 + .../dist/theme/fonts/league-gothic/LICENSE | 2 + .../fonts/league-gothic/league-gothic.css | 10 + .../fonts/league-gothic/league-gothic.eot | Bin 0 -> 25696 bytes .../fonts/league-gothic/league-gothic.ttf | Bin 0 -> 64256 bytes .../fonts/league-gothic/league-gothic.woff | Bin 0 -> 30764 bytes .../dist/theme/fonts/source-sans-pro/LICENSE | 45 + .../source-sans-pro-italic.eot | Bin 0 -> 75720 bytes .../source-sans-pro-italic.ttf | Bin 0 -> 238084 bytes .../source-sans-pro-italic.woff | Bin 0 -> 98556 bytes .../source-sans-pro-regular.eot | Bin 0 -> 88070 bytes .../source-sans-pro-regular.ttf | Bin 0 -> 288008 bytes .../source-sans-pro-regular.woff | Bin 0 -> 114324 bytes .../source-sans-pro-semibold.eot | Bin 0 -> 89897 bytes .../source-sans-pro-semibold.ttf | Bin 0 -> 284640 bytes .../source-sans-pro-semibold.woff | Bin 0 -> 115648 bytes .../source-sans-pro-semibolditalic.eot | Bin 0 -> 75706 bytes .../source-sans-pro-semibolditalic.ttf | Bin 0 -> 240944 bytes .../source-sans-pro-semibolditalic.woff | Bin 0 -> 98816 bytes .../fonts/source-sans-pro/source-sans-pro.css | 39 + .../libs/revealjs/dist/theme/quarto.css | 8 + .../plugin/highlight/highlight.esm.js | 5 + .../revealjs/plugin/highlight/highlight.js | 5 + .../revealjs/plugin/highlight/monokai.css | 71 + .../libs/revealjs/plugin/highlight/plugin.js | 439 + .../revealjs/plugin/highlight/zenburn.css | 80 + .../revealjs/plugin/markdown/markdown.esm.js | 1 + .../libs/revealjs/plugin/markdown/markdown.js | 1 + .../libs/revealjs/plugin/markdown/plugin.js | 475 + .../libs/revealjs/plugin/math/katex.js | 96 + .../libs/revealjs/plugin/math/math.esm.js | 1 + .../libs/revealjs/plugin/math/math.js | 1 + .../libs/revealjs/plugin/math/mathjax2.js | 89 + .../libs/revealjs/plugin/math/mathjax3.js | 77 + .../libs/revealjs/plugin/math/plugin.js | 15 + .../libs/revealjs/plugin/notes/notes.esm.js | 1 + .../libs/revealjs/plugin/notes/notes.js | 1 + .../libs/revealjs/plugin/notes/plugin.js | 236 + .../revealjs/plugin/notes/speaker-view.html | 884 + .../revealjs/plugin/pdf-export/pdfexport.js | 111 + .../revealjs/plugin/pdf-export/plugin.yml | 2 + .../quarto-line-highlight/line-highlight.css | 31 + .../quarto-line-highlight/line-highlight.js | 351 + .../plugin/quarto-line-highlight/plugin.yml | 4 + .../revealjs/plugin/quarto-support/footer.css | 110 + .../revealjs/plugin/quarto-support/plugin.yml | 5 + .../revealjs/plugin/quarto-support/support.js | 338 + .../plugin/reveal-chalkboard/README.md | 160 + .../font-awesome/LICENSE.txt | 34 + .../font-awesome/css/all.css | 5 + .../font-awesome/css/brands.css | 5 + .../font-awesome/css/fontawesome.css | 5 + .../font-awesome/css/regular.css | 5 + .../font-awesome/css/solid.css | 5 + .../font-awesome/css/svg-with-js.css | 5 + .../font-awesome/css/v4-shims.css | 2170 + .../font-awesome/css/v4-shims.min.css | 5 + .../font-awesome/webfonts/fa-brands-400.eot | Bin 0 -> 115052 bytes .../font-awesome/webfonts/fa-brands-400.svg | 1127 + .../font-awesome/webfonts/fa-brands-400.ttf | Bin 0 -> 114816 bytes .../font-awesome/webfonts/fa-brands-400.woff | Bin 0 -> 73920 bytes .../font-awesome/webfonts/fa-brands-400.woff2 | Bin 0 -> 63376 bytes .../font-awesome/webfonts/fa-regular-400.eot | Bin 0 -> 40744 bytes .../font-awesome/webfonts/fa-regular-400.svg | 467 + .../font-awesome/webfonts/fa-regular-400.ttf | Bin 0 -> 40516 bytes .../font-awesome/webfonts/fa-regular-400.woff | Bin 0 -> 18212 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 14952 bytes .../font-awesome/webfonts/fa-solid-900.eot | Bin 0 -> 160768 bytes .../font-awesome/webfonts/fa-solid-900.svg | 2231 + .../font-awesome/webfonts/fa-solid-900.ttf | Bin 0 -> 160548 bytes .../font-awesome/webfonts/fa-solid-900.woff | Bin 0 -> 76632 bytes .../font-awesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 59572 bytes .../reveal-chalkboard/img/blackboard.png | Bin 0 -> 32733 bytes .../img/boardmarker-black.png | Bin 0 -> 2142 bytes .../img/boardmarker-blue.png | Bin 0 -> 2127 bytes .../img/boardmarker-green.png | Bin 0 -> 2106 bytes .../img/boardmarker-orange.png | Bin 0 -> 2240 bytes .../img/boardmarker-purple.png | Bin 0 -> 2044 bytes .../reveal-chalkboard/img/boardmarker-red.png | Bin 0 -> 2119 bytes .../img/boardmarker-yellow.png | Bin 0 -> 2105 bytes .../reveal-chalkboard/img/chalk-blue.png | Bin 0 -> 5150 bytes .../reveal-chalkboard/img/chalk-green.png | Bin 0 -> 4801 bytes .../reveal-chalkboard/img/chalk-orange.png | Bin 0 -> 5010 bytes .../reveal-chalkboard/img/chalk-purple.png | Bin 0 -> 5250 bytes .../reveal-chalkboard/img/chalk-red.png | Bin 0 -> 4786 bytes .../reveal-chalkboard/img/chalk-white.png | Bin 0 -> 5199 bytes .../reveal-chalkboard/img/chalk-yellow.png | Bin 0 -> 5097 bytes .../plugin/reveal-chalkboard/img/sponge.png | Bin 0 -> 3612 bytes .../reveal-chalkboard/img/whiteboard.png | Bin 0 -> 34129 bytes .../plugin/reveal-chalkboard/plugin.js | 1985 + .../plugin/reveal-chalkboard/plugin.yml | 7 + .../plugin/reveal-chalkboard/style.css | 44 + .../libs/revealjs/plugin/reveal-menu/menu.css | 346 + .../libs/revealjs/plugin/reveal-menu/menu.js | 1 + .../revealjs/plugin/reveal-menu/plugin.yml | 9 + .../plugin/reveal-menu/quarto-menu.css | 68 + .../plugin/reveal-menu/quarto-menu.js | 43 + .../libs/revealjs/plugin/search/plugin.js | 243 + .../libs/revealjs/plugin/search/search.esm.js | 7 + .../libs/revealjs/plugin/search/search.js | 7 + .../libs/revealjs/plugin/zoom/plugin.js | 264 + .../libs/revealjs/plugin/zoom/zoom.esm.js | 4 + .../libs/revealjs/plugin/zoom/zoom.js | 4 + break_on_ds_read.gdb | 36 + dispatcher/README.md | 4 +- dispatcher/python/ctypes_utils.py | 150 +- .../42_unified_attention/PARAMETERS.md | 413 + .../ck_tile/42_unified_attention/VARIABLES.md | 736 + .../unified_attention_d128_bf16_mask_gqa6.cpp | 14 + ...unified_attention_d128_bf16_nmask_gqa6.cpp | 14 + .../unified_attention_d128_fp16_mask_gqa6.cpp | 14 + ...unified_attention_d128_fp16_nmask_gqa6.cpp | 14 + .../unified_attention.cpp | 18 + .../99_toy_tutorial/BANK_CONFLICT_TUTORIAL.md | 1547 + .../ck_tile/99_toy_tutorial/CMakeLists.txt | 91 + .../99_toy_tutorial/ELEMENTWISE_ANSWER.md | 137 + .../99_toy_tutorial/IMPLEMENTATION_SUMMARY.md | 324 + .../99_toy_tutorial/LDS_FUNDAMENTALS.md | 761 + .../QUICK_START_BANK_CONFLICTS.md | 168 + example/ck_tile/99_toy_tutorial/README.md | 243 + .../99_toy_tutorial/THREAD_BUFFER_GUIDE.md | 171 + .../scripts/analyze_bank_conflicts.py | 233 + .../scripts/profile_bank_conflicts.sh | 151 + .../space_filling_curve_debug.py | 239 + .../99_toy_tutorial/test_elementwise.cpp | 104 + .../CMakeLists.txt | 21 + .../tensor_fundamentals.cpp | 603 + .../CHAIN_TENSOR_ADAPTORS_EXPLAINED.md | 814 + .../CMakeLists.txt | 22 + .../XOR_LDS_LAYOUT_COMPLETE_EXAMPLE.md | 705 + .../XOR_TRANSFORM_EXPLAINED.md | 1138 + .../tensor_adaptors.cpp | 531 + .../BUFFER_VIEW_ERROR_EXPLAINED.md | 193 + .../CMakeLists.txt | 21 + .../padding_with_tiles.cpp | 177 + .../CMakeLists.txt | 22 + .../DESCRIPTOR_VS_ADAPTOR.md | 395 + .../descriptor_vs_adaptor.cpp | 440 + .../CMakeLists.txt | 23 + .../basic_distributed_gemm.cpp | 457 + .../CMakeLists.txt | 27 + .../DISTRIBUTION_ANALYSIS.md | 82 + .../REPLICATION_GOAL.md | 92 + .../tests/CMakeLists.txt | 31 + .../test_a_distribution_with_replication.cpp | 231 + .../tests/test_a_embed_distribution.cpp | 259 + .../test_b_distribution_with_replication.cpp | 255 + .../tests/test_b_embed_distribution.cpp | 248 + .../tile_sweeping_gemm.cpp | 557 + .../CMakeLists.txt | 27 + .../Y_REPETITION_EXPLAINED.md | 215 + .../tests/CMakeLists.txt | 27 + .../test_a_distribution_y_repetition.cpp | 173 + .../tests/test_a_y_slicing.cpp | 191 + .../test_b_distribution_y_repetition.cpp | 165 + .../tests/test_b_y_slicing.cpp | 189 + .../tile_sweeping_with_y_repetition.cpp | 545 + .../tutorial_08_lds_staging/CMakeLists.txt | 14 + .../IMPLEMENTATION_PLAN.md | 372 + .../lds_staging_gemm.cpp | 610 + .../simple_lds_staging.cpp | 617 + .../tutorial_09_optimized_lds/CMakeLists.txt | 12 + .../IMPLEMENTATION_PLAN.md | 34 + .../tutorial_09_optimized_lds/README.md | 258 + .../optimized_lds_gemm.cpp | 777 + .../optimized_lds_gemm.cpp.bak | 613 + .../optimized_lds_gemm.cpp.orig | 760 + .../optimized_lds_gemm_v2.cpp | 613 + .../tutorial_10_xor_lds/BUG_FOUND.md | 87 + .../B_MATRIX_BUG_ANALYSIS.md | 132 + .../tutorial_10_xor_lds/CMakeLists.txt | 20 + .../tutorial_10_xor_lds/DEBUG_NOTES.md | 63 + .../tutorial_10_xor_lds/FINAL_BUG_ANALYSIS.md | 53 + .../IMPLEMENTATION_PLAN.md | 34 + .../tutorial_10_xor_lds/README.md | 258 + .../tutorial_10_xor_lds/README_REFACTORING.md | 59 + .../tutorial_10_xor_lds/TEST_COPY_ONLY.md | 41 + .../tutorial_10_xor_lds/distributions.hpp | 107 + .../optimized_lds_gemm.cpp.bak | 613 + .../optimized_lds_gemm.cpp.orig | 760 + .../optimized_lds_gemm_v2.cpp | 613 + .../xor_copy_only_test.cpp | 395 + .../tutorial_10_xor_lds/xor_descriptors.hpp | 130 + .../tutorial_10_xor_lds/xor_lds_gemm.cpp | 904 + .../xor_lds_gemm.cpp.before_split | 879 + .../BANK_CONFLICT_SUMMARY.md | 159 + .../tutorial_11_xor_test/BREAKTHROUGH.md | 83 + .../tutorial_11_xor_test/CMakeLists.txt | 106 + .../tutorial_11_xor_test/FINAL_STATUS.md | 96 + .../tutorial_11_xor_test/FINDINGS.md | 84 + .../XOR_TRANSPOSE_SUMMARY.md | 429 + .../animation/01_mapping_spec.md | 95 + .../animation/02_storyboard_ascii.md | 227 + .../tutorial_11_xor_test/animation/README.md | 60 + .../tutorial_11_xor_test/animation/app.js | 155 + .../tutorial_11_xor_test/animation/index.html | 43 + .../animation/step1_reshape_only.html | 638 + .../tutorial_11_xor_test/animation/styles.css | 324 + .../animation/xor_full_steps_simple.html | 401 + .../animation/xor_single_grid.html | 352 + .../tutorial_11_xor_test/decode_lds_fp16.py | 111 + .../tutorial_11_xor_test/xor_shift_svg.py | 58 + .../xor_shift_visualization.html | 103 + .../xor_shift_visualization.py | 78 + .../xor_shift_visualization.svg | 575 + .../tutorial_11_xor_test/xor_test.cpp | 257 + .../xor_test_conflict_pattern.cpp | 306 + .../xor_test_plain_only.cpp | 292 + .../xor_test_production_transpose.cpp | 478 + .../xor_test_real_transpose.cpp | 397 + .../xor_test_swapped_transpose.cpp | 261 + .../tutorial_11_xor_test/xor_test_toggle.cpp | 333 + .../xor_test_toggle_proper.cpp | 336 + .../xor_test_toggle_transpose.cpp | 320 + .../xor_test_transpose.cpp | 310 + .../xor_test_transpose_lds.cpp | 287 + .../xor_test_with_gemm_dist.cpp | 306 + .../xor_test_with_tile_window.cpp | 279 + .../tutorial_12_xor_correct/BUG_FOUND.md | 87 + .../B_MATRIX_BUG_ANALYSIS.md | 132 + .../tutorial_12_xor_correct/CMakeLists.txt | 12 + .../tutorial_12_xor_correct/DEBUG_NOTES.md | 63 + .../FINAL_BUG_ANALYSIS.md | 53 + .../IMPLEMENTATION_PLAN.md | 34 + .../tutorial_12_xor_correct/README.md | 258 + .../README_REFACTORING.md | 59 + .../tutorial_12_xor_correct/TEST_COPY_ONLY.md | 41 + .../tutorial_12_xor_correct/distributions.hpp | 107 + .../optimized_lds_gemm.cpp.bak | 613 + .../optimized_lds_gemm.cpp.orig | 760 + .../optimized_lds_gemm_v2.cpp | 613 + .../xor_copy_only_test.cpp | 395 + .../xor_correct_gemm.cpp | 904 + .../xor_correct_gemm_backup.cpp | 904 + .../xor_descriptors.hpp | 130 + .../xor_lds_gemm.cpp.before_split | 879 + .../tutorial_13_production_xor/CMakeLists.txt | 10 + .../CONSTRAINTS_VISUAL_GUIDE.md | 191 + .../LDS_CONSTRAINTS.md | 313 + .../PHASE_GROUPING_EXPLAINED.md | 194 + .../PHASE_GROUPING_VISUAL.md | 160 + .../tutorial_13_production_xor/README.md | 225 + .../STORAGE_LAYOUT_CONFLICTS.md | 407 + .../TRANSPOSE_EXAMPLE_DETAILED.md | 157 + .../TRANSPOSE_THEORY.md | 214 + .../production_xor_gemm.cpp | 663 + .../01_row_major.cpp | 305 + .../01_row_major_fp32.cpp | 302 + .../02_column_major.cpp | 310 + .../03_row_major_padded.cpp | 317 + .../04_row_major_xor.cpp | 493 + .../04_row_major_xor_fp32.cpp | 395 + .../05_xor_plus_padding.cpp | 397 + .../06_xor_register_transpose.cpp | 440 + .../07_xor_cross_warp_lds_transpose.cpp | 490 + .../08_xor_cross_warp_window_reinterpret.cpp | 468 + .../09_DEBUGGING_GUIDE.md | 132 + .../09_minimal_buffer_view_lds.cpp | 142 + .../10_m_vector_store.cpp | 567 + .../11_sfc_and_tile_distribution_intro.cpp | 273 + .../12_sweep_tile_intro.cpp | 428 + .../13_scatter_gather_intro.cpp | 230 + .../14_shuffle_tile_intro.cpp | 193 + ...5_static_array_and_thread_buffer_intro.cpp | 268 + .../16_sync_primitives_intro.cpp | 493 + .../17_sync_wrappers_intro.cpp | 696 + .../18_global_to_lds_paths.cpp | 509 + .../19_async_load_tile_packed_lds.cpp | 409 + .../20_static_distributed_tensor_intro.cpp | 489 + .../21_load_tile_intro.cpp | 169 + .../22_y_sliced_thread_data_intro.cpp | 273 + .../CMakeLists.txt | 143 + .../1224405-1224410-counter_values.dat | Bin 0 -> 2064 bytes .../1224405-1224445-counter_values.dat | Bin 0 -> 2064 bytes .../1224405-1224474-counter_values.dat | Bin 0 -> 2064 bytes .../1224405-1224514-counter_values.dat | Bin 0 -> 3096 bytes .../1224405-1224553-counter_values.dat | Bin 0 -> 1057800 bytes .../1224405-1226461-counter_values.dat | Bin 0 -> 11352 bytes .../1231341-1231346-counter_values.dat | Bin 0 -> 2064 bytes .../1231341-1231382-counter_values.dat | Bin 0 -> 2064 bytes .../1231341-1231410-counter_values.dat | Bin 0 -> 2064 bytes .../1231341-1231459-counter_values.dat | Bin 0 -> 3096 bytes .../1231341-1231498-counter_values.dat | Bin 0 -> 11352 bytes .../1236697-1236702-counter_values.dat | Bin 0 -> 2064 bytes .../1236697-1236739-counter_values.dat | Bin 0 -> 2064 bytes .../1236697-1236770-counter_values.dat | Bin 0 -> 2064 bytes .../1236697-1236800-counter_values.dat | Bin 0 -> 2064 bytes .../1236697-1236852-counter_values.dat | Bin 0 -> 6192 bytes .../1246685-1246690-counter_values.dat | Bin 0 -> 2064 bytes .../1246685-1246719-counter_values.dat | Bin 0 -> 2064 bytes .../1246685-1246767-counter_values.dat | Bin 0 -> 2064 bytes .../1246685-1246801-counter_values.dat | Bin 0 -> 2064 bytes .../1246685-1246833-counter_values.dat | Bin 0 -> 6192 bytes .../1246685-1246907-counter_values.dat | Bin 0 -> 6192 bytes .../3329776-3329781-counter_values.dat | Bin 0 -> 2064 bytes .../3329776-3329802-counter_values.dat | Bin 0 -> 2064 bytes .../3329776-3329824-counter_values.dat | Bin 0 -> 2064 bytes .../3329776-3329872-counter_values.dat | Bin 0 -> 2064 bytes .../3329776-3329894-counter_values.dat | Bin 0 -> 2064 bytes .../3329776-3329916-counter_values.dat | Bin 0 -> 2064 bytes .../3502708-3502728-counter_values.dat | Bin 0 -> 4160 bytes .../3504963-3504983-counter_values.dat | Bin 0 -> 4160 bytes .../3520673-3520693-counter_values.dat | Bin 0 -> 3120 bytes .../3706375-3706395-counter_values.dat | Bin 0 -> 520 bytes .../3735043-3735064-counter_values.dat | Bin 0 -> 2080 bytes .../3735299-3735319-counter_values.dat | Bin 0 -> 2080 bytes .../3752310-3752330-counter_values.dat | Bin 0 -> 2600 bytes .../3772153-3772173-counter_values.dat | Bin 0 -> 2600 bytes .../3773672-3773692-counter_values.dat | Bin 0 -> 3120 bytes .../3782054-3782074-counter_values.dat | Bin 0 -> 1560 bytes .../3785952-3786020-counter_values.dat | Bin 0 -> 2600 bytes .../3797677-3797746-counter_values.dat | Bin 0 -> 1040 bytes .../3797826-3797902-counter_values.dat | Bin 0 -> 1560 bytes .../3798144-3798211-counter_values.dat | Bin 0 -> 1040 bytes .../3798319-3798388-counter_values.dat | Bin 0 -> 520 bytes .../3826399-3826420-counter_values.dat | Bin 0 -> 2080 bytes .../402465-402471-counter_values.dat | Bin 0 -> 2064 bytes .../402465-402495-counter_values.dat | Bin 0 -> 2064 bytes .../402465-402515-counter_values.dat | Bin 0 -> 2064 bytes .../402465-402537-counter_values.dat | Bin 0 -> 3096 bytes .../4055991-4056014-counter_values.dat | Bin 0 -> 4160 bytes .../4057707-4057807-counter_values.dat | Bin 0 -> 3120 bytes .../investigation/01_row_major_debug.cpp | 189 + .../investigation/01_row_major_fp32.cpp.bak | 240 + .../investigation/02_column_major.cpp.bak | 249 + .../investigation/03_row_major_padded.cpp.bak | 256 + ..._major_xor-hip-amdgcn-amd-amdhsa-gfx942.bc | Bin 0 -> 35400 bytes ...or_xor-hip-amdgcn-amd-amdhsa-gfx942.tmp.bc | Bin 0 -> 2106728 bytes ..._row_major_xor-hip-amdgcn-amd-amdhsa.hipfb | Bin 0 -> 13888 bytes ...4_row_major_xor-hip-amdgcn-amd-amdhsa.mcin | 17 + ...major_xor-host-x86_64-unknown-linux-gnu.bc | Bin 0 -> 109316 bytes ...jor_xor-host-x86_64-unknown-linux-gnu.hipi | 139531 +++++++++++++++ ..._major_xor-host-x86_64-unknown-linux-gnu.s | 5852 + .../investigation/04_row_major_xor.cpp.bak | 481 + .../investigation/04_row_major_xor_asm | Bin 0 -> 52920 bytes .../04_row_major_xor_fp32.cpp.bak | 343 + .../investigation/04_row_major_xor_gpu.s | 2 + .../05_row_major_xor_debug_banks.cpp | 369 + .../06_debug_banks_from_window.cpp | 277 + .../investigation/08_force_lds_reads.cpp | 108 + .../AMD_CDNA3_WAVEFRONT_CONCURRENCY.md | 205 + .../investigation/AQLPROFILE_INSTALLED.md | 201 + .../investigation/ASM_DEBUGGING_GUIDE.md | 265 + .../investigation/ATT_THREAD_TRACE_GUIDE.md | 327 + .../BANK_CONFLICT_CALCULATION_FINAL.md | 267 + .../CONFLICT_ANALYSIS_SUMMARY.md | 118 + .../CONFLICT_CALCULATION_EXPLAINED.md | 265 + .../investigation/CONFLICT_MODEL_FINAL.md | 95 + .../investigation/CONFLICT_MODEL_STATUS.md | 180 + .../CORRECTED_MULTI_WF_RESULTS.md | 166 + .../investigation/DEBUG_ASM_PRACTICAL.md | 203 + .../investigation/FINAL_CONCLUSION.md | 207 + .../investigation/FINAL_SUMMARY.md | 101 + .../FINAL_SUMMARY_BANK_CONFLICTS.md | 175 + .../investigation/FINDINGS_SUMMARY.md | 264 + .../FP16_SAME_BANK_TEST_SUMMARY.md | 213 + .../investigation/HARDCODED_OFFSET_SUMMARY.md | 186 + .../investigation/IMPLEMENTATION_SUMMARY.md | 209 + .../investigation/INTER_LANE_FP16_QUESTION.md | 203 + .../investigation/INTRA_LANE_RESULTS.md | 82 + .../investigation/MANUAL_BANK_ANALYSIS.md | 141 + .../investigation/MULTI_WF_RESULTS.md | 127 + .../investigation/OFFSET_SOURCE_ANALYSIS.md | 277 + .../OLD_VS_NEW_MULTI_WF_COMPARISON.md | 205 + .../investigation/OMNITRACE_INSTALLATION.md | 280 + .../investigation/PRESENTATION_READY.md | 274 + .../PRESENTATION_READY_SUMMARY.md | 305 + .../investigation/PROFILER_FINDINGS.md | 127 + .../PROFILER_RESULTS_INTER_LANE_FP16.md | 198 + .../investigation/ROCGDB_ASM_DEBUG_GUIDE.md | 411 + .../investigation/ROCGDB_BREAKPOINT_GUIDE.md | 86 + .../investigation/ROCGDB_CONCLUSION.md | 150 + .../investigation/ROCGDB_FINDINGS.md | 111 + .../ROCM_COMPUTE_VIEWER_GUIDE.md | 290 + .../SHOULD_WE_CHANGE_DISTRIBUTION.md | 264 + .../investigation/TRACE_DECODER_STATUS.md | 232 + .../investigation/UNDERSTANDING.md | 95 + .../WHY_XOR_STILL_HAS_CONFLICTS.md | 246 + .../XOR_AND_OFFSET_INTERACTION.md | 216 + .../investigation/XOR_ASSEMBLY_ANALYSIS.md | 347 + .../XOR_CONFLICT_ANALYSIS_SUMMARY.md | 278 + .../a.out-hip-amdgcn-amd-amdhsa-gfx942 | Bin 0 -> 9792 bytes ...hip-amdgcn-amd-amdhsa-gfx942.0.0.preopt.bc | Bin 0 -> 33744 bytes ...mdgcn-amd-amdhsa-gfx942.0.2.internalize.bc | Bin 0 -> 33744 bytes ...ut-hip-amdgcn-amd-amdhsa-gfx942.0.4.opt.bc | Bin 0 -> 12716 bytes ...amdgcn-amd-amdhsa-gfx942.0.5.precodegen.bc | Bin 0 -> 7868 bytes ...amdgcn-amd-amdhsa-gfx942.1.5.precodegen.bc | Bin 0 -> 12160 bytes ...a.out-hip-amdgcn-amd-amdhsa-gfx942.1.lto.s | 310 + .../a.out-hip-amdgcn-amd-amdhsa-gfx942.lto.s | 161 + ...ip-amdgcn-amd-amdhsa-gfx942.resolution.txt | 9 + .../investigation/analyze_banks_live.gdb | 51 + .../analyze_hardcoded_offsets.md | 162 + .../investigation/analyze_lds_banks.py | 126 + .../investigation/analyze_write_conflicts.js | 96 + .../investigation/analyze_xor_detailed.js | 160 + .../ATT_INVESTIGATION_SUMMARY.md | 206 + .../att_profiling_tests/input_att.yaml | 16 + .../att_profiling_tests/input_att_simple.yaml | 10 + ...stats_ui_output_agent_26217_dispatch_1.csv | 1 + ...stats_ui_output_agent_46807_dispatch_1.csv | 1 + ...stats_ui_output_agent_46807_dispatch_2.csv | 1 + ...stats_ui_output_agent_46807_dispatch_3.csv | 1 + ...stats_ui_output_agent_46807_dispatch_4.csv | 1 + ...stats_ui_output_agent_46807_dispatch_5.csv | 1 + .../stats_ui_output_agent_8041_dispatch_1.csv | 1 + .../test1_same_slot_results.db | Bin 0 -> 1220608 bytes .../att_profiling_tests/test_all_dm_steps | Bin 0 -> 41200 bytes .../test_att_loop_8041_shader_engine_0_1.att | Bin 0 -> 1256 bytes .../test_att_loop_results.pftrace | Bin 0 -> 74912 bytes .../test_att_yaml_26217_shader_engine_0_1.att | Bin 0 -> 1384 bytes .../test_att_yaml_26217_shader_engine_1_1.att | Bin 0 -> 1544 bytes .../test_att_yaml_26217_shader_engine_2_1.att | Bin 0 -> 1256 bytes .../test_att_yaml_26217_shader_engine_3_1.att | Bin 0 -> 1256 bytes .../test_att_yaml_results.pftrace | Bin 0 -> 146264 bytes .../att_profiling_tests/test_calculator.js | 193 + .../test_calculator_write.js | 120 + .../att_profiling_tests/test_cu_assignment | Bin 0 -> 38792 bytes .../att_profiling_tests/test_descriptor_k0 | Bin 0 -> 7712 bytes .../test_exact_same_offsets | Bin 0 -> 21320 bytes .../att_profiling_tests/test_fp16_same_bank | Bin 0 -> 30320 bytes .../test_fp32_calculator.js | 93 + .../test_full_transpose_hip | Bin 0 -> 37664 bytes .../att_profiling_tests/test_inter_lane_fp16 | Bin 0 -> 54016 bytes .../test_inter_lane_fp16_fixed | Bin 0 -> 54672 bytes .../test_inter_wf_with_loop | Bin 0 -> 46632 bytes .../test_intra_lane_conflicts | Bin 0 -> 45240 bytes .../test_intra_lane_conflicts.s | 3311 + .../test_multi_thread_conflict | Bin 0 -> 45880 bytes .../test_multi_thread_conflict.s | 3360 + .../att_profiling_tests/test_phase0_lanes | Bin 0 -> 9648 bytes .../att_profiling_tests/test_simple_xor.js | 38 + .../test_simultaneous_access | Bin 0 -> 43136 bytes .../test_strace_46807_shader_engine_0_1.att | Bin 0 -> 1256 bytes .../test_strace_46807_shader_engine_0_2.att | Bin 0 -> 1288 bytes .../test_strace_46807_shader_engine_0_3.att | Bin 0 -> 1288 bytes .../test_strace_46807_shader_engine_0_4.att | Bin 0 -> 1416 bytes .../test_strace_46807_shader_engine_0_5.att | Bin 0 -> 1288 bytes .../test_strace_results.db | Bin 0 -> 1228800 bytes .../test_transpose_correct_conflict | Bin 0 -> 24008 bytes .../test_transpose_unrolled | Bin 0 -> 32384 bytes .../test_transpose_unrolled_O0 | Bin 0 -> 82488 bytes .../att_profiling_tests/test_true_concurrency | Bin 0 -> 39584 bytes .../att_profiling_tests/test_vector_load | Bin 0 -> 44592 bytes .../att_profiling_tests/test_wf_concurrency | Bin 0 -> 44912 bytes .../att_profiling_tests/test_write_conflicts | Bin 0 -> 33528 bytes .../att_profiling_tests/test_xor_all_columns | Bin 0 -> 14976 bytes .../att_profiling_tests/test_xor_all_phases | Bin 0 -> 18104 bytes .../att_profiling_tests/test_xor_descriptor | Bin 0 -> 8896 bytes .../att_profiling_tests/test_xor_detailed | Bin 0 -> 16264 bytes .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../ui_output_agent_8041_dispatch_1/code.json | 1 + .../filenames.json | 1 + .../occupancy.json | 1 + .../realtime.json | 1 + .../investigation/benchmark_all.sh | 52 + .../break_at_actual_lds_read.gdb | 37 + .../investigation/break_at_kentry.gdb | 31 + .../investigation/break_at_lds_read.gdb | 28 + .../investigation/break_in_gpu.gdb | 43 + .../investigation/break_on_ds_read.gdb | 36 + .../investigation/break_only_lds_load.gdb | 44 + .../calculate_banks_from_assembly.py | 127 + .../calculate_from_real_kernel.cpp.bak | 164 + .../conflict_calculator_fixed.cpp | 177 + .../conflict_visual_explanation.py | 121 + .../investigation/debug_descriptor_banks.cpp | 184 + .../investigation/debug_fp16_conflicts.cpp | 220 + .../debug_fp16_conflicts_assembly_based | Bin 0 -> 27752 bytes .../debug_fp16_conflicts_assembly_based.cpp | 237 + .../debug_fp16_conflicts_proper.cpp | 282 + .../investigation/debug_fp32_conflicts.cpp | 273 + .../investigation/debug_gpu_kernel.gdb | 34 + .../investigation/debug_lds_banks.gdb | 47 + .../investigation/debug_lds_kernel.gdb | 30 + .../investigation/debug_simple_lds.gdb | 28 + .../investigation/exhaustive_search.gdb | 30 + .../investigation/final_correct_xor.js | 128 + .../investigation/find_after_store.gdb | 31 + .../investigation/find_by_opcode.gdb | 35 + .../investigation/find_ds_reads.gdb | 34 + .../investigation/find_gpu_kernel.gdb | 21 + .../investigation/find_lds_reads.gdb | 27 + .../investigation/fp16_conflict_calculator | Bin 0 -> 22040 bytes .../fp16_conflict_calculator.cpp | 240 + .../fp16_conflict_calculator_correct | Bin 0 -> 22736 bytes .../fp16_conflict_calculator_correct.cpp | 242 + .../fp16_conflict_calculator_final | Bin 0 -> 22584 bytes .../fp16_conflict_calculator_final.cpp | 242 + .../fp16_conflict_calculator_per_instruction | Bin 0 -> 22920 bytes ...16_conflict_calculator_per_instruction.cpp | 247 + .../fp16_conflict_calculator_phase | Bin 0 -> 26680 bytes .../fp16_conflict_calculator_phase.cpp | 255 + .../investigation/fp16_conflict_calculator_v2 | Bin 0 -> 22664 bytes .../fp16_conflict_calculator_v2.cpp | 267 + .../investigation/fp16_conflict_calculator_v3 | Bin 0 -> 22400 bytes .../fp16_conflict_calculator_v3.cpp | 191 + .../investigation/fp16_conflict_calculator_v4 | Bin 0 -> 22120 bytes .../fp16_conflict_calculator_v4.cpp | 182 + .../investigation/fp16_conflict_calculator_v5 | Bin 0 -> 22120 bytes .../fp16_conflict_calculator_v5.cpp | 197 + .../investigation/fp16_conflict_calculator_v6 | Bin 0 -> 31456 bytes .../fp16_conflict_calculator_v6.cpp | 302 + .../3826420_agent_info.csv | 11 + .../3826420_counter_collection.csv | 5 + .../investigation/lds_bank_calculator.html | 959 + .../investigation/lds_conflict.txt | 1 + .../investigation/lds_metrics.txt | 1 + .../investigation/lds_metrics_detailed.txt | 5 + .../investigation/offset_source_simple.md | 124 + .../pmc_1/fixed_multi_wf_results_results.db | Bin 0 -> 1359872 bytes .../pmc_1/inter_lane_results_results.db | Bin 0 -> 1343488 bytes .../pmc_1/loop_results_results.db | Bin 0 -> 1347584 bytes .../pmc_1/multi_wf_test_results_results.db | Bin 0 -> 1355776 bytes .../pmc_1/simple_profile_agent_info.csv | 11 + .../simple_profile_counter_collection.csv | 2 + .../pmc_1/simple_profile_domain_stats.csv | 3 + .../pmc_1/simple_profile_hip_api_stats.csv | 11 + .../pmc_1/simple_profile_hip_api_trace.csv | 14 + .../pmc_1/simple_profile_kernel_stats.csv | 2 + .../pmc_1/simple_profile_kernel_trace.csv | 2 + .../investigation/print_banks_per_phase.cpp | 145 + .../investigation/print_real_phases.cpp | 208 + .../investigation/profile_att.sh | 42 + .../investigation/profile_diff_slot.txt | 3 + .../investigation/profile_lds.sh | 150 + .../investigation/profile_same_bank.txt | 3 + .../investigation/profile_same_slot.txt | 3 + .../investigation/pure_read_no_xor.cpp | 166 + .../investigation/pure_read_xor.cpp | 241 + .../investigation/read_only_no_xor.cpp | 126 + .../investigation/read_only_test.cpp | 264 + .../investigation/read_only_xor.cpp | 160 + .../investigation/rocprof_asm_profile.sh | 64 + .../rocprofv3_detailed_profiling.sh | 118 + .../investigation/run_all.sh | 107 + .../investigation/run_att_profile.sh | 78 + .../investigation/search_all_memory.gdb | 36 + .../investigation/search_ds_read.gdb | 24 + .../investigation/search_for_ds_read.gdb | 29 + .../investigation/search_forward.gdb | 27 + .../investigation/show_bank_conflicts.cpp | 105 + .../investigation/simple_disasm_search.gdb | 33 + .../investigation/simple_lds_disasm.txt | 2003 + .../investigation/simple_lds_test | Bin 0 -> 82008 bytes .../investigation/simple_lds_test.cpp | 57 + .../investigation/step_through_load.gdb | 58 + .../investigation/test_actual_conflicts.cpp | 217 + .../investigation/test_all_dm_steps.cpp | 207 + .../investigation/test_all_m_values.cpp | 216 + .../investigation/test_combined_conflicts.cpp | 197 + .../investigation/test_correct_mapping.cpp | 270 + .../investigation/test_cu_assignment.cpp | 258 + .../investigation/test_descriptor_k0.cpp | 26 + .../investigation/test_different_m1.cpp | 82 + .../investigation/test_exact_same_offsets.cpp | 70 + .../investigation/test_fp16_same_bank.cpp | 131 + .../investigation/test_fp16_same_slot.cpp | 213 + .../investigation/test_full_transpose_hip.cpp | 243 + .../investigation/test_inter_lane_fp16.cpp | 418 + .../investigation/test_inter_wf_conflicts.cpp | 212 + .../investigation/test_inter_wf_with_loop.cpp | 265 + .../test_intra_lane_conflicts.cpp | 237 + .../investigation/test_intra_lane_vector.cpp | 179 + .../test_multi_thread_conflict.cpp | 215 + .../investigation/test_phase0_lanes.cpp | 30 + .../test_phase_column_access.cpp | 221 + .../investigation/test_simple_conflict.cpp | 51 + .../test_simultaneous_access.cpp | 206 + .../investigation/test_slot_analysis.cpp | 179 + .../test_slot_based_conflicts.cpp | 203 + .../test_transpose_correct_conflict.cpp | 131 + .../investigation/test_transpose_unrolled.cpp | 168 + .../investigation/test_true_concurrency.cpp | 331 + .../investigation/test_vector_load.cpp | 261 + .../investigation/test_wavefront_model.cpp | 203 + .../investigation/test_wf_concurrency.cpp | 282 + .../investigation/test_write_conflicts.cpp | 237 + .../investigation/test_xor_all_columns.cpp | 103 + .../investigation/test_xor_all_phases.cpp | 113 + .../investigation/test_xor_descriptor.cpp | 75 + .../investigation/test_xor_detailed.cpp | 107 + .../investigation/test_xor_effect.cpp | 104 + .../investigation/test_xor_fp32_debug.cpp | 156 + .../investigation/understand_128_offset.md | 254 + .../understand_xor_descriptor.cpp | 215 + .../investigation/use_x_not_disassemble.gdb | 24 + .../verify_with_real_descriptor.cpp | 365 + .../investigation/verify_xor_banks.js | 200 + .../investigation/write_only_no_xor.cpp | 122 + .../investigation/write_only_test.cpp | 209 + .../investigation/write_only_xor.cpp | 161 + .../xor_conflicts_with_packing.js | 172 + .../investigation/xor_correct_banks.js | 108 + .../investigation/xor_kernel_lds_reads.asm | 42 + .../investigation/xor_with_distribution.cpp | 325 + .../investigation/xor_with_packing.js | 106 + .../investigation/xor_write_conflicts.js | 146 + .../tutorial_15_calling_gemm/CMakeLists.txt | 11 + .../tutorial_15_calling_gemm/calling_gemm.cpp | 942 + .../tutorial_16_row_reduction/CMakeLists.txt | 10 + .../row_reduction.cpp | 548 + .../tutorial_thread_buffer_apply.cpp | 237 + .../tutorial_thread_buffer_exp.cpp | 156 + .../tutorial_thread_buffer_exp_simple.cpp | 82 + .../tutorial_thread_buffer_methods.cpp | 240 + example/ck_tile/CMakeLists.txt | 2 + .../kernel/unified_attention_kernel.hpp | 2 +- step1_reshape_only.html | 638 + tile_distribution_slides.qmd | 1147 + xor_full_steps_simple.html | 401 + 664 files changed, 257117 insertions(+), 69 deletions(-) create mode 100644 assets/bank_conflict_numbers.csv create mode 100644 assets/bank_rules_interactive.html create mode 100644 assets/coalescing_interactive.html create mode 100644 assets/coalescing_model.py create mode 100755 assets/step1_reshape_only.html create mode 100755 assets/xor_full_steps_simple.html create mode 100644 bank_conflict_slides.html create mode 100644 bank_conflict_slides.qmd create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-2-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-3-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-4-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-5-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-6-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-7-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-8-output-1.png create mode 100644 bank_conflict_slides_files/figure-revealjs/cell-9-output-1.png create mode 100644 bank_conflict_slides_files/libs/clipboard/clipboard.min.js create mode 100644 bank_conflict_slides_files/libs/quarto-html/light-border.css create mode 100644 bank_conflict_slides_files/libs/quarto-html/popper.min.js create mode 100644 bank_conflict_slides_files/libs/quarto-html/quarto-html.min.css create mode 100644 bank_conflict_slides_files/libs/quarto-html/quarto-syntax-highlighting.css create mode 100644 bank_conflict_slides_files/libs/quarto-html/tabby.min.js create mode 100644 bank_conflict_slides_files/libs/quarto-html/tippy.css create mode 100644 bank_conflict_slides_files/libs/quarto-html/tippy.umd.min.js create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reset.css create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reveal.css create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js.map create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reveal.js create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/reveal.js.map create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/league-gothic/LICENSE create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.css create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.eot create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.ttf create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.woff create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/LICENSE create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf create mode 100755 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro.css create mode 100644 bank_conflict_slides_files/libs/revealjs/dist/theme/quarto.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/highlight/highlight.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/highlight/highlight.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/highlight/monokai.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/highlight/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/highlight/zenburn.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/markdown/markdown.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/markdown/markdown.js create mode 100755 bank_conflict_slides_files/libs/revealjs/plugin/markdown/plugin.js create mode 100755 bank_conflict_slides_files/libs/revealjs/plugin/math/katex.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/math/math.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/math/math.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/math/mathjax2.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/math/mathjax3.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/math/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/notes/notes.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/notes/notes.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/notes/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/notes/speaker-view.html create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/pdf-export/pdfexport.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/pdf-export/plugin.yml create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-line-highlight/plugin.yml create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-support/footer.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-support/plugin.yml create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/quarto-support/support.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/README.md create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/LICENSE.txt create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/all.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/brands.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/fontawesome.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/regular.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/solid.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/svg-with-js.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/v4-shims.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/css/v4-shims.min.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-brands-400.eot create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-brands-400.svg create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-brands-400.ttf create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-brands-400.woff create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-brands-400.woff2 create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-regular-400.eot create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-regular-400.svg create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-regular-400.ttf create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-regular-400.woff create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-regular-400.woff2 create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-solid-900.eot create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-solid-900.svg create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-solid-900.ttf create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-solid-900.woff create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/font-awesome/webfonts/fa-solid-900.woff2 create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/blackboard.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-black.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-blue.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-green.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-orange.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-purple.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-red.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/boardmarker-yellow.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-blue.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-green.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-orange.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-purple.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-red.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-white.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/chalk-yellow.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/sponge.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/img/whiteboard.png create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/plugin.yml create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-chalkboard/style.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-menu/menu.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-menu/menu.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-menu/plugin.yml create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/search/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/search/search.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/search/search.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/zoom/plugin.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/zoom/zoom.esm.js create mode 100644 bank_conflict_slides_files/libs/revealjs/plugin/zoom/zoom.js create mode 100644 break_on_ds_read.gdb create mode 100644 example/ck_tile/42_unified_attention/PARAMETERS.md create mode 100644 example/ck_tile/42_unified_attention/VARIABLES.md create mode 100644 example/ck_tile/42_unified_attention/instances/unified_attention_d128_bf16_mask_gqa6.cpp create mode 100644 example/ck_tile/42_unified_attention/instances/unified_attention_d128_bf16_nmask_gqa6.cpp create mode 100644 example/ck_tile/42_unified_attention/instances/unified_attention_d128_fp16_mask_gqa6.cpp create mode 100644 example/ck_tile/42_unified_attention/instances/unified_attention_d128_fp16_nmask_gqa6.cpp create mode 100644 example/ck_tile/99_toy_tutorial/BANK_CONFLICT_TUTORIAL.md create mode 100644 example/ck_tile/99_toy_tutorial/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/ELEMENTWISE_ANSWER.md create mode 100644 example/ck_tile/99_toy_tutorial/IMPLEMENTATION_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/LDS_FUNDAMENTALS.md create mode 100644 example/ck_tile/99_toy_tutorial/QUICK_START_BANK_CONFLICTS.md create mode 100644 example/ck_tile/99_toy_tutorial/README.md create mode 100644 example/ck_tile/99_toy_tutorial/THREAD_BUFFER_GUIDE.md create mode 100755 example/ck_tile/99_toy_tutorial/scripts/analyze_bank_conflicts.py create mode 100755 example/ck_tile/99_toy_tutorial/scripts/profile_bank_conflicts.sh create mode 100644 example/ck_tile/99_toy_tutorial/space_filling_curve_debug.py create mode 100644 example/ck_tile/99_toy_tutorial/test_elementwise.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_01_tensor_fundamentals/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_01_tensor_fundamentals/tensor_fundamentals.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_02_tensor_adaptors/CHAIN_TENSOR_ADAPTORS_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_02_tensor_adaptors/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_02_tensor_adaptors/XOR_LDS_LAYOUT_COMPLETE_EXAMPLE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_02_tensor_adaptors/XOR_TRANSFORM_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_02_tensor_adaptors/tensor_adaptors.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_03_padding_and_tiles/BUFFER_VIEW_ERROR_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_03_padding_and_tiles/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_03_padding_and_tiles/padding_with_tiles.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_04_descriptor_vs_adaptor/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_04_descriptor_vs_adaptor/DESCRIPTOR_VS_ADAPTOR.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_04_descriptor_vs_adaptor/descriptor_vs_adaptor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_05_basic_distributed_gemm/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_05_basic_distributed_gemm/basic_distributed_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/DISTRIBUTION_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/REPLICATION_GOAL.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tests/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tests/test_a_distribution_with_replication.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tests/test_a_embed_distribution.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tests/test_b_distribution_with_replication.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tests/test_b_embed_distribution.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_06_tile_sweeping_gemm/tile_sweeping_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/Y_REPETITION_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tests/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tests/test_a_distribution_y_repetition.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tests/test_a_y_slicing.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tests/test_b_distribution_y_repetition.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tests/test_b_y_slicing.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_07_tile_sweeping_with_y_repetition/tile_sweeping_with_y_repetition.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_08_lds_staging/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_08_lds_staging/IMPLEMENTATION_PLAN.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_08_lds_staging/lds_staging_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_08_lds_staging/simple_lds_staging.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/IMPLEMENTATION_PLAN.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/README.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/optimized_lds_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/optimized_lds_gemm.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/optimized_lds_gemm.cpp.orig create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_09_optimized_lds/optimized_lds_gemm_v2.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/BUG_FOUND.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/B_MATRIX_BUG_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/DEBUG_NOTES.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/FINAL_BUG_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/IMPLEMENTATION_PLAN.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/README.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/README_REFACTORING.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/TEST_COPY_ONLY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/distributions.hpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/optimized_lds_gemm.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/optimized_lds_gemm.cpp.orig create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/optimized_lds_gemm_v2.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/xor_copy_only_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/xor_descriptors.hpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/xor_lds_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_10_xor_lds/xor_lds_gemm.cpp.before_split create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/BANK_CONFLICT_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/BREAKTHROUGH.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/FINAL_STATUS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/FINDINGS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/XOR_TRANSPOSE_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/01_mapping_spec.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/02_storyboard_ascii.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/README.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/app.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/index.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/step1_reshape_only.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/styles.css create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/xor_full_steps_simple.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/animation/xor_single_grid.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/decode_lds_fp16.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_shift_svg.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_shift_visualization.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_shift_visualization.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_shift_visualization.svg create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_conflict_pattern.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_plain_only.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_production_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_real_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_swapped_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_toggle.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_toggle_proper.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_toggle_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_transpose_lds.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_with_gemm_dist.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_11_xor_test/xor_test_with_tile_window.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/BUG_FOUND.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/B_MATRIX_BUG_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/DEBUG_NOTES.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/FINAL_BUG_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/IMPLEMENTATION_PLAN.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/README.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/README_REFACTORING.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/TEST_COPY_ONLY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/distributions.hpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/optimized_lds_gemm.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/optimized_lds_gemm.cpp.orig create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/optimized_lds_gemm_v2.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/xor_copy_only_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/xor_correct_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/xor_correct_gemm_backup.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/xor_descriptors.hpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_12_xor_correct/xor_lds_gemm.cpp.before_split create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/CONSTRAINTS_VISUAL_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/LDS_CONSTRAINTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/PHASE_GROUPING_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/PHASE_GROUPING_VISUAL.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/README.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/STORAGE_LAYOUT_CONFLICTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/TRANSPOSE_EXAMPLE_DETAILED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/TRANSPOSE_THEORY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_13_production_xor/production_xor_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/01_row_major.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/01_row_major_fp32.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/02_column_major.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/03_row_major_padded.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/04_row_major_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/04_row_major_xor_fp32.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/05_xor_plus_padding.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/06_xor_register_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/07_xor_cross_warp_lds_transpose.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/08_xor_cross_warp_window_reinterpret.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/09_DEBUGGING_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/09_minimal_buffer_view_lds.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/10_m_vector_store.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/11_sfc_and_tile_distribution_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/12_sweep_tile_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/13_scatter_gather_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/14_shuffle_tile_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/15_static_array_and_thread_buffer_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/16_sync_primitives_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/17_sync_wrappers_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/18_global_to_lds_paths.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/19_async_load_tile_packed_lds.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/20_static_distributed_tensor_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/21_load_tile_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/22_y_sliced_thread_data_intro.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1224410-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1224445-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1224474-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1224514-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1224553-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1224405-1226461-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1231341-1231346-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1231341-1231382-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1231341-1231410-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1231341-1231459-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1231341-1231498-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1236697-1236702-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1236697-1236739-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1236697-1236770-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1236697-1236800-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1236697-1236852-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246690-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246719-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246767-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246801-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246833-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/1246685-1246907-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329781-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329802-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329824-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329872-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329894-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3329776-3329916-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3502708-3502728-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3504963-3504983-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3520673-3520693-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3706375-3706395-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3735043-3735064-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3735299-3735319-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3752310-3752330-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3772153-3772173-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3773672-3773692-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3782054-3782074-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3785952-3786020-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3797677-3797746-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3797826-3797902-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3798144-3798211-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3798319-3798388-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/3826399-3826420-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/402465-402471-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/402465-402495-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/402465-402515-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/402465-402537-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/4055991-4056014-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/.rocprofv3/4057707-4057807-counter_values.dat create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/01_row_major_debug.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/01_row_major_fp32.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/02_column_major.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/03_row_major_padded.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-hip-amdgcn-amd-amdhsa-gfx942.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-hip-amdgcn-amd-amdhsa-gfx942.tmp.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-hip-amdgcn-amd-amdhsa.hipfb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-hip-amdgcn-amd-amdhsa.mcin create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-host-x86_64-unknown-linux-gnu.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-host-x86_64-unknown-linux-gnu.hipi create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor-host-x86_64-unknown-linux-gnu.s create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor.cpp.bak create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor_asm create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor_fp32.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/04_row_major_xor_gpu.s create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/05_row_major_xor_debug_banks.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/06_debug_banks_from_window.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/08_force_lds_reads.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/AMD_CDNA3_WAVEFRONT_CONCURRENCY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/AQLPROFILE_INSTALLED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ASM_DEBUGGING_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ATT_THREAD_TRACE_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/BANK_CONFLICT_CALCULATION_FINAL.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/CONFLICT_ANALYSIS_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/CONFLICT_CALCULATION_EXPLAINED.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/CONFLICT_MODEL_FINAL.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/CONFLICT_MODEL_STATUS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/CORRECTED_MULTI_WF_RESULTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/DEBUG_ASM_PRACTICAL.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/FINAL_CONCLUSION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/FINAL_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/FINAL_SUMMARY_BANK_CONFLICTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/FINDINGS_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/FP16_SAME_BANK_TEST_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/HARDCODED_OFFSET_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/IMPLEMENTATION_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/INTER_LANE_FP16_QUESTION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/INTRA_LANE_RESULTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/MANUAL_BANK_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/MULTI_WF_RESULTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/OFFSET_SOURCE_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/OLD_VS_NEW_MULTI_WF_COMPARISON.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/OMNITRACE_INSTALLATION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/PRESENTATION_READY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/PRESENTATION_READY_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/PROFILER_FINDINGS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/PROFILER_RESULTS_INTER_LANE_FP16.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ROCGDB_ASM_DEBUG_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ROCGDB_BREAKPOINT_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ROCGDB_CONCLUSION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ROCGDB_FINDINGS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/ROCM_COMPUTE_VIEWER_GUIDE.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/SHOULD_WE_CHANGE_DISTRIBUTION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/TRACE_DECODER_STATUS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/UNDERSTANDING.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/WHY_XOR_STILL_HAS_CONFLICTS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/XOR_AND_OFFSET_INTERACTION.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/XOR_ASSEMBLY_ANALYSIS.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/XOR_CONFLICT_ANALYSIS_SUMMARY.md create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.0.0.preopt.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.0.2.internalize.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.0.4.opt.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.0.5.precodegen.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.1.5.precodegen.bc create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.1.lto.s create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.lto.s create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/a.out-hip-amdgcn-amd-amdhsa-gfx942.resolution.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/analyze_banks_live.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/analyze_hardcoded_offsets.md create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/analyze_lds_banks.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/analyze_write_conflicts.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/analyze_xor_detailed.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ATT_INVESTIGATION_SUMMARY.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/input_att.yaml create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/input_att_simple.yaml create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_26217_dispatch_1.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_46807_dispatch_1.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_46807_dispatch_2.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_46807_dispatch_3.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_46807_dispatch_4.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_46807_dispatch_5.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/stats_ui_output_agent_8041_dispatch_1.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test1_same_slot_results.db create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_all_dm_steps create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_loop_8041_shader_engine_0_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_loop_results.pftrace create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_yaml_26217_shader_engine_0_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_yaml_26217_shader_engine_1_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_yaml_26217_shader_engine_2_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_yaml_26217_shader_engine_3_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_att_yaml_results.pftrace create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_calculator.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_calculator_write.js create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_cu_assignment create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_descriptor_k0 create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_exact_same_offsets create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_fp16_same_bank create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_fp32_calculator.js create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_full_transpose_hip create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_inter_lane_fp16 create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_inter_lane_fp16_fixed create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_inter_wf_with_loop create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_intra_lane_conflicts create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_intra_lane_conflicts.s create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_multi_thread_conflict create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_multi_thread_conflict.s create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_phase0_lanes create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_simple_xor.js create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_simultaneous_access create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_46807_shader_engine_0_1.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_46807_shader_engine_0_2.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_46807_shader_engine_0_3.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_46807_shader_engine_0_4.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_46807_shader_engine_0_5.att create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_strace_results.db create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_transpose_correct_conflict create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_transpose_unrolled create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_transpose_unrolled_O0 create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_true_concurrency create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_vector_load create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_wf_concurrency create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_write_conflicts create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_xor_all_columns create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_xor_all_phases create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_xor_descriptor create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/test_xor_detailed create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_26217_dispatch_1/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_26217_dispatch_1/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_26217_dispatch_1/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_26217_dispatch_1/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_1/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_1/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_1/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_1/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_2/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_2/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_2/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_2/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_3/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_3/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_3/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_3/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_4/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_4/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_4/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_4/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_5/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_5/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_5/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_46807_dispatch_5/realtime.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_8041_dispatch_1/code.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_8041_dispatch_1/filenames.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_8041_dispatch_1/occupancy.json create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/att_profiling_tests/ui_output_agent_8041_dispatch_1/realtime.json create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/benchmark_all.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_at_actual_lds_read.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_at_kentry.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_at_lds_read.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_in_gpu.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_on_ds_read.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/break_only_lds_load.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/calculate_banks_from_assembly.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/calculate_from_real_kernel.cpp.bak create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/conflict_calculator_fixed.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/conflict_visual_explanation.py create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_descriptor_banks.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_fp16_conflicts.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_fp16_conflicts_assembly_based create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_fp16_conflicts_assembly_based.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_fp16_conflicts_proper.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_fp32_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_gpu_kernel.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_lds_banks.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_lds_kernel.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/debug_simple_lds.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/exhaustive_search.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/final_correct_xor.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/find_after_store.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/find_by_opcode.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/find_ds_reads.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/find_gpu_kernel.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/find_lds_reads.gdb create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_correct create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_correct.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_final create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_final.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_per_instruction create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_per_instruction.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_phase create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_phase.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v2 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v2.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v3 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v3.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v4 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v4.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v5 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v5.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v6 create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/fp16_conflict_calculator_v6.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/inter_lane_results/pmc_1/banff-cyxtera-s78-2/3826420_agent_info.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/inter_lane_results/pmc_1/banff-cyxtera-s78-2/3826420_counter_collection.csv create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/lds_bank_calculator.html create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/lds_conflict.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/lds_metrics.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/lds_metrics_detailed.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/offset_source_simple.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/fixed_multi_wf_results_results.db create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/inter_lane_results_results.db create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/loop_results_results.db create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/multi_wf_test_results_results.db create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_agent_info.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_counter_collection.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_domain_stats.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_hip_api_stats.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_hip_api_trace.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_kernel_stats.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pmc_1/simple_profile_kernel_trace.csv create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/print_banks_per_phase.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/print_real_phases.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/profile_att.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/profile_diff_slot.txt create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/profile_lds.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/profile_same_bank.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/profile_same_slot.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pure_read_no_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/pure_read_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/read_only_no_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/read_only_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/read_only_xor.cpp create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/rocprof_asm_profile.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/rocprofv3_detailed_profiling.sh create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/run_all.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/run_att_profile.sh create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/search_all_memory.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/search_ds_read.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/search_for_ds_read.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/search_forward.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/show_bank_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/simple_disasm_search.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/simple_lds_disasm.txt create mode 100755 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/simple_lds_test create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/simple_lds_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/step_through_load.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_actual_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_all_dm_steps.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_all_m_values.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_combined_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_correct_mapping.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_cu_assignment.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_descriptor_k0.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_different_m1.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_exact_same_offsets.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_fp16_same_bank.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_fp16_same_slot.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_full_transpose_hip.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_inter_lane_fp16.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_inter_wf_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_inter_wf_with_loop.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_intra_lane_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_intra_lane_vector.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_multi_thread_conflict.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_phase0_lanes.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_phase_column_access.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_simple_conflict.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_simultaneous_access.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_slot_analysis.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_slot_based_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_transpose_correct_conflict.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_transpose_unrolled.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_true_concurrency.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_vector_load.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_wavefront_model.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_wf_concurrency.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_write_conflicts.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_all_columns.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_all_phases.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_descriptor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_detailed.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_effect.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/test_xor_fp32_debug.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/understand_128_offset.md create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/understand_xor_descriptor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/use_x_not_disassemble.gdb create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/verify_with_real_descriptor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/verify_xor_banks.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/write_only_no_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/write_only_test.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/write_only_xor.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_conflicts_with_packing.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_correct_banks.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_kernel_lds_reads.asm create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_with_distribution.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_with_packing.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/xor_write_conflicts.js create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_15_calling_gemm/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_15_calling_gemm/calling_gemm.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_16_row_reduction/CMakeLists.txt create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_16_row_reduction/row_reduction.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_thread_buffer_apply.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_thread_buffer_exp.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_thread_buffer_exp_simple.cpp create mode 100644 example/ck_tile/99_toy_tutorial/tutorial_thread_buffer_methods.cpp create mode 100755 step1_reshape_only.html create mode 100644 tile_distribution_slides.qmd create mode 100755 xor_full_steps_simple.html diff --git a/CMakeLists.txt b/CMakeLists.txt index e1ed048f14..311487495e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,10 +135,19 @@ add_compile_options(-Wno-unique-object-duplication) add_compile_options(-fbracket-depth=1024) # add -Og -gdwarf64 for debug builds -add_compile_options( - "$<$:-Og>" - "$<$:-gdwarf64>" -) +# Set CK_DEBUG_UNOPTIMIZED=ON (e.g. via the debug preset) to build with -O0 +# instead of -Og, so rocgdb does not report "" for locals. +option(CK_DEBUG_UNOPTIMIZED "Build Debug with -O0 instead of -Og" OFF) +if(CK_DEBUG_UNOPTIMIZED) + add_compile_options( + "$<$:-gdwarf64>" + ) +else() + add_compile_options( + "$<$:-Og>" + "$<$:-gdwarf64>" + ) +endif() # Recent change in compiler makes this warning ON by default, which led to compile errors. add_compile_options(-Wno-nrvo) diff --git a/CMakePresets.json b/CMakePresets.json index a8958b82ff..16728e3e09 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -86,6 +86,45 @@ "use-gfx950", "dev" ] + }, + { + "name": "debug", + "binaryDir": "${sourceDir}/build-debug", + "displayName": "CK Debug", + "description": "Debug build (no opt, full symbols, large code model)", + "generator": "Ninja", + "environment": {}, + "cacheVariables": { + "CMAKE_PREFIX_PATH": "/opt/rocm", + "CMAKE_CXX_COMPILER": "/opt/rocm/bin/hipcc", + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "CMAKE_MAKE_PROGRAM": "ninja", + "CMAKE_CXX_FLAGS_DEBUG": "-O0 -g -ggdb3 -fno-inline -fno-omit-frame-pointer -mcmodel=large", + "CMAKE_HIP_FLAGS_DEBUG": "-O0 -g -ggdb3 -mcmodel=large", + "CMAKE_EXE_LINKER_FLAGS": "-mcmodel=large", + "CK_DEBUG_UNOPTIMIZED": "ON", + "BUILD_DEV": "ON", + "USE_BITINT_EXTENSION_INT4": "OFF" + } + }, + { + "name": "debug-gfx942", + "displayName": "CK Debug - gfx942", + "description": "Debug build for AMD GPU gfx942", + "inherits": [ + "use-gfx942", + "debug" + ] + }, + { + "name": "debug-gfx950", + "displayName": "CK Debug - gfx950", + "description": "Debug build for AMD GPU gfx950", + "inherits": [ + "use-gfx950", + "debug" + ] } ] } \ No newline at end of file diff --git a/assets/bank_conflict_numbers.csv b/assets/bank_conflict_numbers.csv new file mode 100644 index 0000000000..7f202d99e4 --- /dev/null +++ b/assets/bank_conflict_numbers.csv @@ -0,0 +1,7 @@ +kernel,time_us,bw_TBps,SQ_LDS_BANK_CONFLICT,SQ_INSTS_LDS,SQ_INSTS_LDS_LOAD,SQ_INSTS_LDS_STORE +01_row_major,14.08,4.77,3670016,294912,262144,32768 +02_column_major,12.25,5.48,1572864,294912,32768,262144 +03_row_major_padded,11.93,5.62,786432,327680,262144,65536 +05_xor_plus_padding,12.42,5.40,0,294912,262144,32768 +08_xor_cross_warp_window_reinterpret,11.88,5.65,0,65536,32768,32768 +10_m_vector_store,12.69,5.29,0,294912,262144,32768 diff --git a/assets/bank_rules_interactive.html b/assets/bank_rules_interactive.html new file mode 100644 index 0000000000..376f19ed65 --- /dev/null +++ b/assets/bank_rules_interactive.html @@ -0,0 +1,354 @@ + + + + + + LDS Bank Conflict Rules on CDNA + + + +
+
+

LDS Bank Conflict Rules (CDNA, 32 banks x 4 B)

+

Each panel below is one half-wave: 32 lanes (rows) x 32 banks (columns). + Colour encodes what happens when the lanes issue one LDS instruction: + distinct bank = OK, + same bank + same slot = broadcast OK, + same bank + different slots = N-way conflict. +

+
+
+ +
+ + + + + + + + + + +
+ +
+
+ 1 lane on this bank (OK) + N lanes, 1 slot (broadcast OK) + N lanes, >1 slot (CONFLICT) +
+
+
+ half-wave size: 32 lanes + banks: 32 (gfx942) + conflict ways: + verdict: +
+
+
+ + + + diff --git a/assets/coalescing_interactive.html b/assets/coalescing_interactive.html new file mode 100644 index 0000000000..815c62603b --- /dev/null +++ b/assets/coalescing_interactive.html @@ -0,0 +1,261 @@ + + + + + + Global Memory Coalescing on CDNA + + + +
+
+

Global Memory Coalescing on CDNA

+

64 lanes of one wave emit independent byte addresses; the memory unit collapses them into the + minimum number of 64 B HBM cache lines. Each column below is one cache line; each row is one lane. + A coloured cell means "lane L's request fell inside cache line C". + Number of non-empty columns = number of HBM transactions.

+
+
+ +
+ + + + + + + +
+ +
+
+ useful byte (lane wanted this part of the line) + fetched but unused (same line, different lane's remainder) + empty +
+
+
+ lanes: 64 + per-lane width: B + useful: B + unique cache lines: + fetched: B + efficiency: +
+
+
+ + + + diff --git a/assets/coalescing_model.py b/assets/coalescing_model.py new file mode 100644 index 0000000000..5be0120f1c --- /dev/null +++ b/assets/coalescing_model.py @@ -0,0 +1,241 @@ +""" +A pedagogical Python model of GPU global-memory coalescing on AMD CDNA. + +Run: + python3 coalescing_model.py + +Debug: + Set breakpoints inside `execute_wave_load` to watch how the memory unit: + 1. collects all lane addresses, + 2. groups them by 64-byte cache line, + 3. issues ONE transaction per unique line, + 4. scatters bytes back to lanes. + +This is not the real silicon pipeline. It is a faithful *logical* model of the +coalescing step, intended only for intuition building. +""" + +from collections import defaultdict +from dataclasses import dataclass, field + + +CACHE_LINE = 64 # bytes. AMD CDNA global memory transaction granularity. +WAVE_SIZE = 64 # lanes per wavefront on AMD. + + +@dataclass +class WaveLoadResult: + """What one wave-level load produced.""" + lane_bytes: list # one bytes object per lane + num_transactions: int # how many 64B HBM fetches were issued + useful_bytes: int # bytes the lanes actually wanted + fetched_bytes: int # bytes the HBM bus actually moved + line_map: dict = field(default_factory=dict) # line_id -> contributors + + @property + def efficiency(self) -> float: + return self.useful_bytes / self.fetched_bytes + + +def execute_wave_load(lane_addresses, lane_nbytes, HBM): + """ + Model one wavefront executing a single global-memory load. + + Parameters + ---------- + lane_addresses : list[int] + Byte addresses one per lane. Must have length WAVE_SIZE. + lane_nbytes : int + How many bytes EACH lane wants to read this instruction. + 4 = ds/global_load_b32 (one dword) + 8 = ..._b64 (two dwords) + 16 = ..._b128 (four dwords = float4 / uint4) + HBM : bytearray + Pretend global memory. + + Returns + ------- + WaveLoadResult + """ + assert len(lane_addresses) == WAVE_SIZE, \ + f"expected {WAVE_SIZE} lane addresses, got {len(lane_addresses)}" + + # ------------------------------------------------------------------ + # STEP 1: every lane's address has already been computed in parallel. + # SIMT means all 64 lanes execute the same load instruction + # but with their own address value. + # ------------------------------------------------------------------ + + # ------------------------------------------------------------------ + # STEP 2: The memory unit walks every lane's request and breaks it + # into pieces that each fit inside a single 64B cache line. + # + # line_requests[line_id] is a list of (lane, offset_in_line, nbytes) + # contributions from lanes that want data in that line. + # ------------------------------------------------------------------ + line_requests = defaultdict(list) + + for lane, addr in enumerate(lane_addresses): + remaining = lane_nbytes + cur = addr + while remaining > 0: + line_id = cur // CACHE_LINE + offset = cur % CACHE_LINE + chunk = min(remaining, CACHE_LINE - offset) + line_requests[line_id].append((lane, offset, chunk)) + cur += chunk + remaining -= chunk + + # ------------------------------------------------------------------ + # STEP 3: THE COALESCING STEP. + # Issue exactly ONE 64B HBM transaction per unique cache line. + # This is where "64 lane requests -> N transactions" happens. + # ------------------------------------------------------------------ + fetched_lines = {} + for line_id in line_requests: + start = line_id * CACHE_LINE + fetched_lines[line_id] = bytes(HBM[start : start + CACHE_LINE]) + + num_transactions = len(fetched_lines) + + # ------------------------------------------------------------------ + # STEP 4: Scatter the fetched bytes back to the lanes that wanted them. + # A single wide lane (e.g. b128 straddling a line) reassembles + # its bytes from multiple line contributions in address order. + # ------------------------------------------------------------------ + # Collect per-lane pieces along with their original address so we can + # reassemble in order (important for lanes that straddle lines). + per_lane_pieces = defaultdict(list) # lane -> list of (addr, bytes) + + for line_id, reqs in line_requests.items(): + line_bytes = fetched_lines[line_id] + line_base = line_id * CACHE_LINE + for lane, offset, chunk in reqs: + piece_addr = line_base + offset + piece_bytes = line_bytes[offset : offset + chunk] + per_lane_pieces[lane].append((piece_addr, piece_bytes)) + + lane_bytes = [b""] * WAVE_SIZE + for lane, pieces in per_lane_pieces.items(): + pieces.sort(key=lambda p: p[0]) + lane_bytes[lane] = b"".join(p[1] for p in pieces) + + # ------------------------------------------------------------------ + # STEP 5: Accounting. + # ------------------------------------------------------------------ + useful_bytes = WAVE_SIZE * lane_nbytes + fetched_bytes = num_transactions * CACHE_LINE + + return WaveLoadResult( + lane_bytes = lane_bytes, + num_transactions = num_transactions, + useful_bytes = useful_bytes, + fetched_bytes = fetched_bytes, + line_map = dict(line_requests), + ) + + +# ====================================================================== +# Scenarios +# ====================================================================== + +def make_hbm(size_bytes: int) -> bytearray: + """A recognisable HBM: byte i holds (i & 0xFF).""" + return bytearray(i & 0xFF for i in range(size_bytes)) + + +def report(title, result: WaveLoadResult): + print(f"--- {title} ---") + print(f" transactions : {result.num_transactions}") + print(f" useful bytes : {result.useful_bytes}") + print(f" fetched bytes: {result.fetched_bytes}") + print(f" efficiency : {result.efficiency*100:.2f}%") + unique_lines = sorted(result.line_map.keys()) + print(f" unique lines : {len(unique_lines)} " + f"(first few: {unique_lines[:6]}{' ...' if len(unique_lines) > 6 else ''})") + print() + + +def scenario_1_coalesced_b32(HBM): + """Every lane reads 4 bytes, lane i -> addr 4*i. Fully contiguous.""" + addrs = [4 * lane for lane in range(WAVE_SIZE)] + return execute_wave_load(addrs, 4, HBM) + + +def scenario_2_strided_b32(HBM): + """Every lane reads 4 bytes but strides by one cache line. Worst case.""" + addrs = [256 * lane for lane in range(WAVE_SIZE)] # 256B stride + return execute_wave_load(addrs, 4, HBM) + + +def scenario_3_coalesced_b128(HBM): + """Every lane reads 16 bytes, lane i -> addr 16*i. Contiguous float4s.""" + addrs = [16 * lane for lane in range(WAVE_SIZE)] + return execute_wave_load(addrs, 16, HBM) + + +def scenario_4_strided_b128(HBM): + """Wide loads but scattered: width does NOT rescue bad patterns.""" + addrs = [1024 * lane for lane in range(WAVE_SIZE)] + return execute_wave_load(addrs, 16, HBM) + + +def scenario_5_misaligned_b128(HBM): + """ + Contiguous b128, but the base is shifted by 4 bytes so every lane + straddles a cache-line boundary. Shows how misalignment inflates + transaction count. + """ + base = 4 + addrs = [base + 16 * lane for lane in range(WAVE_SIZE)] + return execute_wave_load(addrs, 16, HBM) + + +def scenario_6_column_of_rowmajor(HBM): + """ + Reading a column of a row-major fp32 matrix with row length = 1024 floats. + Each lane -> different row, same column -> different 64B line each. + """ + ROW_FLOATS = 1024 + addrs = [lane * ROW_FLOATS * 4 for lane in range(WAVE_SIZE)] + return execute_wave_load(addrs, 4, HBM) + + +def scenario_7_row_of_rowmajor_with_vec(HBM): + """ + Reading a row of a row-major fp16 tile with b128 per lane. + Each lane owns 8 fp16 elements; 64 lanes cover 512 fp16 = 1024 B contiguous. + """ + addrs = [16 * lane for lane in range(WAVE_SIZE)] # 16B per lane, contiguous + return execute_wave_load(addrs, 16, HBM) + + +def main(): + HBM = make_hbm(1 << 20) # 1 MiB + + print(f"CACHE_LINE = {CACHE_LINE} B, WAVE_SIZE = {WAVE_SIZE} lanes\n") + + report("1. coalesced b32 (contiguous 4B per lane)", + scenario_1_coalesced_b32(HBM)) + + report("2. strided b32 (256B stride per lane)", + scenario_2_strided_b32(HBM)) + + report("3. coalesced b128 (contiguous 16B per lane)", + scenario_3_coalesced_b128(HBM)) + + report("4. strided b128 (1024B stride per lane)", + scenario_4_strided_b128(HBM)) + + report("5. misaligned b128 (contiguous but base=4, straddles lines)", + scenario_5_misaligned_b128(HBM)) + + report("6. column of row-major fp32 matrix", + scenario_6_column_of_rowmajor(HBM)) + + report("7. row of row-major fp16 tile with b128 per lane", + scenario_7_row_of_rowmajor_with_vec(HBM)) + + +if __name__ == "__main__": + main() diff --git a/assets/step1_reshape_only.html b/assets/step1_reshape_only.html new file mode 100755 index 0000000000..5fb2b89938 --- /dev/null +++ b/assets/step1_reshape_only.html @@ -0,0 +1,638 @@ + + + + + + Step1 Reshape Only + + + +
+
+

Step 1 Only: Reshape to [A,B,C] = [8,32,8]

+

This page shows only the first descriptor transformation from the code block.

+

Element IDs stay consistent. Every cell contains exactly 8 element IDs (kKPack=8).

+
+
+ +
+ + + + + + + +
+ +
+
+
+ Before view is the plain original contiguous grid (64x32, no extra spacing). + Step1 view is reshaped to + rows B=kM/MLdsLayer=32 and cols A=kK/kKPack*MLdsLayer=8. +
+
+
+ + + + diff --git a/assets/xor_full_steps_simple.html b/assets/xor_full_steps_simple.html new file mode 100755 index 0000000000..3020328026 --- /dev/null +++ b/assets/xor_full_steps_simple.html @@ -0,0 +1,401 @@ + + + + + + XOR Full Steps (Simple) + + + +
+
+

Full Transform Steps (Simple Numbered Grids)

+

Same simple style as XOR-only demo. One step at a time with fixed element count.

+

Each number is one real element ID from the full 64x32 = 2048 tile.

+
+
+ +
+ + + + +
+ +
+
+
+
+ + + + diff --git a/bank_conflict_slides.html b/bank_conflict_slides.html new file mode 100644 index 0000000000..07b2e25fbc --- /dev/null +++ b/bank_conflict_slides.html @@ -0,0 +1,1405 @@ + + + + + + + + + + + + + + + LDS Bank Conflicts on CDNA + + + + + + + + + + + + + + + + + +
+
+ +
+

LDS Bank Conflicts on CDNA

+

From 4.7 to 5.7 TB/s with coalesced loads and XOR-swizzled LDS

+ +
+
+
+Amir Hossein Ghamarian +
+
+
+ +

2026-04-21

+
+
+
+

The Problem

+ +
+
+

Moving a [65536 x 256] FP16 Tile Through LDS

+

We have a simple task: copy a matrix from global memory, transpose it via LDS, and write it back.

+
+
+
for (k_block = 0; k_block < K; k_block += kK) {
+    auto reg_tile      = load_tile(gmem_window_in);   // HBM -> registers
+    store_tile(lds_window_mk, reg_tile);              // registers -> LDS
+    block_sync_lds();
+
+    auto reg_transposed = load_tile(lds_window_km);   // LDS -> registers (TRANSPOSED)
+    block_sync_lds();
+
+    store_tile(gmem_window_out, reg_transposed);      // registers -> HBM
+}
+
+

The question: on MI300 / MI355 (peak HBM3 ~5.2 / ~8 TB/s), can we saturate the bus with a kernel this simple?

+

The answer: only if every LDS access is conflict-free and every HBM access is coalesced. Miss either and you leave ~15-20% on the floor.

+
+
+

What we will measure for every variant: global load/store ISA, LDS read/write ISA, SQ_LDS_BANK_CONFLICT, SQ_INSTS_LDS, kernel time, HBM bandwidth.

+
+
+
+
+

Part A - Foundations

+ +
+
+

What Is Coalescing?

+

Coalescing is the GPU memory unit’s job: take 64 lane-level addresses emitted by one wave and collapse them into the minimum number of 64-byte HBM transactions that cover them all.

+
+
+

The 5-step mental model (from coalescing_model.py):

+
    +
  1. Every lane of the wave emits its own byte address in SIMT.
  2. +
  3. The memory unit walks each lane’s request and slices it into pieces that fit in one 64 B cache line.
  4. +
  5. THE COALESCING STEP: issue exactly one 64 B HBM transaction per unique cache line.
  6. +
  7. Scatter the returned bytes back to the lanes that wanted them.
  8. +
  9. Accounting: efficiency = useful_bytes / fetched_bytes.
  10. +
+
+

Key numbers on CDNA:

+
CACHE_LINE = 64 B    (HBM transaction granularity)
+WAVE_SIZE  = 64 lanes
+per-lane widths: b32 = 4 B, b64 = 8 B, b128 = 16 B
+peak coalesced wave load: 1024 B = 16 cache lines
+

The rule of thumb:

+
    +
  • 64 lanes x 16 B contiguous -> 16 transactions -> 100% efficiency.
  • +
  • 64 lanes x 4 B strided by 256 B -> 64 transactions -> ~6% efficiency.
  • +
+
+
+
+

The Coalescer in 40 Lines

+
def execute_wave_load(lane_addresses, lane_nbytes, HBM):
+    # Step 2: slice each lane request into per-line contributions
+    line_requests = defaultdict(list)
+    for lane, addr in enumerate(lane_addresses):
+        remaining, cur = lane_nbytes, addr
+        while remaining > 0:
+            line_id = cur // CACHE_LINE
+            offset  = cur %  CACHE_LINE
+            chunk   = min(remaining, CACHE_LINE - offset)
+            line_requests[line_id].append((lane, offset, chunk))
+            cur, remaining = cur + chunk, remaining - chunk
+
+    # Step 3: THE COALESCING STEP - one transaction per unique cache line
+    fetched_lines = {
+        line_id: bytes(HBM[line_id*CACHE_LINE : (line_id+1)*CACHE_LINE])
+        for line_id in line_requests
+    }
+
+    # Step 5: accounting
+    useful_bytes  = WAVE_SIZE * lane_nbytes
+    fetched_bytes = len(fetched_lines) * CACHE_LINE
+    return num_transactions=len(fetched_lines), efficiency=useful_bytes/fetched_bytes
+

assets/coalescing_model.py has the full implementation with 7 scenarios you can step through in a debugger.

+
+
+

Coalescing - Interactive

+

Pick a scenario with the buttons. Rows = 64 lanes, columns = 64 B HBM cache lines. Green cell = useful byte (lane wanted it). Number of non-empty columns = HBM transactions. Efficiency = useful / fetched bytes.

+
+
+

Coalescing - Seven Scenarios (Summary)

+ +

Scenario 7 = the global-load shape used by every tutorial kernel (green). Scenario 6 = what a naive transpose-read of gmem would do (red) – why we go through LDS.

+
+
+

Coalescing: What Transfers To LDS

+

For the rest of the deck, only the coalesced b128 pattern matters on the HBM side. All six tutorial kernels use this same global-memory read:

+
const auto gmem_desc_in = make_naive_tensor_descriptor(
+    make_tuple(number<kM>{}, number<kK>{}),
+    make_tuple(K, number<1>{}),
+    number<16 / sizeof(DataType)>{},   // GuaranteedLastDimensionVectorLength = 8 for fp16
+    number<1>{});                      // GuaranteedLastDimensionVectorStride
+
+

The LDS side is where kernels diverge. Next: what a bank conflict actually is.

+
+
+
+

LDS Hardware Model

+
gfx942 (MI300):  32 banks x 4 B  =  128 B / cycle / wave
+gfx950 (MI355):  64 banks x 4 B  =  256 B / cycle / wave
+
+wave = 64 lanes, processed in 2 half-waves of 32 lanes
+    (each half-wave must land on 32 distinct banks, or same slot)
+
+bank(addr_bytes) = (addr_bytes / 4) % NBanks
+slot(addr_bytes) =  addr_bytes / 4             # index within a bank
+
+LDS instruction widths (ds_read / ds_write):
+    b16   =  2 B       (fp16 scalar)
+    b32   =  4 B  = 1 slot  per lane
+    b64   =  8 B  = 2 slots per lane
+    b128  = 16 B  = 4 slots per lane   -> one instruction = 4 sub-steps
+ +
+
+

Bank-Conflict Rules - Interactive

+

Buttons walk through all three rules on a real 32-bank half-wave. R1: distinct banks or exact broadcast. R2: fp16 same-slot is all-or-nothing. R3: ds_read_b128 = 4 sub-steps, each checked against R1.

+
+
+

The Three Rules, Condensed

+
+
+

R1 - one half-wave, one sub-step

+

For every 32-lane half-wave and every 4 B sub-step:

+
    +
  • distinct banks across the 32 lanes, OR
  • +
  • every same-bank lane on the same 4 B slot (broadcast)
  • +
+

Anything else = N-way conflict.

+
+

R2 - fp16 inside one slot

+

Two fp16 values share a 4 B slot. The slot broadcasts only if every lane that lands on that bank targets the same fp16 half.

+

One dissenter = full N-way conflict. No partial credit.

+
+

R3 - wide reads = 4 x R1

+

ds_read_b128 issues 4 sub-steps at base, base+4, base+8, base+12. Each sub-step is a full bank check.

+

Widening helps only when R1 already holds. If R1 fails on one sub-step it fails on all four.

+
+
+
+

Checklist: Does (write_dist, lds_desc, read_dist) Give 0 Conflicts?

+

Given a per-thread read pattern with stride S bytes along the lane axis and instruction width W bytes:

+
(Q1) slots_per_lane_per_substep = W / 4                        (1 for b32, 4 for b128)
+(Q2) for each sub-step s in [0, W/4):
+         lane_addr(lane) = base + lane * S + s * 4
+         bank(lane)      = (lane_addr / 4) % NBanks
+(Q3) in each half-wave (lanes 0..31 and 32..63):
+         if all 32 banks distinct            -> sub-step is OK
+         elif all lanes on same bank share 1 slot -> OK (broadcast)
+         else                                -> N-way conflict
+(Q4) repeat for the WRITE side with its own (S, W).
+
+

Worked example - tutorial 01 row-major transpose read:

+
kM=64, kK=32, FP16. Read pattern = 8 x ds_read_u16 at stride 64 B:
+  offsets: 0, 64, 128, 192, 256, 320, 384, 448
+  slots:   0, 16,  32,  48,  64,  80,  96, 112
+  banks:   0, 16,   0,  16,   0,  16,   0,  16    <- 8 lanes share {0, 16}
+  slots differ on bank 0: {0, 32, 64, 96}  -> NOT broadcast
+  -> Rule R1 FAILS -> 8-way conflict per half-wave per instruction.
+

This is exactly what the assembly shows (next section).

+
+
+
+

The Full Pipeline

+ +

Every tutorial in Part B attacks a specific stage of this pipeline.

+
+
+
+

Part B - Six Tutorials

+ +
+
+

01 Row-Major Baseline - Code

+
+
+
// LDS descriptor for writing [M, K] - plain row-major
+static constexpr auto MakeLdsDescriptorMK()
+{
+    return make_naive_tensor_descriptor_packed(
+        make_tuple(number<kM>{}, number<kK>{}));
+}
+
+// Transposed LDS descriptor for reading [K, M]
+static constexpr auto MakeLdsDescriptorKM()
+{
+    return make_naive_tensor_descriptor(
+        make_tuple(number<kK>{}, number<kM>{}),
+        make_tuple(number<1>{}, number<kK>{}));   // stride kK=32 on the fast axis
+}
+

Tile is kM=64, kK=32. Writes are row-major (fine). Reads are columns at stride 64 B - bank 0 and bank 16, over and over.

+
+

What the compiler generated:

+
ds_write_b128 v..., v...         # write:   OK
+ds_read_u16  v8,  v6             # read:    bad
+ds_read_u16  v9,  v6 offset:64
+ds_read_u16 v10,  v6 offset:128
+ds_read_u16 v11,  v6 offset:192
+ds_read_u16 v12,  v6 offset:256
+ds_read_u16 v13,  v6 offset:320
+ds_read_u16 v14,  v6 offset:384
+ds_read_u16 v15,  v6 offset:448
+

All 8 reads share the same base register v6. Offsets step by 64 B = 16 slots = a full trip around 32 banks, landing on {0, 16, 0, 16, ...}.

+
+
+
+

01 Row-Major Baseline - Counters

+
+
+
global loads   :   8x buffer_load_dwordx4   (coalesced)
+global stores  :   8x buffer_store_short    (narrow transpose)
+LDS writes     :   4x ds_write_b128
+LDS reads      :   8x ds_read_u16           (conflicting)
+
+SQ_LDS_BANK_CONFLICT  :   3,670,016         (very high, 14 per dispatch)
+SQ_INSTS_LDS          :     294,912
+kernel time (M=65536) :      14.08 us
+HBM bandwidth         :       4.77 TB/s    <-- well below peak
+
+

What the rules say:

+
    +
  • R1 fails: 8 lanes on {bank 0, bank 16} with 8 distinct slots -> 7-way conflict per half-wave.
  • +
  • R2 fails: different rows -> different slots, no FP16 broadcast.
  • +
  • R3: b16 reads are a single sub-step, so width doesn’t hurt (but also doesn’t help).
  • +
+

Take-away: a naive row-major LDS layout is unusable for transpose reads. Everything that follows attacks this read pattern.

+
+
+
+

02 Column-Major LDS - Move the Pain

+
+
+
// LDS descriptor for writing [M, K] - column-major strides
+static constexpr auto MakeLdsDescriptorMK()
+{
+    return make_naive_tensor_descriptor(
+        make_tuple(number<kM>{}, number<kK>{}),
+        make_tuple(number<1>{}, number<kM>{}));  // M is fast axis
+}
+
+// Reading [K, M] -- now this is contiguous in M
+static constexpr auto MakeLdsDescriptorKM()
+{
+    return make_naive_tensor_descriptor(
+        make_tuple(number<kK>{}, number<kM>{}),
+        make_tuple(number<kM>{}, number<1>{}));
+}
+
+

We just swapped which axis is contiguous in LDS.

+
    +
  • Reads are now contiguous -> ds_read_b128 possible.
  • +
  • Writes become the strided ones now -> ds_write_b16 and conflicts on the write side.
  • +
  • Net bank-conflict count does not drop; the pain just moved.
  • +
+

Rule R1 check: write now has stride 64 B -> exactly the same {0, 16, ...} pattern R1 failed on for 01, except flipped to writes.

+

Take-away: you cannot solve a transpose via LDS layout alone if the layout is rectangular.

+
+
+
+

03 Row-Major + Padding - The Classical Fix

+
+
+
static constexpr index_t kPadding  = 2;        // 2 fp16 = 4 B padding
+static constexpr index_t kKPadded  = kK + kPadding;  // 34 elements per row
+
+static constexpr auto MakeLdsDescriptorMK()
+{
+    return make_naive_tensor_descriptor(
+        make_tuple(number<kM>{}, number<kK>{}),       // logical [M, K]
+        make_tuple(number<kKPadded>{}, number<1>{})); // padded stride!
+}
+
+static constexpr auto MakeLdsDescriptorKM()
+{
+    return make_naive_tensor_descriptor(
+        make_tuple(number<kK>{}, number<kM>{}),
+        make_tuple(number<1>{}, number<kKPadded>{}));
+}
+
+

Why it works:

+
Unpadded row stride = 32 x 2 = 64 B  = 16 slots  (divides 32 -> collisions)
+Padded   row stride = 34 x 2 = 68 B  = 17 slots  (coprime with 32 -> all banks touched)
+

Since 17 is coprime with 32, 32 lanes walking down a column hit 32 distinct banks. R1 satisfied.

+

Cost: 2 extra fp16 per row x 64 rows = 256 B wasted LDS. Benefit: conflicts drop 5x (3.67M -> 0.79M), bandwidth jumps from 4.77 -> 5.62 TB/s. Caveat: padding alone does not hit 0. The remaining lanes still broadcast-miss on two banks per half-wave. Pair with XOR (05) or switch to 08 to eliminate them.

+
+
+
+

05 XOR + Padding - Belt and Braces

+
+
+
static constexpr index_t kKPack   = 8;
+static constexpr index_t kKPadded = 33;  // padding on the pack axis
+
+static constexpr auto MakeLdsDescriptorMK() {
+    constexpr auto MLdsLayer = /* 32*4/kK/sizeof(T) */;
+    auto lds_desc_0 = make_naive_tensor_descriptor(
+        make_tuple(number<kK/kKPack*MLdsLayer>{},
+                   number<kM/MLdsLayer>{},
+                   number<kKPack>{}),
+        make_tuple(number<kKPack>{},
+                   number<kKPadded * MLdsLayer>{},  // <<< PADDED
+                   number<1>{}), ...);
+    auto lds_desc_permuted = transform_tensor_descriptor(
+        lds_desc_0,
+        make_tuple(make_xor_transform(...),         // <<< XOR on (M, A)
+                   make_pass_through_transform(number<kKPack>{})), ...);
+    // unmerge A -> (MLdsLayer, K0); merge back to [M, K]
+    return lds_desc;
+}
+
+

Why both? Tutorial 04 (XOR alone, same LDS descriptor as 08 but a mismatched read distribution) measured ~3072 residual conflicts because 3 of its 8 ds_read_u16 instructions used hardcoded offsets that bypass the XOR swizzle – see investigation/PRESENTATION_READY_SUMMARY.md:

+
ds_read_u16 v18, v29 offset:128   # bypasses XOR!
+ds_read_u16 v20, v26 offset:128   # bypasses XOR!
+ds_read_u16 v21, v22 offset:256   # bypasses XOR!
+3 / 8 = 37.5%  ==  observed 38% residual conflicts
+

05’s fix: pad the stride so even the bypassing offsets land on fresh banks. Zero conflicts, at the cost of ~64 bytes of LDS per tile plus the XOR machinery.

+
+
+
+

08 XOR Done Right - The Descriptor

+
static constexpr auto MakeLdsDescriptorMK()
+{
+    constexpr index_t NBanks    = get_n_lds_banks();                   // 32 gfx942 / 64 gfx950
+    constexpr index_t MLdsLayer = (NBanks * 4 / kK / sizeof(T));       // 2 for fp16/kK=32
+    constexpr index_t RowMul    = (NBanks == 64) ? 2 : 1;              // <<< gfx950 doubles B
+
+    // Step 1: reshape to [A = kK/kKPack * MLdsLayer, B = kM/MLdsLayer, KPack]
+    auto lds_desc_0 = make_naive_tensor_descriptor(
+        make_tuple(number<kK/kKPack*MLdsLayer>{}, number<kM/MLdsLayer>{}, number<kKPack>{}),
+        make_tuple(number<kKPack>{}, number<kK*MLdsLayer>{}, number<1>{}),
+        number<kKPack>{}, number<1>{});
+
+    // Step 2: XOR-swizzle (B, A) with B multiplied by RowMul
+    auto lds_desc_permuted = transform_tensor_descriptor(lds_desc_0,
+        make_tuple(make_xor_transform(make_tuple(number<kM/MLdsLayer * RowMul>{},
+                                                 number<kK/kKPack * MLdsLayer>{})),
+                   make_pass_through_transform(number<kKPack>{})),
+        make_tuple(sequence<1, 0>{}, sequence<2>{}),
+        make_tuple(sequence<1, 0>{}, sequence<2>{}));
+
+    // Step 3: unmerge A -> (MLdsLayer, K0 = kK/kKPack)
+    // Step 4: merge (B, MLdsLayer) -> M ;  merge (K0, KPack) -> K
+    return lds_desc;   // presents as [M, K] to the user
+}
+

The whole pipeline is 4 make_*_transform calls. No padding. No wasted LDS.

+
+
+

08 - XOR Descriptor (Interactive, 4 steps)

+

Buttons: Before (64x32 logical) -> Step1 reshape to [B=32,A=8] KPack blocks -> Recolor by column identity -> Step2 XOR shuffles blocks along A using key b mod A -> Step3 unmerge A -> (L=2, K0=4) -> Step4 merge back to physical [32 x 64] LDS rows. Matches xor_t::calculate_lower_index in ck_tile exactly for kM=64, kK=32, kKPack=8, MLdsLayer=2.

+
+
+

08 - XOR Descriptor, Step By Step (Static)

+ +

Colour = element id in the original [M, K] matrix. Follow one colour across the 5 panels. Only step 2 permutes: two elements that shared a bank at step 1 end up in different physical columns at step 4, which is where R1 starts passing.

+
+
+

08 - Why It Actually Has 0 Conflicts

+
+
+
static constexpr auto MakeReadDistributionMK()
+{
+    constexpr index_t K1 = 16 / sizeof(DataType);  // 8
+    constexpr index_t K0 = kK / K1;                // 4 (= num warps)
+    constexpr index_t M0 = 1, M1 = 8, M2 = 8;
+    return make_static_tile_distribution(
+        tile_distribution_encoding<
+            sequence<1>,
+            tuple<sequence<M0, M1, M2>, sequence<K0, K1>>,
+            tuple<sequence<2>,        sequence<1, 1>>,
+            tuple<sequence<0>,        sequence<1, 2>>,
+            sequence<1, 2>,           // Ys -> (M0, K1)
+            sequence<0, 1>>{});
+}
+

Per-thread Y shape = (M0=1, K1=8): each lane reads 8 consecutive K values at a fixed M.

+
+
ds_read_b128 v[4:7], v2         # one instruction, 16 B
+

Contrast with tutorial 01/04’s read distribution which reads 8 M values at a fixed K -> must be 8 x ds_read_u16.

+

Why 0 conflicts:

+
    +
  • The 8 K values sit in one XOR pack (the kKPack = 8 axis is not XORed).
  • +
  • 16 B = 4 sub-steps of 4 B each (R3) that all land on the same XOR key -> 4 contiguous banks.
  • +
  • 64 lanes * 4 banks/lane -> all 256 banks-cycles distinct -> R1 satisfied for every sub-step.
  • +
+

buffer_store_* on the output side stays narrow (8x buffer_store_short) because the per-thread register shape is K-vectorized, not M-vectorized. That is what tutorial 10 fixes.

+
+
+
+

10 M-Vector Store - Flip the Output Vector

+
+
+
static constexpr index_t kMPack = 8;  // per-thread register vector on READ side
+
+static constexpr auto MakeReadDistributionMK()
+{
+    constexpr index_t M_PerThread = kMPack;           // 8
+    constexpr index_t M_Lane      = kM / M_PerThread; // 8
+    // Y shape: (M_PerThread=8, K=1) per thread  -- OPPOSITE of 08
+    ...
+}
+

Same LDS descriptor as 08, but each lane now holds 8 consecutive M values at one K.

+
+

Trade-off:

+
               07/08                 10
+global load    buffer_load_dwordx4   buffer_load_dwordx4
+LDS write      ds_write_b128         ds_write_b128
+LDS read       1x ds_read_b128       8x ds_read_u16    (<-- more LDS ops)
+global store   8x buffer_store_short buffer_store_dwordx4  (<-- wide!)
+conflicts      0                     0
+
    +
  • Global store becomes coalesced b128. Win on the HBM side.
  • +
  • LDS read count goes up. Because the XOR pack axis is K but we read along M now, 8 M values -> 8 different XOR keys -> 8 instructions. Rule R1 still holds so no new conflicts.
  • +
  • Net: slightly slower on our workload; wins only when the output is heavily reused.
  • +
+
+
+
+
+

Summary

+ +
+
+

All Six, Side by Side

+
+
+ ++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
kernelgloadgstoreLDS writeLDS readconflictsLDS inststime (us)BW (TB/s)rules
01 row-majorbx4store_short x8ds_write_b128ds_read_u16 x83,670,016294,91214.084.77R1 X R2 X
02 col-majorbx4store_short x8ds_write_u16 x8ds_read_b1281,572,864294,91212.255.48R1 X on write
03 paddingbx4store_short x8ds_write_b128ds_read_u16 x8786,432327,68011.935.62pad helps write, read partial
05 XOR+padbx4store_short x8ds_write_b128ds_read_u16 x80294,91212.425.4R1 OK via XOR+pad
08 XOR cleanbx4store_short x8ds_write_b128ds_read_b128065,53611.885.65R1 R2 R3 OK
10 M-vec storebx4store_dwordx4ds_write_b128ds_read_u16 x80294,91212.695.29R1 OK, wider gstore
+
+
+
+

Numbers are rocprofv3 --pmc SQ_LDS_BANK_CONFLICT SQ_INSTS_LDS SQ_INSTS_LDS_LOAD SQ_INSTS_LDS_STORE on MI300, FP16, M=65536, K=256. Source: assets/bank_conflict_numbers.csv. Two observations worth calling out:

+
    +
  • 08 has 4.5x fewer LDS instructions than any other kernel (65k vs 295k) – one ds_read_b128 replaces 8 ds_read_u16.
  • +
  • 03 padding does not fully zero conflicts at this problem size (reduces from 3.67M to 0.79M); XOR+pad (05) and XOR done right (08) both land on exactly 0.
  • +
+
+
+
+

Rules Of Thumb

+
+
    +
  1. Start from coalescing. If the global load/store is already narrow, nothing on the LDS side can rescue you.
  2. +
  3. Pick padding (03) when you need a one-line fix and can spare a few bytes per row. It satisfies R1 by making the stride coprime with NBanks.
  4. +
  5. Pick XOR (08) when you want zero wasted LDS, your LDS tile is rectangular, and your per-thread read shape can be made to align with the kKPack axis (R3 pays off only then).
  6. +
  7. Remember RowMul on gfx950: the XOR B-axis doubles. Hard-coding NBanks=32 gives residual conflicts on MI355.
  8. +
  9. If the global store is slow (M-vectorized output) use a tutorial-10-style rotated read distribution, accepting extra LDS instructions to get buffer_store_dwordx4. Measure; the LDS-vs-HBM trade is workload-dependent.
  10. +
  11. Watch out for compiler offsets: tutorial 04 showed ds_read_u16 offset:N can bypass XOR (the +N is added after the swizzle). Either align reads with the pack axis (08) or pad on top of XOR (05).
  12. +
+
+
+
+

Code Pointers

+
+
+

Background reading in investigation/:

+
    +
  • BANK_CONFLICT_CALCULATION_FINAL.md - the worked Phase-0 conflict count.
  • +
  • CONFLICT_MODEL_FINAL.md - same-slot all-or-nothing rule (R2).
  • +
  • PRESENTATION_READY_SUMMARY.md - the 3/8-offsets-bypass-XOR finding (why 04 is not enough).
  • +
  • WHY_XOR_STILL_HAS_CONFLICTS.md - the 04-vs-08 tile distribution contrast.
  • +
+

Assets:

+
    +
  • assets/coalescing_model.py
  • +
  • assets/xor_full_steps_simple.html
  • +
+
+
+
+

Questions?

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bank_conflict_slides.qmd b/bank_conflict_slides.qmd new file mode 100644 index 0000000000..5d4dd71b5b --- /dev/null +++ b/bank_conflict_slides.qmd @@ -0,0 +1,913 @@ +--- +title: "LDS Bank Conflicts on CDNA" +subtitle: "From 4.7 to 5.7 TB/s with coalesced loads and XOR-swizzled LDS" +author: "Amir Hossein Ghamarian" +date: today +format: + revealjs: + theme: default + slide-number: true + chalkboard: true + preview-links: auto + transition: slide + background-transition: fade + code-fold: false + code-line-numbers: true + highlight-style: monokai + incremental: false + center: true + width: 1600 + height: 900 + resources: + - assets/ +execute: + echo: false + warning: false +jupyter: python3 +--- + +# The Problem {background-color="#2C3E50"} + +## Moving a [65536 x 256] FP16 Tile Through LDS + +We have a simple task: copy a matrix from global memory, transpose it via LDS, and write it back. + +::: {.columns} +::: {.column width="55%"} + +```cpp +for (k_block = 0; k_block < K; k_block += kK) { + auto reg_tile = load_tile(gmem_window_in); // HBM -> registers + store_tile(lds_window_mk, reg_tile); // registers -> LDS + block_sync_lds(); + + auto reg_transposed = load_tile(lds_window_km); // LDS -> registers (TRANSPOSED) + block_sync_lds(); + + store_tile(gmem_window_out, reg_transposed); // registers -> HBM +} +``` + +::: +::: {.column width="45%"} + +**The question**: on MI300 / MI355 (peak HBM3 ~5.2 / ~8 TB/s), +can we saturate the bus with a kernel this simple? + +**The answer**: only if every LDS access is conflict-free **and** +every HBM access is coalesced. Miss either and you leave +~15-20% on the floor. + +::: +::: + +. . . + +**What we will measure for every variant**: global load/store ISA, +LDS read/write ISA, `SQ_LDS_BANK_CONFLICT`, `SQ_INSTS_LDS`, kernel time, HBM bandwidth. + +# Part A - Foundations {background-color="#34495E"} + +## What Is Coalescing? + +**Coalescing** is the GPU memory unit's job: take 64 lane-level addresses emitted by one wave +and collapse them into the **minimum number of 64-byte HBM transactions** that cover them all. + +::: {.columns} +::: {.column width="50%"} + +**The 5-step mental model** (from `coalescing_model.py`): + +1. Every lane of the wave emits **its own byte address** in SIMT. +2. The memory unit walks each lane's request and slices it into **pieces that fit in one 64 B cache line**. +3. **THE COALESCING STEP**: issue exactly one 64 B HBM transaction **per unique cache line**. +4. Scatter the returned bytes back to the lanes that wanted them. +5. Accounting: `efficiency = useful_bytes / fetched_bytes`. + +::: +::: {.column width="50%"} + +**Key numbers on CDNA**: + +```text +CACHE_LINE = 64 B (HBM transaction granularity) +WAVE_SIZE = 64 lanes +per-lane widths: b32 = 4 B, b64 = 8 B, b128 = 16 B +peak coalesced wave load: 1024 B = 16 cache lines +``` + +**The rule of thumb**: + +- 64 lanes x 16 B contiguous -> 16 transactions -> 100% efficiency. +- 64 lanes x 4 B strided by 256 B -> 64 transactions -> ~6% efficiency. + +::: +::: + +## The Coalescer in 40 Lines + +```python +def execute_wave_load(lane_addresses, lane_nbytes, HBM): + # Step 2: slice each lane request into per-line contributions + line_requests = defaultdict(list) + for lane, addr in enumerate(lane_addresses): + remaining, cur = lane_nbytes, addr + while remaining > 0: + line_id = cur // CACHE_LINE + offset = cur % CACHE_LINE + chunk = min(remaining, CACHE_LINE - offset) + line_requests[line_id].append((lane, offset, chunk)) + cur, remaining = cur + chunk, remaining - chunk + + # Step 3: THE COALESCING STEP - one transaction per unique cache line + fetched_lines = { + line_id: bytes(HBM[line_id*CACHE_LINE : (line_id+1)*CACHE_LINE]) + for line_id in line_requests + } + + # Step 5: accounting + useful_bytes = WAVE_SIZE * lane_nbytes + fetched_bytes = len(fetched_lines) * CACHE_LINE + return num_transactions=len(fetched_lines), efficiency=useful_bytes/fetched_bytes +``` + +[`assets/coalescing_model.py`](assets/coalescing_model.py) has the full implementation with 7 scenarios you can step through in a debugger. + +## Coalescing - Interactive {background-iframe="assets/coalescing_interactive.html"} + +[Pick a scenario with the buttons. Rows = 64 lanes, columns = 64 B HBM cache lines. +Green cell = useful byte (lane wanted it). Number of non-empty columns = HBM transactions. +Efficiency = useful / fetched bytes.]{style="background: rgba(14,19,41,0.92); padding: 6px 10px; border-radius:6px; color:#eef2ff; font-size: 16px; position: absolute; bottom: 30px; left: 30px; max-width: 900px;"} + +--- + +## Coalescing - Seven Scenarios (Summary) + +```{python} +#| echo: false +#| fig-width: 16 +#| fig-height: 6.5 +import sys, os +sys.path.insert(0, os.path.join(os.getcwd(), "assets")) +import coalescing_model as cm +import numpy as np +import matplotlib.pyplot as plt + +HBM = cm.make_hbm(1 << 20) +scenarios = [ + ("1. b32\ncontig", cm.scenario_1_coalesced_b32(HBM), "ideal"), + ("2. b32\nstride 256B", cm.scenario_2_strided_b32(HBM), "bad"), + ("3. b128\ncontig", cm.scenario_3_coalesced_b128(HBM), "ideal"), + ("4. b128\nstride 1024B", cm.scenario_4_strided_b128(HBM), "bad"), + ("5. b128\nmisaligned", cm.scenario_5_misaligned_b128(HBM), "trap"), + ("6. col of\nrow-major fp32",cm.scenario_6_column_of_rowmajor(HBM), "bad"), + ("7. row of\nrow-major fp16",cm.scenario_7_row_of_rowmajor_with_vec(HBM), "ideal"), +] +labels = [s[0] for s in scenarios] +txns = [s[1].num_transactions for s in scenarios] +effs = [s[1].efficiency * 100 for s in scenarios] +tags = [s[2] for s in scenarios] +colors = ["#2ecc71" if t == "ideal" else "#e74c3c" if t in ("bad","trap") else "#95a5a6" for t in tags] + +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6.5)) +x = np.arange(len(labels)) + +ax1.bar(x, txns, color=colors, edgecolor="black") +ax1.set_xticks(x); ax1.set_xticklabels(labels, fontsize=10) +ax1.set_ylabel("HBM transactions (lower = better)") +ax1.set_title("transactions issued", fontweight="bold") +ax1.axhline(16, ls="--", color="#2ecc71", alpha=0.6, label="b128 ideal = 16") +ax1.axhline(4, ls="--", color="#3498db", alpha=0.6, label="b32 ideal = 4") +ax1.legend(fontsize=9, loc="upper left") +for xi, v in zip(x, txns): ax1.text(xi, v+1, str(v), ha="center", fontweight="bold") + +ax2.bar(x, effs, color=colors, edgecolor="black") +ax2.set_xticks(x); ax2.set_xticklabels(labels, fontsize=10) +ax2.set_ylabel("HBM efficiency (%)") +ax2.set_title("bus efficiency", fontweight="bold"); ax2.set_ylim(0, 110) +for xi, v in zip(x, effs): ax2.text(xi, v+2, f"{v:.0f}%", ha="center", fontweight="bold") + +plt.tight_layout() +plt.show() +``` + +Scenario 7 = the global-load shape used by every tutorial kernel (green). Scenario 6 = what a naive transpose-read of gmem would do (red) -- **why we go through LDS**. + +## Coalescing: What Transfers To LDS + +For the rest of the deck, only the **coalesced b128** pattern matters on the HBM side. +All six tutorial kernels use this same global-memory read: + +```cpp +const auto gmem_desc_in = make_naive_tensor_descriptor( + make_tuple(number{}, number{}), + make_tuple(K, number<1>{}), + number<16 / sizeof(DataType)>{}, // GuaranteedLastDimensionVectorLength = 8 for fp16 + number<1>{}); // GuaranteedLastDimensionVectorStride +``` + +. . . + +The **LDS** side is where kernels diverge. Next: what a bank conflict actually is. + +## LDS Hardware Model + +```text +gfx942 (MI300): 32 banks x 4 B = 128 B / cycle / wave +gfx950 (MI355): 64 banks x 4 B = 256 B / cycle / wave + +wave = 64 lanes, processed in 2 half-waves of 32 lanes + (each half-wave must land on 32 distinct banks, or same slot) + +bank(addr_bytes) = (addr_bytes / 4) % NBanks +slot(addr_bytes) = addr_bytes / 4 # index within a bank + +LDS instruction widths (ds_read / ds_write): + b16 = 2 B (fp16 scalar) + b32 = 4 B = 1 slot per lane + b64 = 8 B = 2 slots per lane + b128 = 16 B = 4 slots per lane -> one instruction = 4 sub-steps +``` + +```{python} +#| echo: false +#| fig-width: 16 +#| fig-height: 5 +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import numpy as np + +fig, (ax_ok, ax_bad) = plt.subplots(1, 2, figsize=(16, 4.5)) + +for ax, title, stride_slots, colors_label in [ + (ax_ok, "Contiguous b32 lane i -> slot i (0 conflicts)", 1, "green"), + (ax_bad, "Strided b32 lane i -> slot 16*i (16-way conflict on 2 banks)", 16, "red"), +]: + ax.set_xlim(-0.5, 32.5) + ax.set_ylim(-0.5, 32.5) + ax.set_aspect("equal") + ax.set_xlabel("bank id (0..31)", fontsize=11) + ax.set_ylabel("slot within bank", fontsize=11) + ax.set_title(title, fontsize=12, fontweight="bold") + for bank in range(32): + ax.add_patch(mpatches.Rectangle((bank-0.5, -0.5), 1, 33, facecolor="#eef", edgecolor="none", alpha=0.3)) + ax.axhline(-0.5, color="black", lw=0.5) + + lanes = list(range(32)) + for lane in lanes: + slot = (lane * stride_slots) % 1024 + bank = slot % 32 + slot_in_bank = slot // 32 + c = "#2ecc71" if colors_label == "green" else "#e74c3c" + ax.add_patch(mpatches.Rectangle((bank-0.45, slot_in_bank-0.45), 0.9, 0.9, + facecolor=c, edgecolor="black", lw=0.5, alpha=0.85)) + if colors_label == "green": + ax.text(bank, slot_in_bank, str(lane), ha="center", va="center", fontsize=7, fontweight="bold") + + ax.set_xticks(range(0, 33, 4)) + ax.set_yticks(range(0, 33, 4)) + +plt.tight_layout() +plt.show() +``` + +## Bank-Conflict Rules - Interactive {background-iframe="assets/bank_rules_interactive.html"} + +[Buttons walk through all three rules on a real 32-bank half-wave. +R1: distinct banks or exact broadcast. R2: fp16 same-slot is all-or-nothing. +R3: `ds_read_b128` = 4 sub-steps, each checked against R1.]{style="background: rgba(14,19,41,0.92); padding: 6px 10px; border-radius:6px; color:#eef2ff; font-size: 16px; position: absolute; bottom: 30px; left: 30px; max-width: 960px;"} + +--- + +## The Three Rules, Condensed + +::: {.columns} +::: {.column width="33%"} + +### R1 - one half-wave, one sub-step + +For every 32-lane half-wave and every 4 B sub-step: + +- **distinct banks** across the 32 lanes, OR +- every same-bank lane on the **same 4 B slot** (broadcast) + +Anything else = N-way conflict. + +::: +::: {.column width="33%"} + +### R2 - fp16 inside one slot + +Two fp16 values share a 4 B slot. The slot broadcasts **only if every lane +that lands on that bank targets the same fp16 half**. + +**One dissenter = full N-way conflict.** No partial credit. + +::: +::: {.column width="33%"} + +### R3 - wide reads = 4 x R1 + +`ds_read_b128` issues 4 sub-steps at `base, base+4, base+8, base+12`. +**Each** sub-step is a full bank check. + +Widening helps only when R1 already holds. If R1 fails on one sub-step it fails +on all four. + +::: +::: + +## Checklist: Does `(write_dist, lds_desc, read_dist)` Give 0 Conflicts? + +Given a per-thread read pattern with stride `S` bytes along the lane axis and instruction width `W` bytes: + +```text +(Q1) slots_per_lane_per_substep = W / 4 (1 for b32, 4 for b128) +(Q2) for each sub-step s in [0, W/4): + lane_addr(lane) = base + lane * S + s * 4 + bank(lane) = (lane_addr / 4) % NBanks +(Q3) in each half-wave (lanes 0..31 and 32..63): + if all 32 banks distinct -> sub-step is OK + elif all lanes on same bank share 1 slot -> OK (broadcast) + else -> N-way conflict +(Q4) repeat for the WRITE side with its own (S, W). +``` + +. . . + +**Worked example - tutorial 01 row-major transpose read**: + +```text +kM=64, kK=32, FP16. Read pattern = 8 x ds_read_u16 at stride 64 B: + offsets: 0, 64, 128, 192, 256, 320, 384, 448 + slots: 0, 16, 32, 48, 64, 80, 96, 112 + banks: 0, 16, 0, 16, 0, 16, 0, 16 <- 8 lanes share {0, 16} + slots differ on bank 0: {0, 32, 64, 96} -> NOT broadcast + -> Rule R1 FAILS -> 8-way conflict per half-wave per instruction. +``` + +This is exactly what the assembly shows (next section). + +## The Full Pipeline + +```{python} +#| echo: false +#| fig-width: 16 +#| fig-height: 4.5 +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches + +fig, ax = plt.subplots(figsize=(16, 4.5)) +ax.set_xlim(0, 100); ax.set_ylim(0, 10); ax.axis("off") + +boxes = [ + ("HBM\ninput", 6, "#3498db"), + ("gmem load\n(coalesce)", 22, "#5dade2"), + ("registers", 38, "#95a5a6"), + ("LDS write", 54, "#e67e22"), + ("LDS read\n(TRANSPOSE)", 70, "#e74c3c"), + ("gmem store\n(coalesce)", 86, "#5dade2"), +] +for (label, x, c) in boxes: + ax.add_patch(mpatches.FancyBboxPatch((x-6, 3.5), 12, 3, boxstyle="round,pad=0.1", + facecolor=c, edgecolor="black", lw=2, alpha=0.9)) + ax.text(x, 5, label, ha="center", va="center", fontsize=12, fontweight="bold", color="white") + +for xa, xb in [(12, 16), (28, 32), (44, 48), (60, 64), (76, 80)]: + ax.annotate("", xy=(xb, 5), xytext=(xa, 5), + arrowprops=dict(arrowstyle="->", color="black", lw=2)) + +ax.text(6, 1, "= scenario 7\n(coalesced b128)", ha="center", fontsize=9, style="italic", color="#2ecc71") +ax.text(54, 1, "attacked by\n01/02/03/05", ha="center", fontsize=9, style="italic", color="#c0392b") +ax.text(70, 1, "attacked by\n05/08/10", ha="center", fontsize=9, style="italic", color="#c0392b") +ax.text(86, 1, "attacked by\n10 (M-vector)", ha="center", fontsize=9, style="italic", color="#c0392b") + +ax.text(50, 8.5, "gmem -> LDS write -> LDS read (transposed) -> gmem", + ha="center", fontsize=15, fontweight="bold") + +plt.show() +``` + +Every tutorial in Part B attacks a specific stage of this pipeline. + +# Part B - Six Tutorials {background-color="#34495E"} + +## 01 Row-Major Baseline - Code + +::: {.columns} +::: {.column width="58%"} + +```cpp +// LDS descriptor for writing [M, K] - plain row-major +static constexpr auto MakeLdsDescriptorMK() +{ + return make_naive_tensor_descriptor_packed( + make_tuple(number{}, number{})); +} + +// Transposed LDS descriptor for reading [K, M] +static constexpr auto MakeLdsDescriptorKM() +{ + return make_naive_tensor_descriptor( + make_tuple(number{}, number{}), + make_tuple(number<1>{}, number{})); // stride kK=32 on the fast axis +} +``` + +Tile is `kM=64, kK=32`. Writes are row-major (fine). +**Reads are columns at stride 64 B** - bank 0 and bank 16, over and over. + +::: +::: {.column width="42%"} + +**What the compiler generated**: + +```asm +ds_write_b128 v..., v... # write: OK +ds_read_u16 v8, v6 # read: bad +ds_read_u16 v9, v6 offset:64 +ds_read_u16 v10, v6 offset:128 +ds_read_u16 v11, v6 offset:192 +ds_read_u16 v12, v6 offset:256 +ds_read_u16 v13, v6 offset:320 +ds_read_u16 v14, v6 offset:384 +ds_read_u16 v15, v6 offset:448 +``` + +All 8 reads share the **same base register** `v6`. +Offsets step by 64 B = 16 slots = a full trip around 32 banks, landing on `{0, 16, 0, 16, ...}`. + +::: +::: + +## 01 Row-Major Baseline - Counters + +::: {.columns} +::: {.column width="50%"} + +```text +global loads : 8x buffer_load_dwordx4 (coalesced) +global stores : 8x buffer_store_short (narrow transpose) +LDS writes : 4x ds_write_b128 +LDS reads : 8x ds_read_u16 (conflicting) + +SQ_LDS_BANK_CONFLICT : 3,670,016 (very high, 14 per dispatch) +SQ_INSTS_LDS : 294,912 +kernel time (M=65536) : 14.08 us +HBM bandwidth : 4.77 TB/s <-- well below peak +``` + +::: +::: {.column width="50%"} + +**What the rules say**: + +- R1 fails: 8 lanes on {bank 0, bank 16} with 8 distinct slots -> 7-way conflict per half-wave. +- R2 fails: different rows -> different slots, no FP16 broadcast. +- R3: b16 reads are a single sub-step, so width doesn't hurt (but also doesn't help). + +**Take-away**: a naive row-major LDS layout is unusable for transpose reads. +Everything that follows attacks this read pattern. + +::: +::: + +## 02 Column-Major LDS - Move the Pain + +::: {.columns} +::: {.column width="55%"} + +```cpp +// LDS descriptor for writing [M, K] - column-major strides +static constexpr auto MakeLdsDescriptorMK() +{ + return make_naive_tensor_descriptor( + make_tuple(number{}, number{}), + make_tuple(number<1>{}, number{})); // M is fast axis +} + +// Reading [K, M] -- now this is contiguous in M +static constexpr auto MakeLdsDescriptorKM() +{ + return make_naive_tensor_descriptor( + make_tuple(number{}, number{}), + make_tuple(number{}, number<1>{})); +} +``` + +::: +::: {.column width="45%"} + +We just swapped which axis is contiguous in LDS. + +- Reads are now contiguous -> `ds_read_b128` possible. +- Writes become the strided ones now -> `ds_write_b16` and conflicts on the **write** side. +- Net bank-conflict count **does not drop**; the pain just moved. + +**Rule R1 check**: write now has stride 64 B -> exactly the same `{0, 16, ...}` pattern R1 failed on for 01, except flipped to writes. + +**Take-away**: you cannot solve a transpose via LDS layout alone if the layout is rectangular. +::: +::: + +## 03 Row-Major + Padding - The Classical Fix + +::: {.columns} +::: {.column width="55%"} + +```cpp +static constexpr index_t kPadding = 2; // 2 fp16 = 4 B padding +static constexpr index_t kKPadded = kK + kPadding; // 34 elements per row + +static constexpr auto MakeLdsDescriptorMK() +{ + return make_naive_tensor_descriptor( + make_tuple(number{}, number{}), // logical [M, K] + make_tuple(number{}, number<1>{})); // padded stride! +} + +static constexpr auto MakeLdsDescriptorKM() +{ + return make_naive_tensor_descriptor( + make_tuple(number{}, number{}), + make_tuple(number<1>{}, number{})); +} +``` + +::: +::: {.column width="45%"} + +**Why it works**: + +```text +Unpadded row stride = 32 x 2 = 64 B = 16 slots (divides 32 -> collisions) +Padded row stride = 34 x 2 = 68 B = 17 slots (coprime with 32 -> all banks touched) +``` + +Since 17 is coprime with 32, 32 lanes walking down a column hit **32 distinct banks**. R1 satisfied. + +**Cost**: 2 extra fp16 per row x 64 rows = 256 B wasted LDS. +**Benefit**: conflicts drop **5x** (3.67M -> 0.79M), bandwidth jumps from **4.77 -> 5.62 TB/s**. +**Caveat**: padding alone does not hit 0. The remaining lanes still broadcast-miss on two banks per half-wave. +Pair with XOR (05) or switch to 08 to eliminate them. + +::: +::: + +## 05 XOR + Padding - Belt and Braces + +::: {.columns} +::: {.column width="55%"} + +```cpp +static constexpr index_t kKPack = 8; +static constexpr index_t kKPadded = 33; // padding on the pack axis + +static constexpr auto MakeLdsDescriptorMK() { + constexpr auto MLdsLayer = /* 32*4/kK/sizeof(T) */; + auto lds_desc_0 = make_naive_tensor_descriptor( + make_tuple(number{}, + number{}, + number{}), + make_tuple(number{}, + number{}, // <<< PADDED + number<1>{}), ...); + auto lds_desc_permuted = transform_tensor_descriptor( + lds_desc_0, + make_tuple(make_xor_transform(...), // <<< XOR on (M, A) + make_pass_through_transform(number{})), ...); + // unmerge A -> (MLdsLayer, K0); merge back to [M, K] + return lds_desc; +} +``` + +::: +::: {.column width="45%"} + +**Why both?** Tutorial 04 (XOR alone, same LDS descriptor as 08 but a mismatched read distribution) +measured **~3072 residual conflicts** because 3 of its 8 `ds_read_u16` instructions used +**hardcoded offsets** that bypass the XOR swizzle -- see +[`investigation/PRESENTATION_READY_SUMMARY.md`](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/investigation/PRESENTATION_READY_SUMMARY.md): + +```asm +ds_read_u16 v18, v29 offset:128 # bypasses XOR! +ds_read_u16 v20, v26 offset:128 # bypasses XOR! +ds_read_u16 v21, v22 offset:256 # bypasses XOR! +3 / 8 = 37.5% == observed 38% residual conflicts +``` + +**05's fix**: pad the stride so even the bypassing offsets land on fresh banks. +Zero conflicts, at the cost of ~64 bytes of LDS per tile plus the XOR machinery. + +::: +::: + +## 08 XOR Done Right - The Descriptor + +```cpp +static constexpr auto MakeLdsDescriptorMK() +{ + constexpr index_t NBanks = get_n_lds_banks(); // 32 gfx942 / 64 gfx950 + constexpr index_t MLdsLayer = (NBanks * 4 / kK / sizeof(T)); // 2 for fp16/kK=32 + constexpr index_t RowMul = (NBanks == 64) ? 2 : 1; // <<< gfx950 doubles B + + // Step 1: reshape to [A = kK/kKPack * MLdsLayer, B = kM/MLdsLayer, KPack] + auto lds_desc_0 = make_naive_tensor_descriptor( + make_tuple(number{}, number{}, number{}), + make_tuple(number{}, number{}, number<1>{}), + number{}, number<1>{}); + + // Step 2: XOR-swizzle (B, A) with B multiplied by RowMul + auto lds_desc_permuted = transform_tensor_descriptor(lds_desc_0, + make_tuple(make_xor_transform(make_tuple(number{}, + number{})), + make_pass_through_transform(number{})), + make_tuple(sequence<1, 0>{}, sequence<2>{}), + make_tuple(sequence<1, 0>{}, sequence<2>{})); + + // Step 3: unmerge A -> (MLdsLayer, K0 = kK/kKPack) + // Step 4: merge (B, MLdsLayer) -> M ; merge (K0, KPack) -> K + return lds_desc; // presents as [M, K] to the user +} +``` + +The whole pipeline is 4 `make_*_transform` calls. **No padding. No wasted LDS.** + +## 08 - XOR Descriptor (Interactive, 4 steps) {background-iframe="assets/step1_reshape_only.html"} + +[Buttons: **Before** (64x32 logical) -> **Step1 reshape** to [B=32,A=8] KPack blocks -> **Recolor** by column identity -> **Step2 XOR** shuffles blocks along A using key `b mod A` -> **Step3 unmerge** A -> (L=2, K0=4) -> **Step4 merge** back to physical [32 x 64] LDS rows. Matches `xor_t::calculate_lower_index` in ck_tile exactly for `kM=64, kK=32, kKPack=8, MLdsLayer=2`.]{style="background: rgba(14,19,41,0.92); padding: 6px 10px; border-radius:6px; color:#eef2ff; font-size: 16px; position: absolute; bottom: 30px; left: 30px; max-width: 960px;"} + +--- + +## 08 - XOR Descriptor, Step By Step (Static) + +```{python} +#| echo: false +#| fig-width: 20 +#| fig-height: 9 +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import numpy as np + +M, K, KPack, L = 64, 32, 8, 2 +K0, A, B = K // KPack, (K // KPack) * L, M // L # K0=4, A=8, B=32 + +# These formulas match ck_tile xor_t::calculate_lower_index exactly: +# low[0] = up[0] (B axis preserved) +# low[1] = up[1] XOR (up[0] % up_lengths[1]) (A axis is XORed with b % A) +def build(): + items = [] + for m in range(M): + for k in range(K): + n = m * K + k # linear id in [M,K] + c = n % KPack # 0..7 KPack + a = (n // KPack) % A # 0..7 A = (K/KPack)*L + b = n // 64 # 0..31 B + ax = a ^ (b % A) # XOR on A using (b % A) as key + l = ax // K0 # 0..1 MLdsLayer + k0 = ax % K0 # 0..3 + mF = b * L + l # B preserved, unmerge of ax on the row axis + kF = k0 * KPack + c # merge (K0, KPack) -> K + items.append(dict(id=n, m=m, k=k, c=c, a=a, b=b, + ax=ax, l=l, k0=k0, mF=mF, kF=kF)) + return items + +def color_of(id_): + return plt.get_cmap("hsv")((id_ * 29 % 360) / 360.0) + +items = build() + +fig, axes = plt.subplots(1, 5, figsize=(20, 8)) + +def draw(ax, at_rc, title, nrows, ncols, xlabel="", ylabel=""): + grid = np.full((nrows, ncols), -1, dtype=int) + for (r, c, i) in at_rc: + grid[r, c] = i + ax.set_xlim(-0.5, ncols - 0.5); ax.set_ylim(nrows - 0.5, -0.5) + ax.set_aspect("equal") + for r in range(nrows): + for c in range(ncols): + i = grid[r, c] + ax.add_patch(mpatches.Rectangle((c - 0.5, r - 0.5), 1, 1, + facecolor=color_of(i) if i >= 0 else "#222", + edgecolor="#111", lw=0.15)) + ax.set_title(title, fontsize=11, fontweight="bold") + ax.set_xlabel(xlabel, fontsize=9); ax.set_ylabel(ylabel, fontsize=9) + ax.set_xticks([]); ax.set_yticks([]) + +# Step 0: original [M, K] -- 64 x 32 +draw(axes[0], [(e["m"], e["k"], e["id"]) for e in items], + "0) original [M=64, K=32]", + M, K, xlabel="K", ylabel="M") + +# Step 1: reshape (A, B, KPack) -> lay out as (B rows, A*KPack cols). +# Each (b, a) cell holds KPack=8 elements (ids vary with c). +draw(axes[1], [(e["b"], e["a"] * KPack + e["c"], e["id"]) for e in items], + "1) reshape (B=32, A=8, KPack=8)", + B, A * KPack, xlabel="A*KPack", ylabel="B") + +# Step 2: XOR -- A moves to ax = a XOR (b % A). Row b is preserved. +draw(axes[2], [(e["b"], e["ax"] * KPack + e["c"], e["id"]) for e in items], + "2) XOR ax = a XOR (b mod A)", + B, A * KPack, xlabel="ax*KPack", ylabel="B") + +# Step 3: unmerge A_ax -> (L=2, K0=4). Now layout is (B, L, K0, KPack). +# Plot as (B*L rows, K0*KPack cols) so the L layers stack vertically by row b -> (b, l). +draw(axes[3], + [(e["b"] * L + e["l"], e["k0"] * KPack + e["c"], e["id"]) for e in items], + "3) unmerge ax -> (L=2, K0=4)", + B * L, K0 * KPack, xlabel="K0*KPack", ylabel="B*L") + +# Step 4: final merge. m_F = b*L + l, k_F = k0*KPack + c. This is the physical LDS layout. +draw(axes[4], [(e["mF"], e["kF"], e["id"]) for e in items], + "4) merge back to physical [M=64, K=32]", + M, K, xlabel="K_final", ylabel="M_final") + +plt.tight_layout() +plt.show() +``` + +Colour = element id in the original `[M, K]` matrix. Follow one colour across the 5 panels. +**Only step 2 permutes**: two elements that shared a bank at step 1 end up in different physical columns at step 4, which is where R1 starts passing. + +## 08 - Why It Actually Has 0 Conflicts + +::: {.columns} +::: {.column width="55%"} + +```cpp +static constexpr auto MakeReadDistributionMK() +{ + constexpr index_t K1 = 16 / sizeof(DataType); // 8 + constexpr index_t K0 = kK / K1; // 4 (= num warps) + constexpr index_t M0 = 1, M1 = 8, M2 = 8; + return make_static_tile_distribution( + tile_distribution_encoding< + sequence<1>, + tuple, sequence>, + tuple, sequence<1, 1>>, + tuple, sequence<1, 2>>, + sequence<1, 2>, // Ys -> (M0, K1) + sequence<0, 1>>{}); +} +``` + +**Per-thread Y shape = (M0=1, K1=8)**: each lane reads **8 consecutive K values at a fixed M**. + +::: +::: {.column width="45%"} + +```asm +ds_read_b128 v[4:7], v2 # one instruction, 16 B +``` + +Contrast with tutorial 01/04's read distribution which reads 8 M values at a fixed K -> must be 8 x `ds_read_u16`. + +**Why 0 conflicts**: + +- The 8 K values sit in **one XOR pack** (the `kKPack = 8` axis is not XORed). +- 16 B = 4 sub-steps of 4 B each (R3) that all land on the same XOR key -> 4 contiguous banks. +- 64 lanes * 4 banks/lane -> all 256 banks-cycles distinct -> R1 satisfied for every sub-step. + +`buffer_store_*` on the output side stays narrow (`8x buffer_store_short`) because the per-thread register shape is K-vectorized, not M-vectorized. **That is what tutorial 10 fixes.** + +::: +::: + +## 10 M-Vector Store - Flip the Output Vector + +::: {.columns} +::: {.column width="55%"} + +```cpp +static constexpr index_t kMPack = 8; // per-thread register vector on READ side + +static constexpr auto MakeReadDistributionMK() +{ + constexpr index_t M_PerThread = kMPack; // 8 + constexpr index_t M_Lane = kM / M_PerThread; // 8 + // Y shape: (M_PerThread=8, K=1) per thread -- OPPOSITE of 08 + ... +} +``` + +Same LDS descriptor as 08, but each lane now holds **8 consecutive M values at one K**. + +::: +::: {.column width="45%"} + +**Trade-off**: + +```text + 07/08 10 +global load buffer_load_dwordx4 buffer_load_dwordx4 +LDS write ds_write_b128 ds_write_b128 +LDS read 1x ds_read_b128 8x ds_read_u16 (<-- more LDS ops) +global store 8x buffer_store_short buffer_store_dwordx4 (<-- wide!) +conflicts 0 0 +``` + +- Global **store** becomes coalesced b128. Win on the HBM side. +- LDS **read** count goes up. Because the XOR pack axis is K but we read along M now, + 8 M values -> 8 different XOR keys -> 8 instructions. Rule R1 still holds so **no new conflicts**. +- Net: slightly slower on our workload; wins only when the output is heavily reused. + +::: +::: + +# Summary {background-color="#2C3E50"} + +## All Six, Side by Side + +```{python} +#| echo: false +import pandas as pd +from IPython.display import Markdown + +df = pd.read_csv("assets/bank_conflict_numbers.csv") + +isa = { + "01_row_major": ("bx4", "store_short x8", "ds_write_b128", "ds_read_u16 x8", "R1 X R2 X"), + "02_column_major": ("bx4", "store_short x8", "ds_write_u16 x8", "ds_read_b128", "R1 X on write"), + "03_row_major_padded": ("bx4", "store_short x8", "ds_write_b128", "ds_read_u16 x8", "pad helps write, read partial"), + "05_xor_plus_padding": ("bx4", "store_short x8", "ds_write_b128", "ds_read_u16 x8", "R1 OK via XOR+pad"), + "08_xor_cross_warp_window_reinterpret": ("bx4", "store_short x8", "ds_write_b128", "ds_read_b128", "R1 R2 R3 OK"), + "10_m_vector_store": ("bx4", "store_dwordx4", "ds_write_b128", "ds_read_u16 x8", "R1 OK, wider gstore"), +} + +rows = [] +for _, r in df.iterrows(): + k = r["kernel"] + gl, gs, lw, lr, rule = isa[k] + short = {"01_row_major": "01 row-major", + "02_column_major": "02 col-major", + "03_row_major_padded": "03 padding", + "05_xor_plus_padding": "05 XOR+pad", + "08_xor_cross_warp_window_reinterpret": "08 XOR clean", + "10_m_vector_store": "10 M-vec store"}[k] + rows.append((short, gl, gs, lw, lr, + f"{int(r['SQ_LDS_BANK_CONFLICT']):,}", + f"{int(r['SQ_INSTS_LDS']):,}", + f"{r['time_us']:.2f}", + f"{r['bw_TBps']:.2f}", + rule)) + +cols = ["kernel", "gload", "gstore", "LDS write", "LDS read", + "conflicts", "LDS insts", "time (us)", "BW (TB/s)", "rules"] +Markdown(pd.DataFrame(rows, columns=cols).to_markdown(index=False)) +``` + +. . . + +Numbers are `rocprofv3 --pmc SQ_LDS_BANK_CONFLICT SQ_INSTS_LDS SQ_INSTS_LDS_LOAD SQ_INSTS_LDS_STORE` +on MI300, FP16, `M=65536, K=256`. Source: [`assets/bank_conflict_numbers.csv`](assets/bank_conflict_numbers.csv). +Two observations worth calling out: + +- **08 has 4.5x fewer LDS instructions** than any other kernel (65k vs 295k) -- one `ds_read_b128` replaces 8 `ds_read_u16`. +- **03 padding does not fully zero conflicts** at this problem size (reduces from 3.67M to 0.79M); XOR+pad (05) and XOR done right (08) both land on exactly 0. + +## Rules Of Thumb + +::: {.incremental} +1. **Start from coalescing.** If the global load/store is already narrow, nothing on the LDS side can rescue you. +2. **Pick padding** (03) when you need a one-line fix and can spare a few bytes per row. + It satisfies R1 by making the stride coprime with `NBanks`. +3. **Pick XOR** (08) when you want zero wasted LDS, your LDS tile is rectangular, + and your per-thread read shape can be made to **align with the `kKPack` axis** (R3 pays off only then). +4. **Remember `RowMul`** on gfx950: the XOR B-axis doubles. Hard-coding `NBanks=32` gives residual conflicts on MI355. +5. **If the global store is slow** (M-vectorized output) use a tutorial-10-style rotated read distribution, + accepting extra LDS instructions to get `buffer_store_dwordx4`. Measure; the LDS-vs-HBM trade is workload-dependent. +6. **Watch out for compiler offsets**: tutorial 04 showed `ds_read_u16 offset:N` can bypass XOR (the `+N` is added *after* the swizzle). Either align reads with the pack axis (08) or pad on top of XOR (05). +::: + +## Code Pointers + +::: {.columns} +::: {.column width="50%"} + +- [01_row_major.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/01_row_major.cpp) +- [02_column_major.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/02_column_major.cpp) +- [03_row_major_padded.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/03_row_major_padded.cpp) +- [05_xor_plus_padding.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/05_xor_plus_padding.cpp) +- [08_xor_cross_warp_window_reinterpret.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/08_xor_cross_warp_window_reinterpret.cpp) +- [10_m_vector_store.cpp](aiter/3rdparty/composable_kernel/example/ck_tile/99_toy_tutorial/tutorial_14_bank_conflict_scenarios/10_m_vector_store.cpp) + +::: +::: {.column width="50%"} + +**Background reading in `investigation/`**: + +- `BANK_CONFLICT_CALCULATION_FINAL.md` - the worked Phase-0 conflict count. +- `CONFLICT_MODEL_FINAL.md` - same-slot all-or-nothing rule (R2). +- `PRESENTATION_READY_SUMMARY.md` - the 3/8-offsets-bypass-XOR finding (why 04 is not enough). +- `WHY_XOR_STILL_HAS_CONFLICTS.md` - the 04-vs-08 tile distribution contrast. + +**Assets**: + +- `assets/coalescing_model.py` +- `assets/xor_full_steps_simple.html` + +::: +::: + +# Questions? {background-color="#2C3E50"} diff --git a/bank_conflict_slides_files/figure-revealjs/cell-2-output-1.png b/bank_conflict_slides_files/figure-revealjs/cell-2-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..703d2260a122418886d59ce32afdd36fee1b3702 GIT binary patch literal 46112 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 literal 0 HcmV?d00001 diff --git a/bank_conflict_slides_files/figure-revealjs/cell-3-output-1.png b/bank_conflict_slides_files/figure-revealjs/cell-3-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf27b6d0867421b4f67d07a6e29b64cb165a1ab8 GIT binary patch literal 32268 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 z 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

q9hcuJWL#88 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≫a?n;E31uaYXW;Mt@iwoUJO{?Y%Zx^C93ax;e$Z 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

9qo&J)0aJXfu5nAxn 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�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 S$_k->`#@e<4tw{B$A16@1?l+! literal 0 HcmV?d00001 diff --git a/bank_conflict_slides_files/libs/clipboard/clipboard.min.js b/bank_conflict_slides_files/libs/clipboard/clipboard.min.js new file mode 100644 index 0000000000..1103f811ed --- /dev/null +++ b/bank_conflict_slides_files/libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light-border]>.tippy-arrow:after,.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=light-border]>.tippy-arrow:after{border-color:transparent;border-style:solid}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:after{border-top-color:rgba(0,8,16,.2);border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:rgba(0,8,16,.2);border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:after{border-left-color:rgba(0,8,16,.2);border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:rgba(0,8,16,.2)}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow{fill:#fff}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px} \ No newline at end of file diff --git a/bank_conflict_slides_files/libs/quarto-html/popper.min.js b/bank_conflict_slides_files/libs/quarto-html/popper.min.js new file mode 100644 index 0000000000..e3726d728b --- /dev/null +++ b/bank_conflict_slides_files/libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/bank_conflict_slides_files/libs/quarto-html/quarto-html.min.css b/bank_conflict_slides_files/libs/quarto-html/quarto-html.min.css new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/bank_conflict_slides_files/libs/quarto-html/quarto-html.min.css @@ -0,0 +1 @@ + diff --git a/bank_conflict_slides_files/libs/quarto-html/quarto-syntax-highlighting.css b/bank_conflict_slides_files/libs/quarto-html/quarto-syntax-highlighting.css new file mode 100644 index 0000000000..9e5a23d66f --- /dev/null +++ b/bank_conflict_slides_files/libs/quarto-html/quarto-syntax-highlighting.css @@ -0,0 +1,180 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-al-color: #ff5555; + --quarto-hl-an-color: #75715e; + --quarto-hl-at-color: #f92672; + --quarto-hl-bn-color: #ae81ff; + --quarto-hl-bu-color: #66D9EF; + --quarto-hl-ch-color: #e6db74; + --quarto-hl-co-color: #75715e; + --quarto-hl-cv-color: #75715e; + --quarto-hl-cn-color: #ae81ff; + --quarto-hl-cf-color: #f92672; + --quarto-hl-dt-color: #66d9ef; + --quarto-hl-dv-color: #ae81ff; + --quarto-hl-do-color: #75715e; + --quarto-hl-er-color: #ff5555; + --quarto-hl-ex-color: #a6e22e; + --quarto-hl-fl-color: #ae81ff; + --quarto-hl-fu-color: #a6e22e; + --quarto-hl-im-color: #f92672; + --quarto-hl-in-color: #f1fa8c; + --quarto-hl-kw-color: #f92672; + --quarto-hl-op-color: #f8f8f2; + --quarto-hl-pp-color: #f92672; + --quarto-hl-re-color: #75715e; + --quarto-hl-sc-color: #ae81ff; + --quarto-hl-ss-color: #e6db74; + --quarto-hl-st-color: #e6db74; + --quarto-hl-va-color: #f8f8f2; + --quarto-hl-vs-color: #e6db74; + --quarto-hl-wa-color: #ff5555; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code span.al { + font-weight: bold; + color: #ff5555; +} + +code span.an { + color: #75715e; +} + +code span.at { + color: #f92672; +} + +code span.bn { + color: #ae81ff; +} + +code span.bu { + color: #66D9EF; +} + +code span.ch { + color: #e6db74; +} + +code span.co { + color: #75715e; +} + +code span.cv { + color: #75715e; +} + +code span.cn { + color: #ae81ff; +} + +code span.cf { + color: #f92672; +} + +code span.dt { + font-style: italic; + color: #66d9ef; +} + +code span.dv { + color: #ae81ff; +} + +code span.do { + color: #75715e; +} + +code span.er { + color: #ff5555; + text-decoration: underline; +} + +code span.ex { + font-weight: bold; + color: #a6e22e; +} + +code span.fl { + color: #ae81ff; +} + +code span.fu { + color: #a6e22e; +} + +code span.im { + color: #f92672; +} + +code span.in { + color: #f1fa8c; +} + +code span.kw { + color: #f92672; +} + +pre > code.sourceCode > span { + color: #f8f8f2; +} + +code span { + color: #f8f8f2; +} + +code.sourceCode > span { + color: #f8f8f2; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #f8f8f2; +} + +code span.op { + color: #f8f8f2; +} + +code span.pp { + color: #f92672; +} + +code span.re { + color: #75715e; +} + +code span.sc { + color: #ae81ff; +} + +code span.ss { + color: #e6db74; +} + +code span.st { + color: #e6db74; +} + +code span.va { + color: #f8f8f2; +} + +code span.vs { + color: #e6db74; +} + +code span.wa { + color: #ff5555; +} + +.prevent-inlining { + content: " !el.hasAttribute("disabled") && !el.getAttribute("aria-hidden") + ); + }; + + /** + * Remove roles and attributes from a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + * @param {Object} settings User settings and options + */ + var destroyTab = function (tab, content, settings) { + // Remove the generated ID + if (tab.id.slice(0, settings.idPrefix.length) === settings.idPrefix) { + tab.id = ""; + } + + // remove event listener + tab.removeEventListener("focus", focusHandler, true); + + // Remove roles + tab.removeAttribute("role"); + tab.removeAttribute("aria-controls"); + tab.removeAttribute("aria-selected"); + tab.removeAttribute("tabindex"); + tab.closest("li").removeAttribute("role"); + content.removeAttribute("role"); + content.removeAttribute("aria-labelledby"); + content.removeAttribute("hidden"); + }; + + /** + * Add the required roles and attributes to a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + * @param {Object} settings User settings and options + */ + var setupTab = function (tab, content, settings) { + // Give tab an ID if it doesn't already have one + if (!tab.id) { + tab.id = settings.idPrefix + content.id; + } + + // Add roles + tab.setAttribute("role", "tab"); + tab.setAttribute("aria-controls", content.id); + tab.closest("li").setAttribute("role", "presentation"); + content.setAttribute("role", "tabpanel"); + content.setAttribute("aria-labelledby", tab.id); + + // Add selected state + if (tab.matches(settings.default)) { + tab.setAttribute("aria-selected", "true"); + } else { + tab.setAttribute("aria-selected", "false"); + content.setAttribute("hidden", "hidden"); + } + + // add focus event listender + tab.addEventListener("focus", focusHandler); + }; + + /** + * Hide a tab and its content + * @param {Node} newTab The new tab that's replacing it + */ + var hide = function (newTab) { + // Variables + var tabGroup = newTab.closest('[role="tablist"]'); + if (!tabGroup) return {}; + var tab = tabGroup.querySelector('[role="tab"][aria-selected="true"]'); + if (!tab) return {}; + var content = document.querySelector(tab.hash); + + // Hide the tab + tab.setAttribute("aria-selected", "false"); + + // Hide the content + if (!content) return { previousTab: tab }; + content.setAttribute("hidden", "hidden"); + + // Return the hidden tab and content + return { + previousTab: tab, + previousContent: content, + }; + }; + + /** + * Show a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + */ + var show = function (tab, content) { + tab.setAttribute("aria-selected", "true"); + content.removeAttribute("hidden"); + tab.focus(); + }; + + /** + * Toggle a new tab + * @param {Node} tab The tab to show + */ + var toggle = function (tab) { + // Make sure there's a tab to toggle and it's not already active + if (!tab || tab.getAttribute("aria-selected") == "true") return; + + // Variables + var content = document.querySelector(tab.hash); + if (!content) return; + + // Hide active tab and content + var details = hide(tab); + + // Show new tab and content + show(tab, content); + + // Add event details + details.tab = tab; + details.content = content; + + // Emit a custom event + emitEvent(tab, details); + }; + + /** + * Get all of the tabs in a tablist + * @param {Node} tab A tab from the list + * @return {Object} The tabs and the index of the currently active one + */ + var getTabsMap = function (tab) { + var tabGroup = tab.closest('[role="tablist"]'); + var tabs = tabGroup ? tabGroup.querySelectorAll('[role="tab"]') : null; + if (!tabs) return; + return { + tabs: tabs, + index: Array.prototype.indexOf.call(tabs, tab), + }; + }; + + /** + * Switch the active tab based on keyboard activity + * @param {Node} tab The currently active tab + * @param {Key} key The key that was pressed + */ + var switchTabs = function (tab, key) { + // Get a map of tabs + var map = getTabsMap(tab); + if (!map) return; + var length = map.tabs.length - 1; + var index; + + // Go to previous tab + if (["ArrowUp", "ArrowLeft", "Up", "Left"].indexOf(key) > -1) { + index = map.index < 1 ? length : map.index - 1; + } + + // Go to next tab + else if (["ArrowDown", "ArrowRight", "Down", "Right"].indexOf(key) > -1) { + index = map.index === length ? 0 : map.index + 1; + } + + // Go to home + else if (key === "Home") { + index = 0; + } + + // Go to end + else if (key === "End") { + index = length; + } + + // Toggle the tab + toggle(map.tabs[index]); + }; + + /** + * Create the Constructor object + */ + var Constructor = function (selector, options) { + // + // Variables + // + + var publicAPIs = {}; + var settings, tabWrapper; + + // + // Methods + // + + publicAPIs.destroy = function () { + // Get all tabs + var tabs = tabWrapper.querySelectorAll("a"); + + // Add roles to tabs + Array.prototype.forEach.call(tabs, function (tab) { + // Get the tab content + var content = document.querySelector(tab.hash); + if (!content) return; + + // Setup the tab + destroyTab(tab, content, settings); + }); + + // Remove role from wrapper + tabWrapper.removeAttribute("role"); + + // Remove event listeners + document.documentElement.removeEventListener( + "click", + clickHandler, + true + ); + tabWrapper.removeEventListener("keydown", keyHandler, true); + + // Reset variables + settings = null; + tabWrapper = null; + }; + + /** + * Setup the DOM with the proper attributes + */ + publicAPIs.setup = function () { + // Variables + tabWrapper = document.querySelector(selector); + if (!tabWrapper) return; + var tabs = tabWrapper.querySelectorAll("a"); + + // Add role to wrapper + tabWrapper.setAttribute("role", "tablist"); + + // Add roles to tabs. provide dynanmic tab indexes if we are within reveal + var contentTabindexes = + window.document.body.classList.contains("reveal-viewport"); + var nextTabindex = 1; + Array.prototype.forEach.call(tabs, function (tab) { + if (contentTabindexes) { + tab.setAttribute("tabindex", "" + nextTabindex++); + } else { + tab.setAttribute("tabindex", "0"); + } + + // Get the tab content + var content = document.querySelector(tab.hash); + if (!content) return; + + // set tab indexes for content + if (contentTabindexes) { + getKeyboardFocusableElements(content).forEach(function (el) { + el.setAttribute("tabindex", "" + nextTabindex++); + }); + } + + // Setup the tab + setupTab(tab, content, settings); + }); + }; + + /** + * Toggle a tab based on an ID + * @param {String|Node} id The tab to toggle + */ + publicAPIs.toggle = function (id) { + // Get the tab + var tab = id; + if (typeof id === "string") { + tab = document.querySelector( + selector + ' [role="tab"][href*="' + id + '"]' + ); + } + + // Toggle the tab + toggle(tab); + }; + + /** + * Handle click events + */ + var clickHandler = function (event) { + // Only run on toggles + var tab = event.target.closest(selector + ' [role="tab"]'); + if (!tab) return; + + // Prevent link behavior + event.preventDefault(); + + // Toggle the tab + toggle(tab); + }; + + /** + * Handle keydown events + */ + var keyHandler = function (event) { + // Only run if a tab is in focus + var tab = document.activeElement; + if (!tab.matches(selector + ' [role="tab"]')) return; + + // Only run for specific keys + if (["Home", "End"].indexOf(event.key) < 0) return; + + // Switch tabs + switchTabs(tab, event.key); + }; + + /** + * Initialize the instance + */ + var init = function () { + // Merge user options with defaults + settings = extend(defaults, options || {}); + + // Setup the DOM + publicAPIs.setup(); + + // Add event listeners + document.documentElement.addEventListener("click", clickHandler, true); + tabWrapper.addEventListener("keydown", keyHandler, true); + }; + + // + // Initialize and return the Public APIs + // + + init(); + return publicAPIs; + }; + + // + // Return the Constructor + // + + return Constructor; + } +); diff --git a/bank_conflict_slides_files/libs/quarto-html/tippy.css b/bank_conflict_slides_files/libs/quarto-html/tippy.css new file mode 100644 index 0000000000..e6ae635cb1 --- /dev/null +++ b/bank_conflict_slides_files/libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/bank_conflict_slides_files/libs/quarto-html/tippy.umd.min.js b/bank_conflict_slides_files/libs/quarto-html/tippy.umd.min.js new file mode 100644 index 0000000000..ca292be32b --- /dev/null +++ b/bank_conflict_slides_files/libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/bank_conflict_slides_files/libs/revealjs/dist/reset.css b/bank_conflict_slides_files/libs/revealjs/dist/reset.css new file mode 100644 index 0000000000..e2385390fc --- /dev/null +++ b/bank_conflict_slides_files/libs/revealjs/dist/reset.css @@ -0,0 +1,30 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v4.0 | 20180602 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +main, menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, main, menu, nav, section { + display: block; +} \ No newline at end of file diff --git a/bank_conflict_slides_files/libs/revealjs/dist/reveal.css b/bank_conflict_slides_files/libs/revealjs/dist/reveal.css new file mode 100644 index 0000000000..5f80fd0961 --- /dev/null +++ b/bank_conflict_slides_files/libs/revealjs/dist/reveal.css @@ -0,0 +1,8 @@ +/*! +* reveal.js 4.3.1 +* https://revealjs.com +* MIT licensed +* +* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se +*/ +.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack video{min-width:0;min-height:0;-o-object-fit:contain;object-fit:contain}.reveal .r-vstack{flex-direction:column;align-items:center;justify-content:center}.reveal .r-hstack{flex-direction:row;align-items:center;justify-content:center}.reveal .items-stretch{align-items:stretch}.reveal .items-start{align-items:flex-start}.reveal .items-center{align-items:center}.reveal .items-end{align-items:flex-end}.reveal .justify-between{justify-content:space-between}.reveal .justify-around{justify-content:space-around}.reveal .justify-start{justify-content:flex-start}.reveal .justify-center{justify-content:center}.reveal .justify-end{justify-content:flex-end}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000}.reveal-viewport:-webkit-full-screen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:-ms-fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal .slides section .fragment{opacity:0;visibility:hidden;transition:all .2s ease;will-change:opacity}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.disabled{transition:none}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{transform:scale(.7)}.reveal .slides section .fragment.zoom-in{transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{transform:translate(0,40px)}.reveal .slides section .fragment.fade-up.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-down{transform:translate(0,-40px)}.reveal .slides section .fragment.fade-down.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-right{transform:translate(-40px,0)}.reveal .slides section .fragment.fade-right.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-left{transform:translate(40px,0)}.reveal .slides section .fragment.fade-left.visible{transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:"";font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:"";position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:.8em;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:-.3em;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:"";display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]){transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]){opacity:1}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]){transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]){transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]){transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal>.overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.3333333333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:"Speaker notes";display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:40vh}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}html.print-pdf *{-webkit-print-color-adjust:exact}html.print-pdf{width:100%;height:100%;overflow:visible}html.print-pdf body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.print-pdf .nestedarrow,html.print-pdf .reveal .controls,html.print-pdf .reveal .playback,html.print-pdf .reveal .progress,html.print-pdf .reveal.overview,html.print-pdf .state-background{display:none!important}html.print-pdf .reveal pre code{overflow:hidden!important;font-family:Courier,"Courier New",monospace!important}html.print-pdf .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.print-pdf .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.print-pdf .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.print-pdf .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.print-pdf .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.print-pdf .reveal img{box-shadow:none}html.print-pdf .reveal .backgrounds{display:none}html.print-pdf .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.print-pdf .reveal.show-notes{max-width:none;max-height:none}html.print-pdf .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.print-pdf .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.print-pdf .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px}html.print-pdf .aria-status{display:none}@media print{html:not(.print-pdf){background:#fff;width:auto;height:auto;overflow:visible}html:not(.print-pdf) body{background:#fff;font-size:20pt;width:auto;height:auto;border:0;margin:0 5%;padding:0;overflow:visible;float:none!important}html:not(.print-pdf) .controls,html:not(.print-pdf) .fork-reveal,html:not(.print-pdf) .nestedarrow,html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .share-reveal,html:not(.print-pdf) .state-background{display:none!important}html:not(.print-pdf) body,html:not(.print-pdf) li,html:not(.print-pdf) p,html:not(.print-pdf) td{font-size:20pt!important;color:#000}html:not(.print-pdf) h1,html:not(.print-pdf) h2,html:not(.print-pdf) h3,html:not(.print-pdf) h4,html:not(.print-pdf) h5,html:not(.print-pdf) h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) h1{font-size:28pt!important}html:not(.print-pdf) h2{font-size:24pt!important}html:not(.print-pdf) h3{font-size:22pt!important}html:not(.print-pdf) h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) h5{font-size:21pt!important}html:not(.print-pdf) h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) a:link,html:not(.print-pdf) a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) div,html:not(.print-pdf) ol,html:not(.print-pdf) p,html:not(.print-pdf) ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}} \ No newline at end of file diff --git a/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js b/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js new file mode 100644 index 0000000000..f18da895ff --- /dev/null +++ b/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js @@ -0,0 +1,9 @@ +/*! +* reveal.js 4.3.1 +* https://revealjs.com +* MIT licensed +* +* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se +*/ +const e=(e,t)=>{for(let i in t)e[i]=t[i];return e},t=(e,t)=>Array.from(e.querySelectorAll(t)),i=(e,t,i)=>{i?e.classList.add(t):e.classList.remove(t)},s=e=>{if("string"==typeof e){if("null"===e)return null;if("true"===e)return!0;if("false"===e)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e},a=(e,t)=>{e.style.transform=t},n=(e,t)=>{let i=e.matches||e.matchesSelector||e.msMatchesSelector;return!(!i||!i.call(e,t))},r=(e,t)=>{if("function"==typeof e.closest)return e.closest(t);for(;e;){if(n(e,t))return e;e=e.parentNode}return null},o=(e,t,i,s="")=>{let a=e.querySelectorAll("."+i);for(let t=0;t{let t=document.createElement("style");return t.type="text/css",e&&e.length>0&&(t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))),document.head.appendChild(t),t},d=()=>{let e={};location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi,(t=>{e[t.split("=").shift()]=t.split("=").pop()}));for(let t in e){let i=e[t];e[t]=s(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},c=(e,t=0)=>{if(e){let i,s=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=s+"px",e.parentNode.style.removeProperty("height"),i}return t},h={mp4:"video/mp4",m4a:"video/mp4",ogv:"video/ogg",mpeg:"video/mpeg",webm:"video/webm"},u=navigator.userAgent,g=/(iphone|ipod|ipad|android)/gi.test(u)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;/chrome/i.test(u)&&/edge/i.test(u);const v=/android/gi.test(u);var p={};Object.defineProperty(p,"__esModule",{value:!0});var m=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e?x(t(document.querySelectorAll(e)),i):x([e],i)[0]}}("undefined"==typeof window?null:window);class b{constructor(e){this.Reveal=e,this.startEmbeddedIframe=this.startEmbeddedIframe.bind(this)}shouldPreload(e){let t=this.Reveal.getConfig().preloadIframes;return"boolean"!=typeof t&&(t=e.hasAttribute("data-preload")),t}load(e,i={}){e.style.display=this.Reveal.getConfig().display,t(e,"img[data-src], video[data-src], audio[data-src], iframe[data-src]").forEach((e=>{("IFRAME"!==e.tagName||this.shouldPreload(e))&&(e.setAttribute("src",e.getAttribute("data-src")),e.setAttribute("data-lazy-loaded",""),e.removeAttribute("data-src"))})),t(e,"video, audio").forEach((e=>{let i=0;t(e,"source[data-src]").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src"),e.setAttribute("data-lazy-loaded",""),i+=1})),g&&"VIDEO"===e.tagName&&e.setAttribute("playsinline",""),i>0&&e.load()}));let s=e.slideBackgroundElement;if(s){s.style.display="block";let t=e.slideBackgroundContentElement,a=e.getAttribute("data-background-iframe");if(!1===s.hasAttribute("data-loaded")){s.setAttribute("data-loaded","true");let n=e.getAttribute("data-background-image"),r=e.getAttribute("data-background-video"),o=e.hasAttribute("data-background-video-loop"),l=e.hasAttribute("data-background-video-muted");if(n)/^data:/.test(n.trim())?t.style.backgroundImage=`url(${n.trim()})`:t.style.backgroundImage=n.split(",").map((e=>`url(${encodeURI(e.trim())})`)).join(",");else if(r&&!this.Reveal.isSpeakerNotes()){let e=document.createElement("video");o&&e.setAttribute("loop",""),l&&(e.muted=!0),g&&(e.muted=!0,e.setAttribute("playsinline","")),r.split(",").forEach((t=>{let i=((e="")=>h[e.split(".").pop()])(t);e.innerHTML+=i?``:``})),t.appendChild(e)}else if(a&&!0!==i.excludeIframes){let e=document.createElement("iframe");e.setAttribute("allowfullscreen",""),e.setAttribute("mozallowfullscreen",""),e.setAttribute("webkitallowfullscreen",""),e.setAttribute("allow","autoplay"),e.setAttribute("data-src",a),e.style.width="100%",e.style.height="100%",e.style.maxHeight="100%",e.style.maxWidth="100%",t.appendChild(e)}}let n=t.querySelector("iframe[data-src]");n&&this.shouldPreload(s)&&!/autoplay=(1|true|yes)/gi.test(a)&&n.getAttribute("src")!==a&&n.setAttribute("src",a)}this.layout(e)}layout(e){Array.from(e.querySelectorAll(".r-fit-text")).forEach((e=>{f(e,{minSize:24,maxSize:.8*this.Reveal.getConfig().height,observeMutations:!1,observeWindow:!1})}))}unload(e){e.style.display="none";let i=this.Reveal.getSlideBackground(e);i&&(i.style.display="none",t(i,"iframe[src]").forEach((e=>{e.removeAttribute("src")}))),t(e,"video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")})),t(e,"video[data-lazy-loaded] source[src], audio source[src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")}))}formatEmbeddedContent(){let e=(e,i,s)=>{t(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+i+'"]').forEach((t=>{let i=t.getAttribute(e);i&&-1===i.indexOf(s)&&t.setAttribute(e,i+(/\?/.test(i)?"&":"?")+s)}))};e("src","youtube.com/embed/","enablejsapi=1"),e("data-src","youtube.com/embed/","enablejsapi=1"),e("src","player.vimeo.com/","api=1"),e("data-src","player.vimeo.com/","api=1")}startEmbeddedContent(e){e&&!this.Reveal.isSpeakerNotes()&&(t(e,'img[src$=".gif"]').forEach((e=>{e.setAttribute("src",e.getAttribute("src"))})),t(e,"video, audio").forEach((e=>{if(r(e,".fragment")&&!r(e,".fragment.visible"))return;let t=this.Reveal.getConfig().autoPlayMedia;if("boolean"!=typeof t&&(t=e.hasAttribute("data-autoplay")||!!r(e,".slide-background")),t&&"function"==typeof e.play)if(e.readyState>1)this.startEmbeddedMedia({target:e});else if(g){let t=e.play();t&&"function"==typeof t.catch&&!1===e.controls&&t.catch((()=>{e.controls=!0,e.addEventListener("play",(()=>{e.controls=!1}))}))}else e.removeEventListener("loadeddata",this.startEmbeddedMedia),e.addEventListener("loadeddata",this.startEmbeddedMedia)})),t(e,"iframe[src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||this.startEmbeddedIframe({target:e})})),t(e,"iframe[data-src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||e.getAttribute("src")!==e.getAttribute("data-src")&&(e.removeEventListener("load",this.startEmbeddedIframe),e.addEventListener("load",this.startEmbeddedIframe),e.setAttribute("src",e.getAttribute("data-src")))})))}startEmbeddedMedia(e){let t=!!r(e.target,"html"),i=!!r(e.target,".present");t&&i&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener("loadeddata",this.startEmbeddedMedia)}startEmbeddedIframe(e){let t=e.target;if(t&&t.contentWindow){let i=!!r(e.target,"html"),s=!!r(e.target,".present");if(i&&s){let e=this.Reveal.getConfig().autoPlayMedia;"boolean"!=typeof e&&(e=t.hasAttribute("data-autoplay")||!!r(t,".slide-background")),/youtube\.com\/embed\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*"):/player\.vimeo\.com\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"method":"play"}',"*"):t.contentWindow.postMessage("slide:start","*")}}}stopEmbeddedContent(i,s={}){s=e({unloadIframes:!0},s),i&&i.parentNode&&(t(i,"video, audio").forEach((e=>{e.hasAttribute("data-ignore")||"function"!=typeof e.pause||(e.setAttribute("data-paused-by-reveal",""),e.pause())})),t(i,"iframe").forEach((e=>{e.contentWindow&&e.contentWindow.postMessage("slide:stop","*"),e.removeEventListener("load",this.startEmbeddedIframe)})),t(i,'iframe[src*="youtube.com/embed/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")})),t(i,'iframe[src*="player.vimeo.com/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"method":"pause"}',"*")})),!0===s.unloadIframes&&t(i,"iframe[data-src]").forEach((e=>{e.setAttribute("src","about:blank"),e.removeAttribute("src")})))}}class y{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="slide-number",this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){let i="none";e.slideNumber&&!this.Reveal.isPrintingPDF()&&("all"===e.showSlideNumber||"speaker"===e.showSlideNumber&&this.Reveal.isSpeakerNotes())&&(i="block"),this.element.style.display=i}update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.element.innerHTML=this.getSlideNumber())}getSlideNumber(e=this.Reveal.getCurrentSlide()){let t,i=this.Reveal.getConfig(),s="h.v";if("function"==typeof i.slideNumber)t=i.slideNumber(e);else{"string"==typeof i.slideNumber&&(s=i.slideNumber),/c/.test(s)||1!==this.Reveal.getHorizontalSlides().length||(s="c");let a=e&&"uncounted"===e.dataset.visibility?0:1;switch(t=[],s){case"c":t.push(this.Reveal.getSlidePastCount(e)+a);break;case"c/t":t.push(this.Reveal.getSlidePastCount(e)+a,"/",this.Reveal.getTotalSlides());break;default:let i=this.Reveal.getIndices(e);t.push(i.h+a);let n="h/v"===s?"/":".";this.Reveal.isVerticalSlide(e)&&t.push(n,i.v+1)}}let a="#"+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],a)}formatNumber(e,t,i,s="#"+this.Reveal.location.getHash()){return"number"!=typeof i||isNaN(i)?`\n\t\t\t\t\t${e}\n\t\t\t\t\t`:`\n\t\t\t\t\t${e}\n\t\t\t\t\t${t}\n\t\t\t\t\t${i}\n\t\t\t\t\t`}destroy(){this.element.remove()}}const w=e=>{let t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};let i=e.match(/^#([0-9a-f]{6})$/i);if(i&&i[1])return i=i[1],{r:parseInt(i.slice(0,2),16),g:parseInt(i.slice(2,4),16),b:parseInt(i.slice(4,6),16)};let s=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(s)return{r:parseInt(s[1],10),g:parseInt(s[2],10),b:parseInt(s[3],10)};let a=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return a?{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10),a:parseFloat(a[4])}:null};class E{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="backgrounds",this.Reveal.getRevealElement().appendChild(this.element)}create(){this.element.innerHTML="",this.element.classList.add("no-transition"),this.Reveal.getHorizontalSlides().forEach((e=>{let i=this.createBackground(e,this.element);t(e,"section").forEach((e=>{this.createBackground(e,i),i.classList.add("stack")}))})),this.Reveal.getConfig().parallaxBackgroundImage?(this.element.style.backgroundImage='url("'+this.Reveal.getConfig().parallaxBackgroundImage+'")',this.element.style.backgroundSize=this.Reveal.getConfig().parallaxBackgroundSize,this.element.style.backgroundRepeat=this.Reveal.getConfig().parallaxBackgroundRepeat,this.element.style.backgroundPosition=this.Reveal.getConfig().parallaxBackgroundPosition,setTimeout((()=>{this.Reveal.getRevealElement().classList.add("has-parallax-background")}),1)):(this.element.style.backgroundImage="",this.Reveal.getRevealElement().classList.remove("has-parallax-background"))}createBackground(e,t){let i=document.createElement("div");i.className="slide-background "+e.className.replace(/present|past|future/,"");let s=document.createElement("div");return s.className="slide-background-content",i.appendChild(s),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=s,this.sync(e),i}sync(e){const t=e.slideBackgroundElement,i=e.slideBackgroundContentElement,s={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundVideo:e.getAttribute("data-background-video"),backgroundIframe:e.getAttribute("data-background-iframe"),backgroundColor:e.getAttribute("data-background-color"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")},a=e.hasAttribute("data-preload");e.classList.remove("has-dark-background"),e.classList.remove("has-light-background"),t.removeAttribute("data-loaded"),t.removeAttribute("data-background-hash"),t.removeAttribute("data-background-size"),t.removeAttribute("data-background-transition"),t.style.backgroundColor="",i.style.backgroundSize="",i.style.backgroundRepeat="",i.style.backgroundPosition="",i.style.backgroundImage="",i.style.opacity="",i.innerHTML="",s.background&&(/^(http|file|\/\/)/gi.test(s.background)||/\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test(s.background)?e.setAttribute("data-background-image",s.background):t.style.background=s.background),(s.background||s.backgroundColor||s.backgroundImage||s.backgroundVideo||s.backgroundIframe)&&t.setAttribute("data-background-hash",s.background+s.backgroundSize+s.backgroundImage+s.backgroundVideo+s.backgroundIframe+s.backgroundColor+s.backgroundRepeat+s.backgroundPosition+s.backgroundTransition+s.backgroundOpacity),s.backgroundSize&&t.setAttribute("data-background-size",s.backgroundSize),s.backgroundColor&&(t.style.backgroundColor=s.backgroundColor),s.backgroundTransition&&t.setAttribute("data-background-transition",s.backgroundTransition),a&&t.setAttribute("data-preload",""),s.backgroundSize&&(i.style.backgroundSize=s.backgroundSize),s.backgroundRepeat&&(i.style.backgroundRepeat=s.backgroundRepeat),s.backgroundPosition&&(i.style.backgroundPosition=s.backgroundPosition),s.backgroundOpacity&&(i.style.opacity=s.backgroundOpacity);let n=s.backgroundColor;if(!n||!w(n)){let e=window.getComputedStyle(t);e&&e.backgroundColor&&(n=e.backgroundColor)}if(n){const t=w(n);t&&0!==t.a&&("string"==typeof(r=n)&&(r=w(r)),(r?(299*r.r+587*r.g+114*r.b)/1e3:null)<128?e.classList.add("has-dark-background"):e.classList.add("has-light-background"))}var r}update(e=!1){let i=this.Reveal.getCurrentSlide(),s=this.Reveal.getIndices(),a=null,n=this.Reveal.getConfig().rtl?"future":"past",r=this.Reveal.getConfig().rtl?"past":"future";if(Array.from(this.element.childNodes).forEach(((i,o)=>{i.classList.remove("past","present","future"),os.h?i.classList.add(r):(i.classList.add("present"),a=i),(e||o===s.h)&&t(i,".slide-background").forEach(((e,t)=>{e.classList.remove("past","present","future"),ts.v?e.classList.add("future"):(e.classList.add("present"),o===s.h&&(a=e))}))})),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),a){this.Reveal.slideContent.startEmbeddedContent(a);let e=a.querySelector(".slide-background-content");if(e){let t=e.style.backgroundImage||"";/\.gif/i.test(t)&&(e.style.backgroundImage="",window.getComputedStyle(e).opacity,e.style.backgroundImage=t)}let t=this.previousBackground?this.previousBackground.getAttribute("data-background-hash"):null,i=a.getAttribute("data-background-hash");i&&i===t&&a!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=a}i&&["has-light-background","has-dark-background"].forEach((e=>{i.classList.contains(e)?this.Reveal.getRevealElement().classList.add(e):this.Reveal.getRevealElement().classList.remove(e)}),this),setTimeout((()=>{this.element.classList.remove("no-transition")}),1)}updateParallax(){let e=this.Reveal.getIndices();if(this.Reveal.getConfig().parallaxBackgroundImage){let t,i,s=this.Reveal.getHorizontalSlides(),a=this.Reveal.getVerticalSlides(),n=this.element.style.backgroundSize.split(" ");1===n.length?t=i=parseInt(n[0],10):(t=parseInt(n[0],10),i=parseInt(n[1],10));let r,o,l=this.element.offsetWidth,d=s.length;r="number"==typeof this.Reveal.getConfig().parallaxBackgroundHorizontal?this.Reveal.getConfig().parallaxBackgroundHorizontal:d>1?(t-l)/(d-1):0,o=r*e.h*-1;let c,h,u=this.element.offsetHeight,g=a.length;c="number"==typeof this.Reveal.getConfig().parallaxBackgroundVertical?this.Reveal.getConfig().parallaxBackgroundVertical:(i-u)/(g-1),h=g>0?c*e.v:0,this.element.style.backgroundPosition=o+"px "+-h+"px"}}destroy(){this.element.remove()}}const R=/registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/,S=/fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;let A=0;class k{constructor(e){this.Reveal=e}run(e,t){this.reset();let i=this.Reveal.getSlides(),s=i.indexOf(t),a=i.indexOf(e);if(e.hasAttribute("data-auto-animate")&&t.hasAttribute("data-auto-animate")&&e.getAttribute("data-auto-animate-id")===t.getAttribute("data-auto-animate-id")&&!(s>a?t:e).hasAttribute("data-auto-animate-restart")){this.autoAnimateStyleSheet=this.autoAnimateStyleSheet||l();let i=this.getAutoAnimateOptions(t);e.dataset.autoAnimate="pending",t.dataset.autoAnimate="pending",i.slideDirection=s>a?"forward":"backward";let n=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,A++)));if("false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*i.duration,s=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,i),s="unmatched";t.duration===i.duration&&t.delay===i.delay||(s="unmatched-"+A++,n.push(`[data-auto-animate="running"] [data-auto-animate-target="${s}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=s}),this),n.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${s}s; }`)}this.autoAnimateStyleSheet.innerHTML=n.join(""),requestAnimationFrame((()=>{this.autoAnimateStyleSheet&&(getComputedStyle(this.autoAnimateStyleSheet).fontWeight,t.dataset.autoAnimate="running")})),this.Reveal.dispatchEvent({type:"autoanimate",data:{fromSlide:e,toSlide:t,sheet:this.autoAnimateStyleSheet}})}}reset(){t(this.Reveal.getRevealElement(),'[data-auto-animate]:not([data-auto-animate=""])').forEach((e=>{e.dataset.autoAnimate=""})),t(this.Reveal.getRevealElement(),"[data-auto-animate-target]").forEach((e=>{delete e.dataset.autoAnimateTarget})),this.autoAnimateStyleSheet&&this.autoAnimateStyleSheet.parentNode&&(this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet),this.autoAnimateStyleSheet=null)}autoAnimateElements(e,t,i,s,a){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=a;let n=this.getAutoAnimateOptions(t,s);void 0!==i.delay&&(n.delay=i.delay),void 0!==i.duration&&(n.duration=i.duration),void 0!==i.easing&&(n.easing=i.easing);let r=this.getAutoAnimatableProperties("from",e,i),o=this.getAutoAnimatableProperties("to",t,i);if(t.classList.contains("fragment")&&(delete o.styles.opacity,e.classList.contains("fragment"))){(e.className.match(S)||[""])[0]===(t.className.match(S)||[""])[0]&&"forward"===s.slideDirection&&t.classList.add("visible","disabled")}if(!1!==i.translate||!1!==i.scale){let e=this.Reveal.getScale(),t={x:(r.x-o.x)/e,y:(r.y-o.y)/e,scaleX:r.width/o.width,scaleY:r.height/o.height};t.x=Math.round(1e3*t.x)/1e3,t.y=Math.round(1e3*t.y)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3;let s=!1!==i.translate&&(0!==t.x||0!==t.y),a=!1!==i.scale&&(0!==t.scaleX||0!==t.scaleY);if(s||a){let e=[];s&&e.push(`translate(${t.x}px, ${t.y}px)`),a&&e.push(`scale(${t.scaleX}, ${t.scaleY})`),r.styles.transform=e.join(" "),r.styles["transform-origin"]="top left",o.styles.transform="none"}}for(let e in o.styles){const t=o.styles[e],i=r.styles[e];t===i?delete o.styles[e]:(!0===t.explicitValue&&(o.styles[e]=t.value),!0===i.explicitValue&&(r.styles[e]=i.value))}let l="",d=Object.keys(o.styles);if(d.length>0){r.styles.transition="none",o.styles.transition=`all ${n.duration}s ${n.easing} ${n.delay}s`,o.styles["transition-property"]=d.join(", "),o.styles["will-change"]=d.join(", "),l='[data-auto-animate-target="'+a+'"] {'+Object.keys(r.styles).map((e=>e+": "+r.styles[e]+" !important;")).join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+a+'"] {'+Object.keys(o.styles).map((e=>e+": "+o.styles[e]+" !important;")).join("")+"}"}return l}getAutoAnimateOptions(t,i){let s={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(s=e(s,i),t.parentNode){let e=r(t.parentNode,"[data-auto-animate-target]");e&&(s=this.getAutoAnimateOptions(e,s))}return t.dataset.autoAnimateEasing&&(s.easing=t.dataset.autoAnimateEasing),t.dataset.autoAnimateDuration&&(s.duration=parseFloat(t.dataset.autoAnimateDuration)),t.dataset.autoAnimateDelay&&(s.delay=parseFloat(t.dataset.autoAnimateDelay)),s}getAutoAnimatableProperties(e,t,i){let s=this.Reveal.getConfig(),a={styles:[]};if(!1!==i.translate||!1!==i.scale){let e;if("function"==typeof i.measure)e=i.measure(t);else if(s.center)e=t.getBoundingClientRect();else{let i=this.Reveal.getScale();e={x:t.offsetLeft*i,y:t.offsetTop*i,width:t.offsetWidth*i,height:t.offsetHeight*i}}a.x=e.x,a.y=e.y,a.width=e.width,a.height=e.height}const n=getComputedStyle(t);return(i.styles||s.autoAnimateStyles).forEach((t=>{let i;"string"==typeof t&&(t={property:t}),i=void 0!==t.from&&"from"===e?{value:t.from,explicitValue:!0}:void 0!==t.to&&"to"===e?{value:t.to,explicitValue:!0}:n[t.property],""!==i&&(a.styles[t.property]=i)})),a}getAutoAnimatableElements(e,t){let i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),s=[];return i.filter(((e,t)=>{if(-1===s.indexOf(e.to))return s.push(e.to),!0}))}getAutoAnimatePairs(e,t){let i=[];const s="h1, h2, h3, h4, h5, h6, p, li";return this.findAutoAnimateMatches(i,e,t,"[data-id]",(e=>e.nodeName+":::"+e.getAttribute("data-id"))),this.findAutoAnimateMatches(i,e,t,s,(e=>e.nodeName+":::"+e.innerText)),this.findAutoAnimateMatches(i,e,t,"img, video, iframe",(e=>e.nodeName+":::"+(e.getAttribute("src")||e.getAttribute("data-src")))),this.findAutoAnimateMatches(i,e,t,"pre",(e=>e.nodeName+":::"+e.innerText)),i.forEach((e=>{n(e.from,s)?e.options={scale:!1}:n(e.from,"pre")&&(e.options={scale:!1,styles:["width","height"]},this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-code",(e=>e.textContent),{scale:!1,styles:[],measure:this.getLocalBoundingBox.bind(this)}),this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-line[data-line-number]",(e=>e.getAttribute("data-line-number")),{scale:!1,styles:["width"],measure:this.getLocalBoundingBox.bind(this)}))}),this),i}getLocalBoundingBox(e){const t=this.Reveal.getScale();return{x:Math.round(e.offsetLeft*t*100)/100,y:Math.round(e.offsetTop*t*100)/100,width:Math.round(e.offsetWidth*t*100)/100,height:Math.round(e.offsetHeight*t*100)/100}}findAutoAnimateMatches(e,t,i,s,a,n){let r={},o={};[].slice.call(t.querySelectorAll(s)).forEach(((e,t)=>{const i=a(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))})),[].slice.call(i.querySelectorAll(s)).forEach(((t,i)=>{const s=a(t);let l;if(o[s]=o[s]||[],o[s].push(t),r[s]){const e=o[s].length-1,t=r[s].length-1;r[s][e]?(l=r[s][e],r[s][e]=null):r[s][t]&&(l=r[s][t],r[s][t]=null)}l&&e.push({from:l,to:t,options:n})}))}getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).reduce(((e,t)=>{const i=t.querySelector("[data-auto-animate-target]");return t.hasAttribute("data-auto-animate-target")||i||e.push(t),t.querySelector("[data-auto-animate-target]")&&(e=e.concat(this.getUnmatchedAutoAnimateElements(t))),e}),[])}}class L{constructor(e){this.Reveal=e}configure(e,t){!1===e.fragments?this.disable():!1===t.fragments&&this.enable()}disable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.add("visible"),e.classList.remove("current-fragment")}))}enable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.remove("visible"),e.classList.remove("current-fragment")}))}availableRoutes(){let e=this.Reveal.getCurrentSlide();if(e&&this.Reveal.getConfig().fragments){let t=e.querySelectorAll(".fragment:not(.disabled)"),i=e.querySelectorAll(".fragment:not(.disabled):not(.visible)");return{prev:t.length-i.length>0,next:!!i.length}}return{prev:!1,next:!1}}sort(e,t=!1){e=Array.from(e);let i=[],s=[],a=[];e.forEach((e=>{if(e.hasAttribute("data-fragment-index")){let t=parseInt(e.getAttribute("data-fragment-index"),10);i[t]||(i[t]=[]),i[t].push(e)}else s.push([e])})),i=i.concat(s);let n=0;return i.forEach((e=>{e.forEach((e=>{a.push(e),e.setAttribute("data-fragment-index",n)})),n++})),!0===t?i:a}sortAll(){this.Reveal.getHorizontalSlides().forEach((e=>{let i=t(e,"section");i.forEach(((e,t)=>{this.sort(e.querySelectorAll(".fragment"))}),this),0===i.length&&this.sort(e.querySelectorAll(".fragment"))}))}update(e,t){let i={shown:[],hidden:[]},s=this.Reveal.getCurrentSlide();if(s&&this.Reveal.getConfig().fragments&&(t=t||this.sort(s.querySelectorAll(".fragment"))).length){let a=0;if("number"!=typeof e){let t=this.sort(s.querySelectorAll(".fragment.visible")).pop();t&&(e=parseInt(t.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach(((t,s)=>{if(t.hasAttribute("data-fragment-index")&&(s=parseInt(t.getAttribute("data-fragment-index"),10)),a=Math.max(a,s),s<=e){let a=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),s===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),a||(i.shown.push(t),this.Reveal.dispatchEvent({target:t,type:"visible",bubbles:!1}))}else{let e=t.classList.contains("visible");t.classList.remove("visible"),t.classList.remove("current-fragment"),e&&(this.Reveal.slideContent.stopEmbeddedContent(t),i.hidden.push(t),this.Reveal.dispatchEvent({target:t,type:"hidden",bubbles:!1}))}})),e="number"==typeof e?e:-1,e=Math.max(Math.min(e,a),-1),s.setAttribute("data-fragment",e)}return i}sync(e=this.Reveal.getCurrentSlide()){return this.sort(e.querySelectorAll(".fragment"))}goto(e,t=0){let i=this.Reveal.getCurrentSlide();if(i&&this.Reveal.getConfig().fragments){let s=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(s.length){if("number"!=typeof e){let t=this.sort(i.querySelectorAll(".fragment:not(.disabled).visible")).pop();e=t?parseInt(t.getAttribute("data-fragment-index")||0,10):-1}e+=t;let a=this.update(e,s);return a.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:a.hidden[0],fragments:a.hidden}}),a.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:a.shown[0],fragments:a.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!a.shown.length&&!a.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}}class C{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.onSlideClicked.bind(this)}activate(){if(this.Reveal.getConfig().overview&&!this.isActive()){this.active=!0,this.Reveal.getRevealElement().classList.add("overview"),this.Reveal.cancelAutoSlide(),this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{e.classList.contains("stack")||e.addEventListener("click",this.onSlideClicked,!0)}));const e=70,i=this.Reveal.getComputedSlideSize();this.overviewSlideWidth=i.width+e,this.overviewSlideHeight=i.height+e,this.Reveal.getConfig().rtl&&(this.overviewSlideWidth=-this.overviewSlideWidth),this.Reveal.updateSlidesVisibility(),this.layout(),this.update(),this.Reveal.layout();const s=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:s.h,indexv:s.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,i)=>{e.setAttribute("data-index-h",i),a(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),e.classList.contains("stack")&&t(e,"section").forEach(((e,t)=>{e.setAttribute("data-index-h",i),e.setAttribute("data-index-v",t),a(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,i)=>{a(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),t(e,".slide-background").forEach(((e,t)=>{a(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))}))}update(){const e=Math.min(window.innerWidth,window.innerHeight),t=Math.max(e/5,150)/e,i=this.Reveal.getIndices();this.Reveal.transformSlides({overview:["scale("+t+")","translateX("+-i.h*this.overviewSlideWidth+"px)","translateY("+-i.v*this.overviewSlideHeight+"px)"].join(" ")})}deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this.Reveal.getRevealElement().classList.remove("overview"),this.Reveal.getRevealElement().classList.add("overview-deactivating"),setTimeout((()=>{this.Reveal.getRevealElement().classList.remove("overview-deactivating")}),1),this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{a(e,""),e.removeEventListener("click",this.onSlideClicked,!0)})),t(this.Reveal.getBackgroundsElement(),".slide-background").forEach((e=>{a(e,"")})),this.Reveal.transformSlides({overview:""});const e=this.Reveal.getIndices();this.Reveal.slide(e.h,e.v),this.Reveal.layout(),this.Reveal.cueAutoSlide(),this.Reveal.dispatchEvent({type:"overviewhidden",data:{indexh:e.h,indexv:e.v,currentSlide:this.Reveal.getCurrentSlide()}})}}toggle(e){"boolean"==typeof e?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}onSlideClicked(e){if(this.isActive()){e.preventDefault();let t=e.target;for(;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(this.deactivate(),t.nodeName.match(/section/gi))){let e=parseInt(t.getAttribute("data-index-h"),10),i=parseInt(t.getAttribute("data-index-v"),10);this.Reveal.slide(e,i)}}}}class x{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onDocumentKeyPress=this.onDocumentKeyPress.bind(this)}configure(e,t){"linear"===e.navigationMode?(this.shortcuts["→ , ↓ , SPACE , N , L , J"]="Next slide",this.shortcuts["← , ↑ , P , H , K"]="Previous slide"):(this.shortcuts["N , SPACE"]="Next slide",this.shortcuts["P , Shift SPACE"]="Previous slide",this.shortcuts["← , H"]="Navigate left",this.shortcuts["→ , L"]="Navigate right",this.shortcuts["↑ , K"]="Navigate up",this.shortcuts["↓ , J"]="Navigate down"),this.shortcuts["Alt + ←/↑/→/↓"]="Navigate without fragments",this.shortcuts["Shift + ←/↑/→/↓"]="Jump to first/last slide",this.shortcuts["B , ."]="Pause",this.shortcuts.F="Fullscreen",this.shortcuts["ESC, O"]="Slide overview"}bind(){document.addEventListener("keydown",this.onDocumentKeyDown,!1),document.addEventListener("keypress",this.onDocumentKeyPress,!1)}unbind(){document.removeEventListener("keydown",this.onDocumentKeyDown,!1),document.removeEventListener("keypress",this.onDocumentKeyPress,!1)}addKeyBinding(e,t){"object"==typeof e&&e.keyCode?this.bindings[e.keyCode]={callback:t,key:e.key,description:e.description}:this.bindings[e]={callback:t,key:null,description:null}}removeKeyBinding(e){delete this.bindings[e]}triggerKey(e){this.onDocumentKeyDown({keyCode:e})}registerKeyboardShortcut(e,t){this.shortcuts[e]=t}getShortcuts(){return this.shortcuts}getBindings(){return this.bindings}onDocumentKeyPress(e){e.shiftKey&&63===e.charCode&&this.Reveal.toggleHelp()}onDocumentKeyDown(e){let t=this.Reveal.getConfig();if("function"==typeof t.keyboardCondition&&!1===t.keyboardCondition(e))return!0;if("focused"===t.keyboardCondition&&!this.Reveal.isFocused())return!0;let i=e.keyCode,s=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let a=document.activeElement&&!0===document.activeElement.isContentEditable,n=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),r=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),o=!(-1!==[32,37,38,39,40,78,80].indexOf(e.keyCode)&&e.shiftKey||e.altKey)&&(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey);if(a||n||r||o)return;let l,d=[66,86,190,191];if("object"==typeof t.keyboard)for(l in t.keyboard)"togglePause"===t.keyboard[l]&&d.push(parseInt(l,10));if(this.Reveal.isPaused()&&-1===d.indexOf(i))return!1;let c="linear"===t.navigationMode||!this.Reveal.hasHorizontalSlides()||!this.Reveal.hasVerticalSlides(),h=!1;if("object"==typeof t.keyboard)for(l in t.keyboard)if(parseInt(l,10)===i){let i=t.keyboard[l];"function"==typeof i?i.apply(null,[e]):"string"==typeof i&&"function"==typeof this.Reveal[i]&&this.Reveal[i].call(),h=!0}if(!1===h)for(l in this.bindings)if(parseInt(l,10)===i){let t=this.bindings[l].callback;"function"==typeof t?t.apply(null,[e]):"string"==typeof t&&"function"==typeof this.Reveal[t]&&this.Reveal[t].call(),h=!0}!1===h&&(h=!0,80===i||33===i?this.Reveal.prev({skipFragments:e.altKey}):78===i||34===i?this.Reveal.next({skipFragments:e.altKey}):72===i||37===i?e.shiftKey?this.Reveal.slide(0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.left({skipFragments:e.altKey}):76===i||39===i?e.shiftKey?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.right({skipFragments:e.altKey}):75===i||38===i?e.shiftKey?this.Reveal.slide(void 0,0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.up({skipFragments:e.altKey}):74===i||40===i?e.shiftKey?this.Reveal.slide(void 0,Number.MAX_VALUE):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.down({skipFragments:e.altKey}):36===i?this.Reveal.slide(0):35===i?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):32===i?(this.Reveal.overview.isActive()&&this.Reveal.overview.deactivate(),e.shiftKey?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.next({skipFragments:e.altKey})):58===i||59===i||66===i||86===i||190===i||191===i?this.Reveal.togglePause():70===i?(e=>{let t=(e=e||document.documentElement).requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen;t&&t.apply(e)})(t.embedded?this.Reveal.getViewportElement():document.documentElement):65===i?t.autoSlideStoppable&&this.Reveal.toggleAutoSlide(s):h=!1),h?e.preventDefault&&e.preventDefault():27!==i&&79!==i||(!1===this.Reveal.closeOverlay()&&this.Reveal.overview.toggle(),e.preventDefault&&e.preventDefault()),this.Reveal.cueAutoSlide()}}class P{constructor(e){var t,i,s;s=1e3,(i="MAX_REPLACE_STATE_FREQUENCY")in(t=this)?Object.defineProperty(t,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[i]=s,this.Reveal=e,this.writeURLTimeout=0,this.replaceStateTimestamp=0,this.onWindowHashChange=this.onWindowHashChange.bind(this)}bind(){window.addEventListener("hashchange",this.onWindowHashChange,!1)}unbind(){window.removeEventListener("hashchange",this.onWindowHashChange,!1)}getIndicesFromHash(e=window.location.hash){let t=e.replace(/^#\/?/,""),i=t.split("/");if(/^[0-9]*$/.test(i[0])||!t.length){const e=this.Reveal.getConfig();let t,s=e.hashOneBasedIndex?1:0,a=parseInt(i[0],10)-s||0,n=parseInt(i[1],10)-s||0;return e.fragmentInURL&&(t=parseInt(i[2],10),isNaN(t)&&(t=void 0)),{h:a,v:n,f:t}}{let e,i;/\/[-\d]+$/g.test(t)&&(i=parseInt(t.split("/").pop(),10),i=isNaN(i)?void 0:i,t=t.split("/").shift());try{e=document.getElementById(decodeURIComponent(t))}catch(e){}if(e)return{...this.Reveal.getIndices(e),f:i}}return null}readURL(){const e=this.Reveal.getIndices(),t=this.getIndicesFromHash();t?t.h===e.h&&t.v===e.v&&void 0===t.f||this.Reveal.slide(t.h,t.v,t.f):this.Reveal.slide(e.h||0,e.v||0)}writeURL(e){let t=this.Reveal.getConfig(),i=this.Reveal.getCurrentSlide();if(clearTimeout(this.writeURLTimeout),"number"==typeof e)this.writeURLTimeout=setTimeout(this.writeURL,e);else if(i){let e=this.getHash();t.history?window.location.hash=e:t.hash&&("/"===e?this.debouncedReplaceState(window.location.pathname+window.location.search):this.debouncedReplaceState("#"+e))}}replaceState(e){window.history.replaceState(null,null,e),this.replaceStateTimestamp=Date.now()}debouncedReplaceState(e){clearTimeout(this.replaceStateTimeout),Date.now()-this.replaceStateTimestamp>this.MAX_REPLACE_STATE_FREQUENCY?this.replaceState(e):this.replaceStateTimeout=setTimeout((()=>this.replaceState(e)),this.MAX_REPLACE_STATE_FREQUENCY)}getHash(e){let t="/",i=e||this.Reveal.getCurrentSlide(),s=i?i.getAttribute("id"):null;s&&(s=encodeURIComponent(s));let a=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(a.f=void 0),"string"==typeof s&&s.length)t="/"+s,a.f>=0&&(t+="/"+a.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(a.h>0||a.v>0||a.f>=0)&&(t+=a.h+e),(a.v>0||a.f>=0)&&(t+="/"+(a.v+e)),a.f>=0&&(t+="/"+a.f)}return t}onWindowHashChange(e){this.readURL()}}class N{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigateLeftClicked.bind(this),this.onNavigateRightClicked=this.onNavigateRightClicked.bind(this),this.onNavigateUpClicked=this.onNavigateUpClicked.bind(this),this.onNavigateDownClicked=this.onNavigateDownClicked.bind(this),this.onNavigatePrevClicked=this.onNavigatePrevClicked.bind(this),this.onNavigateNextClicked=this.onNavigateNextClicked.bind(this)}render(){const e=this.Reveal.getConfig().rtl,i=this.Reveal.getRevealElement();this.element=document.createElement("aside"),this.element.className="controls",this.element.innerHTML=`\n\t\t\t\n\t\t\t\n\t\t\t`,this.Reveal.getRevealElement().appendChild(this.element),this.controlsLeft=t(i,".navigate-left"),this.controlsRight=t(i,".navigate-right"),this.controlsUp=t(i,".navigate-up"),this.controlsDown=t(i,".navigate-down"),this.controlsPrev=t(i,".navigate-prev"),this.controlsNext=t(i,".navigate-next"),this.controlsRightArrow=this.element.querySelector(".navigate-right"),this.controlsLeftArrow=this.element.querySelector(".navigate-left"),this.controlsDownArrow=this.element.querySelector(".navigate-down")}configure(e,t){this.element.style.display=e.controls?"block":"none",this.element.setAttribute("data-controls-layout",e.controlsLayout),this.element.setAttribute("data-controls-back-arrows",e.controlsBackArrows)}bind(){let e=["touchstart","click"];v&&(e=["touchstart"]),e.forEach((e=>{this.controlsLeft.forEach((t=>t.addEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.addEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.addEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.addEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.addEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.addEventListener(e,this.onNavigateNextClicked,!1)))}))}unbind(){["touchstart","click"].forEach((e=>{this.controlsLeft.forEach((t=>t.removeEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.removeEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.removeEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.removeEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.removeEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.removeEventListener(e,this.onNavigateNextClicked,!1)))}))}update(){let e=this.Reveal.availableRoutes();[...this.controlsLeft,...this.controlsRight,...this.controlsUp,...this.controlsDown,...this.controlsPrev,...this.controlsNext].forEach((e=>{e.classList.remove("enabled","fragmented"),e.setAttribute("disabled","disabled")})),e.left&&this.controlsLeft.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.right&&this.controlsRight.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.up&&this.controlsUp.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.down&&this.controlsDown.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.left||e.up)&&this.controlsPrev.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.right||e.down)&&this.controlsNext.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}));let t=this.Reveal.getCurrentSlide();if(t){let e=this.Reveal.fragments.availableRoutes();e.prev&&this.controlsPrev.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsNext.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),this.Reveal.isVerticalSlide(t)?(e.prev&&this.controlsUp.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsDown.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}))):(e.prev&&this.controlsLeft.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsRight.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})))}if(this.Reveal.getConfig().controlsTutorial){let t=this.Reveal.getIndices();!this.Reveal.hasNavigatedVertically()&&e.down?this.controlsDownArrow.classList.add("highlight"):(this.controlsDownArrow.classList.remove("highlight"),this.Reveal.getConfig().rtl?!this.Reveal.hasNavigatedHorizontally()&&e.left&&0===t.v?this.controlsLeftArrow.classList.add("highlight"):this.controlsLeftArrow.classList.remove("highlight"):!this.Reveal.hasNavigatedHorizontally()&&e.right&&0===t.v?this.controlsRightArrow.classList.add("highlight"):this.controlsRightArrow.classList.remove("highlight"))}}destroy(){this.unbind(),this.element.remove()}onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.prev():this.Reveal.left()}onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.next():this.Reveal.right()}onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.up()}onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.down()}onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.prev()}onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.next()}}class M{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressClicked.bind(this)}render(){this.element=document.createElement("div"),this.element.className="progress",this.Reveal.getRevealElement().appendChild(this.element),this.bar=document.createElement("span"),this.element.appendChild(this.bar)}configure(e,t){this.element.style.display=e.progress?"block":"none"}bind(){this.Reveal.getConfig().progress&&this.element&&this.element.addEventListener("click",this.onProgressClicked,!1)}unbind(){this.Reveal.getConfig().progress&&this.element&&this.element.removeEventListener("click",this.onProgressClicked,!1)}update(){if(this.Reveal.getConfig().progress&&this.bar){let e=this.Reveal.getProgress();this.Reveal.getTotalSlides()<2&&(e=0),this.bar.style.transform="scaleX("+e+")"}}getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();let t=this.Reveal.getSlides(),i=t.length,s=Math.floor(e.clientX/this.getMaxWidth()*i);this.Reveal.getConfig().rtl&&(s=i-s);let a=this.Reveal.getIndices(t[s]);this.Reveal.slide(a.h,a.v)}destroy(){this.element.remove()}}class D{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidden=!1,this.cursorInactiveTimeout=0,this.onDocumentCursorActive=this.onDocumentCursorActive.bind(this),this.onDocumentMouseScroll=this.onDocumentMouseScroll.bind(this)}configure(e,t){e.mouseWheel?(document.addEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.addEventListener("mousewheel",this.onDocumentMouseScroll,!1)):(document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1)),e.hideInactiveCursor?(document.addEventListener("mousemove",this.onDocumentCursorActive,!1),document.addEventListener("mousedown",this.onDocumentCursorActive,!1)):(this.showCursor(),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1))}showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getRevealElement().style.cursor="")}hideCursor(){!1===this.cursorHidden&&(this.cursorHidden=!0,this.Reveal.getRevealElement().style.cursor="none")}destroy(){this.showCursor(),document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1)}onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorInactiveTimeout),this.cursorInactiveTimeout=setTimeout(this.hideCursor.bind(this),this.Reveal.getConfig().hideCursorTime)}onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){this.lastMouseWheelStep=Date.now();let t=e.detail||-e.wheelDelta;t>0?this.Reveal.next():t<0&&this.Reveal.prev()}}}const I=(e,t)=>{const i=document.createElement("script");i.type="text/javascript",i.async=!1,i.defer=!1,i.src=e,"function"==typeof t&&(i.onload=i.onreadystatechange=e=>{("load"===e.type||/loaded|complete/.test(i.readyState))&&(i.onload=i.onreadystatechange=i.onerror=null,t())},i.onerror=e=>{i.onload=i.onreadystatechange=i.onerror=null,t(new Error("Failed loading script: "+i.src+"\n"+e))});const s=document.querySelector("head");s.insertBefore(i,s.lastChild)};class T{constructor(e){this.Reveal=e,this.state="idle",this.registeredPlugins={},this.asyncDependencies=[]}load(e,t){return this.state="loading",e.forEach(this.registerPlugin.bind(this)),new Promise((e=>{let i=[],s=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))})),i.length){s=i.length;const t=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--s&&this.initPlugins().then(e)};i.forEach((e=>{"string"==typeof e.id?(this.registerPlugin(e),t(e)):"string"==typeof e.src?I(e.src,(()=>t(e))):(console.warn("Unrecognized plugin format",e),t())}))}else this.initPlugins().then(e)}))}initPlugins(){return new Promise((e=>{let t=Object.values(this.registeredPlugins),i=t.length;if(0===i)this.loadAsync().then(e);else{let s,a=()=>{0==--i?this.loadAsync().then(e):s()},n=0;s=()=>{let e=t[n++];if("function"==typeof e.init){let t=e.init(this.Reveal);t&&"function"==typeof t.then?t.then(a):a()}else a()},s()}}))}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach((e=>{I(e.src,e.callback)})),Promise.resolve()}registerPlugin(e){2===arguments.length&&"string"==typeof arguments[0]?(e=arguments[1]).id=arguments[0]:"function"==typeof e&&(e=e());let t=e.id;"string"!=typeof t?console.warn("Unrecognized plugin format; can't find plugin.id",e):void 0===this.registeredPlugins[t]?(this.registeredPlugins[t]=e,"loaded"===this.state&&"function"==typeof e.init&&e.init(this.Reveal)):console.warn('reveal.js: "'+t+'" plugin has already been registered')}hasPlugin(e){return!!this.registeredPlugins[e]}getPlugin(e){return this.registeredPlugins[e]}getRegisteredPlugins(){return this.registeredPlugins}destroy(){Object.values(this.registeredPlugins).forEach((e=>{"function"==typeof e.destroy&&e.destroy()})),this.registeredPlugins={},this.asyncDependencies=[]}}class F{constructor(e){this.Reveal=e}async setupPDF(){const e=this.Reveal.getConfig(),i=t(this.Reveal.getRevealElement(),".slides section"),s=e.slideNumber&&/all|print/i.test(e.showSlideNumber),a=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),n=Math.floor(a.width*(1+e.margin)),r=Math.floor(a.height*(1+e.margin)),o=a.width,d=a.height;await new Promise(requestAnimationFrame),l("@page{size:"+n+"px "+r+"px; margin: 0px;}"),l(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+o+"px; max-height:"+d+"px}"),document.documentElement.classList.add("print-pdf"),document.body.style.width=n+"px",document.body.style.height=r+"px";const c=document.querySelector(".reveal-viewport");let h;if(c){const e=window.getComputedStyle(c);e&&e.background&&(h=e.background)}await new Promise(requestAnimationFrame),this.Reveal.layoutSlideContents(o,d),await new Promise(requestAnimationFrame);const u=i.map((e=>e.scrollHeight)),g=[],v=i[0].parentNode;i.forEach((function(i,a){if(!1===i.classList.contains("stack")){let l=(n-o)/2,c=(r-d)/2;const v=u[a];let p=Math.max(Math.ceil(v/r),1);p=Math.min(p,e.pdfMaxPagesPerSlide),(1===p&&e.center||i.classList.contains("center"))&&(c=Math.max((r-v)/2,0));const m=document.createElement("div");if(g.push(m),m.className="pdf-page",m.style.height=(r+e.pdfPageHeightOffset)*p+"px",h&&(m.style.background=h),m.appendChild(i),i.style.left=l+"px",i.style.top=c+"px",i.style.width=o+"px",this.Reveal.slideContent.layout(i),i.slideBackgroundElement&&m.insertBefore(i.slideBackgroundElement,i),e.showNotes){const t=this.Reveal.getSlideNotes(i);if(t){const i=8,s="string"==typeof e.showNotes?e.showNotes:"inline",a=document.createElement("div");a.classList.add("speaker-notes"),a.classList.add("speaker-notes-pdf"),a.setAttribute("data-layout",s),a.innerHTML=t,"separate-page"===s?g.push(a):(a.style.left=i+"px",a.style.bottom=i+"px",a.style.width=n-2*i+"px",m.appendChild(a))}}if(s){const e=a+1,t=document.createElement("div");t.classList.add("slide-number"),t.classList.add("slide-number-pdf"),t.innerHTML=e,m.appendChild(t)}if(e.pdfSeparateFragments){const e=this.Reveal.fragments.sort(m.querySelectorAll(".fragment"),!0);let t;e.forEach((function(e){t&&t.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);const i=m.cloneNode(!0);g.push(i),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else t(m,".fragment:not(.fade-out)").forEach((function(e){e.classList.add("visible")}))}}),this),await new Promise(requestAnimationFrame),g.forEach((e=>v.appendChild(e))),this.Reveal.dispatchEvent({type:"pdf-ready"})}isPrintingPDF(){return/print-pdf/gi.test(window.location.search)}}class z{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){let e=this.Reveal.getRevealElement();"onpointerdown"in window?(e.addEventListener("pointerdown",this.onPointerDown,!1),e.addEventListener("pointermove",this.onPointerMove,!1),e.addEventListener("pointerup",this.onPointerUp,!1)):window.navigator.msPointerEnabled?(e.addEventListener("MSPointerDown",this.onPointerDown,!1),e.addEventListener("MSPointerMove",this.onPointerMove,!1),e.addEventListener("MSPointerUp",this.onPointerUp,!1)):(e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1))}unbind(){let e=this.Reveal.getRevealElement();e.removeEventListener("pointerdown",this.onPointerDown,!1),e.removeEventListener("pointermove",this.onPointerMove,!1),e.removeEventListener("pointerup",this.onPointerUp,!1),e.removeEventListener("MSPointerDown",this.onPointerDown,!1),e.removeEventListener("MSPointerMove",this.onPointerMove,!1),e.removeEventListener("MSPointerUp",this.onPointerUp,!1),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1)}isSwipePrevented(e){if(n(e,"video, audio"))return!0;for(;e&&"function"==typeof e.hasAttribute;){if(e.hasAttribute("data-prevent-swipe"))return!0;e=e.parentNode}return!1}onTouchStart(e){if(this.isSwipePrevented(e.target))return!0;this.touchStartX=e.touches[0].clientX,this.touchStartY=e.touches[0].clientY,this.touchStartCount=e.touches.length}onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;let t=this.Reveal.getConfig();if(this.touchCaptured)v&&e.preventDefault();else{this.Reveal.onUserInput(e);let i=e.touches[0].clientX,s=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){let a=this.Reveal.availableRoutes({includeFragments:!0}),n=i-this.touchStartX,r=s-this.touchStartY;n>40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):n<-40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):r>40&&a.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&a.down&&(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.next():this.Reveal.down()),t.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&e.preventDefault():e.preventDefault()}}}onTouchEnd(e){this.touchCaptured=!1}onPointerDown(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchStart(e))}onPointerMove(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchMove(e))}onPointerUp(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchEnd(e))}}class H{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(e,t){e.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener("pointerdown",this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdown",this.onRevealPointerDown,!1),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)}focus(){"focus"!==this.state&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="focus"}blur(){"blur"!==this.state&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="blur"}isFocused(){return"focus"===this.state}destroy(){this.Reveal.getRevealElement().classList.remove("focused")}onRevealPointerDown(e){this.focus()}onDocumentPointerDown(e){let t=r(e.target,".reveal");t&&t===this.Reveal.getRevealElement()||this.blur()}}class q{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="speaker-notes",this.element.setAttribute("data-prevent-swipe",""),this.element.setAttribute("tabindex","0"),this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){e.showNotes&&this.element.setAttribute("data-layout","string"==typeof e.showNotes?e.showNotes:"inline")}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.print.isPrintingPDF()&&(this.element.innerHTML=this.getSlideNotes()||'No notes on this slide.')}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&&!this.Reveal.print.isPrintingPDF()?this.Reveal.getRevealElement().classList.add("show-notes"):this.Reveal.getRevealElement().classList.remove("show-notes")}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(e=this.Reveal.getCurrentSlide()){if(e.hasAttribute("data-notes"))return e.getAttribute("data-notes");let t=e.querySelector("aside.notes");return t?t.innerHTML:null}destroy(){this.element.remove()}}class B{constructor(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(e){const t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()}animate(){const e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let e=this.playing?this.progress:0,t=this.diameter2-this.thickness,i=this.diameter2,s=this.diameter2,a=28;this.progressOffset+=.1*(1-this.progressOffset);const n=-Math.PI/2+e*(2*Math.PI),r=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(i,s,t+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(i,s,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(i,s,t,r,n,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,s-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,a),this.context.fillRect(18,0,10,a)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,a),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(e,t){this.canvas.addEventListener(e,t,!1)}off(e,t){this.canvas.removeEventListener(e,t,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}}var O={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,dependencies:[],plugins:[]};function U(n,l){arguments.length<2&&(l=arguments[0],n=document.querySelector(".reveal"));const h={};let u,v,p,m,f,w={},S=!1,A={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},I=[],U=1,W={layout:"",overview:""},K={},V="idle",$=0,j=0,X=-1,Y=!1,_=new b(h),J=new y(h),Q=new k(h),Z=new E(h),G=new L(h),ee=new C(h),te=new x(h),ie=new P(h),se=new N(h),ae=new M(h),ne=new D(h),re=new T(h),oe=new F(h),le=new H(h),de=new z(h),ce=new q(h);function he(e){if(!n)throw'Unable to find presentation root (
).';if(K.wrapper=n,K.slides=n.querySelector(".slides"),!K.slides)throw'Unable to find slides container (
).';return w={...O,...w,...l,...e,...d()},ue(),window.addEventListener("load",He,!1),re.load(w.plugins,w.dependencies).then(ge),new Promise((e=>h.on("ready",e)))}function ue(){!0===w.embedded?K.viewport=r(n,".reveal-viewport")||n:(K.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),K.viewport.classList.add("reveal-viewport")}function ge(){S=!0,ve(),pe(),Ee(),ye(),we(),tt(),Re(),ie.readURL(),Z.update(!0),setTimeout((()=>{K.slides.classList.remove("no-transition"),K.wrapper.classList.add("ready"),Pe({type:"ready",data:{indexh:u,indexv:v,currentSlide:m}})}),1),oe.isPrintingPDF()&&(Ae(),"complete"===document.readyState?oe.setupPDF():window.addEventListener("load",(()=>{oe.setupPDF()})))}function ve(){w.showHiddenSlides||t(K.wrapper,'section[data-visibility="hidden"]').forEach((e=>{e.parentNode.removeChild(e)}))}function pe(){K.slides.classList.add("no-transition"),g?K.wrapper.classList.add("no-hover"):K.wrapper.classList.remove("no-hover"),Z.render(),J.render(),se.render(),ae.render(),ce.render(),K.pauseOverlay=o(K.wrapper,"div","pause-overlay",w.controls?'':null),K.statusElement=me(),K.wrapper.setAttribute("role","application")}function me(){let e=K.wrapper.querySelector(".aria-status");return e||(e=document.createElement("div"),e.style.position="absolute",e.style.height="1px",e.style.width="1px",e.style.overflow="hidden",e.style.clip="rect( 1px, 1px, 1px, 1px )",e.classList.add("aria-status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),K.wrapper.appendChild(e)),e}function fe(e){K.statusElement.textContent=e}function be(e){let t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){let i=e.getAttribute("aria-hidden"),s="none"===window.getComputedStyle(e).display;"true"===i||s||Array.from(e.childNodes).forEach((e=>{t+=be(e)}))}return t=t.trim(),""===t?"":t+" "}function ye(){setInterval((()=>{0===K.wrapper.scrollTop&&0===K.wrapper.scrollLeft||(K.wrapper.scrollTop=0,K.wrapper.scrollLeft=0)}),1e3)}function we(){document.addEventListener("fullscreenchange",Ht),document.addEventListener("webkitfullscreenchange",Ht)}function Ee(){w.postMessage&&window.addEventListener("message",Dt,!1)}function Re(t){const s={...w};if("object"==typeof t&&e(w,t),!1===h.isReady())return;const a=K.wrapper.querySelectorAll(".slides section").length;K.wrapper.classList.remove(s.transition),K.wrapper.classList.add(w.transition),K.wrapper.setAttribute("data-transition-speed",w.transitionSpeed),K.wrapper.setAttribute("data-background-transition",w.backgroundTransition),K.viewport.style.setProperty("--slide-width",w.width+"px"),K.viewport.style.setProperty("--slide-height",w.height+"px"),w.shuffle&&it(),i(K.wrapper,"embedded",w.embedded),i(K.wrapper,"rtl",w.rtl),i(K.wrapper,"center",w.center),!1===w.pause&&Xe(),w.previewLinks?(Me(),De("[data-preview-link=false]")):(De(),Me("[data-preview-link]:not([data-preview-link=false])")),Q.reset(),f&&(f.destroy(),f=null),a>1&&w.autoSlide&&w.autoSlideStoppable&&(f=new B(K.wrapper,(()=>Math.min(Math.max((Date.now()-X)/$,0),1))),f.on("click",Bt),Y=!1),"default"!==w.navigationMode?K.wrapper.setAttribute("data-navigation-mode",w.navigationMode):K.wrapper.removeAttribute("data-navigation-mode"),ce.configure(w,s),le.configure(w,s),ne.configure(w,s),se.configure(w,s),ae.configure(w,s),te.configure(w,s),G.configure(w,s),J.configure(w,s),Ge()}function Se(){window.addEventListener("resize",Ft,!1),w.touch&&de.bind(),w.keyboard&&te.bind(),w.progress&&ae.bind(),w.respondToHashChanges&&ie.bind(),se.bind(),le.bind(),K.slides.addEventListener("click",Tt,!1),K.slides.addEventListener("transitionend",It,!1),K.pauseOverlay.addEventListener("click",Xe,!1),w.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",zt,!1)}function Ae(){de.unbind(),le.unbind(),te.unbind(),se.unbind(),ae.unbind(),ie.unbind(),window.removeEventListener("resize",Ft,!1),K.slides.removeEventListener("click",Tt,!1),K.slides.removeEventListener("transitionend",It,!1),K.pauseOverlay.removeEventListener("click",Xe,!1)}function ke(){Ae(),Rt(),De(),ce.destroy(),le.destroy(),re.destroy(),ne.destroy(),se.destroy(),ae.destroy(),Z.destroy(),J.destroy(),document.removeEventListener("fullscreenchange",Ht),document.removeEventListener("webkitfullscreenchange",Ht),document.removeEventListener("visibilitychange",zt,!1),window.removeEventListener("message",Dt,!1),window.removeEventListener("load",He,!1),K.pauseOverlay&&K.pauseOverlay.remove(),K.statusElement&&K.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),K.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),K.wrapper.removeAttribute("data-transition-speed"),K.wrapper.removeAttribute("data-background-transition"),K.viewport.classList.remove("reveal-viewport"),K.viewport.style.removeProperty("--slide-width"),K.viewport.style.removeProperty("--slide-height"),K.slides.style.removeProperty("width"),K.slides.style.removeProperty("height"),K.slides.style.removeProperty("zoom"),K.slides.style.removeProperty("left"),K.slides.style.removeProperty("top"),K.slides.style.removeProperty("bottom"),K.slides.style.removeProperty("right"),K.slides.style.removeProperty("transform"),Array.from(K.wrapper.querySelectorAll(".slides section")).forEach((e=>{e.style.removeProperty("display"),e.style.removeProperty("top"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden")}))}function Le(e,t,i){n.addEventListener(e,t,i)}function Ce(e,t,i){n.removeEventListener(e,t,i)}function xe(e){"string"==typeof e.layout&&(W.layout=e.layout),"string"==typeof e.overview&&(W.overview=e.overview),W.layout?a(K.slides,W.layout+" "+W.overview):a(K.slides,W.overview)}function Pe({target:t=K.wrapper,type:i,data:s,bubbles:a=!0}){let n=document.createEvent("HTMLEvents",1,2);return n.initEvent(i,a,!0),e(n,s),t.dispatchEvent(n),t===K.wrapper&&Ne(i),n}function Ne(t,i){if(w.postMessageEvents&&window.parent!==window.self){let s={namespace:"reveal",eventName:t,state:yt()};e(s,i),window.parent.postMessage(JSON.stringify(s),"*")}}function Me(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",qt,!1)}))}function De(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",qt,!1)}))}function Ie(e){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-preview"),K.wrapper.appendChild(K.overlay),K.overlay.innerHTML=`
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options).\n\t\t\t\t\n\t\t\t
`,K.overlay.querySelector("iframe").addEventListener("load",(e=>{K.overlay.classList.add("loaded")}),!1),K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1),K.overlay.querySelector(".external").addEventListener("click",(e=>{ze()}),!1)}function Te(e){"boolean"==typeof e?e?Fe():ze():K.overlay?ze():Fe()}function Fe(){if(w.help){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-help"),K.wrapper.appendChild(K.overlay);let e='

Keyboard Shortcuts


',t=te.getShortcuts(),i=te.getBindings();e+="";for(let i in t)e+=``;for(let t in i)i[t].key&&i[t].description&&(e+=``);e+="
KEYACTION
${i}${t[i]}
${i[t].key}${i[t].description}
",K.overlay.innerHTML=`\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${e}
\n\t\t\t\t
\n\t\t\t`,K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1)}}function ze(){return!!K.overlay&&(K.overlay.parentNode.removeChild(K.overlay),K.overlay=null,!0)}function He(){if(K.wrapper&&!oe.isPrintingPDF()){if(!w.disableLayout){g&&!w.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");const e=Be(),t=U;qe(w.width,w.height),K.slides.style.width=e.width+"px",K.slides.style.height=e.height+"px",U=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),U=Math.max(U,w.minScale),U=Math.min(U,w.maxScale),1===U?(K.slides.style.zoom="",K.slides.style.left="",K.slides.style.top="",K.slides.style.bottom="",K.slides.style.right="",xe({layout:""})):(K.slides.style.zoom="",K.slides.style.left="50%",K.slides.style.top="50%",K.slides.style.bottom="auto",K.slides.style.right="auto",xe({layout:"translate(-50%, -50%) scale("+U+")"}));const i=Array.from(K.wrapper.querySelectorAll(".slides section"));for(let t=0,s=i.length;t .stretch, section > .r-stretch").forEach((t=>{let s=c(t,i);if(/(img|video)/gi.test(t.nodeName)){const i=t.naturalWidth||t.videoWidth,a=t.naturalHeight||t.videoHeight,n=Math.min(e/i,s/a);t.style.width=i*n+"px",t.style.height=a*n+"px"}else t.style.width=e+"px",t.style.height=s+"px"}))}function Be(e,t){const i={width:w.width,height:w.height,presentationWidth:e||K.wrapper.offsetWidth,presentationHeight:t||K.wrapper.offsetHeight};return i.presentationWidth-=i.presentationWidth*w.margin,i.presentationHeight-=i.presentationHeight*w.margin,"string"==typeof i.width&&/%$/.test(i.width)&&(i.width=parseInt(i.width,10)/100*i.presentationWidth),"string"==typeof i.height&&/%$/.test(i.height)&&(i.height=parseInt(i.height,10)/100*i.presentationHeight),i}function Oe(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function Ue(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){const t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function We(e=m){return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Ke(){return!(!m||!We(m))&&!m.nextElementSibling}function Ve(){return 0===u&&0===v}function $e(){return!!m&&(!m.nextElementSibling&&(!We(m)||!m.parentNode.nextElementSibling))}function je(){if(w.pause){const e=K.wrapper.classList.contains("paused");Rt(),K.wrapper.classList.add("paused"),!1===e&&Pe({type:"paused"})}}function Xe(){const e=K.wrapper.classList.contains("paused");K.wrapper.classList.remove("paused"),Et(),e&&Pe({type:"resumed"})}function Ye(e){"boolean"==typeof e?e?je():Xe():_e()?Xe():je()}function _e(){return K.wrapper.classList.contains("paused")}function Je(e){"boolean"==typeof e?e?At():St():Y?At():St()}function Qe(){return!(!$||Y)}function Ze(e,t,i,s){if(Pe({type:"beforeslidechange",data:{indexh:void 0===e?u:e,indexv:void 0===t?v:t,origin:s}}).defaultPrevented)return;p=m;const a=K.wrapper.querySelectorAll(".slides>section");if(0===a.length)return;void 0!==t||ee.isActive()||(t=Ue(a[e])),p&&p.parentNode&&p.parentNode.classList.contains("stack")&&Oe(p.parentNode,v);const n=I.concat();I.length=0;let r=u||0,o=v||0;u=st(".slides>section",void 0===e?u:e),v=st(".slides>section.present>section",void 0===t?v:t);let l=u!==r||v!==o;l||(p=null);let d=a[u],c=d.querySelectorAll("section");m=c[v]||d;let h=!1;l&&p&&m&&!ee.isActive()&&(p.hasAttribute("data-auto-animate")&&m.hasAttribute("data-auto-animate")&&p.getAttribute("data-auto-animate-id")===m.getAttribute("data-auto-animate-id")&&!(u>r||v>o?m:p).hasAttribute("data-auto-animate-restart")&&(h=!0,K.slides.classList.add("disable-slide-transitions")),V="running"),at(),He(),ee.isActive()&&ee.update(),void 0!==i&&G.goto(i),p&&p!==m&&(p.classList.remove("present"),p.setAttribute("aria-hidden","true"),Ve()&&setTimeout((()=>{ut().forEach((e=>{Oe(e,0)}))}),0));e:for(let e=0,t=I.length;e{fe(be(m))})),ae.update(),se.update(),ce.update(),Z.update(),Z.updateParallax(),J.update(),G.update(),ie.writeURL(),Et(),h&&(setTimeout((()=>{K.slides.classList.remove("disable-slide-transitions")}),0),w.autoAnimate&&Q.run(p,m))}function Ge(){Ae(),Se(),He(),$=w.autoSlide,Et(),Z.create(),ie.writeURL(),G.sortAll(),se.update(),ae.update(),at(),ce.update(),ce.updateVisibility(),Z.update(!0),J.update(),_.formatEmbeddedContent(),!1===w.autoPlayMedia?_.stopEmbeddedContent(m,{unloadIframes:!1}):_.startEmbeddedContent(m),ee.isActive()&&ee.layout()}function et(e=m){Z.sync(e),G.sync(e),_.load(e),Z.update(),ce.update()}function tt(){ct().forEach((e=>{t(e,"section").forEach(((e,t)=>{t>0&&(e.classList.remove("present"),e.classList.remove("past"),e.classList.add("future"),e.setAttribute("aria-hidden","true"))}))}))}function it(e=ct()){e.forEach(((t,i)=>{let s=e[Math.floor(Math.random()*e.length)];s.parentNode===t.parentNode&&t.parentNode.insertBefore(t,s);let a=t.querySelectorAll("section");a.length&&it(a)}))}function st(e,i){let s=t(K.wrapper,e),a=s.length,n=oe.isPrintingPDF();if(a){w.loop&&(i%=a)<0&&(i=a+i),i=Math.max(Math.min(i,a-1),0);for(let e=0;e{e.classList.add("visible"),e.classList.remove("current-fragment")}))):e>i&&(a.classList.add(r?"past":"future"),w.fragments&&t(a,".fragment.visible").forEach((e=>{e.classList.remove("visible","current-fragment")})))}let e=s[i],r=e.classList.contains("present");e.classList.add("present"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden"),r||Pe({target:e,type:"visible",bubbles:!1});let o=e.getAttribute("data-state");o&&(I=I.concat(o.split(" ")))}else i=0;return i}function at(){let e,i,s=ct(),a=s.length;if(a&&void 0!==u){let n=ee.isActive()?10:w.viewDistance;g&&(n=ee.isActive()?6:w.mobileViewDistance),oe.isPrintingPDF()&&(n=Number.MAX_VALUE);for(let r=0;rsection"),i=K.wrapper.querySelectorAll(".slides>section.present>section"),s={left:u>0,right:u0,down:v1&&(s.left=!0,s.right=!0),i.length>1&&(s.up=!0,s.down=!0)),t.length>1&&"linear"===w.navigationMode&&(s.right=s.right||s.down,s.left=s.left||s.up),!0===e){let e=G.availableRoutes();s.left=s.left||e.prev,s.up=s.up||e.prev,s.down=s.down||e.next,s.right=s.right||e.next}if(w.rtl){let e=s.left;s.left=s.right,s.right=e}return s}function rt(e=m){let t=ct(),i=0;e:for(let s=0;s0){let i=.9;t+=m.querySelectorAll(".fragment.visible").length/e.length*i}}return Math.min(t/(e-1),1)}function lt(e){let i,s=u,a=v;if(e){let i=We(e),n=i?e.parentNode:e,r=ct();s=Math.max(r.indexOf(n),0),a=void 0,i&&(a=Math.max(t(e.parentNode,"section").indexOf(e),0))}if(!e&&m){if(m.querySelectorAll(".fragment").length>0){let e=m.querySelector(".current-fragment");i=e&&e.hasAttribute("data-fragment-index")?parseInt(e.getAttribute("data-fragment-index"),10):m.querySelectorAll(".fragment.visible").length-1}}return{h:s,v:a,f:i}}function dt(){return t(K.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function ct(){return t(K.wrapper,".slides>section")}function ht(){return t(K.wrapper,".slides>section>section")}function ut(){return t(K.wrapper,".slides>section.stack")}function gt(){return ct().length>1}function vt(){return ht().length>1}function pt(){return dt().map((e=>{let t={};for(let i=0;i{e.hasAttribute("data-autoplay")&&$&&1e3*e.duration/e.playbackRate>$&&($=1e3*e.duration/e.playbackRate+1e3)}))),!$||Y||_e()||ee.isActive()||$e()&&!G.availableRoutes().next&&!0!==w.loop||(j=setTimeout((()=>{"function"==typeof w.autoSlideMethod?w.autoSlideMethod():Nt(),Et()}),$),X=Date.now()),f&&f.setPlaying(-1!==j)}}function Rt(){clearTimeout(j),j=-1}function St(){$&&!Y&&(Y=!0,Pe({type:"autoslidepaused"}),clearTimeout(j),f&&f.setPlaying(!1))}function At(){$&&Y&&(Y=!1,Pe({type:"autoslideresumed"}),Et())}function kt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.next())&&nt().left&&Ze(u+1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.prev())&&nt().left&&Ze(u-1,"grid"===w.navigationMode?v:void 0)}function Lt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.prev())&&nt().right&&Ze(u-1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.next())&&nt().right&&Ze(u+1,"grid"===w.navigationMode?v:void 0)}function Ct({skipFragments:e=!1}={}){(ee.isActive()||e||!1===G.prev())&&nt().up&&Ze(u,v-1)}function xt({skipFragments:e=!1}={}){A.hasNavigatedVertically=!0,(ee.isActive()||e||!1===G.next())&&nt().down&&Ze(u,v+1)}function Pt({skipFragments:e=!1}={}){if(e||!1===G.prev())if(nt().up)Ct({skipFragments:e});else{let i;if(i=w.rtl?t(K.wrapper,".slides>section.future").pop():t(K.wrapper,".slides>section.past").pop(),i&&i.classList.contains("stack")){let e=i.querySelectorAll("section").length-1||void 0;Ze(u-1,e)}else kt({skipFragments:e})}}function Nt({skipFragments:e=!1}={}){if(A.hasNavigatedHorizontally=!0,A.hasNavigatedVertically=!0,e||!1===G.next()){let t=nt();t.down&&t.right&&w.loop&&Ke()&&(t.down=!1),t.down?xt({skipFragments:e}):w.rtl?kt({skipFragments:e}):Lt({skipFragments:e})}}function Mt(e){w.autoSlideStoppable&&St()}function Dt(e){let t=e.data;if("string"==typeof t&&"{"===t.charAt(0)&&"}"===t.charAt(t.length-1)&&(t=JSON.parse(t),t.method&&"function"==typeof h[t.method]))if(!1===R.test(t.method)){const e=h[t.method].apply(h,t.args);Ne("callback",{method:t.method,result:e})}else console.warn('reveal.js: "'+t.method+'" is is blacklisted from the postMessage API')}function It(e){"running"===V&&/section/gi.test(e.target.nodeName)&&(V="idle",Pe({type:"slidetransitionend",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m}}))}function Tt(e){const t=r(e.target,'a[href^="#"]');if(t){const i=t.getAttribute("href"),s=ie.getIndicesFromHash(i);s&&(h.slide(s.h,s.v,s.f),e.preventDefault())}}function Ft(e){He()}function zt(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Ht(e){(document.fullscreenElement||document.webkitFullscreenElement)===K.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{h.layout(),h.focus.focus()}),1))}function qt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){let t=e.currentTarget.getAttribute("href");t&&(Ie(t),e.preventDefault())}}function Bt(e){$e()&&!1===w.loop?(Ze(0,0),At()):Y?At():St()}const Ot={VERSION:"4.3.1",initialize:he,configure:Re,destroy:ke,sync:Ge,syncSlide:et,syncFragments:G.sync.bind(G),slide:Ze,left:kt,right:Lt,up:Ct,down:xt,prev:Pt,next:Nt,navigateLeft:kt,navigateRight:Lt,navigateUp:Ct,navigateDown:xt,navigatePrev:Pt,navigateNext:Nt,navigateFragment:G.goto.bind(G),prevFragment:G.prev.bind(G),nextFragment:G.next.bind(G),on:Le,off:Ce,addEventListener:Le,removeEventListener:Ce,layout:He,shuffle:it,availableRoutes:nt,availableFragments:G.availableRoutes.bind(G),toggleHelp:Te,toggleOverview:ee.toggle.bind(ee),togglePause:Ye,toggleAutoSlide:Je,isFirstSlide:Ve,isLastSlide:$e,isLastVerticalSlide:Ke,isVerticalSlide:We,isPaused:_e,isAutoSliding:Qe,isSpeakerNotes:ce.isSpeakerNotesWindow.bind(ce),isOverview:ee.isActive.bind(ee),isFocused:le.isFocused.bind(le),isPrintingPDF:oe.isPrintingPDF.bind(oe),isReady:()=>S,loadSlide:_.load.bind(_),unloadSlide:_.unload.bind(_),showPreview:Ie,hidePreview:ze,addEventListeners:Se,removeEventListeners:Ae,dispatchEvent:Pe,getState:yt,setState:wt,getProgress:ot,getIndices:lt,getSlidesAttributes:pt,getSlidePastCount:rt,getTotalSlides:mt,getSlide:ft,getPreviousSlide:()=>p,getCurrentSlide:()=>m,getSlideBackground:bt,getSlideNotes:ce.getSlideNotes.bind(ce),getSlides:dt,getHorizontalSlides:ct,getVerticalSlides:ht,hasHorizontalSlides:gt,hasVerticalSlides:vt,hasNavigatedHorizontally:()=>A.hasNavigatedHorizontally,hasNavigatedVertically:()=>A.hasNavigatedVertically,addKeyBinding:te.addKeyBinding.bind(te),removeKeyBinding:te.removeKeyBinding.bind(te),triggerKey:te.triggerKey.bind(te),registerKeyboardShortcut:te.registerKeyboardShortcut.bind(te),getComputedSlideSize:Be,getScale:()=>U,getConfig:()=>w,getQueryHash:d,getSlidePath:ie.getHash.bind(ie),getRevealElement:()=>n,getSlidesElement:()=>K.slides,getViewportElement:()=>K.viewport,getBackgroundsElement:()=>Z.element,registerPlugin:re.registerPlugin.bind(re),hasPlugin:re.hasPlugin.bind(re),getPlugin:re.getPlugin.bind(re),getPlugins:re.getRegisteredPlugins.bind(re)};return e(h,{...Ot,announceStatus:fe,getStatusText:be,print:oe,focus:le,progress:ae,controls:se,location:ie,overview:ee,fragments:G,slideContent:_,slideNumber:J,onUserInput:Mt,closeOverlay:ze,updateSlidesVisibility:at,layoutSlideContents:qe,transformSlides:xe,cueAutoSlide:Et,cancelAutoSlide:Rt}),Ot}let W=U,K=[];W.initialize=e=>(Object.assign(W,new U(document.querySelector(".reveal"),e)),K.map((e=>e(W))),W.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach((e=>{W[e]=(...t)=>{K.push((i=>i[e].call(null,...t)))}})),W.isReady=()=>!1,W.VERSION="4.3.1";export default W; +//# sourceMappingURL=reveal.esm.js.map diff --git a/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js.map b/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js.map new file mode 100644 index 0000000000..286c75a21f --- /dev/null +++ b/bank_conflict_slides_files/libs/revealjs/dist/reveal.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal.esm.js","sources":["../js/utils/util.js","../js/utils/device.js","../node_modules/fitty/dist/fitty.module.js","../js/controllers/slidecontent.js","../js/controllers/slidenumber.js","../js/utils/color.js","../js/controllers/backgrounds.js","../js/utils/constants.js","../js/controllers/autoanimate.js","../js/controllers/fragments.js","../js/controllers/overview.js","../js/controllers/keyboard.js","../js/controllers/location.js","../js/controllers/controls.js","../js/controllers/progress.js","../js/controllers/pointer.js","../js/utils/loader.js","../js/controllers/plugins.js","../js/controllers/print.js","../js/controllers/touch.js","../js/controllers/focus.js","../js/controllers/notes.js","../js/components/playback.js","../js/config.js","../js/reveal.js","../js/index.js"],"sourcesContent":["/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @param {object} a\n * @param {object} b\n */\nexport const extend = ( a, b ) => {\n\n\tfor( let i in b ) {\n\t\ta[ i ] = b[ i ];\n\t}\n\n\treturn a;\n\n}\n\n/**\n * querySelectorAll but returns an Array.\n */\nexport const queryAll = ( el, selector ) => {\n\n\treturn Array.from( el.querySelectorAll( selector ) );\n\n}\n\n/**\n * classList.toggle() with cross browser support\n */\nexport const toggleClass = ( el, className, value ) => {\n\tif( value ) {\n\t\tel.classList.add( className );\n\t}\n\telse {\n\t\tel.classList.remove( className );\n\t}\n}\n\n/**\n * Utility for deserializing a value.\n *\n * @param {*} value\n * @return {*}\n */\nexport const deserialize = ( value ) => {\n\n\tif( typeof value === 'string' ) {\n\t\tif( value === 'null' ) return null;\n\t\telse if( value === 'true' ) return true;\n\t\telse if( value === 'false' ) return false;\n\t\telse if( value.match( /^-?[\\d\\.]+$/ ) ) return parseFloat( value );\n\t}\n\n\treturn value;\n\n}\n\n/**\n * Measures the distance in pixels between point a\n * and point b.\n *\n * @param {object} a point with x/y properties\n * @param {object} b point with x/y properties\n *\n * @return {number}\n */\nexport const distanceBetween = ( a, b ) => {\n\n\tlet dx = a.x - b.x,\n\t\tdy = a.y - b.y;\n\n\treturn Math.sqrt( dx*dx + dy*dy );\n\n}\n\n/**\n * Applies a CSS transform to the target element.\n *\n * @param {HTMLElement} element\n * @param {string} transform\n */\nexport const transformElement = ( element, transform ) => {\n\n\telement.style.transform = transform;\n\n}\n\n/**\n * Element.matches with IE support.\n *\n * @param {HTMLElement} target The element to match\n * @param {String} selector The CSS selector to match\n * the element against\n *\n * @return {Boolean}\n */\nexport const matches = ( target, selector ) => {\n\n\tlet matchesMethod = target.matches || target.matchesSelector || target.msMatchesSelector;\n\n\treturn !!( matchesMethod && matchesMethod.call( target, selector ) );\n\n}\n\n/**\n * Find the closest parent that matches the given\n * selector.\n *\n * @param {HTMLElement} target The child element\n * @param {String} selector The CSS selector to match\n * the parents against\n *\n * @return {HTMLElement} The matched parent or null\n * if no matching parent was found\n */\nexport const closest = ( target, selector ) => {\n\n\t// Native Element.closest\n\tif( typeof target.closest === 'function' ) {\n\t\treturn target.closest( selector );\n\t}\n\n\t// Polyfill\n\twhile( target ) {\n\t\tif( matches( target, selector ) ) {\n\t\t\treturn target;\n\t\t}\n\n\t\t// Keep searching\n\t\ttarget = target.parentNode;\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Handling the fullscreen functionality via the fullscreen API\n *\n * @see http://fullscreen.spec.whatwg.org/\n * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n */\nexport const enterFullscreen = element => {\n\n\telement = element || document.documentElement;\n\n\t// Check which implementation is available\n\tlet requestMethod = element.requestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\telement.msRequestFullscreen;\n\n\tif( requestMethod ) {\n\t\trequestMethod.apply( element );\n\t}\n\n}\n\n/**\n * Creates an HTML element and returns a reference to it.\n * If the element already exists the existing instance will\n * be returned.\n *\n * @param {HTMLElement} container\n * @param {string} tagname\n * @param {string} classname\n * @param {string} innerHTML\n *\n * @return {HTMLElement}\n */\nexport const createSingletonNode = ( container, tagname, classname, innerHTML='' ) => {\n\n\t// Find all nodes matching the description\n\tlet nodes = container.querySelectorAll( '.' + classname );\n\n\t// Check all matches to find one which is a direct child of\n\t// the specified container\n\tfor( let i = 0; i < nodes.length; i++ ) {\n\t\tlet testNode = nodes[i];\n\t\tif( testNode.parentNode === container ) {\n\t\t\treturn testNode;\n\t\t}\n\t}\n\n\t// If no node was found, create it now\n\tlet node = document.createElement( tagname );\n\tnode.className = classname;\n\tnode.innerHTML = innerHTML;\n\tcontainer.appendChild( node );\n\n\treturn node;\n\n}\n\n/**\n * Injects the given CSS styles into the DOM.\n *\n * @param {string} value\n */\nexport const createStyleSheet = ( value ) => {\n\n\tlet tag = document.createElement( 'style' );\n\ttag.type = 'text/css';\n\n\tif( value && value.length > 0 ) {\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t}\n\n\tdocument.head.appendChild( tag );\n\n\treturn tag;\n\n}\n\n/**\n * Returns a key:value hash of all query params.\n */\nexport const getQueryHash = () => {\n\n\tlet query = {};\n\n\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, a => {\n\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t} );\n\n\t// Basic deserialization\n\tfor( let i in query ) {\n\t\tlet value = query[ i ];\n\n\t\tquery[ i ] = deserialize( unescape( value ) );\n\t}\n\n\t// Do not accept new dependencies via query config to avoid\n\t// the potential of malicious script injection\n\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\treturn query;\n\n}\n\n/**\n * Returns the remaining height within the parent of the\n * target element.\n *\n * remaining height = [ configured parent height ] - [ current parent height ]\n *\n * @param {HTMLElement} element\n * @param {number} [height]\n */\nexport const getRemainingHeight = ( element, height = 0 ) => {\n\n\tif( element ) {\n\t\tlet newHeight, oldHeight = element.style.height;\n\n\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t// the other elements\n\t\telement.style.height = '0px';\n\n\t\t// In Overview mode, the parent (.slide) height is set of 700px.\n\t\t// Restore it temporarily to its natural height.\n\t\telement.parentNode.style.height = 'auto';\n\n\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t// Restore the old height, just in case\n\t\telement.style.height = oldHeight + 'px';\n\n\t\t// Clear the parent (.slide) height. .removeProperty works in IE9+\n\t\telement.parentNode.style.removeProperty('height');\n\n\t\treturn newHeight;\n\t}\n\n\treturn height;\n\n}\n\nconst fileExtensionToMimeMap = {\n\t'mp4': 'video/mp4',\n\t'm4a': 'video/mp4',\n\t'ogv': 'video/ogg',\n\t'mpeg': 'video/mpeg',\n\t'webm': 'video/webm'\n}\n\n/**\n * Guess the MIME type for common file formats.\n */\nexport const getMimeTypeFromFile = ( filename='' ) => {\n\treturn fileExtensionToMimeMap[filename.split('.').pop()]\n}","const UA = navigator.userAgent;\n\nexport const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||\n\t\t\t\t\t\t( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS\n\nexport const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );\n\nexport const isAndroid = /android/gi.test( UA );","/*\n * fitty v2.3.3 - Snugly resizes text to fit its parent container\n * Copyright (c) 2020 Rik Schennink (https://pqina.nl/)\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (w) {\n\n // no window, early exit\n if (!w) return;\n\n // node list to array helper method\n var toArray = function toArray(nl) {\n return [].slice.call(nl);\n };\n\n // states\n var DrawState = {\n IDLE: 0,\n DIRTY_CONTENT: 1,\n DIRTY_LAYOUT: 2,\n DIRTY: 3\n };\n\n // all active fitty elements\n var fitties = [];\n\n // group all redraw calls till next frame, we cancel each frame request when a new one comes in. If no support for request animation frame, this is an empty function and supports for fitty stops.\n var redrawFrame = null;\n var requestRedraw = 'requestAnimationFrame' in w ? function () {\n w.cancelAnimationFrame(redrawFrame);\n redrawFrame = w.requestAnimationFrame(function () {\n return redraw(fitties.filter(function (f) {\n return f.dirty && f.active;\n }));\n });\n } : function () {};\n\n // sets all fitties to dirty so they are redrawn on the next redraw loop, then calls redraw\n var redrawAll = function redrawAll(type) {\n return function () {\n fitties.forEach(function (f) {\n return f.dirty = type;\n });\n requestRedraw();\n };\n };\n\n // redraws fitties so they nicely fit their parent container\n var redraw = function redraw(fitties) {\n\n // getting info from the DOM at this point should not trigger a reflow, let's gather as much intel as possible before triggering a reflow\n\n // check if styles of all fitties have been computed\n fitties.filter(function (f) {\n return !f.styleComputed;\n }).forEach(function (f) {\n f.styleComputed = computeStyle(f);\n });\n\n // restyle elements that require pre-styling, this triggers a reflow, please try to prevent by adding CSS rules (see docs)\n fitties.filter(shouldPreStyle).forEach(applyStyle);\n\n // we now determine which fitties should be redrawn\n var fittiesToRedraw = fitties.filter(shouldRedraw);\n\n // we calculate final styles for these fitties\n fittiesToRedraw.forEach(calculateStyles);\n\n // now we apply the calculated styles from our previous loop\n fittiesToRedraw.forEach(function (f) {\n applyStyle(f);\n markAsClean(f);\n });\n\n // now we dispatch events for all restyled fitties\n fittiesToRedraw.forEach(dispatchFitEvent);\n };\n\n var markAsClean = function markAsClean(f) {\n return f.dirty = DrawState.IDLE;\n };\n\n var calculateStyles = function calculateStyles(f) {\n\n // get available width from parent node\n f.availableWidth = f.element.parentNode.clientWidth;\n\n // the space our target element uses\n f.currentWidth = f.element.scrollWidth;\n\n // remember current font size\n f.previousFontSize = f.currentFontSize;\n\n // let's calculate the new font size\n f.currentFontSize = Math.min(Math.max(f.minSize, f.availableWidth / f.currentWidth * f.previousFontSize), f.maxSize);\n\n // if allows wrapping, only wrap when at minimum font size (otherwise would break container)\n f.whiteSpace = f.multiLine && f.currentFontSize === f.minSize ? 'normal' : 'nowrap';\n };\n\n // should always redraw if is not dirty layout, if is dirty layout, only redraw if size has changed\n var shouldRedraw = function shouldRedraw(f) {\n return f.dirty !== DrawState.DIRTY_LAYOUT || f.dirty === DrawState.DIRTY_LAYOUT && f.element.parentNode.clientWidth !== f.availableWidth;\n };\n\n // every fitty element is tested for invalid styles\n var computeStyle = function computeStyle(f) {\n\n // get style properties\n var style = w.getComputedStyle(f.element, null);\n\n // get current font size in pixels (if we already calculated it, use the calculated version)\n f.currentFontSize = parseFloat(style.getPropertyValue('font-size'));\n\n // get display type and wrap mode\n f.display = style.getPropertyValue('display');\n f.whiteSpace = style.getPropertyValue('white-space');\n };\n\n // determines if this fitty requires initial styling, can be prevented by applying correct styles through CSS\n var shouldPreStyle = function shouldPreStyle(f) {\n\n var preStyle = false;\n\n // if we already tested for prestyling we don't have to do it again\n if (f.preStyleTestCompleted) return false;\n\n // should have an inline style, if not, apply\n if (!/inline-/.test(f.display)) {\n preStyle = true;\n f.display = 'inline-block';\n }\n\n // to correctly calculate dimensions the element should have whiteSpace set to nowrap\n if (f.whiteSpace !== 'nowrap') {\n preStyle = true;\n f.whiteSpace = 'nowrap';\n }\n\n // we don't have to do this twice\n f.preStyleTestCompleted = true;\n\n return preStyle;\n };\n\n // apply styles to single fitty\n var applyStyle = function applyStyle(f) {\n f.element.style.whiteSpace = f.whiteSpace;\n f.element.style.display = f.display;\n f.element.style.fontSize = f.currentFontSize + 'px';\n };\n\n // dispatch a fit event on a fitty\n var dispatchFitEvent = function dispatchFitEvent(f) {\n f.element.dispatchEvent(new CustomEvent('fit', {\n detail: {\n oldValue: f.previousFontSize,\n newValue: f.currentFontSize,\n scaleFactor: f.currentFontSize / f.previousFontSize\n }\n }));\n };\n\n // fit method, marks the fitty as dirty and requests a redraw (this will also redraw any other fitty marked as dirty)\n var fit = function fit(f, type) {\n return function () {\n f.dirty = type;\n if (!f.active) return;\n requestRedraw();\n };\n };\n\n var init = function init(f) {\n\n // save some of the original CSS properties before we change them\n f.originalStyle = {\n whiteSpace: f.element.style.whiteSpace,\n display: f.element.style.display,\n fontSize: f.element.style.fontSize\n };\n\n // should we observe DOM mutations\n observeMutations(f);\n\n // this is a new fitty so we need to validate if it's styles are in order\n f.newbie = true;\n\n // because it's a new fitty it should also be dirty, we want it to redraw on the first loop\n f.dirty = true;\n\n // we want to be able to update this fitty\n fitties.push(f);\n };\n\n var destroy = function destroy(f) {\n return function () {\n\n // remove from fitties array\n fitties = fitties.filter(function (_) {\n return _.element !== f.element;\n });\n\n // stop observing DOM\n if (f.observeMutations) f.observer.disconnect();\n\n // reset the CSS properties we changes\n f.element.style.whiteSpace = f.originalStyle.whiteSpace;\n f.element.style.display = f.originalStyle.display;\n f.element.style.fontSize = f.originalStyle.fontSize;\n };\n };\n\n // add a new fitty, does not redraw said fitty\n var subscribe = function subscribe(f) {\n return function () {\n if (f.active) return;\n f.active = true;\n requestRedraw();\n };\n };\n\n // remove an existing fitty\n var unsubscribe = function unsubscribe(f) {\n return function () {\n return f.active = false;\n };\n };\n\n var observeMutations = function observeMutations(f) {\n\n // no observing?\n if (!f.observeMutations) return;\n\n // start observing mutations\n f.observer = new MutationObserver(fit(f, DrawState.DIRTY_CONTENT));\n\n // start observing\n f.observer.observe(f.element, f.observeMutations);\n };\n\n // default mutation observer settings\n var mutationObserverDefaultSetting = {\n subtree: true,\n childList: true,\n characterData: true\n };\n\n // default fitty options\n var defaultOptions = {\n minSize: 16,\n maxSize: 512,\n multiLine: true,\n observeMutations: 'MutationObserver' in w ? mutationObserverDefaultSetting : false\n };\n\n // array of elements in, fitty instances out\n function fittyCreate(elements, options) {\n\n // set options object\n var fittyOptions = _extends({}, defaultOptions, options);\n\n // create fitties\n var publicFitties = elements.map(function (element) {\n\n // create fitty instance\n var f = _extends({}, fittyOptions, {\n\n // internal options for this fitty\n element: element,\n active: true\n });\n\n // initialise this fitty\n init(f);\n\n // expose API\n return {\n element: element,\n fit: fit(f, DrawState.DIRTY),\n unfreeze: subscribe(f),\n freeze: unsubscribe(f),\n unsubscribe: destroy(f)\n };\n });\n\n // call redraw on newly initiated fitties\n requestRedraw();\n\n // expose fitties\n return publicFitties;\n }\n\n // fitty creation function\n function fitty(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n // if target is a string\n return typeof target === 'string' ?\n\n // treat it as a querySelector\n fittyCreate(toArray(document.querySelectorAll(target)), options) :\n\n // create single fitty\n fittyCreate([target], options)[0];\n }\n\n // handles viewport changes, redraws all fitties, but only does so after a timeout\n var resizeDebounce = null;\n var onWindowResized = function onWindowResized() {\n w.clearTimeout(resizeDebounce);\n resizeDebounce = w.setTimeout(redrawAll(DrawState.DIRTY_LAYOUT), fitty.observeWindowDelay);\n };\n\n // define observe window property, so when we set it to true or false events are automatically added and removed\n var events = ['resize', 'orientationchange'];\n Object.defineProperty(fitty, 'observeWindow', {\n set: function set(enabled) {\n var method = (enabled ? 'add' : 'remove') + 'EventListener';\n events.forEach(function (e) {\n w[method](e, onWindowResized);\n });\n }\n });\n\n // fitty global properties (by setting observeWindow to true the events above get added)\n fitty.observeWindow = true;\n fitty.observeWindowDelay = 100;\n\n // public fit all method, will force redraw no matter what\n fitty.fitAll = redrawAll(DrawState.DIRTY);\n\n // export our fitty function, we don't want to keep it to our selves\n return fitty;\n}(typeof window === 'undefined' ? null : window);","import { extend, queryAll, closest, getMimeTypeFromFile } from '../utils/util.js'\nimport { isMobile } from '../utils/device.js'\n\nimport fitty from 'fitty';\n\n/**\n * Handles loading, unloading and playback of slide\n * content such as images, videos and iframes.\n */\nexport default class SlideContent {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.startEmbeddedIframe = this.startEmbeddedIframe.bind( this );\n\n\t}\n\n\t/**\n\t * Should the given element be preloaded?\n\t * Decides based on local element attributes and global config.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tshouldPreload( element ) {\n\n\t\t// Prefer an explicit global preload setting\n\t\tlet preload = this.Reveal.getConfig().preloadIframes;\n\n\t\t// If no global setting is available, fall back on the element's\n\t\t// own preload setting\n\t\tif( typeof preload !== 'boolean' ) {\n\t\t\tpreload = element.hasAttribute( 'data-preload' );\n\t\t}\n\n\t\treturn preload;\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t *\n\t * @param {HTMLElement} slide Slide to show\n\t */\n\tload( slide, options = {} ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = this.Reveal.getConfig().display;\n\n\t\t// Media elements with data-src attributes\n\t\tqueryAll( slide, 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ).forEach( element => {\n\t\t\tif( element.tagName !== 'IFRAME' || this.shouldPreload( element ) ) {\n\t\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\t\telement.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\telement.removeAttribute( 'data-src' );\n\t\t\t}\n\t\t} );\n\n\t\t// Media elements with children\n\t\tqueryAll( slide, 'video, audio' ).forEach( media => {\n\t\t\tlet sources = 0;\n\n\t\t\tqueryAll( media, 'source[data-src]' ).forEach( source => {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsource.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// Enable inline video playback in mobile Safari\n\t\t\tif( isMobile && media.tagName === 'VIDEO' ) {\n\t\t\t\tmedia.setAttribute( 'playsinline', '' );\n\t\t\t}\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tlet background = slide.slideBackgroundElement;\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\tlet backgroundContent = slide.slideBackgroundContentElement;\n\t\t\tlet backgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tlet backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ),\n\t\t\t\t\tbackgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\t// base64\n\t\t\t\t\tif( /^data:/.test( backgroundImage.trim() ) ) {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = `url(${backgroundImage.trim()})`;\n\t\t\t\t\t}\n\t\t\t\t\t// URL(s)\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t\t}).join( ',' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {\n\t\t\t\t\tlet video = document.createElement( 'video' );\n\n\t\t\t\t\tif( backgroundVideoLoop ) {\n\t\t\t\t\t\tvideo.setAttribute( 'loop', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif( backgroundVideoMuted ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Enable inline playback in mobile Safari\n\t\t\t\t\t//\n\t\t\t\t\t// Mute is required for video to play when using\n\t\t\t\t\t// swipe gestures to navigate since they don't\n\t\t\t\t\t// count as direct user actions :'(\n\t\t\t\t\tif( isMobile ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t\tvideo.setAttribute( 'playsinline', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( source => {\n\t\t\t\t\t\tlet type = getMimeTypeFromFile( source );\n\t\t\t\t\t\tif( type ) {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackgroundContent.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if( backgroundIframe && options.excludeIframes !== true ) {\n\t\t\t\t\tlet iframe = document.createElement( 'iframe' );\n\t\t\t\t\tiframe.setAttribute( 'allowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'mozallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'webkitallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'allow', 'autoplay' );\n\n\t\t\t\t\tiframe.setAttribute( 'data-src', backgroundIframe );\n\n\t\t\t\t\tiframe.style.width = '100%';\n\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackgroundContent.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start loading preloadable iframes\n\t\t\tlet backgroundIframeElement = backgroundContent.querySelector( 'iframe[data-src]' );\n\t\t\tif( backgroundIframeElement ) {\n\n\t\t\t\t// Check if this iframe is eligible to be preloaded\n\t\t\t\tif( this.shouldPreload( background ) && !/autoplay=(1|true|yes)/gi.test( backgroundIframe ) ) {\n\t\t\t\t\tif( backgroundIframeElement.getAttribute( 'src' ) !== backgroundIframe ) {\n\t\t\t\t\t\tbackgroundIframeElement.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.layout( slide );\n\n\t}\n\n\t/**\n\t * Applies JS-dependent layout helpers for the given slide,\n\t * if there are any.\n\t */\n\tlayout( slide ) {\n\n\t\t// Autosize text with the r-fit-text class based on the\n\t\t// size of its container. This needs to happen after the\n\t\t// slide is visible in order to measure the text.\n\t\tArray.from( slide.querySelectorAll( '.r-fit-text' ) ).forEach( element => {\n\t\t\tfitty( element, {\n\t\t\t\tminSize: 24,\n\t\t\t\tmaxSize: this.Reveal.getConfig().height * 0.8,\n\t\t\t\tobserveMutations: false,\n\t\t\t\tobserveWindow: false\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unloads and hides the given slide. This is called when the\n\t * slide is moved outside of the configured view distance.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tunload( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tlet background = this.Reveal.getSlideBackground( slide );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\n\t\t\t// Unload any background iframes\n\t\t\tqueryAll( background, 'iframe[src]' ).forEach( element => {\n\t\t\t\telement.removeAttribute( 'src' );\n\t\t\t} );\n\t\t}\n\n\t\t// Reset lazy-loaded media elements with src attributes\n\t\tqueryAll( slide, 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]' ).forEach( element => {\n\t\t\telement.setAttribute( 'data-src', element.getAttribute( 'src' ) );\n\t\t\telement.removeAttribute( 'src' );\n\t\t} );\n\n\t\t// Reset lazy-loaded media elements with children\n\t\tqueryAll( slide, 'video[data-lazy-loaded] source[src], audio source[src]' ).forEach( source => {\n\t\t\tsource.setAttribute( 'data-src', source.getAttribute( 'src' ) );\n\t\t\tsource.removeAttribute( 'src' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tformatEmbeddedContent() {\n\n\t\tlet _appendParamToIframeSource = ( sourceAttribute, sourceURL, param ) => {\n\t\t\tqueryAll( this.Reveal.getSlidesElement(), 'iframe['+ sourceAttribute +'*=\"'+ sourceURL +'\"]' ).forEach( el => {\n\t\t\t\tlet src = el.getAttribute( sourceAttribute );\n\t\t\t\tif( src && src.indexOf( param ) === -1 ) {\n\t\t\t\t\tel.setAttribute( sourceAttribute, src + ( !/\\?/.test( src ) ? '?' : '&' ) + param );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\t_appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' );\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\t_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the given element.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstartEmbeddedContent( element ) {\n\n\t\tif( element && !this.Reveal.isSpeakerNotes() ) {\n\n\t\t\t// Restart GIFs\n\t\t\tqueryAll( element, 'img[src$=\".gif\"]' ).forEach( el => {\n\t\t\t\t// Setting the same unchanged source like this was confirmed\n\t\t\t\t// to work in Chrome, FF & Safari\n\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'src' ) );\n\t\t\t} );\n\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = el.hasAttribute( 'data-autoplay' ) || !!closest( el, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\tif( autoplay && typeof el.play === 'function' ) {\n\n\t\t\t\t\t// If the media is ready, start playback\n\t\t\t\t\tif( el.readyState > 1 ) {\n\t\t\t\t\t\tthis.startEmbeddedMedia( { target: el } );\n\t\t\t\t\t}\n\t\t\t\t\t// Mobile devices never fire a loaded event so instead\n\t\t\t\t\t// of waiting, we initiate playback\n\t\t\t\t\telse if( isMobile ) {\n\t\t\t\t\t\tlet promise = el.play();\n\n\t\t\t\t\t\t// If autoplay does not work, ensure that the controls are visible so\n\t\t\t\t\t\t// that the viewer can start the media on their own\n\t\t\t\t\t\tif( promise && typeof promise.catch === 'function' && el.controls === false ) {\n\t\t\t\t\t\t\tpromise.catch( () => {\n\t\t\t\t\t\t\t\tel.controls = true;\n\n\t\t\t\t\t\t\t\t// Once the video does start playing, hide the controls again\n\t\t\t\t\t\t\t\tel.addEventListener( 'play', () => {\n\t\t\t\t\t\t\t\t\tel.controls = false;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If the media isn't loaded, wait before playing\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.removeEventListener( 'loadeddata', this.startEmbeddedMedia ); // remove first to avoid dupes\n\t\t\t\t\t\tel.addEventListener( 'loadeddata', this.startEmbeddedMedia );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Normal iframes\n\t\t\tqueryAll( element, 'iframe[src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.startEmbeddedIframe( { target: el } );\n\t\t\t} );\n\n\t\t\t// Lazy loading iframes\n\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {\n\t\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes\n\t\t\t\t\tel.addEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'data-src' ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts playing an embedded video/audio element after\n\t * it has finished loading.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedMedia( event ) {\n\n\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\tif( isAttachedToDOM && isVisible ) {\n\t\t\tevent.target.currentTime = 0;\n\t\t\tevent.target.play();\n\t\t}\n\n\t\tevent.target.removeEventListener( 'loadeddata', this.startEmbeddedMedia );\n\n\t}\n\n\t/**\n\t * \"Starts\" the content of an embedded iframe using the\n\t * postMessage API.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedIframe( event ) {\n\n\t\tlet iframe = event.target;\n\n\t\tif( iframe && iframe.contentWindow ) {\n\n\t\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\t\tif( isAttachedToDOM && isVisible ) {\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = iframe.hasAttribute( 'data-autoplay' ) || !!closest( iframe, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\t// YouTube postMessage API\n\t\t\t\tif( /youtube\\.com\\/embed\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Vimeo postMessage API\n\t\t\t\telse if( /player\\.vimeo\\.com\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Generic postMessage API\n\t\t\t\telse {\n\t\t\t\t\tiframe.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstopEmbeddedContent( element, options = {} ) {\n\n\t\toptions = extend( {\n\t\t\t// Defaults\n\t\t\tunloadIframes: true\n\t\t}, options );\n\n\t\tif( element && element.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) {\n\t\t\t\t\tel.setAttribute('data-paused-by-reveal', '');\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Generic postMessage API for non-lazy loaded iframes\n\t\t\tqueryAll( element, 'iframe' ).forEach( el => {\n\t\t\t\tif( el.contentWindow ) el.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t});\n\n\t\t\t// YouTube postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"youtube.com/embed/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"player.vimeo.com/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( options.unloadIframes === true ) {\n\t\t\t\t// Unload lazy-loaded iframes\n\t\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\t\t// Only removing the src doesn't actually unload the frame\n\t\t\t\t\t// in all browsers (Firefox) so we set it to blank first\n\t\t\t\t\tel.setAttribute( 'src', 'about:blank' );\n\t\t\t\t\tel.removeAttribute( 'src' );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n","/**\n * Handles the display of reveal.js' optional slide number.\n */\nexport default class SlideNumber {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'slide-number';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tlet slideNumberDisplay = 'none';\n\t\tif( config.slideNumber && !this.Reveal.isPrintingPDF() ) {\n\t\t\tif( config.showSlideNumber === 'all' ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t\telse if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t}\n\n\t\tthis.element.style.display = slideNumberDisplay;\n\n\t}\n\n\t/**\n\t * Updates the slide number to match the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update slide number if enabled\n\t\tif( this.Reveal.getConfig().slideNumber && this.element ) {\n\t\t\tthis.element.innerHTML = this.getSlideNumber();\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the HTML string corresponding to the current slide\n\t * number, including formatting.\n\t */\n\tgetSlideNumber( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet value;\n\t\tlet format = 'h.v';\n\n\t\tif ( typeof config.slideNumber === 'function' ) {\n\t\t\tvalue = config.slideNumber( slide );\n\t\t} else {\n\t\t\t// Check if a custom number format is available\n\t\t\tif( typeof config.slideNumber === 'string' ) {\n\t\t\t\tformat = config.slideNumber;\n\t\t\t}\n\n\t\t\t// If there are ONLY vertical slides in this deck, always use\n\t\t\t// a flattened slide number\n\t\t\tif( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {\n\t\t\t\tformat = 'c';\n\t\t\t}\n\n\t\t\t// Offset the current slide number by 1 to make it 1-indexed\n\t\t\tlet horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;\n\n\t\t\tvalue = [];\n\t\t\tswitch( format ) {\n\t\t\t\tcase 'c':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c/t':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlet indices = this.Reveal.getIndices( slide );\n\t\t\t\t\tvalue.push( indices.h + horizontalOffset );\n\t\t\t\t\tlet sep = format === 'h/v' ? '/' : '.';\n\t\t\t\t\tif( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );\n\t\t\t}\n\t\t}\n\n\t\tlet url = '#' + this.Reveal.location.getHash( slide );\n\t\treturn this.formatNumber( value[0], value[1], value[2], url );\n\n\t}\n\n\t/**\n\t * Applies HTML formatting to a slide number before it's\n\t * written to the DOM.\n\t *\n\t * @param {number} a Current slide\n\t * @param {string} delimiter Character to separate slide numbers\n\t * @param {(number|*)} b Total slides\n\t * @param {HTMLElement} [url='#'+locationHash()] The url to link to\n\t * @return {string} HTML string fragment\n\t */\n\tformatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {\n\n\t\tif( typeof b === 'number' && !isNaN( b ) ) {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t${delimiter}\n\t\t\t\t\t${b}\n\t\t\t\t\t`;\n\t\t}\n\t\telse {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t`;\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string representation of a color\n * @example\n * colorToRgb('#000');\n * @example\n * colorToRgb('#000000');\n * @example\n * colorToRgb('rgb(0,0,0)');\n * @example\n * colorToRgb('rgba(0,0,0)');\n *\n * @return {{r: number, g: number, b: number, [a]: number}|null}\n */\nexport const colorToRgb = ( color ) => {\n\n\tlet hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\tif( hex3 && hex3[1] ) {\n\t\thex3 = hex3[1];\n\t\treturn {\n\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t};\n\t}\n\n\tlet hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\tif( hex6 && hex6[1] ) {\n\t\thex6 = hex6[1];\n\t\treturn {\n\t\t\tr: parseInt( hex6.slice( 0, 2 ), 16 ),\n\t\t\tg: parseInt( hex6.slice( 2, 4 ), 16 ),\n\t\t\tb: parseInt( hex6.slice( 4, 6 ), 16 )\n\t\t};\n\t}\n\n\tlet rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\tif( rgb ) {\n\t\treturn {\n\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\tb: parseInt( rgb[3], 10 )\n\t\t};\n\t}\n\n\tlet rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\tif( rgba ) {\n\t\treturn {\n\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\ta: parseFloat( rgba[4] )\n\t\t};\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Calculates brightness on a scale of 0-255.\n *\n * @param {string} color See colorToRgb for supported formats.\n * @see {@link colorToRgb}\n */\nexport const colorBrightness = ( color ) => {\n\n\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\tif( color ) {\n\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t}\n\n\treturn null;\n\n}","import { queryAll } from '../utils/util.js'\nimport { colorToRgb, colorBrightness } from '../utils/color.js'\n\n/**\n * Creates and updates slide backgrounds.\n */\nexport default class Backgrounds {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'backgrounds';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tcreate() {\n\n\t\t// Clear prior backgrounds\n\t\tthis.element.innerHTML = '';\n\t\tthis.element.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( slideh => {\n\n\t\t\tlet backgroundStack = this.createBackground( slideh, this.element );\n\n\t\t\t// Iterate over all vertical slides\n\t\t\tqueryAll( slideh, 'section' ).forEach( slidev => {\n\n\t\t\t\tthis.createBackground( slidev, backgroundStack );\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tthis.element.style.backgroundImage = 'url(\"' + this.Reveal.getConfig().parallaxBackgroundImage + '\")';\n\t\t\tthis.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;\n\t\t\tthis.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;\n\t\t\tthis.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tthis.element.style.backgroundImage = '';\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t * @return {HTMLElement} New background div\n\t */\n\tcreateBackground( slide, container ) {\n\n\t\t// Main slide background element\n\t\tlet element = document.createElement( 'div' );\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\t// Inner background element that wraps images/videos/iframes\n\t\tlet contentElement = document.createElement( 'div' );\n\t\tcontentElement.className = 'slide-background-content';\n\n\t\telement.appendChild( contentElement );\n\t\tcontainer.appendChild( element );\n\n\t\tslide.slideBackgroundElement = element;\n\t\tslide.slideBackgroundContentElement = contentElement;\n\n\t\t// Syncs the background to reflect all current background settings\n\t\tthis.sync( slide );\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Renders all of the visual properties of a slide background\n\t * based on the various background attributes.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tsync( slide ) {\n\n\t\tconst element = slide.slideBackgroundElement,\n\t\t\tcontentElement = slide.slideBackgroundContentElement;\n\n\t\tconst data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' ),\n\t\t\tbackgroundOpacity: slide.getAttribute( 'data-background-opacity' ),\n\t\t};\n\n\t\tconst dataPreload = slide.hasAttribute( 'data-preload' );\n\n\t\t// Reset the prior background state in case this is not the\n\t\t// initial sync\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\telement.removeAttribute( 'data-loaded' );\n\t\telement.removeAttribute( 'data-background-hash' );\n\t\telement.removeAttribute( 'data-background-size' );\n\t\telement.removeAttribute( 'data-background-transition' );\n\t\telement.style.backgroundColor = '';\n\n\t\tcontentElement.style.backgroundSize = '';\n\t\tcontentElement.style.backgroundRepeat = '';\n\t\tcontentElement.style.backgroundPosition = '';\n\t\tcontentElement.style.backgroundImage = '';\n\t\tcontentElement.style.opacity = '';\n\t\tcontentElement.innerHTML = '';\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp)([?#\\s]|$)/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundOpacity );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize );\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tif( dataPreload ) element.setAttribute( 'data-preload', '' );\n\n\t\t// Background image options are set on the content wrapper\n\t\tif( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity;\n\n\t\t// If this slide has a background color, we add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be added\n\t\tlet contrastColor = data.backgroundColor;\n\n\t\t// If no bg color was found, or it cannot be converted by colorToRgb, check the computed background\n\t\tif( !contrastColor || !colorToRgb( contrastColor ) ) {\n\t\t\tlet computedBackgroundStyle = window.getComputedStyle( element );\n\t\t\tif( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) {\n\t\t\t\tcontrastColor = computedBackgroundStyle.backgroundColor;\n\t\t\t}\n\t\t}\n\n\t\tif( contrastColor ) {\n\t\t\tconst rgb = colorToRgb( contrastColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( contrastColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tupdate( includeAll = false ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tlet currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tlet horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\tArray.from( this.element.childNodes ).forEach( ( backgroundh, h ) => {\n\n\t\t\tbackgroundh.classList.remove( 'past', 'present', 'future' );\n\n\t\t\tif( h < indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indices.h ) {\n\t\t\t\tqueryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past', 'present', 'future' );\n\n\t\t\t\t\tif( v < indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indices.h ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop content inside of previous backgrounds\n\t\tif( this.previousBackground ) {\n\n\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } );\n\n\t\t}\n\n\t\t// Start content in the current background\n\t\tif( currentBackground ) {\n\n\t\t\tthis.Reveal.slideContent.startEmbeddedContent( currentBackground );\n\n\t\t\tlet currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' );\n\t\t\tif( currentBackgroundContent ) {\n\n\t\t\t\tlet backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';\n\n\t\t\t\t// Restart GIFs (doesn't work in Firefox)\n\t\t\t\tif( /\\.gif/i.test( backgroundImageURL ) ) {\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = '';\n\t\t\t\t\twindow.getComputedStyle( currentBackgroundContent ).opacity;\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = backgroundImageURL;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tlet previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tlet currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {\n\t\t\t\tthis.element.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tthis.previousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( () => {\n\t\t\tthis.element.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tupdateParallax() {\n\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tlet horizontalSlides = this.Reveal.getHorizontalSlides(),\n\t\t\t\tverticalSlides = this.Reveal.getVerticalSlides();\n\n\t\t\tlet backgroundSize = this.element.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tlet slideWidth = this.element.offsetWidth,\n\t\t\t\thorizontalSlideCount = horizontalSlides.length,\n\t\t\t\thorizontalOffsetMultiplier,\n\t\t\t\thorizontalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) {\n\t\t\t\thorizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thorizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0;\n\t\t\t}\n\n\t\t\thorizontalOffset = horizontalOffsetMultiplier * indices.h * -1;\n\n\t\t\tlet slideHeight = this.element.offsetHeight,\n\t\t\t\tverticalSlideCount = verticalSlides.length,\n\t\t\t\tverticalOffsetMultiplier,\n\t\t\t\tverticalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) {\n\t\t\t\tverticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tverticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 );\n\t\t\t}\n\n\t\t\tverticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;\n\n\t\t\tthis.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}\n","\nexport const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';\n\n// Methods that may not be invoked via the postMessage API\nexport const POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/;\n\n// Regex for retrieving the fragment style from a class attribute\nexport const FRAGMENT_STYLE_REGEX = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;","import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js'\nimport { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'\n\n// Counter used to generate unique IDs for auto-animated elements\nlet autoAnimateCounter = 0;\n\n/**\n * Automatically animates matching elements across\n * slides with the [data-auto-animate] attribute.\n */\nexport default class AutoAnimate {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Runs an auto-animation between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t */\n\trun( fromSlide, toSlide ) {\n\n\t\t// Clean up after prior animations\n\t\tthis.reset();\n\n\t\tlet allSlides = this.Reveal.getSlides();\n\t\tlet toSlideIndex = allSlides.indexOf( toSlide );\n\t\tlet fromSlideIndex = allSlides.indexOf( fromSlide );\n\n\t\t// Ensure that both slides are auto-animate targets with the same data-auto-animate-id value\n\t\t// (including null if absent on both) and that data-auto-animate-restart isn't set on the\n\t\t// physically latter slide (independent of slide direction)\n\t\tif( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t&& fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) \n\t\t\t\t&& !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t// Create a new auto-animate sheet\n\t\t\tthis.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet();\n\n\t\t\tlet animationOptions = this.getAutoAnimateOptions( toSlide );\n\n\t\t\t// Set our starting state\n\t\t\tfromSlide.dataset.autoAnimate = 'pending';\n\t\t\ttoSlide.dataset.autoAnimate = 'pending';\n\n\t\t\t// Flag the navigation direction, needed for fragment buildup\n\t\t\tanimationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward';\n\n\t\t\t// Inject our auto-animate styles for this transition\n\t\t\tlet css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => {\n\t\t\t\treturn this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ );\n\t\t\t} );\n\n\t\t\t// Animate unmatched elements, if enabled\n\t\t\tif( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) {\n\n\t\t\t\t// Our default timings for unmatched elements\n\t\t\t\tlet defaultUnmatchedDuration = animationOptions.duration * 0.8,\n\t\t\t\t\tdefaultUnmatchedDelay = animationOptions.duration * 0.2;\n\n\t\t\t\tthis.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => {\n\n\t\t\t\t\tlet unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions );\n\t\t\t\t\tlet id = 'unmatched';\n\n\t\t\t\t\t// If there is a duration or delay set specifically for this\n\t\t\t\t\t// element our unmatched elements should adhere to those\n\t\t\t\t\tif( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) {\n\t\t\t\t\t\tid = 'unmatched-' + autoAnimateCounter++;\n\t\t\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"${id}\"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` );\n\t\t\t\t\t}\n\n\t\t\t\t\tunmatchedElement.dataset.autoAnimateTarget = id;\n\n\t\t\t\t}, this );\n\n\t\t\t\t// Our default transition for unmatched elements\n\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"unmatched\"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` );\n\n\t\t\t}\n\n\t\t\t// Setting the whole chunk of CSS at once is the most\n\t\t\t// efficient way to do this. Using sheet.insertRule\n\t\t\t// is multiple factors slower.\n\t\t\tthis.autoAnimateStyleSheet.innerHTML = css.join( '' );\n\n\t\t\t// Start the animation next cycle\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tif( this.autoAnimateStyleSheet ) {\n\t\t\t\t\t// This forces our newly injected styles to be applied in Firefox\n\t\t\t\t\tgetComputedStyle( this.autoAnimateStyleSheet ).fontWeight;\n\n\t\t\t\t\ttoSlide.dataset.autoAnimate = 'running';\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'autoanimate',\n\t\t\t\tdata: {\n\t\t\t\t\tfromSlide,\n\t\t\t\t\ttoSlide,\n\t\t\t\t\tsheet: this.autoAnimateStyleSheet\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rolls back all changes that we've made to the DOM so\n\t * that as part of animating.\n\t */\n\treset() {\n\n\t\t// Reset slides\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=\"\"])' ).forEach( element => {\n\t\t\telement.dataset.autoAnimate = '';\n\t\t} );\n\n\t\t// Reset elements\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => {\n\t\t\tdelete element.dataset.autoAnimateTarget;\n\t\t} );\n\n\t\t// Remove the animation sheet\n\t\tif( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) {\n\t\t\tthis.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet );\n\t\t\tthis.autoAnimateStyleSheet = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a FLIP animation where the `to` element starts out\n\t * in the `from` element position and animates to its original\n\t * state.\n\t *\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @param {Object} elementOptions Options for this element pair\n\t * @param {Object} animationOptions Options set at the slide level\n\t * @param {String} id Unique ID that we can use to identify this\n\t * auto-animate element in the DOM\n\t */\n\tautoAnimateElements( from, to, elementOptions, animationOptions, id ) {\n\n\t\t// 'from' elements are given a data-auto-animate-target with no value,\n\t\t// 'to' elements are are given a data-auto-animate-target with an ID\n\t\tfrom.dataset.autoAnimateTarget = '';\n\t\tto.dataset.autoAnimateTarget = id;\n\n\t\t// Each element may override any of the auto-animate options\n\t\t// like transition easing, duration and delay via data-attributes\n\t\tlet options = this.getAutoAnimateOptions( to, animationOptions );\n\n\t\t// If we're using a custom element matcher the element options\n\t\t// may contain additional transition overrides\n\t\tif( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay;\n\t\tif( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration;\n\t\tif( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing;\n\n\t\tlet fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ),\n\t\t\ttoProps = this.getAutoAnimatableProperties( 'to', to, elementOptions );\n\n\t\t// Maintain fragment visibility for matching elements when\n\t\t// we're navigating forwards, this way the viewer won't need\n\t\t// to step through the same fragments twice\n\t\tif( to.classList.contains( 'fragment' ) ) {\n\n\t\t\t// Don't auto-animate the opacity of fragments to avoid\n\t\t\t// conflicts with fragment animations\n\t\t\tdelete toProps.styles['opacity'];\n\n\t\t\tif( from.classList.contains( 'fragment' ) ) {\n\n\t\t\t\tlet fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\t\t\t\tlet toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\n\t\t\t\t// Only skip the fragment if the fragment animation style\n\t\t\t\t// remains unchanged\n\t\t\t\tif( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) {\n\t\t\t\t\tto.classList.add( 'visible', 'disabled' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If translation and/or scaling are enabled, css transform\n\t\t// the 'to' element so that it matches the position and size\n\t\t// of the 'from' element\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\n\t\t\tlet presentationScale = this.Reveal.getScale();\n\n\t\t\tlet delta = {\n\t\t\t\tx: ( fromProps.x - toProps.x ) / presentationScale,\n\t\t\t\ty: ( fromProps.y - toProps.y ) / presentationScale,\n\t\t\t\tscaleX: fromProps.width / toProps.width,\n\t\t\t\tscaleY: fromProps.height / toProps.height\n\t\t\t};\n\n\t\t\t// Limit decimal points to avoid 0.0001px blur and stutter\n\t\t\tdelta.x = Math.round( delta.x * 1000 ) / 1000;\n\t\t\tdelta.y = Math.round( delta.y * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\n\t\t\tlet translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ),\n\t\t\t\tscale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 );\n\n\t\t\t// No need to transform if nothing's changed\n\t\t\tif( translate || scale ) {\n\n\t\t\t\tlet transform = [];\n\n\t\t\t\tif( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` );\n\t\t\t\tif( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` );\n\n\t\t\t\tfromProps.styles['transform'] = transform.join( ' ' );\n\t\t\t\tfromProps.styles['transform-origin'] = 'top left';\n\n\t\t\t\ttoProps.styles['transform'] = 'none';\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Delete all unchanged 'to' styles\n\t\tfor( let propertyName in toProps.styles ) {\n\t\t\tconst toValue = toProps.styles[propertyName];\n\t\t\tconst fromValue = fromProps.styles[propertyName];\n\n\t\t\tif( toValue === fromValue ) {\n\t\t\t\tdelete toProps.styles[propertyName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// If these property values were set via a custom matcher providing\n\t\t\t\t// an explicit 'from' and/or 'to' value, we always inject those values.\n\t\t\t\tif( toValue.explicitValue === true ) {\n\t\t\t\t\ttoProps.styles[propertyName] = toValue.value;\n\t\t\t\t}\n\n\t\t\t\tif( fromValue.explicitValue === true ) {\n\t\t\t\t\tfromProps.styles[propertyName] = fromValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet css = '';\n\n\t\tlet toStyleProperties = Object.keys( toProps.styles );\n\n\t\t// Only create animate this element IF at least one style\n\t\t// property has changed\n\t\tif( toStyleProperties.length > 0 ) {\n\n\t\t\t// Instantly move to the 'from' state\n\t\t\tfromProps.styles['transition'] = 'none';\n\n\t\t\t// Animate towards the 'to' state\n\t\t\ttoProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`;\n\t\t\ttoProps.styles['transition-property'] = toStyleProperties.join( ', ' );\n\t\t\ttoProps.styles['will-change'] = toStyleProperties.join( ', ' );\n\n\t\t\t// Build up our custom CSS. We need to override inline styles\n\t\t\t// so we need to make our styles vErY IMPORTANT!1!!\n\t\t\tlet fromCSS = Object.keys( fromProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + fromProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tlet toCSS = Object.keys( toProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + toProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tcss = \t'[data-auto-animate-target=\"'+ id +'\"] {'+ fromCSS +'}' +\n\t\t\t\t\t'[data-auto-animate=\"running\"] [data-auto-animate-target=\"'+ id +'\"] {'+ toCSS +'}';\n\n\t\t}\n\n\t\treturn css;\n\n\t}\n\n\t/**\n\t * Returns the auto-animate options for the given element.\n\t *\n\t * @param {HTMLElement} element Element to pick up options\n\t * from, either a slide or an animation target\n\t * @param {Object} [inheritedOptions] Optional set of existing\n\t * options\n\t */\n\tgetAutoAnimateOptions( element, inheritedOptions ) {\n\n\t\tlet options = {\n\t\t\teasing: this.Reveal.getConfig().autoAnimateEasing,\n\t\t\tduration: this.Reveal.getConfig().autoAnimateDuration,\n\t\t\tdelay: 0\n\t\t};\n\n\t\toptions = extend( options, inheritedOptions );\n\n\t\t// Inherit options from parent elements\n\t\tif( element.parentNode ) {\n\t\t\tlet autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' );\n\t\t\tif( autoAnimatedParent ) {\n\t\t\t\toptions = this.getAutoAnimateOptions( autoAnimatedParent, options );\n\t\t\t}\n\t\t}\n\n\t\tif( element.dataset.autoAnimateEasing ) {\n\t\t\toptions.easing = element.dataset.autoAnimateEasing;\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDuration ) {\n\t\t\toptions.duration = parseFloat( element.dataset.autoAnimateDuration );\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDelay ) {\n\t\t\toptions.delay = parseFloat( element.dataset.autoAnimateDelay );\n\t\t}\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Returns an object containing all of the properties\n\t * that can be auto-animated for the given element and\n\t * their current computed values.\n\t *\n\t * @param {String} direction 'from' or 'to'\n\t */\n\tgetAutoAnimatableProperties( direction, element, elementOptions ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\tlet properties = { styles: [] };\n\n\t\t// Position and size\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\t\t\tlet bounds;\n\n\t\t\t// Custom auto-animate may optionally return a custom tailored\n\t\t\t// measurement function\n\t\t\tif( typeof elementOptions.measure === 'function' ) {\n\t\t\t\tbounds = elementOptions.measure( element );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( config.center ) {\n\t\t\t\t\t// More precise, but breaks when used in combination\n\t\t\t\t\t// with zoom for scaling the deck ¯\\_(ツ)_/¯\n\t\t\t\t\tbounds = element.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet scale = this.Reveal.getScale();\n\t\t\t\t\tbounds = {\n\t\t\t\t\t\tx: element.offsetLeft * scale,\n\t\t\t\t\t\ty: element.offsetTop * scale,\n\t\t\t\t\t\twidth: element.offsetWidth * scale,\n\t\t\t\t\t\theight: element.offsetHeight * scale\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperties.x = bounds.x;\n\t\t\tproperties.y = bounds.y;\n\t\t\tproperties.width = bounds.width;\n\t\t\tproperties.height = bounds.height;\n\t\t}\n\n\t\tconst computedStyles = getComputedStyle( element );\n\n\t\t// CSS styles\n\t\t( elementOptions.styles || config.autoAnimateStyles ).forEach( style => {\n\t\t\tlet value;\n\n\t\t\t// `style` is either the property name directly, or an object\n\t\t\t// definition of a style property\n\t\t\tif( typeof style === 'string' ) style = { property: style };\n\n\t\t\tif( typeof style.from !== 'undefined' && direction === 'from' ) {\n\t\t\t\tvalue = { value: style.from, explicitValue: true };\n\t\t\t}\n\t\t\telse if( typeof style.to !== 'undefined' && direction === 'to' ) {\n\t\t\t\tvalue = { value: style.to, explicitValue: true };\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = computedStyles[style.property];\n\t\t\t}\n\n\t\t\tif( value !== '' ) {\n\t\t\t\tproperties.styles[style.property] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Get a list of all element pairs that we can animate\n\t * between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t *\n\t * @return {Array} Each value is an array where [0] is\n\t * the element we're animating from and [1] is the\n\t * element we're animating to\n\t */\n\tgetAutoAnimatableElements( fromSlide, toSlide ) {\n\n\t\tlet matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs;\n\n\t\tlet pairs = matcher.call( this, fromSlide, toSlide );\n\n\t\tlet reserved = [];\n\n\t\t// Remove duplicate pairs\n\t\treturn pairs.filter( ( pair, index ) => {\n\t\t\tif( reserved.indexOf( pair.to ) === -1 ) {\n\t\t\t\treserved.push( pair.to );\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Identifies matching elements between slides.\n\t *\n\t * You can specify a custom matcher function by using\n\t * the `autoAnimateMatcher` config option.\n\t */\n\tgetAutoAnimatePairs( fromSlide, toSlide ) {\n\n\t\tlet pairs = [];\n\n\t\tconst codeNodes = 'pre';\n\t\tconst textNodes = 'h1, h2, h3, h4, h5, h6, p, li';\n\t\tconst mediaNodes = 'img, video, iframe';\n\n\t\t// Eplicit matches via data-id\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => {\n\t\t\treturn node.nodeName + ':::' + node.getAttribute( 'data-id' );\n\t\t} );\n\n\t\t// Text\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\t// Media\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => {\n\t\t\treturn node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) );\n\t\t} );\n\n\t\t// Code\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\tpairs.forEach( pair => {\n\n\t\t\t// Disable scale transformations on text nodes, we transition\n\t\t\t// each individual text property instead\n\t\t\tif( matches( pair.from, textNodes ) ) {\n\t\t\t\tpair.options = { scale: false };\n\t\t\t}\n\t\t\t// Animate individual lines of code\n\t\t\telse if( matches( pair.from, codeNodes ) ) {\n\n\t\t\t\t// Transition the code block's width and height instead of scaling\n\t\t\t\t// to prevent its content from being squished\n\t\t\t\tpair.options = { scale: false, styles: [ 'width', 'height' ] };\n\n\t\t\t\t// Lines of code\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => {\n\t\t\t\t\treturn node.textContent;\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t\t// Line numbers\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-line[data-line-number]', node => {\n\t\t\t\t\treturn node.getAttribute( 'data-line-number' );\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [ 'width' ],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\treturn pairs;\n\n\t}\n\n\t/**\n\t * Helper method which returns a bounding box based on\n\t * the given elements offset coordinates.\n\t *\n\t * @param {HTMLElement} element\n\t * @return {Object} x, y, width, height\n\t */\n\tgetLocalBoundingBox( element ) {\n\n\t\tconst presentationScale = this.Reveal.getScale();\n\n\t\treturn {\n\t\t\tx: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100,\n\t\t\ty: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100,\n\t\t\twidth: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100,\n\t\t\theight: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100\n\t\t};\n\n\t}\n\n\t/**\n\t * Finds matching elements between two slides.\n\t *\n\t * @param {Array} pairs \tList of pairs to push matches to\n\t * @param {HTMLElement} fromScope Scope within the from element exists\n\t * @param {HTMLElement} toScope Scope within the to element exists\n\t * @param {String} selector CSS selector of the element to match\n\t * @param {Function} serializer A function that accepts an element and returns\n\t * a stringified ID based on its contents\n\t * @param {Object} animationOptions Optional config options for this pair\n\t */\n\tfindAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) {\n\n\t\tlet fromMatches = {};\n\t\tlet toMatches = {};\n\n\t\t[].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\tif( typeof key === 'string' && key.length ) {\n\t\t\t\tfromMatches[key] = fromMatches[key] || [];\n\t\t\t\tfromMatches[key].push( element );\n\t\t\t}\n\t\t} );\n\n\t\t[].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\ttoMatches[key] = toMatches[key] || [];\n\t\t\ttoMatches[key].push( element );\n\n\t\t\tlet fromElement;\n\n\t\t\t// Retrieve the 'from' element\n\t\t\tif( fromMatches[key] ) {\n\t\t\t\tconst pimaryIndex = toMatches[key].length - 1;\n\t\t\t\tconst secondaryIndex = fromMatches[key].length - 1;\n\n\t\t\t\t// If there are multiple identical from elements, retrieve\n\t\t\t\t// the one at the same index as our to-element.\n\t\t\t\tif( fromMatches[key][ pimaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ pimaryIndex ];\n\t\t\t\t\tfromMatches[key][ pimaryIndex ] = null;\n\t\t\t\t}\n\t\t\t\t// If there are no matching from-elements at the same index,\n\t\t\t\t// use the last one.\n\t\t\t\telse if( fromMatches[key][ secondaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ secondaryIndex ];\n\t\t\t\t\tfromMatches[key][ secondaryIndex ] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we've got a matching pair, push it to the list of pairs\n\t\t\tif( fromElement ) {\n\t\t\t\tpairs.push({\n\t\t\t\t\tfrom: fromElement,\n\t\t\t\t\tto: element,\n\t\t\t\t\toptions: animationOptions\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a all elements within the given scope that should\n\t * be considered unmatched in an auto-animate transition. If\n\t * fading of unmatched elements is turned on, these elements\n\t * will fade when going between auto-animate slides.\n\t *\n\t * Note that parents of auto-animate targets are NOT considerd\n\t * unmatched since fading them would break the auto-animation.\n\t *\n\t * @param {HTMLElement} rootElement\n\t * @return {Array}\n\t */\n\tgetUnmatchedAutoAnimateElements( rootElement ) {\n\n\t\treturn [].slice.call( rootElement.children ).reduce( ( result, element ) => {\n\n\t\t\tconst containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' );\n\n\t\t\t// The element is unmatched if\n\t\t\t// - It is not an auto-animate target\n\t\t\t// - It does not contain any auto-animate targets\n\t\t\tif( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) {\n\t\t\t\tresult.push( element );\n\t\t\t}\n\n\t\t\tif( element.querySelector( '[data-auto-animate-target]' ) ) {\n\t\t\t\tresult = result.concat( this.getUnmatchedAutoAnimateElements( element ) );\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}, [] );\n\n\t}\n\n}\n","import { extend, queryAll } from '../utils/util.js'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments are elements within a slide that are\n * revealed/animated incrementally.\n */\nexport default class Fragments {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.fragments === false ) {\n\t\t\tthis.disable();\n\t\t}\n\t\telse if( oldConfig.fragments === false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t}\n\n\t/**\n\t * If fragments are disabled in the deck, they should all be\n\t * visible rather than stepped through.\n\t */\n\tdisable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.add( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Reverse of #disable(). Only called if fragments have\n\t * previously been disabled.\n\t */\n\tenable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.remove( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {{prev: boolean, next: boolean}}\n\t */\n\tavailableRoutes() {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\t\t\tlet fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );\n\t\t\tlet hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t *\n\t * @param {object[]|*} fragments\n\t * @param {boolean} grouped If true the returned array will contain\n\t * nested arrays for all fragments with the same index\n\t * @return {object[]} sorted Sorted array of fragments\n\t */\n\tsort( fragments, grouped = false ) {\n\n\t\tfragments = Array.from( fragments );\n\n\t\tlet ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( fragment => {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tlet index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tlet index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( group => {\n\t\t\tgroup.forEach( fragment => {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn grouped === true ? ordered : sorted;\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tsortAll() {\n\n\t\tthis.Reveal.getHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tlet verticalSlides = queryAll( horizontalSlide, 'section' );\n\t\t\tverticalSlides.forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tthis.sort( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t}, this );\n\n\t\t\tif( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Refreshes the fragments on the current slide so that they\n\t * have the appropriate classes (.visible + .current-fragment).\n\t *\n\t * @param {number} [index] The index of the current fragment\n\t * @param {array} [fragments] Array containing all fragments\n\t * in the current slide\n\t *\n\t * @return {{shown: array, hidden: array}}\n\t */\n\tupdate( index, fragments ) {\n\n\t\tlet changedFragments = {\n\t\t\tshown: [],\n\t\t\thidden: []\n\t\t};\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tfragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\tif( fragments.length ) {\n\n\t\t\t\tlet maxIndex = 0;\n\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\t\t\t\t\tif( currentFragment ) {\n\t\t\t\t\t\tindex = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tArray.from( fragments ).forEach( ( el, i ) => {\n\n\t\t\t\t\tif( el.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\tmaxIndex = Math.max( maxIndex, i );\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.add( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\t\tthis.Reveal.announceStatus( this.Reveal.getStatusText( el ) );\n\n\t\t\t\t\t\t\tel.classList.add( 'current-fragment' );\n\t\t\t\t\t\t\tthis.Reveal.slideContent.startEmbeddedContent( el );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !wasVisible ) {\n\t\t\t\t\t\t\tchangedFragments.shown.push( el )\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'visible',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.remove( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( wasVisible ) {\n\t\t\t\t\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( el );\n\t\t\t\t\t\t\tchangedFragments.hidden.push( el );\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Write the current fragment index to the slide
.\n\t\t\t\t// This can be used by end users to apply styles based on\n\t\t\t\t// the current fragment index.\n\t\t\t\tindex = typeof index === 'number' ? index : -1;\n\t\t\t\tindex = Math.max( Math.min( index, maxIndex ), -1 );\n\t\t\t\tcurrentSlide.setAttribute( 'data-fragment', index );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn changedFragments;\n\n\t}\n\n\t/**\n\t * Formats the fragments on the given slide so that they have\n\t * valid indices. Call this if fragments are changed in the DOM\n\t * after reveal.js has already initialized.\n\t *\n\t * @param {HTMLElement} slide\n\t * @return {Array} a list of the HTML fragments that were synced\n\t */\n\tsync( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\treturn this.sort( slide.querySelectorAll( '.fragment' ) );\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {?number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tgoto( index, offset = 0 ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tlet fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply the offset if there is one\n\t\t\t\tindex += offset;\n\n\t\t\t\tlet changedFragments = this.update( index, fragments );\n\n\t\t\t\tif( changedFragments.hidden.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmenthidden',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.hidden[0],\n\t\t\t\t\t\t\tfragments: changedFragments.hidden\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif( changedFragments.shown.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmentshown',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.shown[0],\n\t\t\t\t\t\t\tfragments: changedFragments.shown\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.Reveal.controls.update();\n\t\t\t\tthis.Reveal.progress.update();\n\n\t\t\t\tif( this.Reveal.getConfig().fragmentInURL ) {\n\t\t\t\t\tthis.Reveal.location.writeURL();\n\t\t\t\t}\n\n\t\t\t\treturn !!( changedFragments.shown.length || changedFragments.hidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tnext() {\n\n\t\treturn this.goto( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tprev() {\n\n\t\treturn this.goto( null, -1 );\n\n\t}\n\n}","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, transformElement } from '../utils/util.js'\n\n/**\n * Handles all logic related to the overview mode\n * (birds-eye view of all slides).\n */\nexport default class Overview {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.active = false;\n\n\t\tthis.onSlideClicked = this.onSlideClicked.bind( this );\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by scaling\n\t * down and arranging all slide elements.\n\t */\n\tactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview && !this.isActive() ) {\n\n\t\t\tthis.active = true;\n\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview' );\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tthis.Reveal.cancelAutoSlide();\n\n\t\t\t// Move the backgrounds element into the slide container to\n\t\t\t// that the same scaling is applied\n\t\t\tthis.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clicking on an overview slide navigates to it\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\tif( !slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tslide.addEventListener( 'click', this.onSlideClicked, true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Calculate slide sizes\n\t\t\tconst margin = 70;\n\t\t\tconst slideSize = this.Reveal.getComputedSlideSize();\n\t\t\tthis.overviewSlideWidth = slideSize.width + margin;\n\t\t\tthis.overviewSlideHeight = slideSize.height + margin;\n\n\t\t\t// Reverse in RTL mode\n\t\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\t\tthis.overviewSlideWidth = -this.overviewSlideWidth;\n\t\t\t}\n\n\t\t\tthis.Reveal.updateSlidesVisibility();\n\n\t\t\tthis.layout();\n\t\t\tthis.update();\n\n\t\t\tthis.Reveal.layout();\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\t// Notify observers of the overview showing\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewshown',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses CSS transforms to position all slides in a grid for\n\t * display inside of the overview mode.\n\t */\n\tlayout() {\n\n\t\t// Layout slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( ( hslide, h ) => {\n\t\t\thslide.setAttribute( 'data-index-h', h );\n\t\t\ttransformElement( hslide, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\tqueryAll( hslide, 'section' ).forEach( ( vslide, v ) => {\n\t\t\t\t\tvslide.setAttribute( 'data-index-h', h );\n\t\t\t\t\tvslide.setAttribute( 'data-index-v', v );\n\n\t\t\t\t\ttransformElement( vslide, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Layout slide backgrounds\n\t\tArray.from( this.Reveal.getBackgroundsElement().childNodes ).forEach( ( hbackground, h ) => {\n\t\t\ttransformElement( hbackground, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tqueryAll( hbackground, '.slide-background' ).forEach( ( vbackground, v ) => {\n\t\t\t\ttransformElement( vbackground, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Moves the overview viewport to the current slides.\n\t * Called each time the current slide changes.\n\t */\n\tupdate() {\n\n\t\tconst vmin = Math.min( window.innerWidth, window.innerHeight );\n\t\tconst scale = Math.max( vmin / 5, 150 ) / vmin;\n\t\tconst indices = this.Reveal.getIndices();\n\n\t\tthis.Reveal.transformSlides( {\n\t\t\toverview: [\n\t\t\t\t'scale('+ scale +')',\n\t\t\t\t'translateX('+ ( -indices.h * this.overviewSlideWidth ) +'px)',\n\t\t\t\t'translateY('+ ( -indices.v * this.overviewSlideHeight ) +'px)'\n\t\t\t].join( ' ' )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tdeactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview ) {\n\n\t\t\tthis.active = false;\n\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Move the background element back out\n\t\t\tthis.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clean up changes made to slides\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', this.onSlideClicked, true );\n\t\t\t} );\n\n\t\t\t// Clean up changes made to backgrounds\n\t\t\tqueryAll( this.Reveal.getBackgroundsElement(), '.slide-background' ).forEach( background => {\n\t\t\t\ttransformElement( background, '' );\n\t\t\t} );\n\n\t\t\tthis.Reveal.transformSlides( { overview: '' } );\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\tthis.Reveal.slide( indices.h, indices.v );\n\t\t\tthis.Reveal.layout();\n\t\t\tthis.Reveal.cueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewhidden',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * overview is open, false means it's closed.\n\t */\n\ttoggle( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? this.activate() : this.deactivate();\n\t\t}\n\t\telse {\n\t\t\tthis.isActive() ? this.deactivate() : this.activate();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tisActive() {\n\n\t\treturn this.active;\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t *\n\t * @param {object} event\n\t */\n\tonSlideClicked( event ) {\n\n\t\tif( this.isActive() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tlet element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tthis.deactivate();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tlet h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tthis.Reveal.slide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n}","import { enterFullscreen } from '../utils/util.js'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default class Keyboard {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// A key:value map of keyboard keys and descriptions of\n\t\t// the actions they trigger\n\t\tthis.shortcuts = {};\n\n\t\t// Holds custom key code mappings\n\t\tthis.bindings = {};\n\n\t\tthis.onDocumentKeyDown = this.onDocumentKeyDown.bind( this );\n\t\tthis.onDocumentKeyPress = this.onDocumentKeyPress.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.navigationMode === 'linear' ) {\n\t\t\tthis.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';\n\t\t\tthis.shortcuts['← , ↑ , P , H , K'] = 'Previous slide';\n\t\t}\n\t\telse {\n\t\t\tthis.shortcuts['N , SPACE'] = 'Next slide';\n\t\t\tthis.shortcuts['P , Shift SPACE'] = 'Previous slide';\n\t\t\tthis.shortcuts['← , H'] = 'Navigate left';\n\t\t\tthis.shortcuts['→ , L'] = 'Navigate right';\n\t\t\tthis.shortcuts['↑ , K'] = 'Navigate up';\n\t\t\tthis.shortcuts['↓ , J'] = 'Navigate down';\n\t\t}\n\n\t\tthis.shortcuts['Alt + ←/↑/→/↓'] = 'Navigate without fragments';\n\t\tthis.shortcuts['Shift + ←/↑/→/↓'] = 'Jump to first/last slide';\n\t\tthis.shortcuts['B , .'] = 'Pause';\n\t\tthis.shortcuts['F'] = 'Fullscreen';\n\t\tthis.shortcuts['ESC, O'] = 'Slide overview';\n\n\t}\n\n\t/**\n\t * Starts listening for keyboard events.\n\t */\n\tbind() {\n\n\t\tdocument.addEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.addEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Stops listening for keyboard events.\n\t */\n\tunbind() {\n\n\t\tdocument.removeEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Add a custom key binding with optional description to\n\t * be added to the help screen.\n\t */\n\taddKeyBinding( binding, callback ) {\n\n\t\tif( typeof binding === 'object' && binding.keyCode ) {\n\t\t\tthis.bindings[binding.keyCode] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: binding.key,\n\t\t\t\tdescription: binding.description\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tthis.bindings[binding] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: null,\n\t\t\t\tdescription: null\n\t\t\t};\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes the specified custom key binding.\n\t */\n\tremoveKeyBinding( keyCode ) {\n\n\t\tdelete this.bindings[keyCode];\n\n\t}\n\n\t/**\n\t * Programmatically triggers a keyboard event\n\t *\n\t * @param {int} keyCode\n\t */\n\ttriggerKey( keyCode ) {\n\n\t\tthis.onDocumentKeyDown( { keyCode } );\n\n\t}\n\n\t/**\n\t * Registers a new shortcut to include in the help overlay\n\t *\n\t * @param {String} key\n\t * @param {String} value\n\t */\n\tregisterKeyboardShortcut( key, value ) {\n\n\t\tthis.shortcuts[key] = value;\n\n\t}\n\n\tgetShortcuts() {\n\n\t\treturn this.shortcuts;\n\n\t}\n\n\tgetBindings() {\n\n\t\treturn this.bindings;\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tthis.Reveal.toggleHelp();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyDown( event ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If keyboardCondition is set, only capture keyboard events\n\t\t// for embedded decks when they are focused\n\t\tif( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Shorthand\n\t\tlet keyCode = event.keyCode;\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tlet autoSlideWasPaused = !this.Reveal.isAutoSliding();\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\t// Is there a focused element that could be using the keyboard?\n\t\tlet activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true;\n\t\tlet activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\t\tlet activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);\n\n\t\t// Whitelist certain modifiers for slide navigation shortcuts\n\t\tlet isNavigationKey = [32, 37, 38, 39, 40, 78, 80].indexOf( event.keyCode ) !== -1;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!( isNavigationKey && event.shiftKey || event.altKey ) &&\n\t\t\t\t\t\t\t\t( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;\n\n\t\t// While paused only allow resume keyboard events; 'b', 'v', '.'\n\t\tlet resumeKeyCodes = [66,86,190,191];\n\t\tlet key;\n\n\t\t// Custom key bindings for togglePause should be able to resume\n\t\tif( typeof config.keyboard === 'object' ) {\n\t\t\tfor( key in config.keyboard ) {\n\t\t\t\tif( config.keyboard[key] === 'togglePause' ) {\n\t\t\t\t\tresumeKeyCodes.push( parseInt( key, 10 ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use linear navigation if we're configured to OR if\n\t\t// the presentation is one-dimensional\n\t\tlet useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides();\n\n\t\tlet triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. Registered custom key bindings\n\t\tif( triggered === false ) {\n\n\t\t\tfor( key in this.bindings ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet action = this.bindings[ key ].callback;\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof action === 'function' ) {\n\t\t\t\t\t\taction.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ action ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\t// P, PAGE UP\n\t\t\tif( keyCode === 80 || keyCode === 33 ) {\n\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// N, PAGE DOWN\n\t\t\telse if( keyCode === 78 || keyCode === 34 ) {\n\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// L, RIGHT\n\t\t\telse if( keyCode === 76 || keyCode === 39 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// K, UP\n\t\t\telse if( keyCode === 75 || keyCode === 38 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// J, DOWN\n\t\t\telse if( keyCode === 74 || keyCode === 40 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, Number.MAX_VALUE );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// HOME\n\t\t\telse if( keyCode === 36 ) {\n\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t}\n\t\t\t// END\n\t\t\telse if( keyCode === 35 ) {\n\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t}\n\t\t\t// SPACE\n\t\t\telse if( keyCode === 32 ) {\n\t\t\t\tif( this.Reveal.overview.isActive() ) {\n\t\t\t\t\tthis.Reveal.overview.deactivate();\n\t\t\t\t}\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS \"BLACK SCREEN\" BUTTON\n\t\t\telse if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) {\n\t\t\t\tthis.Reveal.togglePause();\n\t\t\t}\n\t\t\t// F\n\t\t\telse if( keyCode === 70 ) {\n\t\t\t\tenterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement );\n\t\t\t}\n\t\t\t// A\n\t\t\telse if( keyCode === 65 ) {\n\t\t\t\tif ( config.autoSlideStoppable ) {\n\t\t\t\t\tthis.Reveal.toggleAutoSlide( autoSlideWasPaused );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if( keyCode === 27 || keyCode === 79 ) {\n\t\t\tif( this.Reveal.closeOverlay() === false ) {\n\t\t\t\tthis.Reveal.overview.toggle();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tthis.Reveal.cueAutoSlide();\n\n\t}\n\n}","/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\t// The minimum number of milliseconds that must pass between\n\t// calls to history.replaceState\n\tMAX_REPLACE_STATE_FREQUENCY = 1000\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\tthis.writeURLTimeout = 0;\n\n\t\tthis.replaceStateTimestamp = 0;\n\n\t\tthis.onWindowHashChange = this.onWindowHashChange.bind( this );\n\n\t}\n\n\tbind() {\n\n\t\twindow.addEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\tunbind() {\n\n\t\twindow.removeEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\t/**\n\t * Returns the slide indices for the given hash link.\n\t *\n\t * @param {string} [hash] the hash string that we want to\n\t * find the indices for\n\t *\n\t * @returns slide indices or null\n\t */\n\tgetIndicesFromHash( hash=window.location.hash ) {\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet name = hash.replace( /^#\\/?/, '' );\n\t\tlet bits = name.split( '/' );\n\n\t\t// If the first bit is not fully numeric and there is a name we\n\t\t// can assume that this is a named link\n\t\tif( !/^[0-9]*$/.test( bits[0] ) && name.length ) {\n\t\t\tlet element;\n\n\t\t\tlet f;\n\n\t\t\t// Parse named links with fragments (#/named-link/2)\n\t\t\tif( /\\/[-\\d]+$/g.test( name ) ) {\n\t\t\t\tf = parseInt( name.split( '/' ).pop(), 10 );\n\t\t\t\tf = isNaN(f) ? undefined : f;\n\t\t\t\tname = name.split( '/' ).shift();\n\t\t\t}\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\ttry {\n\t\t\t\telement = document.getElementById( decodeURIComponent( name ) );\n\t\t\t}\n\t\t\tcatch ( error ) { }\n\n\t\t\tif( element ) {\n\t\t\t\treturn { ...this.Reveal.getIndices( element ), f };\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst config = this.Reveal.getConfig();\n\t\t\tlet hashIndexBase = config.hashOneBasedIndex ? 1 : 0;\n\n\t\t\t// Read the index components of the hash\n\t\t\tlet h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tv = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tf;\n\n\t\t\tif( config.fragmentInURL ) {\n\t\t\t\tf = parseInt( bits[2], 10 );\n\t\t\t\tif( isNaN( f ) ) {\n\t\t\t\t\tf = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { h, v, f };\n\t\t}\n\n\t\t// The hash couldn't be parsed or no matching named link was found\n\t\treturn null\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tconst currentIndices = this.Reveal.getIndices();\n\t\tconst newIndices = this.getIndicesFromHash();\n\n\t\tif( newIndices ) {\n\t\t\tif( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) {\n\t\t\t\t\tthis.Reveal.slide( newIndices.h, newIndices.v, newIndices.f );\n\t\t\t}\n\t\t}\n\t\t// If no new indices are available, we're trying to navigate to\n\t\t// a slide hash that does not exist\n\t\telse {\n\t\t\tthis.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\twriteURL( delay ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\t// Make sure there's never more than one timeout running\n\t\tclearTimeout( this.writeURLTimeout );\n\n\t\t// If a delay is specified, timeout this call\n\t\tif( typeof delay === 'number' ) {\n\t\t\tthis.writeURLTimeout = setTimeout( this.writeURL, delay );\n\t\t}\n\t\telse if( currentSlide ) {\n\n\t\t\tlet hash = this.getHash();\n\n\t\t\t// If we're configured to push to history OR the history\n\t\t\t// API is not avaialble.\n\t\t\tif( config.history ) {\n\t\t\t\twindow.location.hash = hash;\n\t\t\t}\n\t\t\t// If we're configured to reflect the current slide in the\n\t\t\t// URL without pushing to history.\n\t\t\telse if( config.hash ) {\n\t\t\t\t// If the hash is empty, don't add it to the URL\n\t\t\t\tif( hash === '/' ) {\n\t\t\t\t\tthis.debouncedReplaceState( window.location.pathname + window.location.search );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.debouncedReplaceState( '#' + hash );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// UPDATE: The below nuking of all hash changes breaks\n\t\t\t// anchors on pages where reveal.js is running. Removed\n\t\t\t// in 4.0. Why was it here in the first place? ¯\\_(ツ)_/¯\n\t\t\t//\n\t\t\t// If history and hash are both disabled, a hash may still\n\t\t\t// be added to the URL by clicking on a href with a hash\n\t\t\t// target. Counter this by always removing the hash.\n\t\t\t// else {\n\t\t\t// \twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t// }\n\n\t\t}\n\n\t}\n\n\treplaceState( url ) {\n\n\t\twindow.history.replaceState( null, null, url );\n\t\tthis.replaceStateTimestamp = Date.now();\n\n\t}\n\n\tdebouncedReplaceState( url ) {\n\n\t\tclearTimeout( this.replaceStateTimeout );\n\n\t\tif( Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ) {\n\t\t\tthis.replaceState( url );\n\t\t}\n\t\telse {\n\t\t\tthis.replaceStateTimeout = setTimeout( () => this.replaceState( url ), this.MAX_REPLACE_STATE_FREQUENCY );\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a hash URL that will resolve to the given slide location.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to link to\n\t */\n\tgetHash( slide ) {\n\n\t\tlet url = '/';\n\n\t\t// Attempt to create a named link based on the slide's ID\n\t\tlet s = slide || this.Reveal.getCurrentSlide();\n\t\tlet id = s ? s.getAttribute( 'id' ) : null;\n\t\tif( id ) {\n\t\t\tid = encodeURIComponent( id );\n\t\t}\n\n\t\tlet index = this.Reveal.getIndices( slide );\n\t\tif( !this.Reveal.getConfig().fragmentInURL ) {\n\t\t\tindex.f = undefined;\n\t\t}\n\n\t\t// If the current slide has an ID, use that as a named link,\n\t\t// but we don't support named links with a fragment index\n\t\tif( typeof id === 'string' && id.length ) {\n\t\t\turl = '/' + id;\n\n\t\t\t// If there is also a fragment, append that at the end\n\t\t\t// of the named link, like: #/named-link/2\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\t\t// Otherwise use the /h/v index\n\t\telse {\n\t\t\tlet hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;\n\t\t\tif( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase;\n\t\t\tif( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase );\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\n\t\treturn url;\n\n\t}\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tonWindowHashChange( event ) {\n\n\t\tthis.readURL();\n\n\t}\n\n}","import { queryAll } from '../utils/util.js'\nimport { isAndroid } from '../utils/device.js'\n\n/**\n * Manages our presentation controls. This includes both\n * the built-in control arrows as well as event monitoring\n * of any elements within the presentation with either of the\n * following helper classes:\n * - .navigate-up\n * - .navigate-right\n * - .navigate-down\n * - .navigate-left\n * - .navigate-next\n * - .navigate-prev\n */\nexport default class Controls {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );\n\t\tthis.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );\n\t\tthis.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );\n\t\tthis.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );\n\t\tthis.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );\n\t\tthis.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tconst rtl = this.Reveal.getConfig().rtl;\n\t\tconst revealElement = this.Reveal.getRevealElement();\n\n\t\tthis.element = document.createElement( 'aside' );\n\t\tthis.element.className = 'controls';\n\t\tthis.element.innerHTML =\n\t\t\t`\n\t\t\t\n\t\t\t\n\t\t\t`;\n\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tthis.controlsLeft = queryAll( revealElement, '.navigate-left' );\n\t\tthis.controlsRight = queryAll( revealElement, '.navigate-right' );\n\t\tthis.controlsUp = queryAll( revealElement, '.navigate-up' );\n\t\tthis.controlsDown = queryAll( revealElement, '.navigate-down' );\n\t\tthis.controlsPrev = queryAll( revealElement, '.navigate-prev' );\n\t\tthis.controlsNext = queryAll( revealElement, '.navigate-next' );\n\n\t\t// The left, right and down arrows in the standard reveal.js controls\n\t\tthis.controlsRightArrow = this.element.querySelector( '.navigate-right' );\n\t\tthis.controlsLeftArrow = this.element.querySelector( '.navigate-left' );\n\t\tthis.controlsDownArrow = this.element.querySelector( '.navigate-down' );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.controls ? 'block' : 'none';\n\n\t\tthis.element.setAttribute( 'data-controls-layout', config.controlsLayout );\n\t\tthis.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );\n\n\t}\n\n\tbind() {\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tlet pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( isAndroid ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\tunbind() {\n\n\t\t[ 'touchstart', 'click' ].forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tupdate() {\n\n\t\tlet routes = this.Reveal.availableRoutes();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\t[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {\n\t\t\tnode.classList.remove( 'enabled', 'fragmented' );\n\n\t\t\t// Set 'disabled' attribute on all directions\n\t\t\tnode.setAttribute( 'disabled', 'disabled' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons\n\t\tif( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide ) {\n\n\t\t\tlet fragmentsRoutes = this.Reveal.fragments.availableRoutes();\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\tif( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( this.Reveal.isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t\tif( this.Reveal.getConfig().controlsTutorial ) {\n\n\t\t\tlet indices = this.Reveal.getIndices();\n\n\t\t\t// Highlight control arrows with an animation to ensure\n\t\t\t// that the viewer knows how to navigate\n\t\t\tif( !this.Reveal.hasNavigatedVertically() && routes.down ) {\n\t\t\t\tthis.controlsDownArrow.classList.add( 'highlight' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.controlsDownArrow.classList.remove( 'highlight' );\n\n\t\t\t\tif( this.Reveal.getConfig().rtl ) {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\n\t\tthis.unbind();\n\t\tthis.element.remove();\n\n\t}\n\n\t/**\n\t * Event handlers for navigation control buttons.\n\t */\n\tonNavigateLeftClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.prev();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.left();\n\t\t}\n\n\t}\n\n\tonNavigateRightClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.next();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.right();\n\t\t}\n\n\t}\n\n\tonNavigateUpClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.up();\n\n\t}\n\n\tonNavigateDownClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.down();\n\n\t}\n\n\tonNavigatePrevClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.prev();\n\n\t}\n\n\tonNavigateNextClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.next();\n\n\t}\n\n\n}","/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onProgressClicked = this.onProgressClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'progress';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\tthis.bar = document.createElement( 'span' );\n\t\tthis.element.appendChild( this.bar );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.progress ? 'block' : 'none';\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.addEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tif ( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.removeEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update progress if enabled\n\t\tif( this.Reveal.getConfig().progress && this.bar ) {\n\n\t\t\tlet scale = this.Reveal.getProgress();\n\n\t\t\t// Don't fill the progress bar if there's only one slide\n\t\t\tif( this.Reveal.getTotalSlides() < 2 ) {\n\t\t\t\tscale = 0;\n\t\t\t}\n\n\t\t\tthis.bar.style.transform = 'scaleX('+ scale +')';\n\n\t\t}\n\n\t}\n\n\tgetMaxWidth() {\n\n\t\treturn this.Reveal.getRevealElement().offsetWidth;\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t *\n\t * @param {object} event\n\t */\n\tonProgressClicked( event ) {\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tlet slides = this.Reveal.getSlides();\n\t\tlet slidesTotal = slides.length;\n\t\tlet slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );\n\n\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\tslideIndex = slidesTotal - slideIndex;\n\t\t}\n\n\t\tlet targetIndices = this.Reveal.getIndices(slides[slideIndex]);\n\t\tthis.Reveal.slide( targetIndices.h, targetIndices.v );\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Throttles mouse wheel navigation\n\t\tthis.lastMouseWheelStep = 0;\n\n\t\t// Is the mouse pointer currently hidden from view\n\t\tthis.cursorHidden = false;\n\n\t\t// Timeout used to determine when the cursor is inactive\n\t\tthis.cursorInactiveTimeout = 0;\n\n\t\tthis.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );\n\t\tthis.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Auto-hide the mouse pointer when its inactive\n\t\tif( config.hideInactiveCursor ) {\n\t\t\tdocument.addEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.addEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\t\telse {\n\t\t\tthis.showCursor();\n\n\t\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Shows the mouse pointer after it has been hidden with\n\t * #hideCursor.\n\t */\n\tshowCursor() {\n\n\t\tif( this.cursorHidden ) {\n\t\t\tthis.cursorHidden = false;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = '';\n\t\t}\n\n\t}\n\n\t/**\n\t * Hides the mouse pointer when it's on top of the .reveal\n\t * container.\n\t */\n\thideCursor() {\n\n\t\tif( this.cursorHidden === false ) {\n\t\t\tthis.cursorHidden = true;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = 'none';\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.showCursor();\n\n\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\n\t}\n\n\t/**\n\t * Called whenever there is mouse input at the document level\n\t * to determine if the cursor is active or not.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentCursorActive( event ) {\n\n\t\tthis.showCursor();\n\n\t\tclearTimeout( this.cursorInactiveTimeout );\n\n\t\tthis.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - this.lastMouseWheelStep > 1000 ) {\n\n\t\t\tthis.lastMouseWheelStep = Date.now();\n\n\t\t\tlet delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\telse if( delta < 0 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}","/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to load\n * @param {function} callback Method to invoke when the script\n * has loaded and executed\n */\nexport const loadScript = ( url, callback ) => {\n\n\tconst script = document.createElement( 'script' );\n\tscript.type = 'text/javascript';\n\tscript.async = false;\n\tscript.defer = false;\n\tscript.src = url;\n\n\tif( typeof callback === 'function' ) {\n\n\t\t// Success callback\n\t\tscript.onload = script.onreadystatechange = event => {\n\t\t\tif( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t// Kill event listeners\n\t\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\t\tcallback();\n\n\t\t\t}\n\t\t};\n\n\t\t// Error callback\n\t\tscript.onerror = err => {\n\n\t\t\t// Kill event listeners\n\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\tcallback( new Error( 'Failed loading script: ' + script.src + '\\n' + err ) );\n\n\t\t};\n\n\t}\n\n\t// Append the script at the end of \n\tconst head = document.querySelector( 'head' );\n\thead.insertBefore( script, head.lastChild );\n\n}","import { loadScript } from '../utils/loader.js'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport default class Plugins {\n\n\tconstructor( reveal ) {\n\n\t\tthis.Reveal = reveal;\n\n\t\t// Flags our current state (idle -> loading -> loaded)\n\t\tthis.state = 'idle';\n\n\t\t// An id:instance map of currently registed plugins\n\t\tthis.registeredPlugins = {};\n\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n\t/**\n\t * Loads reveal.js dependencies, registers and\n\t * initializes plugins.\n\t *\n\t * Plugins are direct references to a reveal.js plugin\n\t * object that we register and initialize after any\n\t * synchronous dependencies have loaded.\n\t *\n\t * Dependencies are defined via the 'dependencies' config\n\t * option and will be loaded prior to starting reveal.js.\n\t * Some dependencies may have an 'async' flag, if so they\n\t * will load after reveal.js has been started up.\n\t */\n\tload( plugins, dependencies ) {\n\n\t\tthis.state = 'loading';\n\n\t\tplugins.forEach( this.registerPlugin.bind( this ) );\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet scripts = [],\n\t\t\t\tscriptsToLoad = 0;\n\n\t\t\tdependencies.forEach( s => {\n\t\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\t\tif( s.async ) {\n\t\t\t\t\t\tthis.asyncDependencies.push( s );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tscripts.push( s );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( scripts.length ) {\n\t\t\t\tscriptsToLoad = scripts.length;\n\n\t\t\t\tconst scriptLoadedCallback = (s) => {\n\t\t\t\t\tif( s && typeof s.callback === 'function' ) s.callback();\n\n\t\t\t\t\tif( --scriptsToLoad === 0 ) {\n\t\t\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Load synchronous scripts\n\t\t\t\tscripts.forEach( s => {\n\t\t\t\t\tif( typeof s.id === 'string' ) {\n\t\t\t\t\t\tthis.registerPlugin( s );\n\t\t\t\t\t\tscriptLoadedCallback( s );\n\t\t\t\t\t}\n\t\t\t\t\telse if( typeof s.src === 'string' ) {\n\t\t\t\t\t\tloadScript( s.src, () => scriptLoadedCallback(s) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn( 'Unrecognized plugin format', s );\n\t\t\t\t\t\tscriptLoadedCallback();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Initializes our plugins and waits for them to be ready\n\t * before proceeding.\n\t */\n\tinitPlugins() {\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet pluginValues = Object.values( this.registeredPlugins );\n\t\t\tlet pluginsToInitialize = pluginValues.length;\n\n\t\t\t// If there are no plugins, skip this step\n\t\t\tif( pluginsToInitialize === 0 ) {\n\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t}\n\t\t\t// ... otherwise initialize plugins\n\t\t\telse {\n\n\t\t\t\tlet initNextPlugin;\n\n\t\t\t\tlet afterPlugInitialized = () => {\n\t\t\t\t\tif( --pluginsToInitialize === 0 ) {\n\t\t\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinitNextPlugin();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet i = 0;\n\n\t\t\t\t// Initialize plugins serially\n\t\t\t\tinitNextPlugin = () => {\n\n\t\t\t\t\tlet plugin = pluginValues[i++];\n\n\t\t\t\t\t// If the plugin has an 'init' method, invoke it\n\t\t\t\t\tif( typeof plugin.init === 'function' ) {\n\t\t\t\t\t\tlet promise = plugin.init( this.Reveal );\n\n\t\t\t\t\t\t// If the plugin returned a Promise, wait for it\n\t\t\t\t\t\tif( promise && typeof promise.then === 'function' ) {\n\t\t\t\t\t\t\tpromise.then( afterPlugInitialized );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tinitNextPlugin();\n\n\t\t\t}\n\n\t\t} )\n\n\t}\n\n\t/**\n\t * Loads all async reveal.js dependencies.\n\t */\n\tloadAsync() {\n\n\t\tthis.state = 'loaded';\n\n\t\tif( this.asyncDependencies.length ) {\n\t\t\tthis.asyncDependencies.forEach( s => {\n\t\t\t\tloadScript( s.src, s.callback );\n\t\t\t} );\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n\t/**\n\t * Registers a new plugin with this reveal.js instance.\n\t *\n\t * reveal.js waits for all regisered plugins to initialize\n\t * before considering itself ready, as long as the plugin\n\t * is registered before calling `Reveal.initialize()`.\n\t */\n\tregisterPlugin( plugin ) {\n\n\t\t// Backwards compatibility to make reveal.js ~3.9.0\n\t\t// plugins work with reveal.js 4.0.0\n\t\tif( arguments.length === 2 && typeof arguments[0] === 'string' ) {\n\t\t\tplugin = arguments[1];\n\t\t\tplugin.id = arguments[0];\n\t\t}\n\t\t// Plugin can optionally be a function which we call\n\t\t// to create an instance of the plugin\n\t\telse if( typeof plugin === 'function' ) {\n\t\t\tplugin = plugin();\n\t\t}\n\n\t\tlet id = plugin.id;\n\n\t\tif( typeof id !== 'string' ) {\n\t\t\tconsole.warn( 'Unrecognized plugin format; can\\'t find plugin.id', plugin );\n\t\t}\n\t\telse if( this.registeredPlugins[id] === undefined ) {\n\t\t\tthis.registeredPlugins[id] = plugin;\n\n\t\t\t// If a plugin is registered after reveal.js is loaded,\n\t\t\t// initialize it right away\n\t\t\tif( this.state === 'loaded' && typeof plugin.init === 'function' ) {\n\t\t\t\tplugin.init( this.Reveal );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.warn( 'reveal.js: \"'+ id +'\" plugin has already been registered' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if a specific plugin has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\thasPlugin( id ) {\n\n\t\treturn !!this.registeredPlugins[id];\n\n\t}\n\n\t/**\n\t * Returns the specific plugin instance, if a plugin\n\t * with the given ID has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\tgetPlugin( id ) {\n\n\t\treturn this.registeredPlugins[id];\n\n\t}\n\n\tgetRegisteredPlugins() {\n\n\t\treturn this.registeredPlugins;\n\n\t}\n\n\tdestroy() {\n\n\t\tObject.values( this.registeredPlugins ).forEach( plugin => {\n\t\t\tif( typeof plugin.destroy === 'function' ) {\n\t\t\t\tplugin.destroy();\n\t\t\t}\n\t\t} );\n\n\t\tthis.registeredPlugins = {};\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n}\n","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { queryAll, createStyleSheet } from '../utils/util.js'\n\n/**\n * Setups up our presentation for printing/exporting to PDF.\n */\nexport default class Print {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tasync setupPDF() {\n\n\t\tconst config = this.Reveal.getConfig();\n\t\tconst slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR )\n\n\t\t// Compute slide numbers now, before we start duplicating slides\n\t\tconst doingSlideNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );\n\n\t\tconst slideSize = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tconst pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tconst slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\t// Let the browser know what page size we want to print\n\t\tcreateStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0px;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tcreateStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.documentElement.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\tconst viewportElement = document.querySelector( '.reveal-viewport' );\n\t\tlet presentationBackground;\n\t\tif( viewportElement ) {\n\t\t\tconst viewportStyles = window.getComputedStyle( viewportElement );\n\t\t\tif( viewportStyles && viewportStyles.background ) {\n\t\t\t\tpresentationBackground = viewportStyles.background;\n\t\t\t}\n\t\t}\n\n\t\t// Make sure stretch elements fit on slide\n\t\tawait new Promise( requestAnimationFrame );\n\t\tthis.Reveal.layoutSlideContents( slideWidth, slideHeight );\n\n\t\t// Batch scrollHeight access to prevent layout thrashing\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tconst slideScrollHeights = slides.map( slide => slide.scrollHeight );\n\n\t\tconst pages = [];\n\t\tconst pageContainer = slides[0].parentNode;\n\n\t\t// Slide and slide background layout\n\t\tslides.forEach( function( slide, index ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tlet left = ( pageWidth - slideWidth ) / 2;\n\t\t\t\tlet top = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tconst contentHeight = slideScrollHeights[ index ];\n\t\t\t\tlet numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Adhere to configured pages per slide limit\n\t\t\t\tnumberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Wrap the slide in a page element and hide its overflow\n\t\t\t\t// so that no page ever flows onto another\n\t\t\t\tconst page = document.createElement( 'div' );\n\t\t\t\tpages.push( page );\n\n\t\t\t\tpage.className = 'pdf-page';\n\t\t\t\tpage.style.height = ( ( pageHeight + config.pdfPageHeightOffset ) * numberOfPages ) + 'px';\n\n\t\t\t\t// Copy the presentation-wide background to each individual\n\t\t\t\t// page when printing\n\t\t\t\tif( presentationBackground ) {\n\t\t\t\t\tpage.style.background = presentationBackground;\n\t\t\t\t}\n\n\t\t\t\tpage.appendChild( slide );\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t\t\t// the printed slide size\n\t\t\t\tthis.Reveal.slideContent.layout( slide )\n\n\t\t\t\tif( slide.slideBackgroundElement ) {\n\t\t\t\t\tpage.insertBefore( slide.slideBackgroundElement, slide );\n\t\t\t\t}\n\n\t\t\t\t// Inject notes if `showNotes` is enabled\n\t\t\t\tif( config.showNotes ) {\n\n\t\t\t\t\t// Are there notes for this slide?\n\t\t\t\t\tconst notes = this.Reveal.getSlideNotes( slide );\n\t\t\t\t\tif( notes ) {\n\n\t\t\t\t\t\tconst notesSpacing = 8;\n\t\t\t\t\t\tconst notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';\n\t\t\t\t\t\tconst notesElement = document.createElement( 'div' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes-pdf' );\n\t\t\t\t\t\tnotesElement.setAttribute( 'data-layout', notesLayout );\n\t\t\t\t\t\tnotesElement.innerHTML = notes;\n\n\t\t\t\t\t\tif( notesLayout === 'separate-page' ) {\n\t\t\t\t\t\t\tpages.push( notesElement );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesElement.style.left = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.bottom = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px';\n\t\t\t\t\t\t\tpage.appendChild( notesElement );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Inject slide numbers if `slideNumbers` are enabled\n\t\t\t\tif( doingSlideNumbers ) {\n\t\t\t\t\tconst slideNumber = index + 1;\n\t\t\t\t\tconst numberElement = document.createElement( 'div' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number-pdf' );\n\t\t\t\t\tnumberElement.innerHTML = slideNumber;\n\t\t\t\t\tpage.appendChild( numberElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy page and show fragments one after another\n\t\t\t\tif( config.pdfSeparateFragments ) {\n\n\t\t\t\t\t// Each fragment 'group' is an array containing one or more\n\t\t\t\t\t// fragments. Multiple fragments that appear at the same time\n\t\t\t\t\t// are part of the same group.\n\t\t\t\t\tconst fragmentGroups = this.Reveal.fragments.sort( page.querySelectorAll( '.fragment' ), true );\n\n\t\t\t\t\tlet previousFragmentStep;\n\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\n\t\t\t\t\t\t// Remove 'current-fragment' from the previous group\n\t\t\t\t\t\tif( previousFragmentStep ) {\n\t\t\t\t\t\t\tpreviousFragmentStep.forEach( function( fragment ) {\n\t\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show the fragments for the current index\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible', 'current-fragment' );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Create a separate page for the current fragment state\n\t\t\t\t\t\tconst clonedPage = page.cloneNode( true );\n\t\t\t\t\t\tpages.push( clonedPage );\n\n\t\t\t\t\t\tpreviousFragmentStep = fragments;\n\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Reset the first/original page so that all fragments are hidden\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\t// Show all fragments\n\t\t\t\telse {\n\t\t\t\t\tqueryAll( page, '.fragment:not(.fade-out)' ).forEach( function( fragment ) {\n\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tpages.forEach( page => pageContainer.appendChild( page ) );\n\n\t\t// Notify subscribers that the PDF layout is good to go\n\t\tthis.Reveal.dispatchEvent({ type: 'pdf-ready' });\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tisPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n}\n","import { isAndroid } from '../utils/device.js'\nimport { matches } from '../utils/util.js'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n * Controls all touch interactions and navigations for\n * a presentation.\n */\nexport default class Touch {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Holds information about the currently ongoing touch interaction\n\t\tthis.touchStartX = 0;\n\t\tthis.touchStartY = 0;\n\t\tthis.touchStartCount = 0;\n\t\tthis.touchCaptured = false;\n\n\t\tthis.onPointerDown = this.onPointerDown.bind( this );\n\t\tthis.onPointerMove = this.onPointerMove.bind( this );\n\t\tthis.onPointerUp = this.onPointerUp.bind( this );\n\t\tthis.onTouchStart = this.onTouchStart.bind( this );\n\t\tthis.onTouchMove = this.onTouchMove.bind( this );\n\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\n\n\t}\n\n\t/**\n\t *\n\t */\n\tbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\tif( 'onpointerdown' in window ) {\n\t\t\t// Use W3C pointer events\n\t\t\trevealElement.addEventListener( 'pointerdown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'pointermove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'pointerup', this.onPointerUp, false );\n\t\t}\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\trevealElement.addEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'MSPointerUp', this.onPointerUp, false );\n\t\t}\n\t\telse {\n\t\t\t// Fall back to touch events\n\t\t\trevealElement.addEventListener( 'touchstart', this.onTouchStart, false );\n\t\t\trevealElement.addEventListener( 'touchmove', this.onTouchMove, false );\n\t\t\trevealElement.addEventListener( 'touchend', this.onTouchEnd, false );\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t */\n\tunbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\trevealElement.removeEventListener( 'pointerdown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'pointermove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'pointerup', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'MSPointerUp', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'touchstart', this.onTouchStart, false );\n\t\trevealElement.removeEventListener( 'touchmove', this.onTouchMove, false );\n\t\trevealElement.removeEventListener( 'touchend', this.onTouchEnd, false );\n\n\t}\n\n\t/**\n\t * Checks if the target element prevents the triggering of\n\t * swipe navigation.\n\t */\n\tisSwipePrevented( target ) {\n\n\t\t// Prevent accidental swipes when scrubbing timelines\n\t\tif( matches( target, 'video, audio' ) ) return true;\n\n\t\twhile( target && typeof target.hasAttribute === 'function' ) {\n\t\t\tif( target.hasAttribute( 'data-prevent-swipe' ) ) return true;\n\t\t\ttarget = target.parentNode;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchStart( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tthis.touchStartX = event.touches[0].clientX;\n\t\tthis.touchStartY = event.touches[0].clientY;\n\t\tthis.touchStartCount = event.touches.length;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchMove( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// Each touch should only trigger one action\n\t\tif( !this.touchCaptured ) {\n\t\t\tthis.Reveal.onUserInput( event );\n\n\t\t\tlet currentX = event.touches[0].clientX;\n\t\t\tlet currentY = event.touches[0].clientY;\n\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\tif( event.touches.length === 1 && this.touchStartCount !== 2 ) {\n\n\t\t\t\tlet availableRoutes = this.Reveal.availableRoutes({ includeFragments: true });\n\n\t\t\t\tlet deltaX = currentX - this.touchStartX,\n\t\t\t\t\tdeltaY = currentY - this.touchStartY;\n\n\t\t\t\tif( deltaX > SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.left();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.right();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY > SWIPE_THRESHOLD && availableRoutes.up ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -SWIPE_THRESHOLD && availableRoutes.down ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( this.touchCaptured || this.Reveal.isVerticalSlide() ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( isAndroid ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchEnd( event ) {\n\n\t\tthis.touchCaptured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchEnd( event );\n\t\t}\n\n\t}\n\n}","import { closest } from '../utils/util.js'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only capture keyboard from the presentation\n * a user is currently interacting with in a page where\n * multiple presentations are embedded.\n */\n\nconst STATE_FOCUS = 'focus';\nconst STATE_BLUR = 'blur';\n\nexport default class Focus {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onRevealPointerDown = this.onRevealPointerDown.bind( this );\n\t\tthis.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.embedded ) {\n\t\t\tthis.blur();\n\t\t}\n\t\telse {\n\t\t\tthis.focus();\n\t\t\tthis.unbind();\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().embedded ) {\n\t\t\tthis.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tthis.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\n\t}\n\n\tfocus() {\n\n\t\tif( this.state !== STATE_FOCUS ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'focused' );\n\t\t\tdocument.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_FOCUS;\n\n\t}\n\n\tblur() {\n\n\t\tif( this.state !== STATE_BLUR ) {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\t\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_BLUR;\n\n\t}\n\n\tisFocused() {\n\n\t\treturn this.state === STATE_FOCUS;\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\n\t}\n\n\tonRevealPointerDown( event ) {\n\n\t\tthis.focus();\n\n\t}\n\n\tonDocumentPointerDown( event ) {\n\n\t\tlet revealElement = closest( event.target, '.reveal' );\n\t\tif( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {\n\t\t\tthis.blur();\n\t\t}\n\n\t}\n\n}","/**\n * Handles the showing and \n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'speaker-notes';\n\t\tthis.element.setAttribute( 'data-prevent-swipe', '' );\n\t\tthis.element.setAttribute( 'tabindex', '0' );\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.showNotes ) {\n\t\t\tthis.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pick up notes from the current slide and display them\n\t * to the viewer.\n\t *\n\t * @see {@link config.showNotes}\n\t */\n\tupdate() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() ) {\n\n\t\t\tthis.element.innerHTML = this.getSlideNotes() || 'No notes on this slide.';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the visibility of the speaker notes sidebar that\n\t * is used to share annotated slides. The notes sidebar is\n\t * only visible if showNotes is true and there are notes on\n\t * one or more slides in the deck.\n\t */\n\tupdateVisibility() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'show-notes' );\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'show-notes' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if there are speaker notes for ANY slide in the\n\t * presentation.\n\t */\n\thasNotes() {\n\n\t\treturn this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t *\n\t * @return {boolean}\n\t */\n\tisSpeakerNotesWindow() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Retrieves the speaker notes from a slide. Notes can be\n\t * defined in two ways:\n\t * 1. As a data-notes attribute on the slide
\n\t * 2. As an

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≠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%0DYHnBEZ zub*h_LCzo+AjVoPm8X#}16_4CiY-Em)1ZPu1JkS`b5;emR&kdhK_Rr8Z>-mJ*|X;l zEk$7W0&w5YnI(2YM0CgR?fN)!1h~Eq_MdzXG6`6LG_A$oOKo)$+66M1lK5BOgyc2~ z$MOnpCJE^F7-_Hbn0$rNl&LDWnM zolS8Vg?inNClZiiL6a~6ko26H$k{dO^?JZRnMfUG&5%ruhX}}2toMg@KaDps$xnH6 zEzY6y^a9s@H808){0$m?M)vAzuZCL5``$?tW;3@l_I1xHec7wuI7Hn^xH;i0((EIw z(jF=+!hde!>gqE!RO7XYScG{goc-*WvL98wSE_#~emP?j6gX#5`OaAk zs>~G;a$y32%O!>HtK98A>A$?#sDaKbhs)QK!@Xl=w5-C5<^=+=M1@iX9x2XC=&a;j zbmLOeNS|^_RhINJIkwAlk{>xL*XhZWPr7A!d>Ot+E!y$n*MomO9^za;FiTQC+TtI& z_xo{o4a9t=_{DF^Y@u)KW%YlsABZpi4(tXezf#ow!D*b#vSTR{!?Lhy)gJjt>z|(ipPeu$o05MDqzs2C4_r>1QUhhBfb6p?HT+fO_FDOEFds4wOSQn0??|`^(t&UUc zsK-II1`eEBZ2n1^{~N>oU_PC)=6}gkI5$2=u&v(s4`e#|hkQ5cJQZ zhmGsUpH>A}eppgylK;_;A6K%Hr>wB?k2j2c<5gfR8|lR|B$hE-!l#qBryCW1sosBN z0N`+&G^p>$v!=>OE+^Svho~pJbD3XaSapJ}5a+~r5(El#-C#BJ7y88gS1AG3^fBMj zrQ>zA_oC?CX|3=T5;9yVce9Pe7aGckiF$JHr-G;%j|pcfw36G^0&r6@yWmMN(tGc$ zMZc%C!tf(n3Mv0-Df;b?Y4QDT?Lan?TFTtCufS`STdLP-q3SFQWis#|sZV-wC5T&!jEFZ!Gl9PFQ>W@w!I?_ zUIUc|zt2vg(wjMgQu)vTLmDfLNpiAfZro&Qg)dF?OV{2NAj;^c`F&mKQ~^|lCj!na7aEJ$QAHOccKozf8idogzIAF-uuC8a*hEN;uClRGHrH`M?a7i&W2O$85l4v89M% zs`_W^T^F@)A=98wiEHZT>3n1>)+;{Mqt7qoQQD64H7KHI$IkmS_OQUW(yD}+hj+6Q z?gEK-&}*n}wWk}Ao^hUQ^fGjR6bt^P=-u781@eAwjnjiufZfVv|H-=xEx31rm07*p^phSsAK9;ch(L|`U~ zcz4M$kKMq9UVM;;U*9`V(2BavU|uRXt1QWZXdbOwJ=hzRC=I(%Nxc9tx5Y@pc7i0K z(ttza``Y>>VZX>ux%N%{8ds zWD5hjLA~ve=e#uI@NR4Ul-Rkna_u3eO`L>*bdTvX4N_Xj;|&|8PIOnIf85zo_?FNn zqM>23-5}jFXaV!B!Kz8Uy3(H1>sB_O#DMRb#lKRD-|=4Rn(d>*@OH)Kn3rP7?jTd&d9==1{RM%{56_!nVxwcehl(q4%}Fan{Yc#K5-0 zuCe6I`(49fyAJ%KAd%Ce>s?0f9XN*%GBHMVi_T(Hne}-|flrJCIVtMb&CZ9_eTw-y zn|x#Fc~kkPAjszaErQ0M+8YaRca~Qsu--hD!9!K{q>AfGS~QYre+9;yO)M5YZ~hD6Nm=c9mOxT_vZoX^gwAs=TO3r04;?Vg`9^vc^30l*mI_Ib z2g5^nDCQO%R}DLGO@gqw2yw=pn@cW)(XIz7Ij>J}4fD&`;r#&Sw$#O<)N>tazWLJo zvJ*tSX*LV_D%)TOTxZ%j>*gza}aex=u;=E;b$G@x)wPWg6;>^*U-;yR(>A z>|?R(lkVSyo^0e!_nwqd>orwxdocOO>iUl|ip(^<0pU4sO2L6`%{ycgJvs2+&5lrqF||DBbRdx^A{seC(n; z&{pzMYT^bAx^4@ZLATssi**<{O×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 jo{-=D*}7#j031|UZXZJrMJ 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 literal 0 HcmV?d00001 diff --git a/bank_conflict_slides_files/figure-revealjs/cell-6-output-1.png b/bank_conflict_slides_files/figure-revealjs/cell-6-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa75e2ed56a8d7d5817f36fba966399af09a5d0 GIT binary patch literal 48547 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 literal 0 HcmV?d00001 diff --git a/bank_conflict_slides_files/figure-revealjs/cell-7-output-1.png b/bank_conflict_slides_files/figure-revealjs/cell-7-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b5571e79f0e5d9b795a43719633cb22ffd661890 GIT binary patch literal 37986 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