summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--articles/heroes.mdwn1
-rw-r--r--articles/virus.mdwn4
-rw-r--r--it/apollo.jpgbin0 -> 70187 bytes
-rw-r--r--it/boat.jpgbin0 -> 158459 bytes
-rw-r--r--it/booth.jpgbin0 -> 45911 bytes
-rw-r--r--it/draft/index.md582
-rw-r--r--it/floppy.jpgbin0 -> 89057 bytes
-rw-r--r--it/holbaek/index.md678
-rw-r--r--it/is.jpgbin0 -> 142192 bytes
-rw-r--r--it/net.jpgbin0 -> 430892 bytes
-rw-r--r--it/oroe/index.md487
-rw-r--r--it/testrup/index.md588
-rw-r--r--it/venn.svg185
-rw-r--r--me/index.ttl288
-rw-r--r--msg.da.po56
-rw-r--r--msg.mdwn5
-rw-r--r--revealjs/Makefile21
-rw-r--r--revealjs/dist/reset.css30
-rw-r--r--revealjs/dist/reveal.css8
-rw-r--r--revealjs/dist/reveal.js9
-rw-r--r--revealjs/dist/theme/black.css357
-rw-r--r--revealjs/plugin/notes/notes.js1
-rw-r--r--revealjs/plugin/search/search.js7
-rw-r--r--revealjs/plugin/zoom/zoom.js11
-rw-r--r--vuc/ep/begrebet.md11
-rw-r--r--vuc/ep/data.md48
-rw-r--r--vuc/ep/disposition.md55
-rw-r--r--vuc/ep/emne.md55
-rw-r--r--vuc/ep/flow.dot37
-rw-r--r--vuc/ep/flow.pdfbin0 -> 44990 bytes
-rw-r--r--vuc/ep/guarana.md234
-rw-r--r--vuc/ep/ref.bib155
32 files changed, 3714 insertions, 199 deletions
diff --git a/articles/heroes.mdwn b/articles/heroes.mdwn
new file mode 100644
index 0000000..17c6a17
--- /dev/null
+++ b/articles/heroes.mdwn
@@ -0,0 +1 @@
+/annex/objects/SHA256E-s3414--70cbe1cc21446063891af45dc0773ec78c7f5fad842209d81d774957b334462c.mdwn
diff --git a/articles/virus.mdwn b/articles/virus.mdwn
index 686f634..43f29d4 100644
--- a/articles/virus.mdwn
+++ b/articles/virus.mdwn
@@ -1,4 +1,4 @@
-#Virus are in attachments
+# Virus are in attachments
[[!meta title="Virus are in attachments"]]
[[!meta date="Thu, Dec 23 13:41:12 UTC 2004"]]
@@ -18,7 +18,7 @@ himself personally inviting you to a contest about a Nokia phone - you
only need to "click here". Or yourself(?!?) sending you some gibberish
and attaching a compressed file...
-#Virus are in attachments!
+# Virus are in attachments!
So read calmly your emails. Just avoid opening ATTACHMENTS that you do
not know about. Are you in doubt, then ask the sender for an explanation
diff --git a/it/apollo.jpg b/it/apollo.jpg
new file mode 100644
index 0000000..b455375
--- /dev/null
+++ b/it/apollo.jpg
Binary files differ
diff --git a/it/boat.jpg b/it/boat.jpg
new file mode 100644
index 0000000..2322210
--- /dev/null
+++ b/it/boat.jpg
Binary files differ
diff --git a/it/booth.jpg b/it/booth.jpg
new file mode 100644
index 0000000..62a58c8
--- /dev/null
+++ b/it/booth.jpg
Binary files differ
diff --git a/it/draft/index.md b/it/draft/index.md
new file mode 100644
index 0000000..79e210f
--- /dev/null
+++ b/it/draft/index.md
@@ -0,0 +1,582 @@
+---
+usage: make -f ../../revealjs/Makefile
+title: Sustainable ICT
+subtitle: English draft
+author: Jonas Smedegaard
+date: 2023-02-21
+mainfont: Alegreya Sans
+lang: en-US
+defaultTiming: 120
+---
+# Overview
+
+Sustainability
+
+Concrete efforts
+
+Sustainable ICT
+
+## Jonas Smedegaard { timing=60 }
+
+Almost a student
+Macværk → IT-guide dr. Jones
+Debian developer
+
+System critic
+
+:::notes
+Study: tried to finish for 5 years
+Do it mac-like, not crappy ("Makværk" means crap work in danish) → hard to sell
+Indiana Jones → misunderstood in Asia
+Debian: linux system, voluntary, used everywhere
+will avoid irrelevant criticism here
+:::
+
+# Sustainability
+
+![](../is.jpg)
+
+:::notes
+The polar ice is melting
+→ Reduce fossil fuel
+→ public/shared transport
+:::
+
+## Sustainable?
+
+To endure a sustained pressure?
+*or*
+To pressure sustainably?
+
+:::notes
+[Endurance]: sand → mortar → concrete
+:::
+
+## Dimensioner
+
+![](../venn.svg)
+
+:::notes
+Economy: self sufficient (*not* finance)
+:::
+
+## Historie
+
+* 1972: UN Environment Programme *+ Jonas*
+* 1987: Brundtland report
+* 1989: WWW *+ Jonas' first ICT purchase*
+* 1992: UN climate convention
+* 1997: Kyoto agreement
+* 2015: UN Sustainable Development Goals
+* 2018: Greta Thunberg strikes
+
+:::notes
+[Programme]: ethical principles
+[Brundtland]: ecology and growth are linked
+Convention: 3 dimensions
+[Kyoto]: agreement on carbon reduction
+Goals: [#12] covers sustainable ICT
+
+[Programme]: <http://www.un-documents.net/unchedec.htm>
+
+[Brundtland]: <https://en.wikipedia.org/wiki/Our_Common_Future>
+
+[Convention]: <https://en.wikipedia.org/wiki/United_Nations_Framework_Convention_on_Climate_Change>
+
+[Kyoto]: <https://en.wikipedia.org/wiki/Kyoto_Protocol>
+ "Kyoto protocol: international agreement on greenhouse gas reduction"
+
+[#12]: <https://en.wikipedia.org/wiki/List_of_Sustainable_Development_Goal_targets_and_indicators#Goal_12:_Ensure_sustainable_consumption_and_production_patterns>
+ "Ensure sustainable consumption and production patterns"
+:::
+
+# Efforts { timing=60 }
+
+Machines
+
+Information
+
+Traffic
+
+# Machines
+
+![](../booth.jpg)
+
+:::notes
+Computers in all sizes
+
+How many computers in the picture?
+1/2 machine: 4 panels total
+1 [human computer]: [Kathleen Booth]
+
+[human computer]: <https://en.wikipedia.org/wiki/Computer_(occupation)>
+ "computer: one who computes"
+
+[Kathleen Booth]: <https://en.wikipedia.org/wiki/Kathleen_Booth>
+ "Kathleen Booth - inventor of computer language Assemply"
+:::
+
+## Machine waste
+
+Busy fan
+
+Excess stuff
+(GPS, wifi, camera, battery...)
+
+Too many
+or beyond control
+
+:::notes
+A laptop also charges battery when always plugged in
+
+Too many: Provider wifi + own + neighbors
+Control: Provider wifi + smartphone is locked
+→ Dangerous when provider loose interest
+:::
+
+## Healthy machines
+
+Boring and practical standard models
+→ Bulky boxes
+→ Replaceable battery
+
+(Re)usable with Free software
+→ avoid Apple and Nvidia
+
+:::notes
+Boxes: Excess space, not computing power
+
+Car battery does not fit smartphones
+
+Reuse: Provider never care about reuse
+:::
+
+# Information { timing=60 }
+
+![](../floppy.jpg)
+
+:::notes
+Info: Programs + documents
+
+The bible fits (maybe) one 3½" floppy
+:::
+
+## Programmer
+
+![](../apollo.jpg)
+
+:::notes
+Margaret Hamilton, NASA team leader
+
+All code on board "the eagle" at moon landing
+[3.2 MB code] in the language Assembly
+→ Assembly was developed by Kathleen Booth
+
+[3.2 MB code]: <https://github.com/chrislgarry/Apollo-11>
+ "Source code archive for landing module of Apollo programme"
+:::
+
+## Document waste
+
+Smileys in sms :smile:
+
+**Fat** letters in email
+
+Pictures consume more than 1000 words
+
+Discretion
+Surveillance
+
+:::notes
+Smiley or emoji: x2
+Email with styling: x3 (or up to x20)
+
+Discretion/surveillance: blocks reuse
+→ a newspaper in a bank box / with commentator
+:::
+
+## Healthy information
+
+Use local and exact programs
+Gem dokumenter i åbne og præcise formater
+
+:::notes
+Email program ← webmail
+Office programs ← Google docs
+[Plain text] ← [tekst w/ styling] ← Layout ← Movies
+[Markdown] ← [ODF] ← [PDF] ← [AV1]
+
+[Plain text]: <https://useplaintext.email/>
+ "Guide to simple text email"
+
+[tekst m/ stil]: <https://opensource.com/article/17/6/3-alternatives-libreoffice-writer>
+ "Review of lightweight text editing programs"
+
+[Markdown]: <https://markdown.dk/>
+ "Portal about the markup language Markdown"
+
+[ODF]: <https://da.wikipedia.org/wiki/OpenDocument>
+ "Wikipedia article about the office data format OpenDocument"
+
+[PDF]: <https://pdfreaders.org/>
+ "List of Free PDF readers"
+
+[AV1]: <https://en.wikipedia.org/wiki/AV1>
+ "Wikipedia article about the movie format AV1"
+:::
+
+# Trafik
+
+![](../net.jpg)
+
+:::notes
+[Opte Project]: <30% of [Internet in 2005]
+16% in the World, 68% in the USA, 82% in Danmark
+Line length is response time
+[Colors]: blue=North Amerika, yellow=Latin Amerika, green=Europe+Africa+Middle East
+
+[Opte Project]: <https://en.wikipedia.org/wiki/Opte_Project>
+ "Opte Project: Visualizations of Internet over time"
+
+[Internet in 2005]: <https://ourworldindata.org/internet>
+ "Online users over tid"
+
+[Colors]: <https://www.opte.org/the-internet#block-60199ed2a5dea45f0e12f7cd>
+ "Opte visualization for 2003 (w/ color codes at bottom of page)"
+:::
+
+## Traffic waste
+
+Too much
+
+Too long distance
+
+Again and again
+
+## Healthy traffic
+
+Use fysical cables
+Buy no-bullshit internet access
+...and share with your neighbor
+
+Say **no** to cookies
+Save documents locally
+Share documents non-cloudy on in ewn "cloud"
+
+:::notes
+Non-cloudy: [git-annex], [Seafile]
+Own [cloud]: [Freedombox]
+Share internet: [OpenNDS], [LibreMesh]
+no-[bullshit] internet access: [Kviknet], [Unotel]
+
+[git-annex]: <https://git-annex.branchable.com/assistant/>
+ "git-annex: Tool to maintain data duplicates in sync using git"
+
+[Seafile]: <https://www.seafile.com/>
+ "Seafile: Tool to maintain data duplicates in sync"
+
+[cloud]: <https://pluralistic.net/2022/09/28/other-peoples-computers/#clouded-over>
+ "There is no cloud, there is only other people's computers."
+
+[Freedombox]: <https://www.freedombox.org/>
+
+[OpenNDS]: <https://opennds.readthedocs.io/en/stable/overview.html#what-is-opennds>
+ "OpenNDS: Free network service for providing access to internet"
+
+[LibreMesh]: <https://libremesh.org/>
+ "LibreMesh: Free network system for setting up a wireless mesh netwærk"
+
+[bullshit]: <https://en.wikipedia.org/wiki/On_Bullshit>
+ "bullshit: speech intended to persuade without regard for truth"
+
+[Kviknet]: <https://kviknet.dk/>
+ "Kviknet - internet provider"
+
+[Unotel]: <https://unotel.dk/>
+ "Unotel - cellphone provider"
+:::
+
+## Social media
+
+[arrgh...]
+
+:::notes
+What is healthiest - MacDonalds or Burger King?
+:::
+
+## Healthy social media
+
+Public statements: Mastodon
+
+Discussion forums: Matrix
+
+:::notes
+Mastodon: Try first as web service
+
+Matrix: Try first the client [Element]
+
+[Element]: <https://element.io/>
+ "Element - web- og true client for the chat system Matrix"
+:::
+
+# Do what thou wilt
+
+:::notes
+What you **will**, not what you **want**
+→ Will you really say more than 1000 words?
+The amulet Auryn in [The Neverending Story]
+Creativity is essential (not pastime)
+→ Bible - "Momo and the time thieves" is shorter
+
+[The Neverending Story]: <https://en.wikipedia.org/wiki/The_Neverending_Story>
+ "Michael Ende: The Neverending Story"
+:::
+
+## Sustainable? { timing=60 }
+
+![](../is.jpg)
+
+:::notes
+Can the ice sustain better with more in the car?
+:::
+
+## Politics 1989
+
+Fall of the Berlin Wall
+
+Copyright is normalised
+
+:::notes
+free competition "won"
+
+Copyright: USA joins the [Berne Convention]
+
+[Berne convention]: <https://en.wikipedia.org/wiki/Berne_Convention>
+ "Wikipedia article about the Berne Convention"
+:::
+
+## Politics 2023
+
+Information trade
+
+Echo chambers
+
+Sustainable ecology?
+
+:::notes
+[trade]: 197 bln. pers. measures/day
+→ each 4. minute your position+screen is tracked
+→ 19.6 times/minute your data is resold
+
+[trade]: <https://www.iccl.ie/digital-data/iccl-report-on-the-scale-of-real-time-bidding-data-broadcasts-in-the-u-s-and-europe/>
+ "Report on revealing the size og trading personal surveillance data"
+:::
+
+## Energy 2010 { timing=60 }
+
+Emails release 1% of pers. carbon
+→ 4/5 is spam
+
+:::notes
+[email]: 1% carbon for average "green" citizen
+→ 80% is spam - 33 mia. KWh/year
+→ 1/60 of carbon for snail mail per message
+
+[email]: <https://www.theguardian.com/environment/green-living-blog/2010/oct/21/carbon-footprint-email>
+ "News article about estimated carbon footprint for email"
+:::
+
+## Energy 2015 { timing=60 }
+
+Internet release 2% of global carbon
+
+:::notes
+
+[data centres]: 2% af al CO~2~ i 2015
+→ same as flight traffic
+
+[data centres]: <https://internethealthreport.org/2018/the-internet-uses-more-electricity-than/>
+ "Analysis of ICT energy consumption"
+:::
+
+## Energi 2015 (take 2)
+
+**Data centres** release 2% of global carbon
+
+→ Total ICT operations release 18%
+→ doubles every 10. year
+
+:::notes
+data centres: 11% of [total ICT use]
+
+[total ICT use]: <https://www.researchgate.net/publication/320225452_Total_Consumer_Power_Consumption_Forecast>
+ "Analysis of ICT consumption in 2015 and projected to 2025"
+:::
+
+## Where is the fan located?
+
+![](../boat.jpg)
+
+:::notes
+Penge doesn't smell - Internet does not blow
+
+Greta Thunberg: 14 days [sailing trip] to the USA
+→ [14 days] in super boat at [2.7 mio. EUR]
+→ 20 days return with catamaran
+
+[sailing trip]: <https://en.wikipedia.org/wiki/Transatlantic_Voyages_of_Greta_Thunberg>
+ "Wikipedia article: Transatlantic Voyages of Greta Thunberg"
+
+[14 days]: <https://en.wikipedia.org/wiki/Gitana_16#Greta_Thunberg_Transatlantic_Voyage>
+ "Thunberg's crossing of the Atlantic started on 14 August 2019 and she arrived on 28 August."
+
+[2.7 EUR]: <https://kidadl.com/facts/malizia-ii-facts-details-on-greta-thunberg-yacht-revealed>
+ "Malizia II [...] costs 2,700,000 Euros"
+:::
+
+# Green thoughts { timing=60 }
+
+Ø-mark
+Reuse
+Fair trade
+~~~Ecotex~~
+
+:::notes
+Shop organic in malls as a sport
+:::
+
+## "Green ICT"
+
+Fairphone
+
+Green energy
+
+Reuse
+
+Turn off the cellphone at night
+
+Use old-fashioned smiley :-)
+
+:::notes
+[Murena]: sustainable smartphone
+→ uset Fairphone
+→ The Free system [/e/os]
+
+[Murena]: <https://murena.com/products/smartphones/>
+
+[/e/os]: <https://e.foundation/>
+ "/e/os - freely licensed and surveillance free version of Android"
+:::
+
+## "ICT permaculture"
+
+Buy and use thoughtfully and respectfully
+
+Cirkular economy
+→ cirkulær gift economy
+
+Subsidiarity (=nærhed)
+→ simplest mulige kredsløb
+
+:::notes
+[cirkular] - Cradle-to-cradle
+→ [gif economy] - Knowledge sharing as goal
+
+[nearness] - Solve issues at lowest level
+
+[cirkulær]: <https://da.wikipedia.org/wiki/Cirkul%C3%A6r_%C3%B8konomi>
+ "Wikipedia article on cirkular economy"
+
+[gift economy]: <http://gift-economy.jones.dk/>
+ "Universitety theses on gift economy for ICT"
+
+[nearness]: <https://en.wikipedia.org/wiki/Subsidiarity>
+ "Wikipedia article on subsidiary"
+:::
+
+## Sustainable ICT
+
+Collective machines, documents, and network
+→ Keep it comprehensive
+→ Respect anyone
+→ Share with everyone
+
+Local economy
+(not shared economy)
+
+:::notes
+Comprehensive - encourage involvement
+Not communism nor socialism
+(but maybe social anarchism)
+:::
+
+## Bæredygtige Jonas { timing=60 }
+
+* Lightweight school support, incl. Kaospilots
+* Reuse of ICT trash in co-living and highschools
+* SMS robot and live video for experimental theater
+* Digital self defence in the European Parliament
+* Tailored systems for laptops and smartphones
+
+Everything public property, shared through Debian
+
+# Sustainable attitude
+
+Conscious ICT use as a functional sport
+
+Talk about ICT as a social sport
+
+Share your contributions proactively
+→ publish your thoughts
+→ License for Free use
+
+:::notes
+Points: ICT is tangible (not magical)
+→ Simply machines, information, and traffic
+:::
+
+# Tak og værs'go { timing=60 }
+
+This presentation: <https://dr.jones.dk/it/draft/>
+Released under the license CC BY-SA 4.0
+(press "s" for notes and references)
+
+:::notes
+This presentation is built using [Pandoc](https://pandoc.org/)
+and presented using [reveal.js](https://revealjs.com/).
+Released incl. [source](https://source.jones.dk/jones/content/tree/it)
+by [Jonas Smedegaard](https://dr.jones.dk/), <dr@jones.dk>
+under the license [CC BY-SA 4.0].
+
+The image
+[is](https://www.pexels.com/photo/car-on-a-frozen-lake-7099850/)
+was released under [en liberal licens](https://www.pexels.com/da-DK/license/).
+
+The image
+[venn](https://commons.wikimedia.org/wiki/File:Diagramme_de_Venn_du_d%C3%A9veloppement_durable.svg)
+was released under the license [CC BY-SA 4.0],
+[floppy](https://commons.wikimedia.org/wiki/File:Forty_years_of_Removable_Storage.jpg)
+under [CC BY 2.0],
+and [net](https://commons.wikimedia.org/wiki/File:Internet_map_1024.jpg)
+under [CC BY 2.5].
+
+The image
+[apollo](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Margaret_Hamilton_-_restoration.jpg/482px-Margaret_Hamilton_-_restoration.jpg)
+is under the [public domain].
+The image
+[booth](http://www.computinghistory.org.uk/det/32489/Kathleen-Booth/)
+is owned by Centre for Computing History of Cambridge
+and will enter the [public domain] in 2025.
+
+[CC BY 2.0]: <https://creativecommons.org/licenses/by/2.0/deed.en>
+ "The license Creative Commons Attribution 2.0 Generic"
+
+[CC BY 2.5]: <https://creativecommons.org/licenses/by/2.5/deed.en>
+ "The license Creative Commons Attribution 2.5 Generic"
+
+[CC BY-SA 4.0]: <https://creativecommons.org/licenses/by-sa/4.0/deed.en>
+ "The license Creative Commons Attribution-ShareAlike 4.0 International"
+
+[public domain]: <https://en.wikipedia.org/wiki/Public_domain>
+ "Wikipedia article about the concept public domain"
+:::
diff --git a/it/floppy.jpg b/it/floppy.jpg
new file mode 100644
index 0000000..067ea39
--- /dev/null
+++ b/it/floppy.jpg
Binary files differ
diff --git a/it/holbaek/index.md b/it/holbaek/index.md
new file mode 100644
index 0000000..b004867
--- /dev/null
+++ b/it/holbaek/index.md
@@ -0,0 +1,678 @@
+---
+usage: make -f ../../revealjs/Makefile
+title: Bæredygtig IT
+subtitle: Holbæk Bibliotek
+author: Jonas Smedegaard
+date: 2023-04-25
+mainfont: Alegreya Sans
+lang: da-DK
+defaultTiming: 120
+---
+# Jonas Smedegaard { timing=60 }
+
+Næsten student siden 1992
+IT-guide dr. Jones siden 1996
+Frivillig IT-bibliotekar siden 2001
+
+Idealist & Internet-arkitekt
+
+:::notes
+Studie: forsøgte i 5 år
+Indiana Jones (÷ doktor) → misforstået i Asien
+Debian: linux system, frivilligt, brugt overalt
+Idealist: Frihedskæmper, systemkritiker, rebel
+→ Vision om konstruktivistisk kollektiv IT
+:::
+
+## Overblik
+
+Kort intro til bæredygtighed og IT
+
+Konkrete bud på personlige tiltag
+
+Perspektiver om hvorfor det nytter
+
+# Bæredygtighed
+
+![](../is.jpg)
+
+:::notes
+Isen ved polerne smelter
+→ Reducér fossile brændstoffer
+→ Kollektiv trafik
+:::
+
+## Holder det?
+
+"Bæredygtig" har 2 betydninger:
+: Holder *grundlaget*?
+: Holder *presset* på grundlaget?
+
+:::notes
+[Bæreevne]: sand → mørtel → beton
+
+[Bæreevne]: <https://ordnet.dk/ddo/ordbog?query=b%C3%A6redygtighed>
+ "betydning 2: evne til at tåle vægten af noget"
+
+Evne til at udnytte uden for stort pres
+:::
+
+## Dimensioner
+
+![](../venn.svg)
+
+:::notes
+Økonomi: selvkørende (*ikke* finanser)
+:::
+
+## Historie
+
+* 1972: FN's miljøprogram *+ Jonas*
+* 1987: Brundtland-rapporten
+* 1989: WWW *+ Jonas' første PC*
+* 1992: FN's klimakonvention
+* 1994: internet kommercielt
+* 1997: Kyoto-aftalen
+* 2003: spam overhaler legitim email
+* 2015: FN's verdensmål
+* 2018: Greta Thunberg strejker
+
+:::notes
+[Miljøprogram]: etiske principper
+[Brundtland]: økologi og vækst er koblet
+Klimakonvention: 3 dimensioner
+[Kyoto]: aftale om CO~2~-reduktion
+Verdensmål: [#12] dækker bæredygtig IT
+
+[Miljøprogram]: <http://www.un-documents.net/unchedec.htm>
+
+[Brundtland]: <https://da.wikipedia.org/wiki/Brundtlandrapporten>
+
+[Klimakonvention]: <https://da.wikipedia.org/wiki/UNFCCC>
+ "UNFCC: United Nations Framework Convention on Climate Change"
+
+[spam]: <https://en.wikipedia.org/wiki/History_of_email_spam#USENET>
+ "Wikipedia: History of email spam"
+
+[Kyoto]: <https://da.wikipedia.org/wiki/Kyoto-aftalen>
+ "Kyoto-aftalen: international aftale om drivhusgasreduktion"
+
+[#12]: <https://www.verdensmaal.org/12-ansvarligt-forbrug-og-produktion>
+ "Ansvarligt forbrug og produktion"
+:::
+
+## Email - energi { timing=60 }
+
+2019: 0.3% af verdens CO~2~-aftryk
+→ hver 2. email er spam
+
+:::notes
+[email]: 306 mia. emails i 2021
+[spam]: reduceret fra 70% i 2014
+
+[email]: <https://carbonliteracy.com/the-carbon-cost-of-an-email/>
+ "artikel om CO2-belastning for email"
+
+[spam]: <https://www.statista.com/statistics/420391/spam-email-traffic-share/>
+ "statistik om spam-andel over tid"
+:::
+
+## Internet - energi { timing=60 }
+
+2015: 2% af verdens CO~2~
+
+:::notes
+[datacentre]: 2% af al CO~2~ i 2015
+→ samme som flytrafik
+
+[datacentre]: <https://internethealthreport.org/2018/the-internet-uses-more-electricity-than/>
+ "Gennemgang af energiforbrug for IT"
+:::
+
+## Internet - energi (take 2)
+
+2015: **Datacentre** udgør 2% af verdens CO~2~
+
+→ Samlet IT-drift udgør måske 18%
+→ fordobles hvert 10. år
+
+:::notes
+datacentre: 11% af [samlet IT-forbrug]
+
+[samlet IT-forbrug]: <https://www.researchgate.net/publication/320225452_Total_Consumer_Power_Consumption_Forecast>
+ "Analyse af IT-forbrug i 2015 med fremskrivning til 2025"
+:::
+
+## Internet - energi (take 3)
+
+2019: 4% af verdens CO~2~
+→ forventes fordoblet i 2025
+
+:::notes
+[internet]: 80% er video
+
+[internet]: <https://earth.org/digital-sobriety-how-the-internet-is-harming-the-environment/>
+ "Analyse af IT-belastning i 2020"
+:::
+
+## Begreber - spørgsmål?
+
+# Tiltag { timing=60 }
+
+Maskiner
+
+Data
+
+Trafik
+
+# Maskiner
+
+![](../booth.jpg)
+
+:::notes
+Computere i alle størrelser
+
+Hvor mange computere på billedet?
+1/2 maskine: 4 paneler i alt
+1 [human computer]: [Kathleen Booth]
+
+[human computer]: <https://en.wikipedia.org/wiki/Computer_(occupation)>
+ "computer: one who computes"
+
+[Kathleen Booth]: <https://en.wikipedia.org/wiki/Kathleen_Booth>
+ "Kathleen Booth - opfinderen af computer-sproget Assemply"
+:::
+
+## Maskiner - pres
+
+Travl blæser
+
+Lir
+(GPS, wifi, kamera, batteri...)
+
+For mange
+eller udenfor kontrol
+
+:::notes
+Bærbar lader også oppe på hylden
+
+For mange: Udbyders wifi + egen + naboers
+Kontrol: Udbyders wifi + telefon er låst
+→ Farlig når leverandør mister interessen
+:::
+
+## Maskiner - forslag
+
+Kedelige og praktiske standardmodeller
+→ Klodsede kasser
+→ Udskifteligt batteri
+
+(Gen)brugbar med Fri software
+→ undgå Apple og Nvidia
+
+Sluk når den ikke bruges (÷ lydløs)
+
+:::notes
+Kasser: meget luft, ikke meget kraft
+Bilbatteri er upræcist til mobiltelefoner
+Genbrug: Leverandør gider aldrig genbrug
+[sluk]: og vent 24 timer med at svare email
+
+[sluk]: <https://epale.ec.europa.eu/en/blog/digital-sobriety-how-can-we-adapt-our-uses-positive-impact-environment>
+ "Analyse af IT-forbrug med konkrete praktiske forslag"
+:::
+
+## Maskiner - spørgsmål?
+
+# Data { timing=60 }
+
+![](../floppy.jpg)
+
+:::notes
+Info: Prorammer + dokumenter
+
+Biblen fylder (måske) een 3½" diskette
+:::
+
+## Data - programmer
+
+![](../apollo.jpg)
+
+:::notes
+Margaret Hamilton, leder af NASA team
+
+Al kode ombord "ørnen" ved månelandingen
+[3,2 MB kode] i sproget Assembly
+→ Assembly blev udviklet af Kathleen Booth
+
+[3,2 MB kode]: <https://github.com/chrislgarry/Apollo-11>
+ "Arkiv af kildekoden til landingsmodulet for Apollo-programmet"
+:::
+
+## Data - pres
+
+Smileys i sms :smile:
+
+**Fede** bogstaver i mail
+
+Et billede fylder mere end 1000 ord
+
+Små noter / typografisk tekst / færdigt layout
+
+Diskretion
+Overvågning
+
+:::notes
+Smiley eller emoji: x2
+Email med opsat tekst: x3 (eller op til x20)
+
+Brug typografiark (overskrift, brødtekst...)
+
+Diskretion/overvågning: modarbejder genbrug
+:::
+
+## Data - forslag
+
+Brug lokale og præcise programmer
+
+Gem i åbne og præcise dokumentformater
+
+email / tekstbehandling / PDF-fremviser
+
+:::notes
+email (÷ webmail)
+Kontorprogrammer (÷ Google docs)
+[Simpel tekst] - [opsat tekst] - sidelayout - film
+[Markdown] - [ODF] - [PDF] - [AV1]
+
+[Simpel tekst]: <https://useplaintext.email/>
+ "Guide til simpel tekst email"
+
+[opsat tekst]: <https://opensource.com/article/17/6/3-alternatives-libreoffice-writer>
+ "Anmeldelse af letvægts tekstbehandlingsprogrammer"
+
+[Markdown]: <https://markdown.dk/>
+ "Portal om opmærkningssproget Markdown"
+
+[ODF]: <https://da.wikipedia.org/wiki/OpenDocument>
+ "Wikipedia: kontordataformatet OpenDocument"
+
+[PDF]: <https://pdfreaders.org/>
+ "Liste over Fri PDF-læsere"
+
+[AV1]: <https://en.wikipedia.org/wiki/AV1>
+ "Wikipedia: filmformatet AV1"
+:::
+
+## Data - spørgsmål?
+
+# Trafik
+
+![](../net.jpg)
+
+:::notes
+[Opte Project]: <30% af [Internet i 2005]
+16% i verden, 68% i USA, 82% i Danmark
+Streglængde er svartid
+[Farver]: blå=Nordamerika, gul=Latinamerika, grøn=Europa+Afrika+Mellemøsten
+
+[Opte Project]: <https://en.wikipedia.org/wiki/Opte_Project>
+ "Opte Project: Visualiseringer af Internet over tid"
+
+[Internet i 2005]: <https://ourworldindata.org/internet>
+ "Online brugere over tid"
+
+[Farver]: <https://www.opte.org/the-internet#block-60199ed2a5dea45f0e12f7cd>
+ "Opte visualisering for 2003 (m/ farvekoder nederst på siden)"
+:::
+
+## Trafik - pres
+
+Store datamængder
+
+Lang distance
+
+Igen og igen
+
+## Trafik - forslag
+
+Brug fysiske kabler
+Køb no-bullshit internetadgang
+→ Del med din nabo
+
+Gem dokumenter lokalt
+Del dokumenter skyfrit eller i egen "sky"
+
+:::notes
+Skyfrit: [git-annex], [Seafile]
+Egen [sky]: [Freedombox]
+Del internet: [OpenNDS], [LibreMesh]
+no-[bullshit] internetadgang: [Kviknet], [Unotel]
+
+[git-annex]: <https://git-annex.branchable.com/assistant/>
+ "git-annex: Redskab til at holde data synkrone vha. git"
+
+[Seafile]: <https://www.seafile.com/>
+ "Seafile: Redskab til at holde data synkrone"
+
+[sky]: <https://pluralistic.net/2022/09/28/other-peoples-computers/#clouded-over>
+ "There is no cloud, there is only other people's computers."
+
+[Freedombox]: <https://www.freedombox.org/>
+
+[OpenNDS]: <https://opennds.readthedocs.io/en/stable/overview.html#what-is-opennds>
+ "OpenNDS: Fri netværksservice til at åbne for netværksadgang"
+
+[LibreMesh]: <https://libremesh.org/>
+ "LibrMesh: Frit netværkssystem til at opsætte trådløs mesh-netværk"
+
+[bullshit]: <https://en.wikipedia.org/wiki/On_Bullshit>
+ "bullshit: tale for at overtale uden hensyn til sandhedsværdi"
+
+[Kviknet]: <https://kviknet.dk/>
+ "Kviknet - internetudbyder"
+
+[Unotel]: <https://unotel.dk/>
+ "Unotel - mobiltelefoniudbyder"
+:::
+
+## Sociale medier { timing=30 }
+
+[arrgh...]
+
+:::notes
+(÷ Mobning, ÷ russisk cyberkrig)
+
+Hvad er sundest - MacDonalds eller Burger King?
+:::
+
+## Sociale medier { timing=30 }
+
+data er guld + du er ligeglad
+→ rovdrift på dine personlige data
+
+## Sociale medier - energi { timing=60 }
+
+2021: 0,61% af verdens CO~2~-aftryk
+
+:::notes
+[social]: 4,3 mia. brugere globalt (55,1%)
+
+[social]: <https://carbonliteracy.com/the-carbon-cost-of-social-media/>
+ "artikel om CO2-belastning for sociale medier"
+:::
+
+## Politik 1989
+
+WWW
+
+Murens fald
+
+Copyright normaliseres
+
+:::notes
+fri konkurrence "vandt"
+
+Copyright: USA med i [Bernerkonventionen]
+
+[Bernerkonventionen]: <https://en.wikipedia.org/wiki/Berne_Convention>
+ "Wikipedia: Bernerkonventionen (engelsk udgave som omtaler USA)"
+:::
+
+## Politik 2022
+
+Ekkokamre
+Datahandel
+
+Hvert 4. minut måles din position + skærmvisning
+Hvert 3. sekund videresælges dine data
+
+(afsløret ved en datalækage)
+
+:::notes
+[handel]: 197 mia. pers. målinger/dag
+[lækage]: der er ufatteligt mange
+
+[handel]: <https://www.iccl.ie/digital-data/iccl-report-on-the-scale-of-real-time-bidding-data-broadcasts-in-the-u-s-and-europe/>
+ "Rapport om afsløring af omfang af handel med personovervågningsdata"
+
+[lækager]: <https://www.informationisbeautiful.net/visualizations/worlds-biggest-data-breaches-hacks/>
+ "Interaktiv visualisering af datalækager"
+:::
+
+## Sociale medier - forslag
+
+Email: f.eks. Disroot
+Åben pludren: Mastodon
+Diskussionsrum: Matrix
+Websøgning: DuckDuckGo
+
+:::notes
+[Email]: De mest sikre kræver specialprogram
+Mastodon: Prøv først som web-service
+Matrix: Prøv først med klienten [Element]
+
+[Email]: <https://www.privacytools.io/privacy-email>
+ "Oversigt over sikre email-udbydere (på engelsk)"
+
+[Element]: <https://element.io/>
+ "Element - web- og ægte klient til chat-systemet Matrix"
+:::
+
+## Services
+
+Login via Google/Apple/Facebook er populært
+
+:::notes
+Koder er bøvlede, men "systemnøgler" er risky
+:::
+
+## Services - forslag
+
+Afvis cookies
+Afvis reklamer
+Undgå forslags-popup i søgefelt
+
+Brug webbrowseren Firefox (m/ kodehusker)
+Brug separat kode for hver service
+Brug uafhængige services
+
+:::notes
+[Cookies]: 3.-parts services: 50x indhold
+[Forslag]: laver søgning for hvert bogstav
+[uafhængige]: Støt konkurrence, eller modvirk datakapitalkumpaner
+
+[Cookies]: <https://greenspector.com/en/best-practice-limit-the-number-of-third-party-services/>
+ "analyse om belastning af 3.-parts web-services"
+
+[Forslag]: <https://greenspector.com/en/reducing-the-impact-of-autocompletion/>
+ "Analyse af autocompletion ved Google søgning"
+:::
+
+## Trafik - spørgsmål?
+
+# Gør hvad du vil
+
+:::notes
+Hvad du **vil**, ikke hvad du **lyster**
+→ Vil du sige mere end 1000 ord?
+Amuletten Auryn i [Den uendelige historie]
+Kreativitet er essentielt (ikke tidsfordriv)
+→ Bibel - "Momo og tidsrøverne" er kortere
+
+[Den uendelige historie]: <https://da.wikipedia.org/wiki/Den_uendelige_historie>
+ "Michael Ende: Den uendelige historie"
+:::
+
+## Bæredygtig? { timing=60 }
+
+![](../is.jpg)
+
+:::notes
+Holder isen med flere i bilen?
+:::
+
+## Hvor sidder blæseren?
+
+![](../boat.jpg)
+
+:::notes
+Penge lugter ikke - Internet blæser ikke
+
+Greta Thunberg: 14 dages [sejltur] til USA
+→ [14 dage] i superbåd til [20 mio. kroner]
+→ 20 dage retur med katamaran
+
+[sejltur]: <https://en.wikipedia.org/wiki/Transatlantic_Voyages_of_Greta_Thunberg>
+ "Wikipedia: Transatlantic Voyages of Greta Thunberg"
+
+[14 dage]: <https://en.wikipedia.org/wiki/Gitana_16#Greta_Thunberg_Transatlantic_Voyage>
+ "Thunberg's crossing of the Atlantic started on 14 August 2019 and she arrived on 28 August."
+
+[20 mio. kroner]: <https://kidadl.com/facts/malizia-ii-facts-details-on-greta-thunberg-yacht-revealed>
+ "Malizia II [...] costs 2,700,000 Euros"
+:::
+
+## Grøn shopping { timing=60 }
+
+Ø-mærket
+Genbrug
+Fairtrade
+~~~Ecotex~~
+
+:::notes
+Øko-shopping redder ikke jorden
+→ politisk signal
+:::
+
+## Grøn IT-shopping
+
+Fairphone
+Grøn elektricitet
+Genbrug af mobiltelefon
+
+:::notes
+IT-shopping redder ikke jorden
+→ politisk signal
+[Murena]: bæredygtig mobiltelefon
+→ brugt Fairphone
+→ Det fri system [/e/os]
+
+[Murena]: <https://murena.com/products/smartphones/>
+
+[/e/os]: <https://e.foundation/>
+ "/e/os - frit licenseret og Overvågningsfri udgave af Android"
+:::
+
+## "IT permakultur"
+
+Køb og brug IT så du skaber mere end du spilder
+
+Cirkulær økonomi
+→ cirkulær gaveøkonomi
+
+Subsidiaritet (=nærhed)
+→ simplest mulige kredsløb
+
+:::notes
+[cirkulær] - Vugge-til-vugge
+→ [gaveøkonomi] - Vidensdeling som mål
+
+[nærhed] - Løs problemer på laveste niveau
+
+[cirkulær]: <https://da.wikipedia.org/wiki/Cirkul%C3%A6r_%C3%B8konomi>
+ "Wikipedia: cirkulær økonomi"
+
+[gaveøkonomi]: <http://gift-economy.jones.dk/>
+ "Universitetsspeciale om gaveøkonomi indenfor IT"
+
+[nærhed]: <https://en.wikipedia.org/wiki/Subsidiarity>
+ "Wikipedia: subsidiaritet (på engelsk)"
+:::
+
+## Bæredygtige IT-samfund
+
+Kollektive maskiner, informationer og netværk
+→ Hold det gennemskueligt
+→ Respektér enhver
+→ Del med alle
+
+Lokal økonomi (÷ fællesøkonomi)
+
+:::notes
+Gennemskueligt - inviterer til engagement
+Ikke kommunisme, eller socialisme
+:::
+
+## Bæredygtige Jonas { timing=60 }
+
+* Letvægtsdrift af skoler, bl.a. Kaospiloterne
+* genbrug af IT-skrot i bofællesskab og gymnasier
+* SMS-robot og live video til eksperimentalteater
+* Digital selvforsvar i Europaparlamentet
+* Skræddersyet system til bærbare og telefoner
+
+Altsammen global folkeeje, delt gennem Debian
+
+# Sæt ord på
+
+Tænk over dit IT-brug
+
+Diskutér IT-vaner og -behov med venner
+
+Del holdninger og erfaringer
+→ brug fri licens
+
+:::notes
+Tænk: IT er konkret (÷ magisk)
+→ Blot maskiner, data og trafik
+Del: ikke kun på sociale medier
+→ offentligt, udenfor dit ekkokammer
+→ direkte til dine politikere
+:::
+
+# Spørgsmål? { timing=60 }
+
+Denne præsentation: <https://dr.jones.dk/it/holbaek/>
+Udgivet under licensen CC BY-SA 4.0
+(tryk "s" for noter og referencer)
+
+:::notes
+Denne præsentation er bygget med [Pandoc](https://pandoc.org/)
+og fremvist med [reveal.js](https://revealjs.com/).
+Udgivet inkl. [kildemateriale](https://source.jones.dk/jones/content/tree/it)
+af [Jonas Smedegaard](https://dr.jones.dk/), <dr@jones.dk>
+under licensen [CC BY-SA 4.0].
+
+Billedet
+[is](https://www.pexels.com/photo/car-on-a-frozen-lake-7099850/)
+er udgivet under [en liberal licens](https://www.pexels.com/da-DK/license/).
+
+Billedet
+[venn](https://commons.wikimedia.org/wiki/File:Diagramme_de_Venn_du_d%C3%A9veloppement_durable.svg)
+er udgivet under licensen [CC BY-SA 4.0],
+[floppy](https://commons.wikimedia.org/wiki/File:Forty_years_of_Removable_Storage.jpg)
+under [CC BY 2.0],
+og [net](https://commons.wikimedia.org/wiki/File:Internet_map_1024.jpg)
+under [CC BY 2.5].
+
+Billedet
+[apollo](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Margaret_Hamilton_-_restoration.jpg/482px-Margaret_Hamilton_-_restoration.jpg)
+er under [offentligt domæne].
+Billedet
+[booth](http://www.computinghistory.org.uk/det/32489/Kathleen-Booth/)
+ejes af Centre for Computing History of Cambridge
+og vil komme under [offentligt domæne] i 2025.
+
+[CC BY 2.0]: <https://creativecommons.org/licenses/by/2.0/deed.da>
+ "Licensen Creative Commons Kreditering 2.0 Generisk"
+
+[CC BY 2.5]: <https://creativecommons.org/licenses/by/2.5/deed.da>
+ "Licensen Creative Commons Kreditering 2.5 Generisk"
+
+[CC BY-SA 4.0]: <https://creativecommons.org/licenses/by-sa/4.0/deed.da>
+ "Licensen Creative Commons Kreditering-Deling på samme vilkår 4.0 International"
+
+[offentligt domæne]: <https://da.wikipedia.org/wiki/Offentligt_dom%C3%A6ne>
+ "Wikipedia: begrebet offentligt domæne"
+:::
diff --git a/it/is.jpg b/it/is.jpg
new file mode 100644
index 0000000..573adfa
--- /dev/null
+++ b/it/is.jpg
Binary files differ
diff --git a/it/net.jpg b/it/net.jpg
new file mode 100644
index 0000000..5fbe479
--- /dev/null
+++ b/it/net.jpg
Binary files differ
diff --git a/it/oroe/index.md b/it/oroe/index.md
new file mode 100644
index 0000000..16ee401
--- /dev/null
+++ b/it/oroe/index.md
@@ -0,0 +1,487 @@
+---
+usage: make -f ../../revealjs/Makefile
+title: Bæredygtig IT
+subtitle: Genskabet, Orø
+author: Jonas Smedegaard
+date: 2023-02-10
+mainfont: Alegreya Sans
+lang: da-DK
+defaultTiming: 120
+---
+# Overblik
+
+* Bæredygtighed
+* Ting og sager
+* Bæredygtig IT
+
+## Jonas Smedegaard
+
+Næsten student
+
+Macværk → IT-guide dr. Jones
+
+Debian udvikler
+
+:::notes
+Studie: forsøgte i 5 år
+"Macværk, ikke makværk", svært at sælge
+Indiana Jones, misforstået i Asien
+Debian: linux system, frivilligt, brugt overalt
+:::
+
+# Bæredygtighed
+
+![](../is.jpg)
+
+:::notes
+Isen ved polerne smelter
+→ Reducér fossile brændstoffer
+→ Kollektiv trafik
+
+Holder isen bedre med flere i bilen?
+:::
+
+## Holder det?
+
+Holder **grundlaget**?
+*eller*
+Holder **presset** på grundlaget?
+
+:::notes
+[Bæreevne]: sand → mørtel → beton
+
+[Bæreevne]: <https://ordnet.dk/ddo/ordbog?query=b%C3%A6redygtighed>
+ "betydning 2: evne til at tåle vægten af noget"
+
+Evne til at udnytte uden for stort pres
+:::
+
+## Dimensioner
+
+![](../venn.svg)
+
+:::notes
+Økonomi: selvbærende (*ikke* finanser)
+:::
+
+## Historie
+
+* 1972: FN's miljøprogram
+* 1987: Brundtland-rapporten
+* 1989: WWW (og Jonas' første PC)
+* 1992: FN's klimakonvention
+* 1997: Kyoto-aftalen
+* 2015: FN's verdensmål
+* 2018: Greta Thunberg strejker
+
+:::notes
+[Miljøprogram]: etiske principper
+[Brundtland]: økologi og vækst er koblet
+Klimakonvention: 3 dimensioner
+[Kyoto-aftalen]: aftale om CO2-reduktion
+Verdensmål: [Mål 12] dækker bæredygtig IT
+
+[Miljøprogram]: <http://www.un-documents.net/unchedec.htm>
+
+[Brundtland]: <https://da.wikipedia.org/wiki/Brundtlandrapporten>
+
+[Klimakonvention]: <https://da.wikipedia.org/wiki/UNFCCC>
+ "UNFCC: United Nations Framework Convention on Climate Change"
+
+[Kyoto-aftalen]: <https://da.wikipedia.org/wiki/Kyoto-aftalen>
+ "Kyoto-aftalen: international aftale om drivhusgasreduktion"
+
+[Mål 12]: <https://www.verdensmaal.org/12-ansvarligt-forbrug-og-produktion>
+ "Ansvarligt forbrug og produktion"
+:::
+
+# Ting og sager
+
+Maskiner
+
+Dokumenter
+
+Trafik
+
+# Maskiner
+
+![](../booth.jpg)
+
+:::notes
+Computere i alle størrelser
+
+Hvor mange computere på billedet?
+→ 1/2 maskine (4 paneler i alt)
+→ 1 [human computer]
+
+[human computer]: <https://en.wikipedia.org/wiki/Computer_(occupation)>
+ "computer: one who computes"
+
+Kathleen Booth opfandt assembly
+:::
+
+## Maskinspild
+
+Travl blæser
+
+Bærbar du ikke bærer rundt på
+
+For meget lir
+(GPS, wifi, kamera, batteri...)
+
+For mange!
+
+## Sunde maskiner
+
+Store klodsede kasser
+
+"Rigtige" lokale programmer
+(fremfor web-services)
+
+:::notes
+Som tøj: Lidt for stor holder længere
+...men blot mere luft, ikke kraftigere
+
+Mailprogram <- webmail
+Tekstbehandling <- Google docs
+Regneark <- Google docs
+:::
+
+# Dokumenter
+
+![](../floppy.jpg)
+
+:::notes
+"Internet på en diskette"
+
+Hvad fylder web, når det indeholder løbende backup af sig selv?
+:::
+
+## Programmer
+
+![](../apollo.jpg)
+
+:::notes
+Margaret Hamilton, leder af NASA team
+
+Al kode til at styre [månelandingen],
+3,2 MB kode i sproget Assembly
+(Assembly blev udviklet af Kathleen Booth)
+
+[månelandingen]: <https://github.com/chrislgarry/Apollo-11>
+ "Arkiv af kildekoden til landingsmodulet for Apollo-programmet"
+:::
+
+## Dokumentspild
+
+Smileys i sms :smile:
+
+**Fede** bogstaver i mail
+
+Diskretion
+
+Udbasunering
+
+Billeder fylder mere end 1000 ord
+
+:::notes
+Email med stil fylder 3-20 gange så meget
+
+Jeg er tørstig > også mig > 2 vand mere hernede
+:::
+
+## Sunde dokumenter
+
+Gem kun hvad du vil udtrykke
+([Simpel tekst] ← [Stilet tekst] ← Layout ← Film)
+
+Brug præcise åbne standarder
+([Markdown] ← [ODF] ← [PDF] ← [AV1])
+
+[Simpel tekst]: <https://useplaintext.email/>
+ "Guide til simpel tekst email"
+
+[Stilet tekst]: <https://opensource.com/article/17/6/3-alternatives-libreoffice-writer>
+ "Anmeldelse af letvægts tekstbehandlingsprogrammer"
+
+[Markdown]: <https://markdown.dk/>
+ "Portal om opmærkningssproget Markdown"
+
+[ODF]: <https://da.wikipedia.org/wiki/OpenDocument>
+ "Wikipedia-artikel om kontordataformatet OpenDocument"
+
+[PDF]: <https://pdfreaders.org/>
+ "Liste over Fri PDF-læsere"
+
+[AV1]: <https://en.wikipedia.org/wiki/AV1>
+ "Wikipedia-artikel om filmformatet AV1"
+
+# Trafik
+
+![](../net.jpg)
+
+:::notes
+Distance er tid
+
+Under 30% Internet anno 2005
+
+stregers længde er svartid
+:::
+
+## Trafikspild
+
+For meget
+
+For lang distance
+
+Igen og igen
+
+## Sund trafik
+
+Undgå skyen: Gem dokumenter lokalt
+
+Del dokumenter direkte
+([git-annex], [Seafile])
+
+[git-annex]: <https://git-annex.branchable.com/assistant/>
+
+[Seafile]: <https://www.seafile.com/>
+
+Del dokumenter i din egen "sky"
+([Freedombox])
+
+[Freedombox]: <https://www.freedombox.org/>
+
+Del internet med dine naboer
+([Freifunk])
+
+[Freifunk]: <https://en.wikipedia.org/wiki/Freifunk>
+ "Wikipedia-artikel om mesh-netværket Freifunk"
+
+Køb internetadgang uden mersalg
+([Kviknet], [Unotel])
+
+[Kviknet]: <https://kviknet.dk/>
+ "Kviknet - internetudbyder"
+
+[Unotel]: <https://unotel.dk/>
+ "Unotel - mobiltelefoniudbyder"
+
+# Overblik
+
+Holder det?
+
+![](../is.jpg)
+
+## Overblik
+
+* Sunde maskiner
+* Sunde dokumenter
+* Sund trafik
+
+*Præcis* brug
+(mere end *reduceret* brug)
+
+# Websted
+
+## Webspild
+
+Tungt indhold
+
+Dynamisk dannet
+(unikt indhold for hver læser)
+
+## Sundt websted
+
+Sundt indhold, fra sund maskine
+
+Statisk indhold
+(dannet een gang til alle læsere)
+
+:::notes
+Denne præsentation: 3 MB, offline-venlig
+:::
+
+# Web-avis
+
+Redaktionens interesser
+
+Læserens interesser
+
+:::notes
+Kvaliteter: Friskhed, dybde, blikfang
+
+Målretning: Reklamer, Bonus for medlemmer
+
+Anvendelse: søgning, bogmærker, udklip, debat, deling
+
+Distribution: føderation, genbrug af arkiv
+:::
+
+## Web-avis - redaktion
+
+Friskhed
+
+Dybde
+
+Blikfang
+
+Kundekendskab
+(overvågning)
+
+Indtægt
+(reklamer, medlemsbonus)
+
+## Web-avis - læsning
+
+Søgning
+
+Bogmærker
+
+Udklip/citering
+
+Debat
+
+Deling
+
+## Web-avis - distribution
+Føderation
+(deling af artikler aviser imellem)
+
+Arkiv
+(Kan Google trawle? Kan dit bibliotek? Kan du?)
+
+# Web-søgning
+
+# Bæredygtig IT
+
+Sunde maskiner, dokumenter og trafik
+
+Sunde aviser og søgninger
+
+Holder det?
+
+## Incitamenter
+
+![](../boat.jpg)
+
+:::notes
+Båden [Gitana 16] / Malizia II...
+→ fik Greta Thunberg til USA på [14 dage]
+→ koster [20 mio. kroner]
+
+[Gitana 16]: <https://en.wikipedia.org/wiki/Gitana_16>
+ "Gitana 16 (later Malizia II): "
+
+[14 dage]: <https://en.wikipedia.org/wiki/Gitana_16#Greta_Thunberg_Transatlantic_Voyage>
+ "Thunberg's crossing of the Atlantic started on 14 August 2019 and she arrived on 28 August."
+
+[20 mio. kroner]: <https://kidadl.com/facts/malizia-ii-facts-details-on-greta-thunberg-yacht-revealed>
+ "Malizia II [...] costs 2,700,000 Euros"
+:::
+
+# Grønne tanker
+
+Økologi
+
+Permakultur
+
+Fairtrade
+
+## "økologisk IT"
+
+Fairphone?
+
+Blockchain?
+
+## "permakulturel IT"
+
+Subsidiaritet - Nærhed
+
+Overskuelige kredsløb
+
+## Bæredygtig IT
+
+Lokalt fællesskab med netværk, delte maskiner og dokumenter
+(og private maskiner og dokumenter)
+
+Lokal økonomi
+(ikke fællesøkonomi)
+
+:::notes
+Pointe: konsekvenser af forbrug mærkes direkte
+:::
+
+# Bæredygtig IT
+
+Bæredygtighed som praktisk og social sport
+
+:::notes
+Shoppe økologi i Brugsen som sport
+
+Ikke forbeholdt hippie-kollektiver:
+Du'r i din opgang eller villavej!
+:::
+
+## Jonas Smedegaard
+
+* Advokatkæde - beskedsystem
+* Netværk til folke- og friskoler, og Kaospiloterne
+* skrot-PC genbrug i bofællesskab og gymnasier
+* SMS-robot og live video til eksperimentalteater
+* EU-parlamentet - digital selvforsvar
+* Skræddersyet system til bærbare og telefoner
+
+Gennemsigtigt og genbrugeligt via Debian
+(se links)
+
+:::notes
+Genbrugeligt: links fra dette slideshow
+:::
+
+# Tak og værs'go {data-visibility="uncounted"}
+
+Denne præsentation: <https://dr.jones.dk/it/oroe/>
+Udgivet under licensen CC BY-SA 4.0
+(tryk "s" for noter og referencer)
+
+:::notes
+Denne præsentation er bygget med [Pandoc](https://pandoc.org/)
+og fremvist med [reveal.js](https://revealjs.com/).
+Udgivet inkl. [kildemateriale](https://source.jones.dk/jones/content/tree/it)
+af [Jonas Smedegaard](https://dr.jones.dk/), <dr@jones.dk>
+under licensen [CC BY-SA 4.0].
+
+Billedet
+[is](https://www.pexels.com/photo/car-on-a-frozen-lake-7099850/)
+er udgivet under [en liberal licens](https://www.pexels.com/da-DK/license/).
+
+Billedet
+[venn](https://commons.wikimedia.org/wiki/File:Diagramme_de_Venn_du_d%C3%A9veloppement_durable.svg)
+er udgivet under licensen [CC BY-SA 4.0],
+[floppy](https://commons.wikimedia.org/wiki/File:Forty_years_of_Removable_Storage.jpg)
+under [CC BY 2.0],
+og [net](https://commons.wikimedia.org/wiki/File:Internet_map_1024.jpg)
+under [CC BY 2.5].
+
+Billedet
+[apollo](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Margaret_Hamilton_-_restoration.jpg/482px-Margaret_Hamilton_-_restoration.jpg)
+er under [offentligt domæne].
+
+Billedet
+[booth](http://www.computinghistory.org.uk/det/32489/Kathleen-Booth/)
+ejes af Centre for Computing History of Cambridge
+og vil komme under [offentligt domæne] i 2025.
+
+[CC BY 2.0]: <https://creativecommons.org/licenses/by/2.0/deed.da>
+ "Licensen Creative Commons Kreditering 2.0 Generisk"
+
+[CC BY 2.5]: <https://creativecommons.org/licenses/by/2.5/deed.da>
+ "Licensen Creative Commons Kreditering 2.5 Generisk"
+
+[CC BY-SA 4.0]: <https://creativecommons.org/licenses/by-sa/4.0/deed.da>
+ "Licensen Creative Commons Kreditering-Deling på samme vilkår 4.0 International"
+
+[offentligt domæne]: <https://da.wikipedia.org/wiki/Offentligt_dom%C3%A6ne>
+ "Wikipedia artikel om begrebet offentligt domæne"
+:::
diff --git a/it/testrup/index.md b/it/testrup/index.md
new file mode 100644
index 0000000..4d7c4cf
--- /dev/null
+++ b/it/testrup/index.md
@@ -0,0 +1,588 @@
+---
+usage: make -f ../../revealjs/Makefile
+title: Bæredygtig IT
+subtitle: Testrup Højskole
+author: Jonas Smedegaard
+date: 2023-02-21
+mainfont: Alegreya Sans
+lang: da-DK
+defaultTiming: 120
+---
+# Overblik
+
+Bæredygtighed
+
+Konkrete tiltag
+
+Bæredygtig IT
+
+## Jonas Smedegaard { timing=60 }
+
+Næsten student
+Macværk → IT-guide dr. Jones
+Debian udvikler
+
+Systemkritiker
+
+:::notes
+Studie: forsøgte i 5 år
+"Macværk, ikke makværk" → svært at sælge
+Indiana Jones → misforstået i Asien
+Debian: linux system, frivilligt, brugt overalt
+vil undlade irrelevant kritik her
+:::
+
+# Bæredygtighed
+
+![](../is.jpg)
+
+:::notes
+Isen ved polerne smelter
+→ Reducér fossile brændstoffer
+→ Kollektiv trafik
+:::
+
+## Holder det?
+
+Holder **grundlaget**?
+*eller*
+Holder **presset** på grundlaget?
+
+:::notes
+[Bæreevne]: sand → mørtel → beton
+
+[Bæreevne]: <https://ordnet.dk/ddo/ordbog?query=b%C3%A6redygtighed>
+ "betydning 2: evne til at tåle vægten af noget"
+
+Evne til at udnytte uden for stort pres
+:::
+
+## Dimensioner
+
+![](../venn.svg)
+
+:::notes
+Økonomi: selvkørende (*ikke* finanser)
+:::
+
+## Historie
+
+* 1972: FN's miljøprogram *+ Jonas*
+* 1987: Brundtland-rapporten
+* 1989: WWW *+ Jonas' første IT-køb*
+* 1992: FN's klimakonvention
+* 1997: Kyoto-aftalen
+* 2015: FN's verdensmål
+* 2018: Greta Thunberg strejker
+
+:::notes
+[Miljøprogram]: etiske principper
+[Brundtland]: økologi og vækst er koblet
+Klimakonvention: 3 dimensioner
+[Kyoto]: aftale om CO~2~-reduktion
+Verdensmål: [#12] dækker bæredygtig IT
+
+[Miljøprogram]: <http://www.un-documents.net/unchedec.htm>
+
+[Brundtland]: <https://da.wikipedia.org/wiki/Brundtlandrapporten>
+
+[Klimakonvention]: <https://da.wikipedia.org/wiki/UNFCCC>
+ "UNFCC: United Nations Framework Convention on Climate Change"
+
+[Kyoto]: <https://da.wikipedia.org/wiki/Kyoto-aftalen>
+ "Kyoto-aftalen: international aftale om drivhusgasreduktion"
+
+[#12]: <https://www.verdensmaal.org/12-ansvarligt-forbrug-og-produktion>
+ "Ansvarligt forbrug og produktion"
+:::
+
+# Tiltag { timing=60 }
+
+Maskiner
+
+Information
+
+Trafik
+
+# Maskiner
+
+![](../booth.jpg)
+
+:::notes
+Computere i alle størrelser
+
+Hvor mange computere på billedet?
+1/2 maskine: 4 paneler i alt
+1 [human computer]: [Kathleen Booth]
+
+[human computer]: <https://en.wikipedia.org/wiki/Computer_(occupation)>
+ "computer: one who computes"
+
+[Kathleen Booth]: <https://en.wikipedia.org/wiki/Kathleen_Booth>
+ "Kathleen Booth - opfinderen af computer-sproget Assemply"
+:::
+
+## Maskinspild
+
+Travl blæser
+
+Lir
+(GPS, wifi, kamera, batteri...)
+
+For mange
+eller udenfor kontrol
+
+:::notes
+Bærbar lader også oppe på hylden
+
+For mange: Udbyders wifi + egen + naboers
+Kontrol: Udbyders wifi + telefon er låst
+→ Farlig når leverandør mister interessen
+:::
+
+## Sunde maskiner
+
+Kedelige og praktiske standardmodeller
+→ Klodsede kasser
+→ Udskifteligt batteri
+
+(Gen)brugbar med Fri software
+→ undgå Apple og Nvidia
+
+:::notes
+Kasser: meget luft, ikke meget kraft
+
+Bilbatteri er upræcist til mobiltelefoner
+
+Genbrug: Leverandør gider aldrig genbrug
+:::
+
+# Information { timing=60 }
+
+![](../floppy.jpg)
+
+:::notes
+Info: Prorammer + dokumenter
+
+Biblen fylder (måske) een 3½" diskette
+:::
+
+## Programmer
+
+![](../apollo.jpg)
+
+:::notes
+Margaret Hamilton, leder af NASA team
+
+Al kode ombord "ørnen" ved månelandingen
+[3,2 MB kode] i sproget Assembly
+→ Assembly blev udviklet af Kathleen Booth
+
+[3,2 MB kode]: <https://github.com/chrislgarry/Apollo-11>
+ "Arkiv af kildekoden til landingsmodulet for Apollo-programmet"
+:::
+
+## Dokumentspild
+
+Smileys i sms :smile:
+
+**Fede** bogstaver i mail
+
+Billeder fylder mere end 1000 ord
+
+Diskretion
+Overvågning
+
+:::notes
+Smiley eller emoji: x2
+Email med stil: x3 (eller op til x20)
+
+Diskretion/overvågning: blokerer for genbrug
+→ avis i bankboks / med kommentator
+:::
+
+## Sund information
+
+Brug lokale og præcise programmer
+Gem dokumenter i åbne og præcise formater
+
+:::notes
+Mailprogram ← webmail
+Kontorprogrammer ← Google docs
+[Ren tekst] ← [tekst m/ stil] ← Layout ← Film
+[Markdown] ← [ODF] ← [PDF] ← [AV1]
+
+[Ren tekst]: <https://useplaintext.email/>
+ "Guide til simpel tekst email"
+
+[tekst m/ stil]: <https://opensource.com/article/17/6/3-alternatives-libreoffice-writer>
+ "Anmeldelse af letvægts tekstbehandlingsprogrammer"
+
+[Markdown]: <https://markdown.dk/>
+ "Portal om opmærkningssproget Markdown"
+
+[ODF]: <https://da.wikipedia.org/wiki/OpenDocument>
+ "Wikipedia-artikel om kontordataformatet OpenDocument"
+
+[PDF]: <https://pdfreaders.org/>
+ "Liste over Fri PDF-læsere"
+
+[AV1]: <https://en.wikipedia.org/wiki/AV1>
+ "Wikipedia-artikel om filmformatet AV1"
+:::
+
+# Trafik
+
+![](../net.jpg)
+
+:::notes
+[Opte Project]: <30% af [Internet i 2005]
+16% i Verden, 68% i USA, 82% i Danmark
+Streglængde er svartid
+[Farver]: blå=Nordamerika, gul=Latinamerika, grøn=Europa+Afrika+Mellemøsten
+
+[Opte Project]: <https://en.wikipedia.org/wiki/Opte_Project>
+ "Opte Project: Visualiseringer af Internet over tid"
+
+[Internet i 2005]: <https://ourworldindata.org/internet>
+ "Online brugere over tid"
+
+[Farver]: <https://www.opte.org/the-internet#block-60199ed2a5dea45f0e12f7cd>
+ "Opte visualisering for 2003 (m/ farvekoder nederst på siden)"
+:::
+
+## Trafikspild
+
+For meget
+
+For lang distance
+
+Igen og igen
+
+## Sund trafik
+
+Brug fysiske kabler
+Køb no-bullshit internetadgang
+...og del med din nabo
+
+Tak **nej** til cookies
+Gem dokumenter lokalt
+Del dokumenter skyfrit eller i egen "sky"
+
+:::notes
+Skyfrit: [git-annex], [Seafile]
+Egen [sky]: [Freedombox]
+Del internet: [OpenNDS], [LibreMesh]
+no-[bullshit] internetadgang: [Kviknet], [Unotel]
+
+[git-annex]: <https://git-annex.branchable.com/assistant/>
+ "git-annex: Redskab til at holde data synkrone vha. git"
+
+[Seafile]: <https://www.seafile.com/>
+ "Seafile: Redskab til at holde data synkrone"
+
+[sky]: <https://pluralistic.net/2022/09/28/other-peoples-computers/#clouded-over>
+ "There is no cloud, there is only other people's computers."
+
+[Freedombox]: <https://www.freedombox.org/>
+
+[OpenNDS]: <https://opennds.readthedocs.io/en/stable/overview.html#what-is-opennds>
+ "OpenNDS: Fri netværksservice til at åbne for netværksadgang"
+
+[LibreMesh]: <https://libremesh.org/>
+ "LibrMesh: Frit netværkssystem til at opsætte trådløs mesh-netværk"
+
+[bullshit]: <https://en.wikipedia.org/wiki/On_Bullshit>
+ "bullshit: tale for at overtale uden hensyn til sandhedsværdi"
+
+[Kviknet]: <https://kviknet.dk/>
+ "Kviknet - internetudbyder"
+
+[Unotel]: <https://unotel.dk/>
+ "Unotel - mobiltelefoniudbyder"
+:::
+
+## Sociale medier
+
+[arrgh...]
+
+:::notes
+Hvad er sundest - MacDonalds eller Burger King?
+:::
+
+## Sunde sociale medier
+
+Åben pludren: Mastodon
+
+Diskussionsrum: Matrix
+
+:::notes
+Mastodon: Prøv først som web-service
+
+Matrix: Prøv først med klienten [Element]
+
+[Element]: <https://element.io/>
+ "Element - web- og ægte klient til chat-systemet Matrix"
+:::
+
+# Gør hvad du vil
+
+:::notes
+Hvad du **vil**, ikke hvad du **lyster**
+→ Vil du sige mere end 1000 ord?
+Amuletten Auryn i [Den uendelige historie]
+Kreativitet er essentielt (ikke tidsfordriv)
+→ Bibel - "Momo og tidsrøverne" er kortere
+
+[Den uendelige historie]: <https://da.wikipedia.org/wiki/Den_uendelige_historie>
+ "Michael Ende: Den uendelige historie"
+:::
+
+## Bæredygtig? { timing=60 }
+
+![](../is.jpg)
+
+:::notes
+Holder isen med flere i bilen?
+:::
+
+## Politik 1989
+
+Murens fald
+
+Copyright normaliseres
+
+:::notes
+fri konkurrence "vandt"
+
+Copyright: USA med i [Bernerkonventionen]
+
+[Bernerkonventionen]: <https://en.wikipedia.org/wiki/Berne_Convention>
+ "Wikipedia-artikel om Bernerkonventionen (engelsk udgave som omtaler USA)"
+:::
+
+## Politik 2023
+
+Informationshandel
+
+Ekkokamre
+
+Økologi?
+
+:::notes
+[handel]: 197 mia. pers. målinger/dag
+→ hvert 4. minut måles din position+skærm
+→ 19,6 gange/minut videresælges dine data
+
+[handel]: <https://www.iccl.ie/digital-data/iccl-report-on-the-scale-of-real-time-bidding-data-broadcasts-in-the-u-s-and-europe/>
+ "Rapport om afsløring af omfang af handel med personovervågningsdata"
+:::
+
+## Energi 2010 { timing=60 }
+
+Emails frigiver 1% af pers. CO~2~
+→ 4/5 er spam
+
+:::notes
+[email]: 1% CO~2~ for alm. "grøn" borger
+→ 80% til spam - 33 mia. KWh/år
+→ 1/60 af CO~2~ for sneglepost pr. besked
+
+[email]: <https://www.theguardian.com/environment/green-living-blog/2010/oct/21/carbon-footprint-email>
+ "Avisartikel om estimeret CO2 for email"
+:::
+
+## Energi 2015 { timing=60 }
+
+Internet frigiver 2% af Verdens CO~2~
+
+:::notes
+
+[datacentre]: 2% af al CO~2~ i 2015
+→ samme som flytrafik
+
+[datacentre]: <https://internethealthreport.org/2018/the-internet-uses-more-electricity-than/>
+ "Gennemgang af energiforbrug for IT"
+:::
+
+## Energi 2015 (take 2)
+
+**Datacentre** frigiver 2% af Verdens CO~2~
+
+→ Samlet IT-drift frigiver 18%
+→ fordobles hvert 10. år
+
+:::notes
+datacentre: 11% af [samlet IT-forbrug]
+
+[samlet IT-forbrug]: <https://www.researchgate.net/publication/320225452_Total_Consumer_Power_Consumption_Forecast>
+ "Analyse af IT-forbrug i 2015 og fremskrevet til 2025"
+:::
+
+## Hvor sidder blæseren?
+
+![](../boat.jpg)
+
+:::notes
+Penge lugter ikke - Internet blæser ikke
+
+Greta Thunberg: 14 dages [sejltur] til USA
+→ [14 dage] i superbåd til [20 mio. kroner]
+→ 20 dage retur med katamaran
+
+[sejltur]: <https://en.wikipedia.org/wiki/Transatlantic_Voyages_of_Greta_Thunberg>
+ "Wikipedia-artikel: Transatlantic Voyages of Greta Thunberg"
+
+[14 dage]: <https://en.wikipedia.org/wiki/Gitana_16#Greta_Thunberg_Transatlantic_Voyage>
+ "Thunberg's crossing of the Atlantic started on 14 August 2019 and she arrived on 28 August."
+
+[20 mio. kroner]: <https://kidadl.com/facts/malizia-ii-facts-details-on-greta-thunberg-yacht-revealed>
+ "Malizia II [...] costs 2,700,000 Euros"
+:::
+
+# Grønne tanker { timing=60 }
+
+Øko-mærket
+Genbrug
+Fairtrade
+~~~Ecotex~~
+
+:::notes
+Shoppe økologi i Brugsen som sport
+:::
+
+## "Grøn IT"
+
+Fairphone
+
+Grøn energi
+
+Genbrug
+
+Sluk telefonen om natten
+
+Brug gammeldaws smiley :-)
+
+:::notes
+[Murena]: bæredygtig mobiltelefon
+→ brugt Fairphone
+→ Det fri system [/e/os]
+
+[Murena]: <https://murena.com/products/smartphones/>
+
+[/e/os]: <https://e.foundation/>
+ "/e/os - frit licenseret og Overvågningsfri udgave af Android"
+:::
+
+## "IT permakultur"
+
+Køb og brug med omtanke og respekt
+
+Cirkulær økonomi
+→ cirkulær gaveøkonomi
+
+Subsidiaritet (=nærhed)
+→ simplest mulige kredsløb
+
+:::notes
+[cirkulær] - Vugge-til-vugge
+→ [gaveøkonomi] - Vidensdeling som mål
+
+[nærhed] - Løs problemer på laveste niveau
+
+[cirkulær]: <https://da.wikipedia.org/wiki/Cirkul%C3%A6r_%C3%B8konomi>
+ "Wikipedia-artikel om cirkulær økonomi"
+
+[gaveøkonomi]: <http://gift-economy.jones.dk/>
+ "Universitetsspeciale om gaveøkonomi indenfor IT"
+
+[nærhed]: <https://en.wikipedia.org/wiki/Subsidiarity>
+ "Wikipedia-artikel om subsidiaritet på engelsk"
+:::
+
+## Bæredygtig IT
+
+Kollektive maskiner, dokumenter, og netværk
+→ Hold det gennemskueligt
+→ Respektér enhver
+→ Del med alle
+
+Lokal økonomi
+(ikke fællesøkonomi)
+
+:::notes
+Gennemskueligt - inviterer til engagement
+Ikke kommunisme, eller socialisme
+(men måske socio-anarki)
+:::
+
+## Bæredygtige Jonas { timing=60 }
+
+* Letvægtsdrift af skoler, bl.a. Kaospiloterne
+* genbrug af IT-skrot i bofællesskab og gymnasier
+* SMS-robot og live video til eksperimentalteater
+* Digital selvforsvar i Europaparlamentet
+* Skræddersyet system til bærbare og telefoner
+
+Altsammen global folkeeje, delt gennem Debian
+
+# Bæredygtig att*IT*ude
+
+Bevidst IT-brug som praktisk sport
+
+Snak om IT som social sport
+
+Del dine bidrag proaktivt
+→ offentliggør dine tanker
+→ Brug fri licens
+
+:::notes
+Pointe: IT er konkret (ikke magisk)
+→ Bare maskiner, informationer og trafik
+:::
+
+# Tak og værs'go { timing=60 }
+
+Denne præsentation: <https://dr.jones.dk/it/testrup/>
+Udgivet under licensen CC BY-SA 4.0
+(tryk "s" for noter og referencer)
+
+:::notes
+Denne præsentation er bygget med [Pandoc](https://pandoc.org/)
+og fremvist med [reveal.js](https://revealjs.com/).
+Udgivet inkl. [kildemateriale](https://source.jones.dk/jones/content/tree)
+af [Jonas Smedegaard](https://dr.jones.dk/), <dr@jones.dk>
+under licensen [CC BY-SA 4.0].
+
+Billedet
+[is](https://www.pexels.com/photo/car-on-a-frozen-lake-7099850/)
+er udgivet under [en liberal licens](https://www.pexels.com/da-DK/license/).
+
+Billedet
+[venn](https://commons.wikimedia.org/wiki/File:Diagramme_de_Venn_du_d%C3%A9veloppement_durable.svg)
+er udgivet under licensen [CC BY-SA 4.0],
+[floppy](https://commons.wikimedia.org/wiki/File:Forty_years_of_Removable_Storage.jpg)
+under [CC BY 2.0],
+og [net](https://commons.wikimedia.org/wiki/File:Internet_map_1024.jpg)
+under [CC BY 2.5].
+
+Billedet
+[apollo](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Margaret_Hamilton_-_restoration.jpg/482px-Margaret_Hamilton_-_restoration.jpg)
+er under [offentligt domæne].
+Billedet
+[booth](http://www.computinghistory.org.uk/det/32489/Kathleen-Booth/)
+ejes af Centre for Computing History of Cambridge
+og vil komme under [offentligt domæne] i 2025.
+
+[CC BY 2.0]: <https://creativecommons.org/licenses/by/2.0/deed.da>
+ "Licensen Creative Commons Kreditering 2.0 Generisk"
+
+[CC BY 2.5]: <https://creativecommons.org/licenses/by/2.5/deed.da>
+ "Licensen Creative Commons Kreditering 2.5 Generisk"
+
+[CC BY-SA 4.0]: <https://creativecommons.org/licenses/by-sa/4.0/deed.da>
+ "Licensen Creative Commons Kreditering-Deling på samme vilkår 4.0 International"
+
+[offentligt domæne]: <https://da.wikipedia.org/wiki/Offentligt_dom%C3%A6ne>
+ "Wikipedia artikel om begrebet offentligt domæne"
+:::
diff --git a/it/venn.svg b/it/venn.svg
new file mode 100644
index 0000000..acc6bdc
--- /dev/null
+++ b/it/venn.svg
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="507.0564"
+ height="484.38651"
+ id="svg2221"
+ sodipodi:version="0.32"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="venn.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true"
+ version="1.1"
+ viewBox="0 0 390.04339 372.60501"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata2244">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Benitronne &lt;https://commons.wikimedia.org/wiki/User:Benitronne&gt;</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>Wikimedia</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:source>https://commons.wikimedia.org/wiki/File:Diagramme_de_Venn_du_d%C3%A9veloppement_durable.svg</dc:source>
+ <dc:language>da</dc:language>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs2242" />
+ <sodipodi:namedview
+ inkscape:window-height="623"
+ inkscape:window-width="1076"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="261"
+ inkscape:cy="283.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2221"
+ showgrid="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:window-maximized="1"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" />
+ <path
+ style="fill:#8fff80;fill-opacity:1"
+ id="path2227"
+ d="m 325.02171,130 c 0,-71.797017 -58.20298,-130 -130,-130 C 123.22469,0 65.021707,58.202983 65.021707,130" />
+ <path
+ style="fill:#ff8080;fill-opacity:1"
+ id="path2229"
+ d="M 65.021707,130 C 2.8436692,165.89851 -18.460107,245.40526 17.438405,307.5833 53.336917,369.76134 132.84367,391.06512 195.02171,355.1666" />
+ <path
+ style="fill:#809eff;fill-opacity:1"
+ id="path2231"
+ d="m 195.02171,355.1666 c 62.17804,35.89852 141.68479,14.59474 177.5833,-47.5833 C 408.50352,245.40526 387.19975,165.89851 325.02171,130" />
+ <path
+ style="fill:#fff881;fill-opacity:1"
+ id="path2233"
+ d="m 195.02171,130 c -40.22214,-23.22226 -89.77786,-23.22226 -130.000003,0 0,46.44453 24.77786,89.36104 65.000003,112.5833" />
+ <path
+ style="fill:#da81ff;fill-opacity:1"
+ id="path2235"
+ d="m 130.02171,242.5833 c 0,46.44453 24.77786,89.36104 65,112.5833 40.22214,-23.22226 65,-66.13877 65,-112.5833" />
+ <path
+ style="fill:#81ffe9;fill-opacity:1"
+ id="path2237"
+ d="m 260.02171,242.5833 c 40.22214,-23.22226 65,-66.13877 65,-112.5833 -40.22214,-23.22226 -89.77786,-23.22226 -130,0" />
+ <path
+ style="fill:#ffffff"
+ id="path2239"
+ d="m 195.02171,130 c -40.22214,23.22226 -65,66.13878 -65,112.5833 40.22214,23.22227 89.77786,23.22227 130,0 0,-46.44452 -24.77786,-89.36104 -65,-112.5833" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.5641px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="173.03488"
+ y="74.252579"
+ id="text3165-en"><tspan
+ sodipodi:role="line"
+ id="tspan3167-en"
+ x="173.03488"
+ y="74.252579">Miljø</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.5641px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="69.882774"
+ y="278.29358"
+ id="text3169-en"><tspan
+ sodipodi:role="line"
+ id="tspan3171-en"
+ x="69.882774"
+ y="278.29358">Samfund</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.5641px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="321.81049"
+ y="276.56311"
+ id="text3173-en"><tspan
+ sodipodi:role="line"
+ id="tspan3175-en"
+ x="321.81049"
+ y="276.56311">Økonomi</tspan></text>
+<!--
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.4103px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="195.48048"
+ y="299.10242"
+ id="text3177-en"><tspan
+ sodipodi:role="line"
+ id="tspan3179-en"
+ x="195.48048"
+ y="299.10242">Rimeligt</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.4103px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="120.02026"
+ y="156.99292"
+ id="text3181-en"><tspan
+ sodipodi:role="line"
+ id="tspan3183-en"
+ x="120.02026"
+ y="156.99292">Tåleligt</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.4103px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="275.4729"
+ y="156.99292"
+ id="text3185-en"><tspan
+ sodipodi:role="line"
+ id="tspan3187-en"
+ x="275.4729"
+ y="156.99292">Levedygtigt</tspan></text>
+-->
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.5641px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="196.44489"
+ y="209.96809"
+ id="text3189-en"><tspan
+ sodipodi:role="line"
+ id="tspan3191-en"
+ x="196.44489"
+ y="209.96809">Holdbart</tspan></text>
+</svg>
diff --git a/me/index.ttl b/me/index.ttl
index 7fa4bcd..00766e1 100644
--- a/me/index.ttl
+++ b/me/index.ttl
@@ -37,20 +37,18 @@ dbpedia:Electronic_music
dbpedia:Linux
dc:title "Linux" .
-<>
+<> a foaf:PersonalProfileDocument ;
dc:description "Friend-of-a-Friend description of Jonas Smedegaard" ;
dc:title "FOAF Document for Jonas Smedegaard" ;
dcterms:modified "2012-05-11" ;
admin:errorReportsTo <dr@jones.dk> ;
admin:generatorAgent <mkfoaf.sh> ;
- a foaf:PersonalProfileDocument ;
foaf:maker :me ;
foaf:primaryTopic :me ;
foaf:topic :me ;
wot:assurance <index.rdf_sig.pgp> .
-:agus
- a foaf:Person ;
+:agus a foaf:Person ;
foaf:account [
a foaf:OnlineAccount ;
foaf:accountServiceHomepage <http://www.facebook.com/> ;
@@ -63,14 +61,12 @@ dbpedia:Linux
foaf:homepage <http://aguspurnomo.co.cc/>, <http://www.aguspurnomo.web.id/> ;
foaf:jabberID "aguspurnomo@jabber.org" .
-:alboy
- a foaf:Person ;
+:alboy a foaf:Person ;
foaf:mbox_sha1sum "b9fe617c22f6f319c1fa8ae37d28b0a03ccddb92" ;
foaf:name "Anna Boysen" .
-:alvilda
+:alvilda a foaf:Person ;
rel:childOf :siri, :troels ;
- a foaf:Person ;
foaf:account [
a foaf:OnlineAccount ;
foaf:accountName "arjakobsen" ;
@@ -82,20 +78,16 @@ dbpedia:Linux
foaf:name "Alvilda Reiter Jakobsen" ;
foaf:surname "Jakobsen" .
-:anders
- a foaf:Person ;
+:anders a foaf:Person ;
foaf:mbox_sha1sum "eaa2fd2f709fbd8a37ccc59e665378baf5de8456" ;
foaf:name "Anders Krøyer" .
-:annika
- a foaf:Person ;
+:annika a foaf:Person ;
foaf:mbox_sha1sum "32887a253a4dc6ffe77e46b78d7a81df91fea498" ;
foaf:name "Annika B. Lewis" .
-:asbjorn
- rel:childOf :siri, :troels ;
- a foaf:Person ;
- foaf:account [
+:asbjorn a foaf:Person ;
+ rel:childOf :siri, :troels ; foaf:account [
a foaf:OnlineAccount ;
foaf:accountName "din.mor.2.3" ;
foaf:accountServiceHomepage <http://www.facebook.com/> ;
@@ -107,8 +99,7 @@ dbpedia:Linux
foaf:surname "Jakobsen" ;
foaf:weblog <http://gsogh.blogspot.com/> .
-:cbm
- a foaf:Person ;
+:cbm a foaf:Person ;
foaf:account [
a foaf:OnlineAccount ;
foaf:accountName "bangmadsen" ;
@@ -117,13 +108,11 @@ dbpedia:Linux
] ;
foaf:name "Christen Bang-Madsen" .
-:grit
- a foaf:Person ;
+:grit a foaf:Person ;
foaf:mbox_sha1sum "b4f1bce555f57f1865b80b278553ce13a62c9efb" ;
foaf:name "Grit Kölmel" .
-:henry
- a foaf:Person ;
+:henry a foaf:Person ;
rdfs:seeAlso <http://bblfish.net/people/henry/card#me> ;
foaf:firstName "Henry" ;
foaf:homepage <http://bblfish.net/> ;
@@ -132,8 +121,7 @@ dbpedia:Linux
foaf:surname "Story" ;
foaf:weblog <http://bblfish.net/> .
-:inger
- a foaf:Person ;
+:inger a foaf:Person ;
rdfs:seeAlso <http://www.viaf.org/viaf/48649414/> ;
foaf:firstName "Inger" ;
foaf:made [
@@ -147,8 +135,7 @@ dbpedia:Linux
foaf:surname "Smedegaard" ;
foaf:weblog <http://ingersblog-inger.blogspot.com/> .
-:jgh
- a foaf:Person ;
+:jgh a foaf:Person ;
foaf:account [
a foaf:OnlineAccount ;
foaf:accountName "jacobgorm" ;
@@ -158,8 +145,7 @@ dbpedia:Linux
foaf:mbox_sha1sum "8b1c74c82ce2169f1af263bf2b420deafd6a55ff" ;
foaf:name "Jacob Gorm Hansen" .
-:lp
- a foaf:Person ;
+:lp a foaf:Person ;
foaf:mbox_sha1sum "dc588c62e441d02ac2aa60fb5fa0d082b63552cf" ;
foaf:name "Michael Lenander Peronard" .
@@ -168,13 +154,13 @@ dbpedia:Linux
foaf:mbox_sha1sum "3c6119faf9142ab6fd98bce33b84e7082e1004c9" ;
foaf:name "Mayu Takenouchi" .
-:me
+:me a foaf:Person ;
book:toReadCopyOf <http://purl.org/NET/book/isbn/978-0-14-200028-1#book> ;
lang:masters "danish", "english" ;
lang:reads "german", "norwegian", "swedish" ;
lang:speaks "german" ;
lang:writes "german" ;
- visit:country country:BA, country:BE, country:BR, country:CA, country:CH, country:CZ, country:DE, country:DK, country:ES, country:FI, country:FR, country:GR, country:HU, country:ID, country:IE, country:IN, country:IS, country:IT, country:JP, country:LU, country:NL, country:NO, country:PL, country:SE, country:SG, country:TW, country:UK, country:US, country:VN ;
+ visit:country country:AL, country:BA, country:BE, country:BR, country:CA, country:CH, country:CZ, country:DE, country:DK, country:ES, country:FI, country:FR, country:GR, country:HR, country:HU, country:ID, country:IE, country:IN, country:IS, country:IT, country:JP, country:LU, country:ME, country:NL, country:NO, country:PL, country:RS, country:SE, country:SG, country:TW, country:UK, country:US, country:VN, country:XK ;
visit:usstate usstate:CA, usstate:MA, usstate:NY ;
rel:childOf :cbm, :inger ;
rel:closeFriendOf :stinus ;
@@ -199,7 +185,6 @@ dbpedia:Linux
a bio:Birth
] ;
bio:olb "Jonas Smedegaard is a freelance systems administrator and developer working with resource sharing within and between organisations, mostly schools and NGOs; designing systems both intuitive to use, strictly based on open standards, and purely built from Free Software. Specialisations: Long-term sustainable and maintainable custom system design. Flavors of freedoms (licensing and spirit) within Free Software.", "Jonas Smedegaard er selvstændig systemadministrator og udvikler med resourcedeling mellem organisationer som speciale, mest skoler og NGOer; designer systemer som er både intuitive at bruge, baseret udelukkende på åbne standarder, og bygget alene med Fri Software. Specialiseringer: Design af bæredygtige og langtidsholdbare tilpassede systemer. Varianter af friheder (licensering og intention) indenfor Fri Software."@da ;
- a foaf:Person ;
rdfs:seeAlso <facebook/#me>, <linkedin>, <presence/#me> ;
cert:key [
a cert:RSAPublicKey ;
@@ -307,8 +292,7 @@ dbpedia:Linux
foaf:workInfoHomepage <redpill> ;
foaf:workplaceHomepage <> .
-:melvin
- a foaf:Person ;
+:melvin a foaf:Person ;
rdfs:seeAlso <http://melvincarvalho.com/#me> ;
foaf:firstName "Melvin" ;
foaf:homepage <http://melvincarvalho.com/> ;
@@ -317,27 +301,23 @@ dbpedia:Linux
foaf:surname "Carvalho" ;
foaf:weblog <http://melvincarvalho.com/blog> .
-:mogens
- a foaf:Person ;
+:mogens a foaf:Person ;
foaf:firstName "Mogens" ;
foaf:name "Mogens Bisgaard" ;
foaf:surname "Bisgaard" ;
foaf:weblog <http://www.madkultur.dk/> .
-:poll
- a foaf:Person ;
+:poll a foaf:Person ;
foaf:firstName "Christian" ;
foaf:name "Christian Poll" ;
foaf:surname "Poll" ;
foaf:weblog <http://groenlivsstil.blogspot.com/> .
-:propel
- a foaf:Person ;
+:propel a foaf:Person ;
foaf:mbox_sha1sum "cb8bf5f86f9272ca7c4496507376807f2eb3f1e0" ;
foaf:name "Kim Lindgren Propel" .
-:rodolfo
- a foaf:Person ;
+:rodolfo a foaf:Person ;
rdfs:seeAlso <http://cosmico.net/foaf.rdf#> ;
foaf:firstName "Rodolfo" ;
foaf:homepage <http://cosmico.net> ;
@@ -345,8 +325,7 @@ dbpedia:Linux
foaf:name "Rodolfo Gouveia" ;
foaf:surname "Gouveia" .
-:ronald
- a foaf:Person ;
+:ronald a foaf:Person ;
foaf:account [
a foaf:OnlineAccount ;
foaf:accountName "ronaldjensen" ;
@@ -361,8 +340,7 @@ dbpedia:Linux
foaf:mbox_sha1sum "7953869a713727fbae42ea8bae09a398d1960ddc" ;
foaf:name "Ronald Jensen" .
-:siri
- a foaf:Person ;
+:siri a foaf:Person ;
rdfs:seeAlso <http://sirireiter.dk/foaf.rdf> ;
foaf:firstName "Siri" ;
foaf:homepage <http://sirireiter.dk/> ;
@@ -373,18 +351,15 @@ dbpedia:Linux
foaf:weblog <http://sirireiter.dk/blog/> ;
foaf:workplaceHomepage <http://siri.jones.dk/> .
-:steinbach
- a foaf:Person ;
+:steinbach a foaf:Person ;
foaf:mbox_sha1sum "2285c1766e808810ae93320d72f9631372ece10f" ;
foaf:name "Morten Steinbach" .
-:stinus
- a foaf:Person ;
+:stinus a foaf:Person ;
foaf:mbox_sha1sum "c19d278a77f3fd043b9af6ea94670ed8ee38ca1e" ;
foaf:name "Stinus Storm Mikkelsen" .
-:troels
- a foaf:Person ;
+:troels a foaf:Person ;
foaf:firstName "Troels" ;
foaf:name "Troels Christian Jakobsen" ;
foaf:surname "Jakobsen" ;
@@ -410,178 +385,164 @@ dbpedia:Linux
<http://last.fm/>
dc:title "Last FM" .
-<http://purl.org/rss/1.0/>
- dc:title "RSS" ;
- a foaf:Document .
+<http://purl.org/rss/1.0/> a foaf:Document ;
+ dc:title "RSS" .
<http://sirireiter.dk/blog/>
dc:title "Skitseblog" .
-<http://ws.audioscrobbler.com/1.0/user/JonasSmedegaard/recenttracks.rss>
+<http://ws.audioscrobbler.com/1.0/user/JonasSmedegaard/recenttracks.rss> a creativeCommons:channel ;
dc:description "Jonas Smedegaard's last played tracks, as recorded by Last.FM" ;
- dc:title "Last.FM Musical Profile: Jonas Smedegaard" ;
- a creativeCommons:channel .
+ dc:title "Last.FM Musical Profile: Jonas Smedegaard" .
-country:BA
+country:AL a iso:Country ;
+ iso:code "AL" ;
+ iso:name "Albania" .
+
+country:BA a iso:Country ;
iso:code "BA" ;
- iso:name "Bosnia and Herzegovina" ;
- a iso:Country .
+ iso:name "Bosnia and Herzegovina" .
-country:BE
+country:BE a iso:Country ;
iso:code "BE" ;
- iso:name "Belgium" ;
- a iso:Country .
+ iso:name "Belgium" .
-country:BR
+country:BR a iso:Country ;
iso:code "BR" ;
- iso:name "Brazil" ;
- a iso:Country .
+ iso:name "Brazil" .
-country:CA
+country:CA a iso:Country ;
iso:code "CA" ;
- iso:name "Canada" ;
- a iso:Country .
+ iso:name "Canada" .
-country:CH
+country:CH a iso:Country ;
iso:code "CH" ;
- iso:name "Switzerland" ;
- a iso:Country .
+ iso:name "Switzerland" .
-country:CZ
+country:CZ a iso:Country ;
iso:code "CZ" ;
- iso:name "Czech Republic" ;
- a iso:Country .
+ iso:name "Czech Republic" .
-country:DE
+country:DE a iso:Country ;
iso:code "DE" ;
- iso:name "Germany" ;
- a iso:Country .
+ iso:name "Germany" .
-country:DK
+country:DK a iso:Country ;
iso:code "DK" ;
iso:name "Denmark" ;
- a iso:Country ;
foaf:page <http://www.denmark.dk/> .
-country:ES
+country:ES a iso:Country ;
iso:code "ES" ;
- iso:name "Spain" ;
- a iso:Country .
+ iso:name "Spain" .
-country:FI
+country:FI a iso:Country ;
iso:code "FI" ;
- iso:name "Finland" ;
- a iso:Country .
+ iso:name "Finland" .
-country:FR
+country:FR a iso:Country ;
iso:code "FR" ;
- iso:name "France" ;
- a iso:Country .
+ iso:name "France" .
-country:GR
+country:GR a iso:Country ;
iso:code "GR" ;
- iso:name "Greece" ;
- a iso:Country .
+ iso:name "Greece" .
+
+country:HR a iso:Country ;
+ iso:code "HR" ;
+ iso:name "Croatia" .
-country:HU
+country:HU a iso:Country ;
iso:code "HU" ;
- iso:name "Hungary" ;
- a iso:Country .
+ iso:name "Hungary" .
-country:ID
+country:ID a iso:Country ;
iso:code "ID" ;
- iso:name "Indonesia" ;
- a iso:Country .
+ iso:name "Indonesia" .
-country:IE
+country:IE a iso:Country ;
iso:code "IE" ;
- iso:name "Ireland" ;
- a iso:Country .
+ iso:name "Ireland" .
-country:IN
+country:IN a iso:Country ;
iso:code "IN" ;
- iso:name "India" ;
- a iso:Country .
+ iso:name "India" .
-country:IS
+country:IS a iso:Country ;
iso:code "IS" ;
- iso:name "Iceland" ;
- a iso:Country .
+ iso:name "Iceland" .
-country:IT
+country:IT a iso:Country ;
iso:code "IT" ;
- iso:name "Italy" ;
- a iso:Country .
+ iso:name "Italy" .
-country:JP
+country:JP a iso:Country ;
iso:code "JP" ;
- iso:name "Japan" ;
- a iso:Country .
+ iso:name "Japan" .
-country:LU
+country:LU a iso:Country ;
iso:code "LU" ;
- iso:name "Luxembourg" ;
- a iso:Country .
+ iso:name "Luxembourg" .
-country:NL
+country:ME a iso:Country ;
+ iso:code "ME" ;
+ iso:name "Montenegro" .
+
+country:NL a iso:Country ;
iso:code "NL" ;
- iso:name "The Netherlands" ;
- a iso:Country .
+ iso:name "The Netherlands" .
-country:NO
+country:NO a iso:Country ;
iso:code "NO" ;
- iso:name "Norway" ;
- a iso:Country .
+ iso:name "Norway" .
-country:PL
+country:PL a iso:Country ;
iso:code "PL" ;
- iso:name "Poland" ;
- a iso:Country .
+ iso:name "Poland" .
+
+country:RS a iso:Country ;
+ iso:code "RS" ;
+ iso:name "Republic of Serbia" .
-country:SE
+country:SE a iso:Country ;
iso:code "SE" ;
- iso:name "Sweden" ;
- a iso:Country .
+ iso:name "Sweden" .
-country:SG
+country:SG a iso:Country ;
iso:code "SG" ;
- iso:name "Singapore" ;
- a iso:Country .
+ iso:name "Singapore" .
-country:TW
+country:TW a iso:Country ;
iso:code "TW" ;
- iso:name "Taiwan" ;
- a iso:Country .
+ iso:name "Taiwan" .
-country:UK
+country:UK a iso:Country ;
iso:code "UK" ;
- iso:name "United Kingdom" ;
- a iso:Country .
+ iso:name "United Kingdom" .
-country:US
+country:US a iso:Country ;
iso:code "US" ;
- iso:name "United States" ;
- a iso:Country .
+ iso:name "United States" .
-country:VN
+country:VN a iso:Country ;
iso:code "VN" ;
- iso:name "Vietnam" ;
- a iso:Country .
+ iso:name "Vietnam" .
+
+country:XK a iso:Country ;
+ iso:code "XK" ;
+ iso:name "Kosovo" .
-usstate:CA
+usstate:CA a usstate:USState ;
state:code "CA" ;
- state:name "California" ;
- a usstate:USState .
+ state:name "California" .
-usstate:MA
+usstate:MA a usstate:USState ;
state:code "MA" ;
- state:name "Massachusetts" ;
- a usstate:USState .
+ state:name "Massachusetts" .
-usstate:NY
+usstate:NY a usstate:USState ;
state:code "NY" ;
- state:name "New York" ;
- a usstate:USState .
+ state:name "New York" .
<http://www.debian.org/>
dc:description "The Universal Operating System" ;
@@ -590,9 +551,8 @@ usstate:NY
<http://www.facebook.com/>
dc:title "Facebook" .
-<http://www.foaf-project.org/>
- dc:title "FOAF Project" ;
- a foaf:Document .
+<http://www.foaf-project.org/> a foaf:Document ;
+ dc:title "FOAF Project" .
<http://www.lilleskolen-odense.dk/>
dc:title "Stærmose Lilleskole" .
@@ -610,18 +570,14 @@ usstate:NY
<http://www.vandelefterskole.dk/>
dc:title "Vandel Ungdomsskole" .
-<http://www.w3.org/2001/sw/>
- dc:title "SemWeb" ;
- a foaf:Document .
+<http://www.w3.org/2001/sw/> a foaf:Document ;
+ dc:title "SemWeb" .
-<http://www.w3.org/MarkUp/>
- dc:title "HTML" ;
- a foaf:Document .
+<http://www.w3.org/MarkUp/> a foaf:Document ;
+ dc:title "HTML" .
-<http://www.w3.org/Style/CSS/>
- dc:title "CSS" ;
- a foaf:Document .
+<http://www.w3.org/Style/CSS/> a foaf:Document ;
+ dc:title "CSS" .
-[]
- a wot:PubKey ;
+[] a wot:PubKey ;
wot:pubkeyAddress <index.rdf_sig.pgp> .
diff --git a/msg.da.po b/msg.da.po
index b733093..8bc8aaa 100644
--- a/msg.da.po
+++ b/msg.da.po
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2021-10-23 22:38+0200\n"
+"POT-Creation-Date: 2021-10-23 22:47+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -49,37 +49,37 @@ msgstr ""
#. type: Plain text
msgid ""
"On [Matrix][] I hang out in the chatrooms [#debian-matrix:matrix.org]"
-"[https://matrix.to/#/#debian-matrix:matrix.org] and [#community-pureos:talk."
-"puri.sm][https://matrix.to/#/#community-pureos:talk.puri.sm], among others."
+"(https://matrix.to/#/#debian-matrix:matrix.org) and [#community-pureos:talk."
+"puri.sm](https://matrix.to/#/#community-pureos:talk.puri.sm), among others."
msgstr ""
#. type: Plain text
msgid ""
-"On [Jabber][] I hang out in the chatroom [openhardware][https://"
-"magicbroccoli.de/i/#openhardware@conference.magicbroccoli.de?join] ([more "
-"info][https://search.jabber.network/search?q=openhardware], among others."
+"On [Jabber][] I hang out in the chatroom [openhardware](https://"
+"magicbroccoli.de/i/#openhardware@conference.magicbroccoli.de?join) ([more "
+"info](https://search.jabber.network/search?q=openhardware), among others."
msgstr ""
#. type: Plain text
msgid ""
-"On [IRC][] I hang out in the channels [#tinker][ircs://irc.oftc.net:6697/"
-"tinker], [#debian][ircs://irc.oftc.net:6697/debian] and [#debian-devel]"
-"[ircs://irc.oftc.net:6697/debian-devel] at [OFTC.net](https://oftc.net/), "
-"and [#olimex][ircs://irc.libera.chat:6697/olimex] at [libera.chat](https://"
+"On [IRC][] I hang out in the channels [#tinker](ircs://irc.oftc.net:6697/"
+"tinker), [#debian](ircs://irc.oftc.net:6697/debian) and [#debian-devel]"
+"(ircs://irc.oftc.net:6697/debian-devel) at [OFTC.net](https://oftc.net/), "
+"and [#olimex](ircs://irc.libera.chat:6697/olimex) at [libera.chat](https://"
"libera.chat/), among others."
msgstr ""
#. type: Plain text
msgid ""
-"On email I follow the mailinglists [debian-devel][https://lists.debian.org/"
-"debian-devel/], [debian-freedombox][https://lists.debian.org/debian-"
-"freedombox/], [design-devel][https://alioth-lists.debian.net/cgi-bin/mailman/"
-"listinfo/design-devel], [blend-tinker-devel][https://alioth-lists.debian.net/"
-"cgi-bin/mailman/listinfo/blend-tinker-devel], and [pkg-sugar-devel][https://"
-"alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-sugar-devel] at Debian, "
-"[tinkerphones][https://lists.goldelico.com/mailman/listinfo.cgi/community] "
-"at Goldelico, and [public-rww][https://lists.w3.org/Archives/Public/public-"
-"rww/] at W3C, among others."
+"On email I follow the mailinglists [debian-devel](https://lists.debian.org/"
+"debian-devel/), [debian-freedombox](https://lists.debian.org/debian-"
+"freedombox/), [design-devel](https://alioth-lists.debian.net/cgi-bin/mailman/"
+"listinfo/design-devel), [blend-tinker-devel](ttps://alioth-lists.debian.net/"
+"cgi-bin/mailman/listinfo/blend-tinker-devel), and [pkg-sugar-devel](https://"
+"alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-sugar-devel) at "
+"Debian, [tinkerphones](https://lists.goldelico.com/mailman/listinfo.cgi/"
+"community) at Goldelico, and [public-rww](https://lists.w3.org/Archives/"
+"Public/public-rww/) at W3C, among others."
msgstr ""
#. type: Title ##
@@ -106,22 +106,22 @@ msgstr ""
#. type: Plain text
msgid ""
-"On [Matrix][] I am [@jonas:matrix.jones.dk][https://matrix.to/#/@jonas:"
-"matrix.jones.dk] at my own system, and [@jonas.smedegaard:talk.puri.sm]"
-"[https://matrix.to/#/@jonas.smedegaard:talk.puri.sm] at the system of one of "
-"my clients."
+"On [Matrix][] I am [@jonas:matrix.jones.dk](https://matrix.to/#/@jonas:"
+"matrix.jones.dk) at my own system, and [@jonas.smedegaard:talk.puri.sm]"
+"(https://matrix.to/#/@jonas.smedegaard:talk.puri.sm) at the system of one "
+"of my clients."
msgstr ""
#. type: Plain text
msgid ""
-"On [Jabber][] I am [jonas@jones.dk][xmpp:jonas@jones.dk] and [js@debian.org]"
-"[xmpp:js@debian.org]."
+"On [Jabber][] I am [jonas@jones.dk](xmpp:jonas@jones.dk) and [js@debian.org]"
+"(xmpp:js@debian.org)."
msgstr ""
#. type: Plain text
msgid ""
-"On [IRC][] I am **jonas** at [OFTC.net][https://oftc.net] and **jonas_s** at "
-"[libera.chat][https://libera.chat]."
+"On [IRC][] I am **jonas** at [OFTC.net](https://oftc.net) and **jonas_s** "
+"at [libera.chat](https://libera.chat)."
msgstr ""
#. type: Plain text
@@ -138,7 +138,7 @@ msgstr ""
#. type: Plain text
msgid ""
-"You can also [visit or call me][/info], or we can arrange a virtual audio-"
+"You can also [visit or call me](/info), or we can arrange a virtual audio-"
"only or audio/video meeting."
msgstr ""
diff --git a/msg.mdwn b/msg.mdwn
index 2fe9fda..5db1447 100644
--- a/msg.mdwn
+++ b/msg.mdwn
@@ -14,9 +14,8 @@ If you wanna ask or share something
which is potentially relevant for others too,
then better do it in public.
-On [Matrix][] I hang out in the chatrooms
-[#debian-matrix:matrix.org](https://matrix.to/#/#debian-matrix:matrix.org)
-and [#community-pureos:talk.puri.sm](https://matrix.to/#/#community-pureos:talk.puri.sm),
+On [Matrix][] I hang out in the chatroom
+[#debian-space:matrix.org](https://matrix.to/#/#debian-space:matrix.org)
among others.
On [Jabber][] I hang out in the chatroom
diff --git a/revealjs/Makefile b/revealjs/Makefile
new file mode 100644
index 0000000..5274fe8
--- /dev/null
+++ b/revealjs/Makefile
@@ -0,0 +1,21 @@
+pandoc_sources := $(wildcard *.md)
+presentations = $(pandoc_sources:%.md=%.html)
+
+basedir = ../..
+core_code_files := reset.css reveal.css theme/black.css reveal.js
+plugin_code_files := notes/notes.js search/search.js zoom/zoom.js
+all_core_code_files = $(core_code_files:%=$(basedir)/revealjs/dist/%)
+all_plugin_code_files = $(plugin_code_files:%=$(basedir)/revealjs/plugin/%)
+
+all: $(presentations)
+
+$(presentations): %.html : %.md $(basedir)/.gitignore \
+ $(all_core_code_files) $(all_plugin_code_files)
+# mkdir -p $(dir $@)
+ pandoc -f commonmark_x -t revealjs --slide-level=2 --standalone -V revealjs-url=$(basedir)/revealjs --resource-path=.. -o "$@" -- "$<"
+
+$(all_core_code_files): $(basedir)/revealjs/dist/%:
+ wget -P revealjs -x -nH --cut-dirs=2 --directory-prefix=$(basedir)/revealjs/dist https://unpkg.com/reveal.js@^4/dist/"$*"
+
+$(all_plugin_code_files): $(basedir)/revealjs/plugin/%:
+ wget -P revealjs -x -nH --cut-dirs=1 --directory-prefix=$(basedir)/revealjs https://unpkg.com/reveal.js@^4/plugin/"$*"
diff --git a/revealjs/dist/reset.css b/revealjs/dist/reset.css
new file mode 100644
index 0000000..e238539
--- /dev/null
+++ b/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/revealjs/dist/reveal.css b/revealjs/dist/reveal.css
new file mode 100644
index 0000000..18dab47
--- /dev/null
+++ b/revealjs/dist/reveal.css
@@ -0,0 +1,8 @@
+/*!
+* reveal.js 4.4.0
+* 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;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: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.future>section,.reveal .slides>section.past,.reveal .slides>section.past>section,.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;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;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{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;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;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{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 .r-fit-text{white-space:normal!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/revealjs/dist/reveal.js b/revealjs/dist/reveal.js
new file mode 100644
index 0000000..e827f16
--- /dev/null
+++ b/revealjs/dist/reveal.js
@@ -0,0 +1,9 @@
+/*!
+* reveal.js 4.4.0
+* https://revealjs.com
+* MIT licensed
+*
+* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se
+*/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Reveal=t()}(this,(function(){"use strict";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)},a=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},n=(e,t)=>{e.style.transform=t},s=(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(s(e,t))return e;e=e.parentNode}return null},o=(e,t,i,a="")=>{let n=e.querySelectorAll("."+i);for(let t=0;t<n.length;t++){let i=n[t];if(i.parentNode===e)return i}let s=document.createElement(t);return s.className=i,s.innerHTML=a,e.appendChild(s),s},l=e=>{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]=a(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},c=(e,t=0)=>{if(e){let i,a=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=a+"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;t<arguments.length;t++){var i=arguments[t];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a])}return e},f=p.default=function(e){if(e){var t=function(e){return[].slice.call(e)},i=0,a=1,n=2,s=3,r=[],o=null,l="requestAnimationFrame"in e?function(){e.cancelAnimationFrame(o),o=e.requestAnimationFrame((function(){return c(r.filter((function(e){return e.dirty&&e.active})))}))}:function(){},d=function(e){return function(){r.forEach((function(t){return t.dirty=e})),l()}},c=function(e){e.filter((function(e){return!e.styleComputed})).forEach((function(e){e.styleComputed=v(e)})),e.filter(p).forEach(f);var t=e.filter(g);t.forEach(u),t.forEach((function(e){f(e),h(e)})),t.forEach(b)},h=function(e){return e.dirty=i},u=function(e){e.availableWidth=e.element.parentNode.clientWidth,e.currentWidth=e.element.scrollWidth,e.previousFontSize=e.currentFontSize,e.currentFontSize=Math.min(Math.max(e.minSize,e.availableWidth/e.currentWidth*e.previousFontSize),e.maxSize),e.whiteSpace=e.multiLine&&e.currentFontSize===e.minSize?"normal":"nowrap"},g=function(e){return e.dirty!==n||e.dirty===n&&e.element.parentNode.clientWidth!==e.availableWidth},v=function(t){var i=e.getComputedStyle(t.element,null);t.currentFontSize=parseFloat(i.getPropertyValue("font-size")),t.display=i.getPropertyValue("display"),t.whiteSpace=i.getPropertyValue("white-space")},p=function(e){var t=!1;return!e.preStyleTestCompleted&&(/inline-/.test(e.display)||(t=!0,e.display="inline-block"),"nowrap"!==e.whiteSpace&&(t=!0,e.whiteSpace="nowrap"),e.preStyleTestCompleted=!0,t)},f=function(e){e.element.style.whiteSpace=e.whiteSpace,e.element.style.display=e.display,e.element.style.fontSize=e.currentFontSize+"px"},b=function(e){e.element.dispatchEvent(new CustomEvent("fit",{detail:{oldValue:e.previousFontSize,newValue:e.currentFontSize,scaleFactor:e.currentFontSize/e.previousFontSize}}))},y=function(e,t){return function(){e.dirty=t,e.active&&l()}},w=function(e){return function(){r=r.filter((function(t){return t.element!==e.element})),e.observeMutations&&e.observer.disconnect(),e.element.style.whiteSpace=e.originalStyle.whiteSpace,e.element.style.display=e.originalStyle.display,e.element.style.fontSize=e.originalStyle.fontSize}},E=function(e){return function(){e.active||(e.active=!0,l())}},R=function(e){return function(){return e.active=!1}},S=function(e){e.observeMutations&&(e.observer=new MutationObserver(y(e,a)),e.observer.observe(e.element,e.observeMutations))},A={minSize:16,maxSize:512,multiLine:!0,observeMutations:"MutationObserver"in e&&{subtree:!0,childList:!0,characterData:!0}},k=null,L=function(){e.clearTimeout(k),k=e.setTimeout(d(n),P.observeWindowDelay)},C=["resize","orientationchange"];return Object.defineProperty(P,"observeWindow",{set:function(t){var i=(t?"add":"remove")+"EventListener";C.forEach((function(t){e[i](t,L)}))}}),P.observeWindow=!0,P.observeWindowDelay=100,P.fitAll=d(s),P}function x(e,t){var i=m({},A,t),a=e.map((function(e){var t=m({},i,{element:e,active:!0});return function(e){e.originalStyle={whiteSpace:e.element.style.whiteSpace,display:e.element.style.display,fontSize:e.element.style.fontSize},S(e),e.newbie=!0,e.dirty=!0,r.push(e)}(t),{element:e,fit:y(t,s),unfreeze:E(t),freeze:R(t),unsubscribe:w(t)}}));return l(),a}function P(e){var i=arguments.length>1&&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 a=e.slideBackgroundElement;if(a){a.style.display="block";let t=e.slideBackgroundContentElement,n=e.getAttribute("data-background-iframe");if(!1===a.hasAttribute("data-loaded")){a.setAttribute("data-loaded","true");let s=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(s)/^data:/.test(s.trim())?t.style.backgroundImage=`url(${s.trim()})`:t.style.backgroundImage=s.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?`<source src="${t}" type="${i}">`:`<source src="${t}">`})),t.appendChild(e)}else if(n&&!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",n),e.style.width="100%",e.style.height="100%",e.style.maxHeight="100%",e.style.maxWidth="100%",t.appendChild(e)}}let s=t.querySelector("iframe[data-src]");s&&this.shouldPreload(a)&&!/autoplay=(1|true|yes)/gi.test(n)&&s.getAttribute("src")!==n&&s.setAttribute("src",n)}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,a)=>{t(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+i+'"]').forEach((t=>{let i=t.getAttribute(e);i&&-1===i.indexOf(a)&&t.setAttribute(e,i+(/\?/.test(i)?"&":"?")+a)}))};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"),a=!!r(e.target,".present");if(i&&a){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,a={}){a=e({unloadIframes:!0},a),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===a.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(),a="h.v";if("function"==typeof i.slideNumber)t=i.slideNumber(e);else{"string"==typeof i.slideNumber&&(a=i.slideNumber),/c/.test(a)||1!==this.Reveal.getHorizontalSlides().length||(a="c");let n=e&&"uncounted"===e.dataset.visibility?0:1;switch(t=[],a){case"c":t.push(this.Reveal.getSlidePastCount(e)+n);break;case"c/t":t.push(this.Reveal.getSlidePastCount(e)+n,"/",this.Reveal.getTotalSlides());break;default:let i=this.Reveal.getIndices(e);t.push(i.h+n);let s="h/v"===a?"/":".";this.Reveal.isVerticalSlide(e)&&t.push(s,i.v+1)}}let n="#"+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],n)}formatNumber(e,t,i,a="#"+this.Reveal.location.getHash()){return"number"!=typeof i||isNaN(i)?`<a href="${a}">\n\t\t\t\t\t<span class="slide-number-a">${e}</span>\n\t\t\t\t\t</a>`:`<a href="${a}">\n\t\t\t\t\t<span class="slide-number-a">${e}</span>\n\t\t\t\t\t<span class="slide-number-delimiter">${t}</span>\n\t\t\t\t\t<span class="slide-number-b">${i}</span>\n\t\t\t\t\t</a>`}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 a=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(a)return{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10)};let n=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return n?{r:parseInt(n[1],10),g:parseInt(n[2],10),b:parseInt(n[3],10),a:parseFloat(n[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 a=document.createElement("div");return a.className="slide-background-content",i.appendChild(a),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=a,this.sync(e),i}sync(e){const t=e.slideBackgroundElement,i=e.slideBackgroundContentElement,a={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"),backgroundGradient:e.getAttribute("data-background-gradient"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")},n=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="",a.background&&(/^(http|file|\/\/)/gi.test(a.background)||/\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test(a.background)?e.setAttribute("data-background-image",a.background):t.style.background=a.background),(a.background||a.backgroundColor||a.backgroundGradient||a.backgroundImage||a.backgroundVideo||a.backgroundIframe)&&t.setAttribute("data-background-hash",a.background+a.backgroundSize+a.backgroundImage+a.backgroundVideo+a.backgroundIframe+a.backgroundColor+a.backgroundGradient+a.backgroundRepeat+a.backgroundPosition+a.backgroundTransition+a.backgroundOpacity),a.backgroundSize&&t.setAttribute("data-background-size",a.backgroundSize),a.backgroundColor&&(t.style.backgroundColor=a.backgroundColor),a.backgroundGradient&&(t.style.backgroundImage=a.backgroundGradient),a.backgroundTransition&&t.setAttribute("data-background-transition",a.backgroundTransition),n&&t.setAttribute("data-preload",""),a.backgroundSize&&(i.style.backgroundSize=a.backgroundSize),a.backgroundRepeat&&(i.style.backgroundRepeat=a.backgroundRepeat),a.backgroundPosition&&(i.style.backgroundPosition=a.backgroundPosition),a.backgroundOpacity&&(i.style.opacity=a.backgroundOpacity);let s=a.backgroundColor;if(!s||!w(s)){let e=window.getComputedStyle(t);e&&e.backgroundColor&&(s=e.backgroundColor)}if(s){const t=w(s);t&&0!==t.a&&("string"==typeof(r=s)&&(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(),a=this.Reveal.getIndices(),n=null,s=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"),o<a.h?i.classList.add(s):o>a.h?i.classList.add(r):(i.classList.add("present"),n=i),(e||o===a.h)&&t(i,".slide-background").forEach(((e,t)=>{e.classList.remove("past","present","future"),t<a.v?e.classList.add("past"):t>a.v?e.classList.add("future"):(e.classList.add("present"),o===a.h&&(n=e))}))})),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),n){this.Reveal.slideContent.startEmbeddedContent(n);let e=n.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=n.getAttribute("data-background-hash");i&&i===t&&n!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=n}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,a=this.Reveal.getHorizontalSlides(),n=this.Reveal.getVerticalSlides(),s=this.element.style.backgroundSize.split(" ");1===s.length?t=i=parseInt(s[0],10):(t=parseInt(s[0],10),i=parseInt(s[1],10));let r,o,l=this.element.offsetWidth,d=a.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=n.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=".slides section",S=".slides>section",A=".slides>section.present>section",k=/registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener|showPreview/,L=/fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;let C=0;class x{constructor(e){this.Reveal=e}run(e,t){this.reset();let i=this.Reveal.getSlides(),a=i.indexOf(t),n=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")&&!(a>n?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=a>n?"forward":"backward";let s="none"===e.style.display;s&&(e.style.display=this.Reveal.getConfig().display);let r=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,C++)));if(s&&(e.style.display="none"),"false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*i.duration,a=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,i),a="unmatched";t.duration===i.duration&&t.delay===i.delay||(a="unmatched-"+C++,r.push(`[data-auto-animate="running"] [data-auto-animate-target="${a}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=a}),this),r.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${a}s; }`)}this.autoAnimateStyleSheet.innerHTML=r.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,a,n){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=n;let s=this.getAutoAnimateOptions(t,a);void 0!==i.delay&&(s.delay=i.delay),void 0!==i.duration&&(s.duration=i.duration),void 0!==i.easing&&(s.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(L)||[""])[0]===(t.className.match(L)||[""])[0]&&"forward"===a.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 a=!1!==i.translate&&(0!==t.x||0!==t.y),n=!1!==i.scale&&(0!==t.scaleX||0!==t.scaleY);if(a||n){let e=[];a&&e.push(`translate(${t.x}px, ${t.y}px)`),n&&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 ${s.duration}s ${s.easing} ${s.delay}s`,o.styles["transition-property"]=d.join(", "),o.styles["will-change"]=d.join(", "),l='[data-auto-animate-target="'+n+'"] {'+Object.keys(r.styles).map((e=>e+": "+r.styles[e]+" !important;")).join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+n+'"] {'+Object.keys(o.styles).map((e=>e+": "+o.styles[e]+" !important;")).join("")+"}"}return l}getAutoAnimateOptions(t,i){let a={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(a=e(a,i),t.parentNode){let e=r(t.parentNode,"[data-auto-animate-target]");e&&(a=this.getAutoAnimateOptions(e,a))}return t.dataset.autoAnimateEasing&&(a.easing=t.dataset.autoAnimateEasing),t.dataset.autoAnimateDuration&&(a.duration=parseFloat(t.dataset.autoAnimateDuration)),t.dataset.autoAnimateDelay&&(a.delay=parseFloat(t.dataset.autoAnimateDelay)),a}getAutoAnimatableProperties(e,t,i){let a=this.Reveal.getConfig(),n={styles:[]};if(!1!==i.translate||!1!==i.scale){let e;if("function"==typeof i.measure)e=i.measure(t);else if(a.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}}n.x=e.x,n.y=e.y,n.width=e.width,n.height=e.height}const s=getComputedStyle(t);return(i.styles||a.autoAnimateStyles).forEach((t=>{let i;"string"==typeof t&&(t={property:t}),void 0!==t.from&&"from"===e?i={value:t.from,explicitValue:!0}:void 0!==t.to&&"to"===e?i={value:t.to,explicitValue:!0}:("line-height"===t.property&&(i=parseFloat(s["line-height"])/parseFloat(s["font-size"])),isNaN(i)&&(i=s[t.property])),""!==i&&(n.styles[t.property]=i)})),n}getAutoAnimatableElements(e,t){let i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),a=[];return i.filter(((e,t)=>{if(-1===a.indexOf(e.to))return a.push(e.to),!0}))}getAutoAnimatePairs(e,t){let i=[];const a="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,a,(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=>{s(e.from,a)?e.options={scale:!1}:s(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,a,n,s){let r={},o={};[].slice.call(t.querySelectorAll(a)).forEach(((e,t)=>{const i=n(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))})),[].slice.call(i.querySelectorAll(a)).forEach(((t,i)=>{const a=n(t);let l;if(o[a]=o[a]||[],o[a].push(t),r[a]){const e=o[a].length-1,t=r[a].length-1;r[a][e]?(l=r[a][e],r[a][e]=null):r[a][t]&&(l=r[a][t],r[a][t]=null)}l&&e.push({from:l,to:t,options:s})}))}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 P{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=[],a=[],n=[];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 a.push([e])})),i=i.concat(a);let s=0;return i.forEach((e=>{e.forEach((e=>{n.push(e),e.setAttribute("data-fragment-index",s)})),s++})),!0===t?i:n}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:[]},a=this.Reveal.getCurrentSlide();if(a&&this.Reveal.getConfig().fragments&&(t=t||this.sort(a.querySelectorAll(".fragment"))).length){let n=0;if("number"!=typeof e){let t=this.sort(a.querySelectorAll(".fragment.visible")).pop();t&&(e=parseInt(t.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach(((t,a)=>{if(t.hasAttribute("data-fragment-index")&&(a=parseInt(t.getAttribute("data-fragment-index"),10)),n=Math.max(n,a),a<=e){let n=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),a===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),n||(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,n),-1),a.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 a=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(a.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 n=this.update(e,a);return n.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:n.hidden[0],fragments:n.hidden}}),n.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:n.shown[0],fragments:n.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!n.shown.length&&!n.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}}class N{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(),R).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 a=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:a.h,indexv:a.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,i)=>{e.setAttribute("data-index-h",i),n(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),n(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,i)=>{n(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),t(e,".slide-background").forEach(((e,t)=>{n(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(),R).forEach((e=>{n(e,""),e.removeEventListener("click",this.onSlideClicked,!0)})),t(this.Reveal.getBackgroundsElement(),".slide-background").forEach((e=>{n(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 M{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["&#8594; , &#8595; , SPACE , N , L , J"]="Next slide",this.shortcuts["&#8592; , &#8593; , P , H , K"]="Previous slide"):(this.shortcuts["N , SPACE"]="Next slide",this.shortcuts["P , Shift SPACE"]="Previous slide",this.shortcuts["&#8592; , H"]="Navigate left",this.shortcuts["&#8594; , L"]="Navigate right",this.shortcuts["&#8593; , K"]="Navigate up",this.shortcuts["&#8595; , J"]="Navigate down"),this.shortcuts["Alt + &#8592;/&#8593/&#8594;/&#8595;"]="Navigate without fragments",this.shortcuts["Shift + &#8592;/&#8593/&#8594;/&#8595;"]="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,a=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let n=document.activeElement&&!0===document.activeElement.isContentEditable,s=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(n||s||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(a):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 D{constructor(e){var t,i,a;a=1e3,(i="MAX_REPLACE_STATE_FREQUENCY")in(t=this)?Object.defineProperty(t,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[i]=a,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,a=e.hashOneBasedIndex?1:0,n=parseInt(i[0],10)-a||0,s=parseInt(i[1],10)-a||0;return e.fragmentInURL&&(t=parseInt(i[2],10),isNaN(t)&&(t=void 0)),{h:n,v:s,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(),a=i?i.getAttribute("id"):null;a&&(a=encodeURIComponent(a));let n=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(n.f=void 0),"string"==typeof a&&a.length)t="/"+a,n.f>=0&&(t+="/"+n.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(n.h>0||n.v>0||n.f>=0)&&(t+=n.h+e),(n.v>0||n.f>=0)&&(t+="/"+(n.v+e)),n.f>=0&&(t+="/"+n.f)}return t}onWindowHashChange(e){this.readURL()}}class I{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=`<button class="navigate-left" aria-label="${e?"next slide":"previous slide"}"><div class="controls-arrow"></div></button>\n\t\t\t<button class="navigate-right" aria-label="${e?"previous slide":"next slide"}"><div class="controls-arrow"></div></button>\n\t\t\t<button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>\n\t\t\t<button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>`,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 T{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,a=Math.floor(e.clientX/this.getMaxWidth()*i);this.Reveal.getConfig().rtl&&(a=i-a);let n=this.Reveal.getIndices(t[a]);this.Reveal.slide(n.h,n.v)}destroy(){this.element.remove()}}class F{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 z=(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 a=document.querySelector("head");a.insertBefore(i,a.lastChild)};class H{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=[],a=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))})),i.length){a=i.length;const t=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--a&&this.initPlugins().then(e)};i.forEach((e=>{"string"==typeof e.id?(this.registerPlugin(e),t(e)):"string"==typeof e.src?z(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 a,n=()=>{0==--i?this.loadAsync().then(e):a()},s=0;a=()=>{let e=t[s++];if("function"==typeof e.init){let t=e.init(this.Reveal);t&&"function"==typeof t.then?t.then(n):n()}else n()},a()}}))}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach((e=>{z(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 q{constructor(e){this.Reveal=e}async setupPDF(){const e=this.Reveal.getConfig(),i=t(this.Reveal.getRevealElement(),R),a=e.slideNumber&&/all|print/i.test(e.showSlideNumber),n=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),s=Math.floor(n.width*(1+e.margin)),r=Math.floor(n.height*(1+e.margin)),o=n.width,d=n.height;await new Promise(requestAnimationFrame),l("@page{size:"+s+"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=s+"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;let p=1;i.forEach((function(i,n){if(!1===i.classList.contains("stack")){let l=(s-o)/2,c=(r-d)/2;const v=u[n];let m=Math.max(Math.ceil(v/r),1);m=Math.min(m,e.pdfMaxPagesPerSlide),(1===m&&e.center||i.classList.contains("center"))&&(c=Math.max((r-v)/2,0));const f=document.createElement("div");if(g.push(f),f.className="pdf-page",f.style.height=(r+e.pdfPageHeightOffset)*m+"px",h&&(f.style.background=h),f.appendChild(i),i.style.left=l+"px",i.style.top=c+"px",i.style.width=o+"px",this.Reveal.slideContent.layout(i),i.slideBackgroundElement&&f.insertBefore(i.slideBackgroundElement,i),e.showNotes){const t=this.Reveal.getSlideNotes(i);if(t){const i=8,a="string"==typeof e.showNotes?e.showNotes:"inline",n=document.createElement("div");n.classList.add("speaker-notes"),n.classList.add("speaker-notes-pdf"),n.setAttribute("data-layout",a),n.innerHTML=t,"separate-page"===a?g.push(n):(n.style.left=i+"px",n.style.bottom=i+"px",n.style.width=s-2*i+"px",f.appendChild(n))}}if(a){const e=document.createElement("div");e.classList.add("slide-number"),e.classList.add("slide-number-pdf"),e.innerHTML=p++,f.appendChild(e)}if(e.pdfSeparateFragments){const e=this.Reveal.fragments.sort(f.querySelectorAll(".fragment"),!0);let t;e.forEach((function(e,i){t&&t.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);const n=f.cloneNode(!0);if(a){const e=i+1;n.querySelector(".slide-number-pdf").innerHTML+="."+e}g.push(n),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else t(f,".fragment:not(.fade-out)").forEach((function(e){e.classList.add("visible")}))}}),this),await new Promise(requestAnimationFrame),g.forEach((e=>v.appendChild(e))),this.Reveal.slideContent.layout(this.Reveal.getSlidesElement()),this.Reveal.dispatchEvent({type:"pdf-ready"})}isPrintingPDF(){return/print-pdf/gi.test(window.location.search)}}class B{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(s(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,a=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){let n=this.Reveal.availableRoutes({includeFragments:!0}),s=i-this.touchStartX,r=a-this.touchStartY;s>40&&Math.abs(s)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):s<-40&&Math.abs(s)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):r>40&&n.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&n.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))}}const O="focus",U="blur";class W{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(){this.state!==O&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state=O}blur(){this.state!==U&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state=U}isFocused(){return this.state===O}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 K{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()||'<span class="notes-placeholder">No notes on this slide.</span>')}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.querySelectorAll("aside.notes");return t?Array.from(t).map((e=>e.innerHTML)).join("\n"):null}destroy(){this.element.remove()}}class V{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,a=this.diameter2,n=28;this.progressOffset+=.1*(1-this.progressOffset);const s=-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,a,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,a,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,a,t,r,s,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,a-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,n),this.context.fillRect(18,0,10,n)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,n),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 $={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:[]};const j="4.4.0";function X(s,l){arguments.length<2&&(l=arguments[0],s=document.querySelector(".reveal"));const h={};let u,v,p,m,f,w={},L=!1,C={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},z=[],O=1,U={layout:"",overview:""},X={},Y="idle",_=0,G=0,J=-1,Q=!1,Z=new b(h),ee=new y(h),te=new x(h),ie=new E(h),ae=new P(h),ne=new N(h),se=new M(h),re=new D(h),oe=new I(h),le=new T(h),de=new F(h),ce=new H(h),he=new q(h),ue=new W(h),ge=new B(h),ve=new K(h);function pe(e){if(!s)throw'Unable to find presentation root (<div class="reveal">).';if(X.wrapper=s,X.slides=s.querySelector(".slides"),!X.slides)throw'Unable to find slides container (<div class="slides">).';return w={...$,...w,...l,...e,...d()},me(),window.addEventListener("load",Ue,!1),ce.load(w.plugins,w.dependencies).then(fe),new Promise((e=>h.on("ready",e)))}function me(){!0===w.embedded?X.viewport=r(s,".reveal-viewport")||s:(X.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),X.viewport.classList.add("reveal-viewport")}function fe(){L=!0,be(),ye(),ke(),Se(),Ae(),st(),Le(),re.readURL(),ie.update(!0),setTimeout((()=>{X.slides.classList.remove("no-transition"),X.wrapper.classList.add("ready"),Ie({type:"ready",data:{indexh:u,indexv:v,currentSlide:m}})}),1),he.isPrintingPDF()&&(xe(),"complete"===document.readyState?he.setupPDF():window.addEventListener("load",(()=>{he.setupPDF()})))}function be(){w.showHiddenSlides||t(X.wrapper,'section[data-visibility="hidden"]').forEach((e=>{e.parentNode.removeChild(e)}))}function ye(){X.slides.classList.add("no-transition"),g?X.wrapper.classList.add("no-hover"):X.wrapper.classList.remove("no-hover"),ie.render(),ee.render(),oe.render(),le.render(),ve.render(),X.pauseOverlay=o(X.wrapper,"div","pause-overlay",w.controls?'<button class="resume-button">Resume presentation</button>':null),X.statusElement=we(),X.wrapper.setAttribute("role","application")}function we(){let e=X.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"),X.wrapper.appendChild(e)),e}function Ee(e){X.statusElement.textContent=e}function Re(e){let t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){let i=e.getAttribute("aria-hidden"),a="none"===window.getComputedStyle(e).display;"true"===i||a||Array.from(e.childNodes).forEach((e=>{t+=Re(e)}))}return t=t.trim(),""===t?"":t+" "}function Se(){setInterval((()=>{0===X.wrapper.scrollTop&&0===X.wrapper.scrollLeft||(X.wrapper.scrollTop=0,X.wrapper.scrollLeft=0)}),1e3)}function Ae(){document.addEventListener("fullscreenchange",Kt),document.addEventListener("webkitfullscreenchange",Kt)}function ke(){w.postMessage&&window.addEventListener("message",qt,!1)}function Le(t){const a={...w};if("object"==typeof t&&e(w,t),!1===h.isReady())return;const n=X.wrapper.querySelectorAll(R).length;X.wrapper.classList.remove(a.transition),X.wrapper.classList.add(w.transition),X.wrapper.setAttribute("data-transition-speed",w.transitionSpeed),X.wrapper.setAttribute("data-background-transition",w.backgroundTransition),X.viewport.style.setProperty("--slide-width",w.width+"px"),X.viewport.style.setProperty("--slide-height",w.height+"px"),w.shuffle&&rt(),i(X.wrapper,"embedded",w.embedded),i(X.wrapper,"rtl",w.rtl),i(X.wrapper,"center",w.center),!1===w.pause&&Je(),w.previewLinks?(Fe(),ze("[data-preview-link=false]")):(ze(),Fe("[data-preview-link]:not([data-preview-link=false])")),te.reset(),f&&(f.destroy(),f=null),n>1&&w.autoSlide&&w.autoSlideStoppable&&(f=new V(X.wrapper,(()=>Math.min(Math.max((Date.now()-J)/_,0),1))),f.on("click",$t),Q=!1),"default"!==w.navigationMode?X.wrapper.setAttribute("data-navigation-mode",w.navigationMode):X.wrapper.removeAttribute("data-navigation-mode"),ve.configure(w,a),ue.configure(w,a),de.configure(w,a),oe.configure(w,a),le.configure(w,a),se.configure(w,a),ae.configure(w,a),ee.configure(w,a),at()}function Ce(){window.addEventListener("resize",Ut,!1),w.touch&&ge.bind(),w.keyboard&&se.bind(),w.progress&&le.bind(),w.respondToHashChanges&&re.bind(),oe.bind(),ue.bind(),X.slides.addEventListener("click",Ot,!1),X.slides.addEventListener("transitionend",Bt,!1),X.pauseOverlay.addEventListener("click",Je,!1),w.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",Wt,!1)}function xe(){ge.unbind(),ue.unbind(),se.unbind(),oe.unbind(),le.unbind(),re.unbind(),window.removeEventListener("resize",Ut,!1),X.slides.removeEventListener("click",Ot,!1),X.slides.removeEventListener("transitionend",Bt,!1),X.pauseOverlay.removeEventListener("click",Je,!1)}function Pe(){xe(),xt(),ze(),ve.destroy(),ue.destroy(),ce.destroy(),de.destroy(),oe.destroy(),le.destroy(),ie.destroy(),ee.destroy(),document.removeEventListener("fullscreenchange",Kt),document.removeEventListener("webkitfullscreenchange",Kt),document.removeEventListener("visibilitychange",Wt,!1),window.removeEventListener("message",qt,!1),window.removeEventListener("load",Ue,!1),X.pauseOverlay&&X.pauseOverlay.remove(),X.statusElement&&X.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),X.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),X.wrapper.removeAttribute("data-transition-speed"),X.wrapper.removeAttribute("data-background-transition"),X.viewport.classList.remove("reveal-viewport"),X.viewport.style.removeProperty("--slide-width"),X.viewport.style.removeProperty("--slide-height"),X.slides.style.removeProperty("width"),X.slides.style.removeProperty("height"),X.slides.style.removeProperty("zoom"),X.slides.style.removeProperty("left"),X.slides.style.removeProperty("top"),X.slides.style.removeProperty("bottom"),X.slides.style.removeProperty("right"),X.slides.style.removeProperty("transform"),Array.from(X.wrapper.querySelectorAll(R)).forEach((e=>{e.style.removeProperty("display"),e.style.removeProperty("top"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden")}))}function Ne(e,t,i){s.addEventListener(e,t,i)}function Me(e,t,i){s.removeEventListener(e,t,i)}function De(e){"string"==typeof e.layout&&(U.layout=e.layout),"string"==typeof e.overview&&(U.overview=e.overview),U.layout?n(X.slides,U.layout+" "+U.overview):n(X.slides,U.overview)}function Ie({target:t=X.wrapper,type:i,data:a,bubbles:n=!0}){let s=document.createEvent("HTMLEvents",1,2);return s.initEvent(i,n,!0),e(s,a),t.dispatchEvent(s),t===X.wrapper&&Te(i),s}function Te(t,i){if(w.postMessageEvents&&window.parent!==window.self){let a={namespace:"reveal",eventName:t,state:kt()};e(a,i),window.parent.postMessage(JSON.stringify(a),"*")}}function Fe(e="a"){Array.from(X.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",Vt,!1)}))}function ze(e="a"){Array.from(X.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",Vt,!1)}))}function He(e){Oe(),X.overlay=document.createElement("div"),X.overlay.classList.add("overlay"),X.overlay.classList.add("overlay-preview"),X.wrapper.appendChild(X.overlay),X.overlay.innerHTML=`<header>\n\t\t\t\t<a class="close" href="#"><span class="icon"></span></a>\n\t\t\t\t<a class="external" href="${e}" target="_blank"><span class="icon"></span></a>\n\t\t\t</header>\n\t\t\t<div class="spinner"></div>\n\t\t\t<div class="viewport">\n\t\t\t\t<iframe src="${e}"></iframe>\n\t\t\t\t<small class="viewport-inner">\n\t\t\t\t\t<span class="x-frame-error">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span>\n\t\t\t\t</small>\n\t\t\t</div>`,X.overlay.querySelector("iframe").addEventListener("load",(e=>{X.overlay.classList.add("loaded")}),!1),X.overlay.querySelector(".close").addEventListener("click",(e=>{Oe(),e.preventDefault()}),!1),X.overlay.querySelector(".external").addEventListener("click",(e=>{Oe()}),!1)}function qe(e){"boolean"==typeof e?e?Be():Oe():X.overlay?Oe():Be()}function Be(){if(w.help){Oe(),X.overlay=document.createElement("div"),X.overlay.classList.add("overlay"),X.overlay.classList.add("overlay-help"),X.wrapper.appendChild(X.overlay);let e='<p class="title">Keyboard Shortcuts</p><br/>',t=se.getShortcuts(),i=se.getBindings();e+="<table><th>KEY</th><th>ACTION</th>";for(let i in t)e+=`<tr><td>${i}</td><td>${t[i]}</td></tr>`;for(let t in i)i[t].key&&i[t].description&&(e+=`<tr><td>${i[t].key}</td><td>${i[t].description}</td></tr>`);e+="</table>",X.overlay.innerHTML=`\n\t\t\t\t<header>\n\t\t\t\t\t<a class="close" href="#"><span class="icon"></span></a>\n\t\t\t\t</header>\n\t\t\t\t<div class="viewport">\n\t\t\t\t\t<div class="viewport-inner">${e}</div>\n\t\t\t\t</div>\n\t\t\t`,X.overlay.querySelector(".close").addEventListener("click",(e=>{Oe(),e.preventDefault()}),!1)}}function Oe(){return!!X.overlay&&(X.overlay.parentNode.removeChild(X.overlay),X.overlay=null,!0)}function Ue(){if(X.wrapper&&!he.isPrintingPDF()){if(!w.disableLayout){g&&!w.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");const e=Ke(),t=O;We(w.width,w.height),X.slides.style.width=e.width+"px",X.slides.style.height=e.height+"px",O=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),O=Math.max(O,w.minScale),O=Math.min(O,w.maxScale),1===O?(X.slides.style.zoom="",X.slides.style.left="",X.slides.style.top="",X.slides.style.bottom="",X.slides.style.right="",De({layout:""})):(X.slides.style.zoom="",X.slides.style.left="50%",X.slides.style.top="50%",X.slides.style.bottom="auto",X.slides.style.right="auto",De({layout:"translate(-50%, -50%) scale("+O+")"}));const i=Array.from(X.wrapper.querySelectorAll(R));for(let t=0,a=i.length;t<a;t++){const a=i[t];"none"!==a.style.display&&(w.center||a.classList.contains("center")?a.classList.contains("stack")?a.style.top=0:a.style.top=Math.max((e.height-a.scrollHeight)/2,0)+"px":a.style.top="")}t!==O&&Ie({type:"resize",data:{oldScale:t,scale:O,size:e}})}X.viewport.style.setProperty("--slide-scale",O),le.update(),ie.updateParallax(),ne.isActive()&&ne.update()}}function We(e,i){t(X.slides,"section > .stretch, section > .r-stretch").forEach((t=>{let a=c(t,i);if(/(img|video)/gi.test(t.nodeName)){const i=t.naturalWidth||t.videoWidth,n=t.naturalHeight||t.videoHeight,s=Math.min(e/i,a/n);t.style.width=i*s+"px",t.style.height=n*s+"px"}else t.style.width=e+"px",t.style.height=a+"px"}))}function Ke(e,t){const i={width:w.width,height:w.height,presentationWidth:e||X.wrapper.offsetWidth,presentationHeight:t||X.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 Ve(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function $e(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 je(e=m){return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Xe(){return!(!m||!je(m))&&!m.nextElementSibling}function Ye(){return 0===u&&0===v}function _e(){return!!m&&(!m.nextElementSibling&&(!je(m)||!m.parentNode.nextElementSibling))}function Ge(){if(w.pause){const e=X.wrapper.classList.contains("paused");xt(),X.wrapper.classList.add("paused"),!1===e&&Ie({type:"paused"})}}function Je(){const e=X.wrapper.classList.contains("paused");X.wrapper.classList.remove("paused"),Ct(),e&&Ie({type:"resumed"})}function Qe(e){"boolean"==typeof e?e?Ge():Je():Ze()?Je():Ge()}function Ze(){return X.wrapper.classList.contains("paused")}function et(e){"boolean"==typeof e?e?Nt():Pt():Q?Nt():Pt()}function tt(){return!(!_||Q)}function it(e,t,i,a){if(Ie({type:"beforeslidechange",data:{indexh:void 0===e?u:e,indexv:void 0===t?v:t,origin:a}}).defaultPrevented)return;p=m;const n=X.wrapper.querySelectorAll(S);if(0===n.length)return;void 0!==t||ne.isActive()||(t=$e(n[e])),p&&p.parentNode&&p.parentNode.classList.contains("stack")&&Ve(p.parentNode,v);const s=z.concat();z.length=0;let r=u||0,o=v||0;u=ot(S,void 0===e?u:e),v=ot(A,void 0===t?v:t);let l=u!==r||v!==o;l||(p=null);let d=n[u],c=d.querySelectorAll("section");m=c[v]||d;let h=!1;l&&p&&m&&!ne.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,X.slides.classList.add("disable-slide-transitions")),Y="running"),ct(),Ue(),ne.isActive()&&ne.update(),void 0!==i&&ae.goto(i),p&&p!==m&&(p.classList.remove("present"),p.setAttribute("aria-hidden","true"),Ye()&&setTimeout((()=>{bt().forEach((e=>{Ve(e,0)}))}),0));e:for(let e=0,t=z.length;e<t;e++){for(let t=0;t<s.length;t++)if(s[t]===z[e]){s.splice(t,1);continue e}X.viewport.classList.add(z[e]),Ie({type:z[e]})}for(;s.length;)X.viewport.classList.remove(s.pop());l&&Ie({type:"slidechanged",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m,origin:a}}),!l&&p||(Z.stopEmbeddedContent(p),Z.startEmbeddedContent(m)),requestAnimationFrame((()=>{Ee(Re(m))})),le.update(),oe.update(),ve.update(),ie.update(),ie.updateParallax(),ee.update(),ae.update(),re.writeURL(),Ct(),h&&(setTimeout((()=>{X.slides.classList.remove("disable-slide-transitions")}),0),w.autoAnimate&&te.run(p,m))}function at(){xe(),Ce(),Ue(),_=w.autoSlide,Ct(),ie.create(),re.writeURL(),ae.sortAll(),oe.update(),le.update(),ct(),ve.update(),ve.updateVisibility(),ie.update(!0),ee.update(),Z.formatEmbeddedContent(),!1===w.autoPlayMedia?Z.stopEmbeddedContent(m,{unloadIframes:!1}):Z.startEmbeddedContent(m),ne.isActive()&&ne.layout()}function nt(e=m){ie.sync(e),ae.sync(e),Z.load(e),ie.update(),ve.update()}function st(){mt().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 rt(e=mt()){e.forEach(((t,i)=>{let a=e[Math.floor(Math.random()*e.length)];a.parentNode===t.parentNode&&t.parentNode.insertBefore(t,a);let n=t.querySelectorAll("section");n.length&&rt(n)}))}function ot(e,i){let a=t(X.wrapper,e),n=a.length,s=he.isPrintingPDF(),r=!1,o=!1;if(n){w.loop&&(i>=n&&(r=!0),(i%=n)<0&&(i=n+i,o=!0)),i=Math.max(Math.min(i,n-1),0);for(let e=0;e<n;e++){let t=a[e],n=w.rtl&&!je(t);t.classList.remove("past"),t.classList.remove("present"),t.classList.remove("future"),t.setAttribute("hidden",""),t.setAttribute("aria-hidden","true"),t.querySelector("section")&&t.classList.add("stack"),s?t.classList.add("present"):e<i?(t.classList.add(n?"future":"past"),w.fragments&&lt(t)):e>i?(t.classList.add(n?"past":"future"),w.fragments&&dt(t)):e===i&&w.fragments&&(r?dt(t):o&&lt(t))}let e=a[i],t=e.classList.contains("present");e.classList.add("present"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden"),t||Ie({target:e,type:"visible",bubbles:!1});let l=e.getAttribute("data-state");l&&(z=z.concat(l.split(" ")))}else i=0;return i}function lt(e){t(e,".fragment").forEach((e=>{e.classList.add("visible"),e.classList.remove("current-fragment")}))}function dt(e){t(e,".fragment.visible").forEach((e=>{e.classList.remove("visible","current-fragment")}))}function ct(){let e,i,a=mt(),n=a.length;if(n&&void 0!==u){let s=ne.isActive()?10:w.viewDistance;g&&(s=ne.isActive()?6:w.mobileViewDistance),he.isPrintingPDF()&&(s=Number.MAX_VALUE);for(let r=0;r<n;r++){let o=a[r],l=t(o,"section"),d=l.length;if(e=Math.abs((u||0)-r)||0,w.loop&&(e=Math.abs(((u||0)-r)%(n-s))||0),e<s?Z.load(o):Z.unload(o),d){let t=$e(o);for(let a=0;a<d;a++){let n=l[a];i=r===(u||0)?Math.abs((v||0)-a):Math.abs(a-t),e+i<s?Z.load(n):Z.unload(n)}}}wt()?X.wrapper.classList.add("has-vertical-slides"):X.wrapper.classList.remove("has-vertical-slides"),yt()?X.wrapper.classList.add("has-horizontal-slides"):X.wrapper.classList.remove("has-horizontal-slides")}}function ht({includeFragments:e=!1}={}){let t=X.wrapper.querySelectorAll(S),i=X.wrapper.querySelectorAll(A),a={left:u>0,right:u<t.length-1,up:v>0,down:v<i.length-1};if(w.loop&&(t.length>1&&(a.left=!0,a.right=!0),i.length>1&&(a.up=!0,a.down=!0)),t.length>1&&"linear"===w.navigationMode&&(a.right=a.right||a.down,a.left=a.left||a.up),!0===e){let e=ae.availableRoutes();a.left=a.left||e.prev,a.up=a.up||e.prev,a.down=a.down||e.next,a.right=a.right||e.next}if(w.rtl){let e=a.left;a.left=a.right,a.right=e}return a}function ut(e=m){let t=mt(),i=0;e:for(let a=0;a<t.length;a++){let n=t[a],s=n.querySelectorAll("section");for(let t=0;t<s.length;t++){if(s[t]===e)break e;"uncounted"!==s[t].dataset.visibility&&i++}if(n===e)break;!1===n.classList.contains("stack")&&"uncounted"!==n.dataset.visibility&&i++}return i}function gt(){let e=Rt(),t=ut();if(m){let e=m.querySelectorAll(".fragment");if(e.length>0){let i=.9;t+=m.querySelectorAll(".fragment.visible").length/e.length*i}}return Math.min(t/(e-1),1)}function vt(e){let i,a=u,n=v;if(e){let i=je(e),s=i?e.parentNode:e,r=mt();a=Math.max(r.indexOf(s),0),n=void 0,i&&(n=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:a,v:n,f:i}}function pt(){return t(X.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function mt(){return t(X.wrapper,S)}function ft(){return t(X.wrapper,".slides>section>section")}function bt(){return t(X.wrapper,".slides>section.stack")}function yt(){return mt().length>1}function wt(){return ft().length>1}function Et(){return pt().map((e=>{let t={};for(let i=0;i<e.attributes.length;i++){let a=e.attributes[i];t[a.name]=a.value}return t}))}function Rt(){return pt().length}function St(e,t){let i=mt()[e],a=i&&i.querySelectorAll("section");return a&&a.length&&"number"==typeof t?a?a[t]:void 0:i}function At(e,t){let i="number"==typeof e?St(e,t):e;if(i)return i.slideBackgroundElement}function kt(){let e=vt();return{indexh:e.h,indexv:e.v,indexf:e.f,paused:Ze(),overview:ne.isActive()}}function Lt(e){if("object"==typeof e){it(a(e.indexh),a(e.indexv),a(e.indexf));let t=a(e.paused),i=a(e.overview);"boolean"==typeof t&&t!==Ze()&&Qe(t),"boolean"==typeof i&&i!==ne.isActive()&&ne.toggle(i)}}function Ct(){if(xt(),m&&!1!==w.autoSlide){let e=m.querySelector(".current-fragment");e||(e=m.querySelector(".fragment"));let i=e?e.getAttribute("data-autoslide"):null,a=m.parentNode?m.parentNode.getAttribute("data-autoslide"):null,n=m.getAttribute("data-autoslide");i?_=parseInt(i,10):n?_=parseInt(n,10):a?_=parseInt(a,10):(_=w.autoSlide,0===m.querySelectorAll(".fragment").length&&t(m,"video, audio").forEach((e=>{e.hasAttribute("data-autoplay")&&_&&1e3*e.duration/e.playbackRate>_&&(_=1e3*e.duration/e.playbackRate+1e3)}))),!_||Q||Ze()||ne.isActive()||_e()&&!ae.availableRoutes().next&&!0!==w.loop||(G=setTimeout((()=>{"function"==typeof w.autoSlideMethod?w.autoSlideMethod():zt(),Ct()}),_),J=Date.now()),f&&f.setPlaying(-1!==G)}}function xt(){clearTimeout(G),G=-1}function Pt(){_&&!Q&&(Q=!0,Ie({type:"autoslidepaused"}),clearTimeout(G),f&&f.setPlaying(!1))}function Nt(){_&&Q&&(Q=!1,Ie({type:"autoslideresumed"}),Ct())}function Mt({skipFragments:e=!1}={}){C.hasNavigatedHorizontally=!0,w.rtl?(ne.isActive()||e||!1===ae.next())&&ht().left&&it(u+1,"grid"===w.navigationMode?v:void 0):(ne.isActive()||e||!1===ae.prev())&&ht().left&&it(u-1,"grid"===w.navigationMode?v:void 0)}function Dt({skipFragments:e=!1}={}){C.hasNavigatedHorizontally=!0,w.rtl?(ne.isActive()||e||!1===ae.prev())&&ht().right&&it(u-1,"grid"===w.navigationMode?v:void 0):(ne.isActive()||e||!1===ae.next())&&ht().right&&it(u+1,"grid"===w.navigationMode?v:void 0)}function It({skipFragments:e=!1}={}){(ne.isActive()||e||!1===ae.prev())&&ht().up&&it(u,v-1)}function Tt({skipFragments:e=!1}={}){C.hasNavigatedVertically=!0,(ne.isActive()||e||!1===ae.next())&&ht().down&&it(u,v+1)}function Ft({skipFragments:e=!1}={}){if(e||!1===ae.prev())if(ht().up)It({skipFragments:e});else{let i;if(i=w.rtl?t(X.wrapper,".slides>section.future").pop():t(X.wrapper,".slides>section.past").pop(),i&&i.classList.contains("stack")){let e=i.querySelectorAll("section").length-1||void 0;it(u-1,e)}else Mt({skipFragments:e})}}function zt({skipFragments:e=!1}={}){if(C.hasNavigatedHorizontally=!0,C.hasNavigatedVertically=!0,e||!1===ae.next()){let t=ht();t.down&&t.right&&w.loop&&Xe()&&(t.down=!1),t.down?Tt({skipFragments:e}):w.rtl?Mt({skipFragments:e}):Dt({skipFragments:e})}}function Ht(e){w.autoSlideStoppable&&Pt()}function qt(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===k.test(t.method)){const e=h[t.method].apply(h,t.args);Te("callback",{method:t.method,result:e})}else console.warn('reveal.js: "'+t.method+'" is is blacklisted from the postMessage API')}function Bt(e){"running"===Y&&/section/gi.test(e.target.nodeName)&&(Y="idle",Ie({type:"slidetransitionend",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m}}))}function Ot(e){const t=r(e.target,'a[href^="#"]');if(t){const i=t.getAttribute("href"),a=re.getIndicesFromHash(i);a&&(h.slide(a.h,a.v,a.f),e.preventDefault())}}function Ut(e){Ue()}function Wt(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Kt(e){(document.fullscreenElement||document.webkitFullscreenElement)===X.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{h.layout(),h.focus.focus()}),1))}function Vt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){let t=e.currentTarget.getAttribute("href");t&&(He(t),e.preventDefault())}}function $t(e){_e()&&!1===w.loop?(it(0,0),Nt()):Q?Nt():Pt()}const jt={VERSION:j,initialize:pe,configure:Le,destroy:Pe,sync:at,syncSlide:nt,syncFragments:ae.sync.bind(ae),slide:it,left:Mt,right:Dt,up:It,down:Tt,prev:Ft,next:zt,navigateLeft:Mt,navigateRight:Dt,navigateUp:It,navigateDown:Tt,navigatePrev:Ft,navigateNext:zt,navigateFragment:ae.goto.bind(ae),prevFragment:ae.prev.bind(ae),nextFragment:ae.next.bind(ae),on:Ne,off:Me,addEventListener:Ne,removeEventListener:Me,layout:Ue,shuffle:rt,availableRoutes:ht,availableFragments:ae.availableRoutes.bind(ae),toggleHelp:qe,toggleOverview:ne.toggle.bind(ne),togglePause:Qe,toggleAutoSlide:et,isFirstSlide:Ye,isLastSlide:_e,isLastVerticalSlide:Xe,isVerticalSlide:je,isPaused:Ze,isAutoSliding:tt,isSpeakerNotes:ve.isSpeakerNotesWindow.bind(ve),isOverview:ne.isActive.bind(ne),isFocused:ue.isFocused.bind(ue),isPrintingPDF:he.isPrintingPDF.bind(he),isReady:()=>L,loadSlide:Z.load.bind(Z),unloadSlide:Z.unload.bind(Z),showPreview:He,hidePreview:Oe,addEventListeners:Ce,removeEventListeners:xe,dispatchEvent:Ie,getState:kt,setState:Lt,getProgress:gt,getIndices:vt,getSlidesAttributes:Et,getSlidePastCount:ut,getTotalSlides:Rt,getSlide:St,getPreviousSlide:()=>p,getCurrentSlide:()=>m,getSlideBackground:At,getSlideNotes:ve.getSlideNotes.bind(ve),getSlides:pt,getHorizontalSlides:mt,getVerticalSlides:ft,hasHorizontalSlides:yt,hasVerticalSlides:wt,hasNavigatedHorizontally:()=>C.hasNavigatedHorizontally,hasNavigatedVertically:()=>C.hasNavigatedVertically,addKeyBinding:se.addKeyBinding.bind(se),removeKeyBinding:se.removeKeyBinding.bind(se),triggerKey:se.triggerKey.bind(se),registerKeyboardShortcut:se.registerKeyboardShortcut.bind(se),getComputedSlideSize:Ke,getScale:()=>O,getConfig:()=>w,getQueryHash:d,getSlidePath:re.getHash.bind(re),getRevealElement:()=>s,getSlidesElement:()=>X.slides,getViewportElement:()=>X.viewport,getBackgroundsElement:()=>ie.element,registerPlugin:ce.registerPlugin.bind(ce),hasPlugin:ce.hasPlugin.bind(ce),getPlugin:ce.getPlugin.bind(ce),getPlugins:ce.getRegisteredPlugins.bind(ce)};return e(h,{...jt,announceStatus:Ee,getStatusText:Re,print:he,focus:ue,progress:le,controls:oe,location:re,overview:ne,fragments:ae,slideContent:Z,slideNumber:ee,onUserInput:Ht,closeOverlay:Oe,updateSlidesVisibility:ct,layoutSlideContents:We,transformSlides:De,cueAutoSlide:Ct,cancelAutoSlide:xt}),jt}let Y=X,_=[];return Y.initialize=e=>(Object.assign(Y,new X(document.querySelector(".reveal"),e)),_.map((e=>e(Y))),Y.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach((e=>{Y[e]=(...t)=>{_.push((i=>i[e].call(null,...t)))}})),Y.isReady=()=>!1,Y.VERSION=j,Y}));
+//# sourceMappingURL=reveal.js.map
diff --git a/revealjs/dist/theme/black.css b/revealjs/dist/theme/black.css
new file mode 100644
index 0000000..4aa8ba4
--- /dev/null
+++ b/revealjs/dist/theme/black.css
@@ -0,0 +1,357 @@
+/**
+ * Black theme for reveal.js. This is the opposite of the 'white' theme.
+ *
+ * By Hakim El Hattab, http://hakim.se
+ */
+@import url(./fonts/source-sans-pro/source-sans-pro.css);
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+ color: #222;
+}
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+:root {
+ --r-background-color: #191919;
+ --r-main-font: Source Sans Pro, Helvetica, sans-serif;
+ --r-main-font-size: 42px;
+ --r-main-color: #fff;
+ --r-block-margin: 20px;
+ --r-heading-margin: 0 0 20px 0;
+ --r-heading-font: Source Sans Pro, Helvetica, sans-serif;
+ --r-heading-color: #fff;
+ --r-heading-line-height: 1.2;
+ --r-heading-letter-spacing: normal;
+ --r-heading-text-transform: uppercase;
+ --r-heading-text-shadow: none;
+ --r-heading-font-weight: 600;
+ --r-heading1-text-shadow: none;
+ --r-heading1-size: 2.5em;
+ --r-heading2-size: 1.6em;
+ --r-heading3-size: 1.3em;
+ --r-heading4-size: 1em;
+ --r-code-font: monospace;
+ --r-link-color: #42affa;
+ --r-link-color-dark: #068de9;
+ --r-link-color-hover: #8dcffc;
+ --r-selection-background-color: #bee4fd;
+ --r-selection-color: #fff;
+}
+
+.reveal-viewport {
+ background: #191919;
+ background-color: var(--r-background-color);
+}
+
+.reveal {
+ font-family: var(--r-main-font);
+ font-size: var(--r-main-font-size);
+ font-weight: normal;
+ color: var(--r-main-color);
+}
+
+.reveal ::selection {
+ color: var(--r-selection-color);
+ background: var(--r-selection-background-color);
+ text-shadow: none;
+}
+
+.reveal ::-moz-selection {
+ color: var(--r-selection-color);
+ background: var(--r-selection-background-color);
+ text-shadow: none;
+}
+
+.reveal .slides section,
+.reveal .slides section > section {
+ line-height: 1.3;
+ font-weight: inherit;
+}
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: var(--r-heading-margin);
+ color: var(--r-heading-color);
+ font-family: var(--r-heading-font);
+ font-weight: var(--r-heading-font-weight);
+ line-height: var(--r-heading-line-height);
+ letter-spacing: var(--r-heading-letter-spacing);
+ text-transform: var(--r-heading-text-transform);
+ text-shadow: var(--r-heading-text-shadow);
+ word-wrap: break-word;
+}
+
+.reveal h1 {
+ font-size: var(--r-heading1-size);
+}
+
+.reveal h2 {
+ font-size: var(--r-heading2-size);
+}
+
+.reveal h3 {
+ font-size: var(--r-heading3-size);
+}
+
+.reveal h4 {
+ font-size: var(--r-heading4-size);
+}
+
+.reveal h1 {
+ text-shadow: var(--r-heading1-text-shadow);
+}
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: var(--r-block-margin) 0;
+ line-height: 1.3;
+}
+
+/* Remove trailing margins after titles */
+.reveal h1:last-child,
+.reveal h2:last-child,
+.reveal h3:last-child,
+.reveal h4:last-child,
+.reveal h5:last-child,
+.reveal h6:last-child {
+ margin-bottom: 0;
+}
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%;
+}
+
+.reveal strong,
+.reveal b {
+ font-weight: bold;
+}
+
+.reveal em {
+ font-style: italic;
+}
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em;
+}
+
+.reveal ol {
+ list-style-type: decimal;
+}
+
+.reveal ul {
+ list-style-type: disc;
+}
+
+.reveal ul ul {
+ list-style-type: square;
+}
+
+.reveal ul ul ul {
+ list-style-type: circle;
+}
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px;
+}
+
+.reveal dt {
+ font-weight: bold;
+}
+
+.reveal dd {
+ margin-left: 40px;
+}
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: var(--r-block-margin) auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
+}
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block;
+}
+
+.reveal q {
+ font-style: italic;
+}
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: var(--r-block-margin) auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: var(--r-code-font);
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
+}
+
+.reveal code {
+ font-family: var(--r-code-font);
+ text-transform: none;
+ tab-size: 2;
+}
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal;
+}
+
+.reveal .code-wrapper {
+ white-space: normal;
+}
+
+.reveal .code-wrapper code {
+ white-space: pre;
+}
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.reveal table th {
+ font-weight: bold;
+}
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid;
+}
+
+.reveal table th[align=center],
+.reveal table td[align=center] {
+ text-align: center;
+}
+
+.reveal table th[align=right],
+.reveal table td[align=right] {
+ text-align: right;
+}
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none;
+}
+
+.reveal sup {
+ vertical-align: super;
+ font-size: smaller;
+}
+
+.reveal sub {
+ vertical-align: sub;
+ font-size: smaller;
+}
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top;
+}
+
+.reveal small * {
+ vertical-align: top;
+}
+
+.reveal img {
+ margin: var(--r-block-margin) 0;
+}
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: var(--r-link-color);
+ text-decoration: none;
+ transition: color 0.15s ease;
+}
+
+.reveal a:hover {
+ color: var(--r-link-color-hover);
+ text-shadow: none;
+ border: none;
+}
+
+.reveal .roll span:after {
+ color: #fff;
+ background: var(--r-link-color-dark);
+}
+
+/*********************************************
+ * Frame helper
+ *********************************************/
+.reveal .r-frame {
+ border: 4px solid var(--r-main-color);
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
+}
+
+.reveal a .r-frame {
+ transition: all 0.15s linear;
+}
+
+.reveal a:hover .r-frame {
+ border-color: var(--r-link-color);
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
+}
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: var(--r-link-color);
+}
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: var(--r-link-color);
+}
+
+/*********************************************
+ * PRINT BACKGROUND
+ *********************************************/
+@media print {
+ .backgrounds {
+ background-color: var(--r-background-color);
+ }
+} \ No newline at end of file
diff --git a/revealjs/plugin/notes/notes.js b/revealjs/plugin/notes/notes.js
new file mode 100644
index 0000000..ce237b1
--- /dev/null
+++ b/revealjs/plugin/notes/notes.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).RevealNotes=e()}(this,(function(){"use strict";function t(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}let e={baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};const n=/[&<>"']/,i=/[&<>"']/g,s=/[<>"']|&(?!#?\w+;)/,r=/[<>"']|&(?!#?\w+;)/g,a={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},l=t=>a[t];function o(t,e){if(e){if(n.test(t))return t.replace(i,l)}else if(s.test(t))return t.replace(r,l);return t}const c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(t){return t.replace(c,((t,e)=>"colon"===(e=e.toLowerCase())?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""))}const u=/(^|[^\[])\^/g;function d(t,e){t=t.source||t,e=e||"";const n={replace:(e,i)=>(i=(i=i.source||i).replace(u,"$1"),t=t.replace(e,i),n),getRegex:()=>new RegExp(t,e)};return n}const h=/[^\w:]/g,g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function m(t,e,n){if(t){let t;try{t=decodeURIComponent(p(n)).replace(h,"").toLowerCase()}catch(t){return null}if(0===t.indexOf("javascript:")||0===t.indexOf("vbscript:")||0===t.indexOf("data:"))return null}e&&!g.test(n)&&(n=function(t,e){f[" "+t]||(k.test(t)?f[" "+t]=t+"/":f[" "+t]=S(t,"/",!0));const n=-1===(t=f[" "+t]).indexOf(":");return"//"===e.substring(0,2)?n?e:t.replace(x,"$1")+e:"/"===e.charAt(0)?n?e:t.replace(b,"$1")+e:t+e}(e,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(t){return null}return n}const f={},k=/^[^:]+:\/*[^/]*$/,x=/^([^:]+:)[\s\S]*$/,b=/^([^:]+:\/*[^/]*)[\s\S]*$/;const w={exec:function(){}};function y(t){let e,n,i=1;for(;i<arguments.length;i++)for(n in e=arguments[i],e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}function v(t,e){const n=t.replace(/\|/g,((t,e,n)=>{let i=!1,s=e;for(;--s>=0&&"\\"===n[s];)i=!i;return i?"|":" |"})).split(/ \|/);let i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(/\\\|/g,"|");return n}function S(t,e,n){const i=t.length;if(0===i)return"";let s=0;for(;s<i;){const r=t.charAt(i-s-1);if(r!==e||n){if(r===e||!n)break;s++}else s++}return t.substr(0,i-s)}function T(t){t&&t.sanitize&&!t.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}function _(t,e){if(e<1)return"";let n="";for(;e>1;)1&e&&(n+=t),e>>=1,t+=t;return n+t}function z(t,e,n,i){const s=e.href,r=e.title?o(e.title):null,a=t[1].replace(/\\([\[\]])/g,"$1");if("!"!==t[0].charAt(0)){i.state.inLink=!0;const t={type:"link",raw:n,href:s,title:r,text:a,tokens:i.inlineTokens(a,[])};return i.state.inLink=!1,t}return{type:"image",raw:n,href:s,title:r,text:o(a)}}class A{constructor(t){this.options=t||e}space(t){const e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){const e=this.rules.block.code.exec(t);if(e){const t=e[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:S(t,"\n")}}}fences(t){const e=this.rules.block.fences.exec(t);if(e){const t=e[0],n=function(t,e){const n=t.match(/^(\s+)(?:```)/);if(null===n)return e;const i=n[1];return e.split("\n").map((t=>{const e=t.match(/^\s+/);if(null===e)return t;const[n]=e;return n.length>=i.length?t.slice(i.length):t})).join("\n")}(t,e[3]||"");return{type:"code",raw:t,lang:e[2]?e[2].trim():e[2],text:n}}}heading(t){const e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(/#$/.test(t)){const e=S(t,"#");this.options.pedantic?t=e.trim():e&&!/ $/.test(e)||(t=e.trim())}const n={type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:[]};return this.lexer.inline(n.text,n.tokens),n}}hr(t){const e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:e[0]}}blockquote(t){const e=this.rules.block.blockquote.exec(t);if(e){const t=e[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:e[0],tokens:this.lexer.blockTokens(t,[]),text:t}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n,i,s,r,a,l,o,c,p,u,d,h,g=e[1].trim();const m=g.length>1,f={type:"list",raw:"",ordered:m,start:m?+g.slice(0,-1):"",loose:!1,items:[]};g=m?`\\d{1,9}\\${g.slice(-1)}`:`\\${g}`,this.options.pedantic&&(g=m?g:"[*+-]");const k=new RegExp(`^( {0,3}${g})((?: [^\\n]*)?(?:\\n|$))`);for(;t&&(h=!1,e=k.exec(t))&&!this.rules.block.hr.test(t);){if(n=e[0],t=t.substring(n.length),c=e[2].split("\n",1)[0],p=t.split("\n",1)[0],this.options.pedantic?(r=2,d=c.trimLeft()):(r=e[2].search(/[^ ]/),r=r>4?1:r,d=c.slice(r),r+=e[1].length),l=!1,!c&&/^ *$/.test(p)&&(n+=p+"\n",t=t.substring(p.length+1),h=!0),!h){const e=new RegExp(`^ {0,${Math.min(3,r-1)}}(?:[*+-]|\\d{1,9}[.)])`);for(;t&&(u=t.split("\n",1)[0],c=u,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!e.test(c));){if(c.search(/[^ ]/)>=r||!c.trim())d+="\n"+c.slice(r);else{if(l)break;d+="\n"+c}l||c.trim()||(l=!0),n+=u+"\n",t=t.substring(u.length+1)}}f.loose||(o?f.loose=!0:/\n *\n *$/.test(n)&&(o=!0)),this.options.gfm&&(i=/^\[[ xX]\] /.exec(d),i&&(s="[ ] "!==i[0],d=d.replace(/^\[[ xX]\] +/,""))),f.items.push({type:"list_item",raw:n,task:!!i,checked:s,loose:!1,text:d}),f.raw+=n}f.items[f.items.length-1].raw=n.trimRight(),f.items[f.items.length-1].text=d.trimRight(),f.raw=f.raw.trimRight();const x=f.items.length;for(a=0;a<x;a++){this.lexer.state.top=!1,f.items[a].tokens=this.lexer.blockTokens(f.items[a].text,[]);const t=f.items[a].tokens.filter((t=>"space"===t.type)),e=t.every((t=>{const e=t.raw.split("");let n=0;for(const t of e)if("\n"===t&&(n+=1),n>1)return!0;return!1}));!f.loose&&t.length&&e&&(f.loose=!0,f.items[a].loose=!0)}return f}}html(t){const e=this.rules.block.html.exec(t);if(e){const t={type:"html",raw:e[0],pre:!this.options.sanitizer&&("pre"===e[1]||"script"===e[1]||"style"===e[1]),text:e[0]};return this.options.sanitize&&(t.type="paragraph",t.text=this.options.sanitizer?this.options.sanitizer(e[0]):o(e[0]),t.tokens=[],this.lexer.inline(t.text,t.tokens)),t}}def(t){const e=this.rules.block.def.exec(t);if(e){e[3]&&(e[3]=e[3].substring(1,e[3].length-1));return{type:"def",tag:e[1].toLowerCase().replace(/\s+/g," "),raw:e[0],href:e[2],title:e[3]}}}table(t){const e=this.rules.block.table.exec(t);if(e){const t={type:"table",header:v(e[1]).map((t=>({text:t}))),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:e[3]&&e[3].trim()?e[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];let n,i,s,r,a=t.align.length;for(n=0;n<a;n++)/^ *-+: *$/.test(t.align[n])?t.align[n]="right":/^ *:-+: *$/.test(t.align[n])?t.align[n]="center":/^ *:-+ *$/.test(t.align[n])?t.align[n]="left":t.align[n]=null;for(a=t.rows.length,n=0;n<a;n++)t.rows[n]=v(t.rows[n],t.header.length).map((t=>({text:t})));for(a=t.header.length,i=0;i<a;i++)t.header[i].tokens=[],this.lexer.inlineTokens(t.header[i].text,t.header[i].tokens);for(a=t.rows.length,i=0;i<a;i++)for(r=t.rows[i],s=0;s<r.length;s++)r[s].tokens=[],this.lexer.inlineTokens(r[s].text,r[s].tokens);return t}}}lheading(t){const e=this.rules.block.lheading.exec(t);if(e){const t={type:"heading",raw:e[0],depth:"="===e[2].charAt(0)?1:2,text:e[1],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}}paragraph(t){const e=this.rules.block.paragraph.exec(t);if(e){const t={type:"paragraph",raw:e[0],text:"\n"===e[1].charAt(e[1].length-1)?e[1].slice(0,-1):e[1],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}}text(t){const e=this.rules.block.text.exec(t);if(e){const t={type:"text",raw:e[0],text:e[0],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}}escape(t){const e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:o(e[1])}}tag(t){const e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&/^<a /i.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):o(e[0]):e[0]}}link(t){const e=this.rules.inline.link.exec(t);if(e){const t=e[2].trim();if(!this.options.pedantic&&/^</.test(t)){if(!/>$/.test(t))return;const e=S(t.slice(0,-1),"\\");if((t.length-e.length)%2==0)return}else{const t=function(t,e){if(-1===t.indexOf(e[1]))return-1;const n=t.length;let i=0,s=0;for(;s<n;s++)if("\\"===t[s])s++;else if(t[s]===e[0])i++;else if(t[s]===e[1]&&(i--,i<0))return s;return-1}(e[2],"()");if(t>-1){const n=(0===e[0].indexOf("!")?5:4)+e[1].length+t;e[2]=e[2].substring(0,t),e[0]=e[0].substring(0,n).trim(),e[3]=""}}let n=e[2],i="";if(this.options.pedantic){const t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);t&&(n=t[1],i=t[3])}else i=e[3]?e[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(t)?n.slice(1):n.slice(1,-1)),z(e,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:i?i.replace(this.rules.inline._escapes,"$1"):i},e[0],this.lexer)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let t=(n[2]||n[1]).replace(/\s+/g," ");if(t=e[t.toLowerCase()],!t||!t.href){const t=n[0].charAt(0);return{type:"text",raw:t,text:t}}return z(n,t,n[0],this.lexer)}}emStrong(t,e,n=""){let i=this.rules.inline.emStrong.lDelim.exec(t);if(!i)return;if(i[3]&&n.match(/[\p{L}\p{N}]/u))return;const s=i[1]||i[2]||"";if(!s||s&&(""===n||this.rules.inline.punctuation.exec(n))){const n=i[0].length-1;let s,r,a=n,l=0;const o="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(o.lastIndex=0,e=e.slice(-1*t.length+n);null!=(i=o.exec(e));){if(s=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!s)continue;if(r=s.length,i[3]||i[4]){a+=r;continue}if((i[5]||i[6])&&n%3&&!((n+r)%3)){l+=r;continue}if(a-=r,a>0)continue;if(r=Math.min(r,r+a+l),Math.min(n,r)%2){const e=t.slice(1,n+i.index+r);return{type:"em",raw:t.slice(0,n+i.index+r+1),text:e,tokens:this.lexer.inlineTokens(e,[])}}const e=t.slice(2,n+i.index+r-1);return{type:"strong",raw:t.slice(0,n+i.index+r+1),text:e,tokens:this.lexer.inlineTokens(e,[])}}}}codespan(t){const e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(/\n/g," ");const n=/[^ ]/.test(t),i=/^ /.test(t)&&/ $/.test(t);return n&&i&&(t=t.substring(1,t.length-1)),t=o(t,!0),{type:"codespan",raw:e[0],text:t}}}br(t){const e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){const e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2],[])}}autolink(t,e){const n=this.rules.inline.autolink.exec(t);if(n){let t,i;return"@"===n[2]?(t=o(this.options.mangle?e(n[1]):n[1]),i="mailto:"+t):(t=o(n[1]),i=t),{type:"link",raw:n[0],text:t,href:i,tokens:[{type:"text",raw:t,text:t}]}}}url(t,e){let n;if(n=this.rules.inline.url.exec(t)){let t,i;if("@"===n[2])t=o(this.options.mangle?e(n[0]):n[0]),i="mailto:"+t;else{let e;do{e=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(e!==n[0]);t=o(n[0]),i="www."===n[1]?"http://"+t:t}return{type:"link",raw:n[0],text:t,href:i,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t,e){const n=this.rules.inline.text.exec(t);if(n){let t;return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):o(n[0]):n[0]:o(this.options.smartypants?e(n[0]):n[0]),{type:"text",raw:n[0],text:t}}}}const E={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:w,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};E.def=d(E.def).replace("label",E._label).replace("title",E._title).getRegex(),E.bullet=/(?:[*+-]|\d{1,9}[.)])/,E.listItemStart=d(/^( *)(bull) */).replace("bull",E.bullet).getRegex(),E.list=d(E.list).replace(/bull/g,E.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+E.def.source+")").getRegex(),E._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",E._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,E.html=d(E.html,"i").replace("comment",E._comment).replace("tag",E._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),E.paragraph=d(E._paragraph).replace("hr",E.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E._tag).getRegex(),E.blockquote=d(E.blockquote).replace("paragraph",E.paragraph).getRegex(),E.normal=y({},E),E.gfm=y({},E.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),E.gfm.table=d(E.gfm.table).replace("hr",E.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E._tag).getRegex(),E.gfm.paragraph=d(E._paragraph).replace("hr",E.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",E.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E._tag).getRegex(),E.pedantic=y({},E.normal,{html:d("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",E._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:w,paragraph:d(E.normal._paragraph).replace("hr",E.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",E.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const $={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:w,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:w,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/};function L(t){return t.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function R(t){let e,n,i="";const s=t.length;for(e=0;e<s;e++)n=t.charCodeAt(e),Math.random()>.5&&(n="x"+n.toString(16)),i+="&#"+n+";";return i}$._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",$.punctuation=d($.punctuation).replace(/punctuation/g,$._punctuation).getRegex(),$.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,$.escapedEmSt=/\\\*|\\_/g,$._comment=d(E._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),$.emStrong.lDelim=d($.emStrong.lDelim).replace(/punct/g,$._punctuation).getRegex(),$.emStrong.rDelimAst=d($.emStrong.rDelimAst,"g").replace(/punct/g,$._punctuation).getRegex(),$.emStrong.rDelimUnd=d($.emStrong.rDelimUnd,"g").replace(/punct/g,$._punctuation).getRegex(),$._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,$._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,$._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,$.autolink=d($.autolink).replace("scheme",$._scheme).replace("email",$._email).getRegex(),$._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,$.tag=d($.tag).replace("comment",$._comment).replace("attribute",$._attribute).getRegex(),$._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,$._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,$._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,$.link=d($.link).replace("label",$._label).replace("href",$._href).replace("title",$._title).getRegex(),$.reflink=d($.reflink).replace("label",$._label).replace("ref",E._label).getRegex(),$.nolink=d($.nolink).replace("ref",E._label).getRegex(),$.reflinkSearch=d($.reflinkSearch,"g").replace("reflink",$.reflink).replace("nolink",$.nolink).getRegex(),$.normal=y({},$),$.pedantic=y({},$.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:d(/^!?\[(label)\]\((.*?)\)/).replace("label",$._label).getRegex(),reflink:d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",$._label).getRegex()}),$.gfm=y({},$.normal,{escape:d($.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),$.gfm.url=d($.gfm.url,"i").replace("email",$.gfm._extended_email).getRegex(),$.breaks=y({},$.gfm,{br:d($.br).replace("{2,}","*").getRegex(),text:d($.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});class I{constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||e,this.options.tokenizer=this.options.tokenizer||new A,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={block:E.normal,inline:$.normal};this.options.pedantic?(n.block=E.pedantic,n.inline=$.pedantic):this.options.gfm&&(n.block=E.gfm,this.options.breaks?n.inline=$.breaks:n.inline=$.gfm),this.tokenizer.rules=n}static get rules(){return{block:E,inline:$}}static lex(t,e){return new I(e).lex(t)}static lexInline(t,e){return new I(e).inlineTokens(t)}lex(t){let e;for(t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(t,this.tokens);e=this.inlineQueue.shift();)this.inlineTokens(e.src,e.tokens);return this.tokens}blockTokens(t,e=[]){let n,i,s,r;for(this.options.pedantic&&(t=t.replace(/^ +$/gm,""));t;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((i=>!!(n=i.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))))if(n=this.tokenizer.space(t))t=t.substring(n.raw.length),1===n.raw.length&&e.length>0?e[e.length-1].raw+="\n":e.push(n);else if(n=this.tokenizer.code(t))t=t.substring(n.raw.length),i=e[e.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?e.push(n):(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.fences(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.heading(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.hr(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.blockquote(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.list(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.html(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.def(t))t=t.substring(n.raw.length),i=e[e.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(i.raw+="\n"+n.raw,i.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.table(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.lheading(t))t=t.substring(n.raw.length),e.push(n);else{if(s=t,this.options.extensions&&this.options.extensions.startBlock){let e=1/0;const n=t.slice(1);let i;this.options.extensions.startBlock.forEach((function(t){i=t.call({lexer:this},n),"number"==typeof i&&i>=0&&(e=Math.min(e,i))})),e<1/0&&e>=0&&(s=t.substring(0,e+1))}if(this.state.top&&(n=this.tokenizer.paragraph(s)))i=e[e.length-1],r&&"paragraph"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):e.push(n),r=s.length!==t.length,t=t.substring(n.raw.length);else if(n=this.tokenizer.text(t))t=t.substring(n.raw.length),i=e[e.length-1],i&&"text"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):e.push(n);else if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return this.state.top=!0,e}inline(t,e){this.inlineQueue.push({src:t,tokens:e})}inlineTokens(t,e=[]){let n,i,s,r,a,l,o=t;if(this.tokens.links){const t=Object.keys(this.tokens.links);if(t.length>0)for(;null!=(r=this.tokenizer.rules.inline.reflinkSearch.exec(o));)t.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,r.index)+"["+_("a",r[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(r=this.tokenizer.rules.inline.blockSkip.exec(o));)o=o.slice(0,r.index)+"["+_("a",r[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(r=this.tokenizer.rules.inline.escapedEmSt.exec(o));)o=o.slice(0,r.index)+"++"+o.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;t;)if(a||(l=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((i=>!!(n=i.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))))if(n=this.tokenizer.escape(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.tag(t))t=t.substring(n.raw.length),i=e[e.length-1],i&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):e.push(n);else if(n=this.tokenizer.link(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.reflink(t,this.tokens.links))t=t.substring(n.raw.length),i=e[e.length-1],i&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):e.push(n);else if(n=this.tokenizer.emStrong(t,o,l))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.codespan(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.br(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.del(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.autolink(t,R))t=t.substring(n.raw.length),e.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(t,R))){if(s=t,this.options.extensions&&this.options.extensions.startInline){let e=1/0;const n=t.slice(1);let i;this.options.extensions.startInline.forEach((function(t){i=t.call({lexer:this},n),"number"==typeof i&&i>=0&&(e=Math.min(e,i))})),e<1/0&&e>=0&&(s=t.substring(0,e+1))}if(n=this.tokenizer.inlineText(s,L))t=t.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(l=n.raw.slice(-1)),a=!0,i=e[e.length-1],i&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):e.push(n);else if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}else t=t.substring(n.raw.length),e.push(n);return e}}class C{constructor(t){this.options=t||e}code(t,e,n){const i=(e||"").match(/\S*/)[0];if(this.options.highlight){const e=this.options.highlight(t,i);null!=e&&e!==t&&(n=!0,t=e)}return t=t.replace(/\n$/,"")+"\n",i?'<pre><code class="'+this.options.langPrefix+o(i,!0)+'">'+(n?t:o(t,!0))+"</code></pre>\n":"<pre><code>"+(n?t:o(t,!0))+"</code></pre>\n"}blockquote(t){return"<blockquote>\n"+t+"</blockquote>\n"}html(t){return t}heading(t,e,n,i){return this.options.headerIds?"<h"+e+' id="'+this.options.headerPrefix+i.slug(n)+'">'+t+"</h"+e+">\n":"<h"+e+">"+t+"</h"+e+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(t,e,n){const i=e?"ol":"ul";return"<"+i+(e&&1!==n?' start="'+n+'"':"")+">\n"+t+"</"+i+">\n"}listitem(t){return"<li>"+t+"</li>\n"}checkbox(t){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(t){return"<p>"+t+"</p>\n"}table(t,e){return e&&(e="<tbody>"+e+"</tbody>"),"<table>\n<thead>\n"+t+"</thead>\n"+e+"</table>\n"}tablerow(t){return"<tr>\n"+t+"</tr>\n"}tablecell(t,e){const n=e.header?"th":"td";return(e.align?"<"+n+' align="'+e.align+'">':"<"+n+">")+t+"</"+n+">\n"}strong(t){return"<strong>"+t+"</strong>"}em(t){return"<em>"+t+"</em>"}codespan(t){return"<code>"+t+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(t){return"<del>"+t+"</del>"}link(t,e,n){if(null===(t=m(this.options.sanitize,this.options.baseUrl,t)))return n;let i='<a href="'+o(t)+'"';return e&&(i+=' title="'+e+'"'),i+=">"+n+"</a>",i}image(t,e,n){if(null===(t=m(this.options.sanitize,this.options.baseUrl,t)))return n;let i='<img src="'+t+'" alt="'+n+'"';return e&&(i+=' title="'+e+'"'),i+=this.options.xhtml?"/>":">",i}text(t){return t}}class M{strong(t){return t}em(t){return t}codespan(t){return t}del(t){return t}html(t){return t}text(t){return t}link(t,e,n){return""+n}image(t,e,n){return""+n}br(){return""}}class q{constructor(){this.seen={}}serialize(t){return t.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(t,e){let n=t,i=0;if(this.seen.hasOwnProperty(n)){i=this.seen[t];do{i++,n=t+"-"+i}while(this.seen.hasOwnProperty(n))}return e||(this.seen[t]=i,this.seen[n]=0),n}slug(t,e={}){const n=this.serialize(t);return this.getNextSafeSlug(n,e.dryrun)}}class O{constructor(t){this.options=t||e,this.options.renderer=this.options.renderer||new C,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new M,this.slugger=new q}static parse(t,e){return new O(e).parse(t)}static parseInline(t,e){return new O(e).parseInline(t)}parse(t,e=!0){let n,i,s,r,a,l,o,c,u,d,h,g,m,f,k,x,b,w,y,v="";const S=t.length;for(n=0;n<S;n++)if(d=t[n],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[d.type]&&(y=this.options.extensions.renderers[d.type].call({parser:this},d),!1!==y||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(d.type)))v+=y||"";else switch(d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,p(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",o="",r=d.header.length,i=0;i<r;i++)o+=this.renderer.tablecell(this.parseInline(d.header[i].tokens),{header:!0,align:d.align[i]});for(c+=this.renderer.tablerow(o),u="",r=d.rows.length,i=0;i<r;i++){for(l=d.rows[i],o="",a=l.length,s=0;s<a;s++)o+=this.renderer.tablecell(this.parseInline(l[s].tokens),{header:!1,align:d.align[s]});u+=this.renderer.tablerow(o)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(h=d.ordered,g=d.start,m=d.loose,r=d.items.length,u="",i=0;i<r;i++)k=d.items[i],x=k.checked,b=k.task,f="",k.task&&(w=this.renderer.checkbox(x),m?k.tokens.length>0&&"paragraph"===k.tokens[0].type?(k.tokens[0].text=w+" "+k.tokens[0].text,k.tokens[0].tokens&&k.tokens[0].tokens.length>0&&"text"===k.tokens[0].tokens[0].type&&(k.tokens[0].tokens[0].text=w+" "+k.tokens[0].tokens[0].text)):k.tokens.unshift({type:"text",text:w}):f+=w),f+=this.parse(k.tokens,m),u+=this.renderer.listitem(f,b,x);v+=this.renderer.list(u,h,g);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<S&&"text"===t[n+1].type;)d=t[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=e?this.renderer.paragraph(u):u;continue;default:{const t='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(t);throw new Error(t)}}return v}parseInline(t,e){e=e||this.renderer;let n,i,s,r="";const a=t.length;for(n=0;n<a;n++)if(i=t[n],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[i.type]&&(s=this.options.extensions.renderers[i.type].call({parser:this},i),!1!==s||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)))r+=s||"";else switch(i.type){case"escape":r+=e.text(i.text);break;case"html":r+=e.html(i.text);break;case"link":r+=e.link(i.href,i.title,this.parseInline(i.tokens,e));break;case"image":r+=e.image(i.href,i.title,i.text);break;case"strong":r+=e.strong(this.parseInline(i.tokens,e));break;case"em":r+=e.em(this.parseInline(i.tokens,e));break;case"codespan":r+=e.codespan(i.text);break;case"br":r+=e.br();break;case"del":r+=e.del(this.parseInline(i.tokens,e));break;case"text":r+=e.text(i.text);break;default:{const t='Token with "'+i.type+'" type was not found.';if(this.options.silent)return void console.error(t);throw new Error(t)}}return r}}function N(t,e,n){if(null==t)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof t)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected");if("function"==typeof e&&(n=e,e=null),T(e=y({},N.defaults,e||{})),n){const i=e.highlight;let s;try{s=I.lex(t,e)}catch(t){return n(t)}const r=function(t){let r;if(!t)try{e.walkTokens&&N.walkTokens(s,e.walkTokens),r=O.parse(s,e)}catch(e){t=e}return e.highlight=i,t?n(t):n(null,r)};if(!i||i.length<3)return r();if(delete e.highlight,!s.length)return r();let a=0;return N.walkTokens(s,(function(t){"code"===t.type&&(a++,setTimeout((()=>{i(t.text,t.lang,(function(e,n){if(e)return r(e);null!=n&&n!==t.text&&(t.text=n,t.escaped=!0),a--,0===a&&r()}))}),0))})),void(0===a&&r())}try{const n=I.lex(t,e);return e.walkTokens&&N.walkTokens(n,e.walkTokens),O.parse(n,e)}catch(t){if(t.message+="\nPlease report this to https://github.com/markedjs/marked.",e.silent)return"<p>An error occurred:</p><pre>"+o(t.message+"",!0)+"</pre>";throw t}}N.options=N.setOptions=function(t){var n;return y(N.defaults,t),n=N.defaults,e=n,N},N.getDefaults=t,N.defaults=e,N.use=function(...t){const e=y({},...t),n=N.defaults.extensions||{renderers:{},childTokens:{}};let i;t.forEach((t=>{if(t.extensions&&(i=!0,t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if(t.renderer){const e=n.renderers?n.renderers[t.name]:null;n.renderers[t.name]=e?function(...n){let i=t.renderer.apply(this,n);return!1===i&&(i=e.apply(this,n)),i}:t.renderer}if(t.tokenizer){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");n[t.level]?n[t.level].unshift(t.tokenizer):n[t.level]=[t.tokenizer],t.start&&("block"===t.level?n.startBlock?n.startBlock.push(t.start):n.startBlock=[t.start]:"inline"===t.level&&(n.startInline?n.startInline.push(t.start):n.startInline=[t.start]))}t.childTokens&&(n.childTokens[t.name]=t.childTokens)}))),t.renderer){const n=N.defaults.renderer||new C;for(const e in t.renderer){const i=n[e];n[e]=(...s)=>{let r=t.renderer[e].apply(n,s);return!1===r&&(r=i.apply(n,s)),r}}e.renderer=n}if(t.tokenizer){const n=N.defaults.tokenizer||new A;for(const e in t.tokenizer){const i=n[e];n[e]=(...s)=>{let r=t.tokenizer[e].apply(n,s);return!1===r&&(r=i.apply(n,s)),r}}e.tokenizer=n}if(t.walkTokens){const n=N.defaults.walkTokens;e.walkTokens=function(e){t.walkTokens.call(this,e),n&&n.call(this,e)}}i&&(e.extensions=n),N.setOptions(e)}))},N.walkTokens=function(t,e){for(const n of t)switch(e.call(N,n),n.type){case"table":for(const t of n.header)N.walkTokens(t.tokens,e);for(const t of n.rows)for(const n of t)N.walkTokens(n.tokens,e);break;case"list":N.walkTokens(n.items,e);break;default:N.defaults.extensions&&N.defaults.extensions.childTokens&&N.defaults.extensions.childTokens[n.type]?N.defaults.extensions.childTokens[n.type].forEach((function(t){N.walkTokens(n[t],e)})):n.tokens&&N.walkTokens(n.tokens,e)}},N.parseInline=function(t,e){if(null==t)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof t)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected");T(e=y({},N.defaults,e||{}));try{const n=I.lexInline(t,e);return e.walkTokens&&N.walkTokens(n,e.walkTokens),O.parseInline(n,e)}catch(t){if(t.message+="\nPlease report this to https://github.com/markedjs/marked.",e.silent)return"<p>An error occurred:</p><pre>"+o(t.message+"",!0)+"</pre>";throw t}},N.Parser=O,N.parser=O.parse,N.Renderer=C,N.TextRenderer=M,N.Lexer=I,N.lexer=I.lex,N.Tokenizer=A,N.Slugger=q,N.parse=N;return()=>{let t,e,n=null;function i(){if(n&&!n.closed)n.focus();else{if(n=window.open("about:blank","reveal.js - Notes","width=1100,height=700"),n.marked=N,n.document.write("\x3c!--\n\tNOTE: You need to build the notes plugin after making changes to this file.\n--\x3e\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Speaker View</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tfont-family: Helvetica;\n\t\t\t\tfont-size: 18px;\n\t\t\t}\n\n\t\t\t#current-slide,\n\t\t\t#upcoming-slide,\n\t\t\t#speaker-controls {\n\t\t\t\tpadding: 6px;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\t-moz-box-sizing: border-box;\n\t\t\t}\n\n\t\t\t#current-slide iframe,\n\t\t\t#upcoming-slide iframe {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t}\n\n\t\t\t#current-slide .label,\n\t\t\t#upcoming-slide .label {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 10px;\n\t\t\t\tleft: 10px;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\n\t\t\t#connection-status {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tz-index: 20;\n\t\t\t\tpadding: 30% 20% 20% 20%;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tcolor: #222;\n\t\t\t\tbackground: #fff;\n\t\t\t\ttext-align: center;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.overlay-element {\n\t\t\t\theight: 34px;\n\t\t\t\tline-height: 34px;\n\t\t\t\tpadding: 0 10px;\n\t\t\t\ttext-shadow: none;\n\t\t\t\tbackground: rgba( 220, 220, 220, 0.8 );\n\t\t\t\tcolor: #222;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\n\t\t\t.overlay-element.interactive:hover {\n\t\t\t\tbackground: rgba( 220, 220, 220, 1 );\n\t\t\t}\n\n\t\t\t#current-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 60%;\n\t\t\t\theight: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tpadding-right: 0;\n\t\t\t}\n\n\t\t\t#upcoming-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 40%;\n\t\t\t\theight: 40%;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t}\n\n\t\t\t/* Speaker controls */\n\t\t\t#speaker-controls {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 40%;\n\t\t\t\tright: 0;\n\t\t\t\twidth: 40%;\n\t\t\t\theight: 60%;\n\t\t\t\toverflow: auto;\n\t\t\t\tfont-size: 18px;\n\t\t\t}\n\n\t\t\t\t.speaker-controls-time.hidden,\n\t\t\t\t.speaker-controls-notes.hidden {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .label,\n\t\t\t\t.speaker-controls-pace .label,\n\t\t\t\t.speaker-controls-notes .label {\n\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-size: 0.66em;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time, .speaker-controls-pace {\n\t\t\t\t\tborder-bottom: 1px solid rgba( 200, 200, 200, 0.5 );\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tpadding-bottom: 20px;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .reset-button {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tfloat: right;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\t\t\t\t.speaker-controls-time:hover .reset-button {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer,\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\twidth: 50%;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer,\n\t\t\t\t.speaker-controls-time .clock,\n\t\t\t\t.speaker-controls-time .pacing .hours-value,\n\t\t\t\t.speaker-controls-time .pacing .minutes-value,\n\t\t\t\t.speaker-controls-time .pacing .seconds-value {\n\t\t\t\t\tfont-size: 1.9em;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer {\n\t\t\t\t\tfloat: left;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\tfloat: right;\n\t\t\t\t\ttext-align: right;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time span.mute {\n\t\t\t\t\topacity: 0.3;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .pacing-title {\n\t\t\t\t\tmargin-top: 5px;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .pacing.ahead {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .pacing.on-track {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .pacing.behind {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes {\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes .value {\n\t\t\t\t\tmargin-top: 5px;\n\t\t\t\t\tline-height: 1.4;\n\t\t\t\t\tfont-size: 1.2em;\n\t\t\t\t}\n\n\t\t\t/* Layout selector */\n\t\t\t#speaker-layout {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 10px;\n\t\t\t\tright: 10px;\n\t\t\t\tcolor: #222;\n\t\t\t\tz-index: 10;\n\t\t\t}\n\t\t\t\t#speaker-layout select {\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\ttop: 0;\n\t\t\t\t\tleft: 0;\n\t\t\t\t\tborder: 0;\n\t\t\t\t\tbox-shadow: 0;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t\topacity: 0;\n\n\t\t\t\t\tfont-size: 1em;\n\t\t\t\t\tbackground-color: transparent;\n\n\t\t\t\t\t-moz-appearance: none;\n\t\t\t\t\t-webkit-appearance: none;\n\t\t\t\t\t-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n\t\t\t\t}\n\n\t\t\t\t#speaker-layout select:focus {\n\t\t\t\t\toutline: none;\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\n\t\t\t.clear {\n\t\t\t\tclear: both;\n\t\t\t}\n\n\t\t\t/* Speaker layout: Wide */\n\t\t\tbody[data-speaker-layout=\"wide\"] #current-slide,\n\t\t\tbody[data-speaker-layout=\"wide\"] #upcoming-slide {\n\t\t\t\twidth: 50%;\n\t\t\t\theight: 45%;\n\t\t\t\tpadding: 6px;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"wide\"] #current-slide {\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"wide\"] #upcoming-slide {\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 50%;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"wide\"] #speaker-controls {\n\t\t\t\ttop: 45%;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 50%;\n\t\t\t\tfont-size: 1.25em;\n\t\t\t}\n\n\t\t\t/* Speaker layout: Tall */\n\t\t\tbody[data-speaker-layout=\"tall\"] #current-slide,\n\t\t\tbody[data-speaker-layout=\"tall\"] #upcoming-slide {\n\t\t\t\twidth: 45%;\n\t\t\t\theight: 50%;\n\t\t\t\tpadding: 6px;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"tall\"] #current-slide {\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"tall\"] #upcoming-slide {\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 0;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"tall\"] #speaker-controls {\n\t\t\t\tpadding-top: 40px;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 45%;\n\t\t\t\twidth: 55%;\n\t\t\t\theight: 100%;\n\t\t\t\tfont-size: 1.25em;\n\t\t\t}\n\n\t\t\t/* Speaker layout: Notes only */\n\t\t\tbody[data-speaker-layout=\"notes-only\"] #current-slide,\n\t\t\tbody[data-speaker-layout=\"notes-only\"] #upcoming-slide {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\tbody[data-speaker-layout=\"notes-only\"] #speaker-controls {\n\t\t\t\tpadding-top: 40px;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tfont-size: 1.25em;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 1080px) {\n\t\t\t\tbody[data-speaker-layout=\"default\"] #speaker-controls {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 900px) {\n\t\t\t\tbody[data-speaker-layout=\"default\"] #speaker-controls {\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 800px) {\n\t\t\t\tbody[data-speaker-layout=\"default\"] #speaker-controls {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<div id=\"connection-status\">Loading speaker view...</div>\n\n\t\t<div id=\"current-slide\"></div>\n\t\t<div id=\"upcoming-slide\"><span class=\"overlay-element label\">Upcoming</span></div>\n\t\t<div id=\"speaker-controls\">\n\t\t\t<div class=\"speaker-controls-time\">\n\t\t\t\t<h4 class=\"label\">Time <span class=\"reset-button\">Click to Reset</span></h4>\n\t\t\t\t<div class=\"clock\">\n\t\t\t\t\t<span class=\"clock-value\">0:00 AM</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timer\">\n\t\t\t\t\t<span class=\"hours-value\">00</span><span class=\"minutes-value\">:00</span><span class=\"seconds-value\">:00</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"clear\"></div>\n\n\t\t\t\t<h4 class=\"label pacing-title\" style=\"display: none\">Pacing – Time to finish current slide</h4>\n\t\t\t\t<div class=\"pacing\" style=\"display: none\">\n\t\t\t\t\t<span class=\"hours-value\">00</span><span class=\"minutes-value\">:00</span><span class=\"seconds-value\">:00</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"speaker-controls-notes hidden\">\n\t\t\t\t<h4 class=\"label\">Notes</h4>\n\t\t\t\t<div class=\"value\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"speaker-layout\" class=\"overlay-element interactive\">\n\t\t\t<span class=\"speaker-layout-label\"></span>\n\t\t\t<select class=\"speaker-layout-dropdown\"></select>\n\t\t</div>\n\n\t\t<script>\n\n\t\t\t(function() {\n\n\t\t\t\tvar notes,\n\t\t\t\t\tnotesValue,\n\t\t\t\t\tcurrentState,\n\t\t\t\t\tcurrentSlide,\n\t\t\t\t\tupcomingSlide,\n\t\t\t\t\tlayoutLabel,\n\t\t\t\t\tlayoutDropdown,\n\t\t\t\t\tpendingCalls = {},\n\t\t\t\t\tlastRevealApiCallId = 0,\n\t\t\t\t\tconnected = false\n\n\t\t\t\tvar connectionStatus = document.querySelector( '#connection-status' );\n\n\t\t\t\tvar SPEAKER_LAYOUTS = {\n\t\t\t\t\t'default': 'Default',\n\t\t\t\t\t'wide': 'Wide',\n\t\t\t\t\t'tall': 'Tall',\n\t\t\t\t\t'notes-only': 'Notes only'\n\t\t\t\t};\n\n\t\t\t\tsetupLayout();\n\n\t\t\t\tlet openerOrigin;\n\n\t\t\t\ttry {\n\t\t\t\t\topenerOrigin = window.opener.location.origin;\n\t\t\t\t}\n\t\t\t\tcatch ( error ) { console.warn( error ) }\n\n\t\t\t\t// In order to prevent XSS, the speaker view will only run if its\n\t\t\t\t// opener has the same origin as itself\n\t\t\t\tif( window.location.origin !== openerOrigin ) {\n\t\t\t\t\tconnectionStatus.innerHTML = 'Cross origin error.<br>The speaker window can only be opened from the same origin.';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar connectionTimeout = setTimeout( function() {\n\t\t\t\t\tconnectionStatus.innerHTML = 'Error connecting to main window.<br>Please try closing and reopening the speaker view.';\n\t\t\t\t}, 5000 );\n\n\t\t\t\twindow.addEventListener( 'message', function( event ) {\n\n\t\t\t\t\tclearTimeout( connectionTimeout );\n\t\t\t\t\tconnectionStatus.style.display = 'none';\n\n\t\t\t\t\tvar data = JSON.parse( event.data );\n\n\t\t\t\t\t// The overview mode is only useful to the reveal.js instance\n\t\t\t\t\t// where navigation occurs so we don't sync it\n\t\t\t\t\tif( data.state ) delete data.state.overview;\n\n\t\t\t\t\t// Messages sent by the notes plugin inside of the main window\n\t\t\t\t\tif( data && data.namespace === 'reveal-notes' ) {\n\t\t\t\t\t\tif( data.type === 'connect' ) {\n\t\t\t\t\t\t\thandleConnectMessage( data );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( data.type === 'state' ) {\n\t\t\t\t\t\t\thandleStateMessage( data );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( data.type === 'return' ) {\n\t\t\t\t\t\t\tpendingCalls[data.callId](data.result);\n\t\t\t\t\t\t\tdelete pendingCalls[data.callId];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Messages sent by the reveal.js inside of the current slide preview\n\t\t\t\t\telse if( data && data.namespace === 'reveal' ) {\n\t\t\t\t\t\tif( /ready/.test( data.eventName ) ) {\n\t\t\t\t\t\t\t// Send a message back to notify that the handshake is complete\n\t\t\t\t\t\t\twindow.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'connected'} ), '*' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( /slidechanged|fragmentshown|fragmenthidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {\n\n\t\t\t\t\t\t\tdispatchStateToMainWindow( data.state );\n\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/**\n\t\t\t\t * Updates the presentation in the main window to match the state\n\t\t\t\t * of the presentation in the notes window.\n\t\t\t\t */\n\t\t\t\tconst dispatchStateToMainWindow = debounce(( state ) => {\n\t\t\t\t\twindow.opener.postMessage( JSON.stringify({ method: 'setState', args: [ state ]} ), '*' );\n\t\t\t\t}, 500);\n\n\t\t\t\t/**\n\t\t\t\t * Asynchronously calls the Reveal.js API of the main frame.\n\t\t\t\t */\n\t\t\t\tfunction callRevealApi( methodName, methodArguments, callback ) {\n\n\t\t\t\t\tvar callId = ++lastRevealApiCallId;\n\t\t\t\t\tpendingCalls[callId] = callback;\n\t\t\t\t\twindow.opener.postMessage( JSON.stringify( {\n\t\t\t\t\t\tnamespace: 'reveal-notes',\n\t\t\t\t\t\ttype: 'call',\n\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\tmethodName: methodName,\n\t\t\t\t\t\targuments: methodArguments\n\t\t\t\t\t} ), '*' );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Called when the main window is trying to establish a\n\t\t\t\t * connection.\n\t\t\t\t */\n\t\t\t\tfunction handleConnectMessage( data ) {\n\n\t\t\t\t\tif( connected === false ) {\n\t\t\t\t\t\tconnected = true;\n\n\t\t\t\t\t\tsetupIframes( data );\n\t\t\t\t\t\tsetupKeyboard();\n\t\t\t\t\t\tsetupNotes();\n\t\t\t\t\t\tsetupTimer();\n\t\t\t\t\t\tsetupHeartbeat();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Called when the main window sends an updated state.\n\t\t\t\t */\n\t\t\t\tfunction handleStateMessage( data ) {\n\n\t\t\t\t\t// Store the most recently set state to avoid circular loops\n\t\t\t\t\t// applying the same state\n\t\t\t\t\tcurrentState = JSON.stringify( data.state );\n\n\t\t\t\t\t// No need for updating the notes in case of fragment changes\n\t\t\t\t\tif ( data.notes ) {\n\t\t\t\t\t\tnotes.classList.remove( 'hidden' );\n\t\t\t\t\t\tnotesValue.style.whiteSpace = data.whitespace;\n\t\t\t\t\t\tif( data.markdown ) {\n\t\t\t\t\t\t\tnotesValue.innerHTML = marked( data.notes );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesValue.innerHTML = data.notes;\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\tnotes.classList.add( 'hidden' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update the note slides\n\t\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );\n\n\t\t\t\t}\n\n\t\t\t\t// Limit to max one state update per X ms\n\t\t\t\thandleStateMessage = debounce( handleStateMessage, 200 );\n\n\t\t\t\t/**\n\t\t\t\t * Forward keyboard events to the current slide window.\n\t\t\t\t * This enables keyboard events to work even if focus\n\t\t\t\t * isn't set on the current slide iframe.\n\t\t\t\t *\n\t\t\t\t * Block F5 default handling, it reloads and disconnects\n\t\t\t\t * the speaker notes window.\n\t\t\t\t */\n\t\t\t\tfunction setupKeyboard() {\n\n\t\t\t\t\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t\t\t\t\tif( event.keyCode === 116 || ( event.metaKey && event.keyCode === 82 ) ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Creates the preview iframes.\n\t\t\t\t */\n\t\t\t\tfunction setupIframes( data ) {\n\n\t\t\t\t\tvar params = [\n\t\t\t\t\t\t'receiver',\n\t\t\t\t\t\t'progress=false',\n\t\t\t\t\t\t'history=false',\n\t\t\t\t\t\t'transition=none',\n\t\t\t\t\t\t'autoSlide=0',\n\t\t\t\t\t\t'backgroundTransition=none'\n\t\t\t\t\t].join( '&' );\n\n\t\t\t\t\tvar urlSeparator = /\\?/.test(data.url) ? '&' : '?';\n\t\t\t\t\tvar hash = '#/' + data.state.indexh + '/' + data.state.indexv;\n\t\t\t\t\tvar currentURL = data.url + urlSeparator + params + '&postMessageEvents=true' + hash;\n\t\t\t\t\tvar upcomingURL = data.url + urlSeparator + params + '&controls=false' + hash;\n\n\t\t\t\t\tcurrentSlide = document.createElement( 'iframe' );\n\t\t\t\t\tcurrentSlide.setAttribute( 'width', 1280 );\n\t\t\t\t\tcurrentSlide.setAttribute( 'height', 1024 );\n\t\t\t\t\tcurrentSlide.setAttribute( 'src', currentURL );\n\t\t\t\t\tdocument.querySelector( '#current-slide' ).appendChild( currentSlide );\n\n\t\t\t\t\tupcomingSlide = document.createElement( 'iframe' );\n\t\t\t\t\tupcomingSlide.setAttribute( 'width', 640 );\n\t\t\t\t\tupcomingSlide.setAttribute( 'height', 512 );\n\t\t\t\t\tupcomingSlide.setAttribute( 'src', upcomingURL );\n\t\t\t\t\tdocument.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Setup the notes UI.\n\t\t\t\t */\n\t\t\t\tfunction setupNotes() {\n\n\t\t\t\t\tnotes = document.querySelector( '.speaker-controls-notes' );\n\t\t\t\t\tnotesValue = document.querySelector( '.speaker-controls-notes .value' );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * We send out a heartbeat at all times to ensure we can\n\t\t\t\t * reconnect with the main presentation window after reloads.\n\t\t\t\t */\n\t\t\t\tfunction setupHeartbeat() {\n\n\t\t\t\t\tsetInterval( () => {\n\t\t\t\t\t\twindow.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'heartbeat'} ), '*' );\n\t\t\t\t\t}, 1000 );\n\n\t\t\t\t}\n\n\t\t\t\tfunction getTimings( callback ) {\n\n\t\t\t\t\tcallRevealApi( 'getSlidesAttributes', [], function ( slideAttributes ) {\n\t\t\t\t\t\tcallRevealApi( 'getConfig', [], function ( config ) {\n\t\t\t\t\t\t\tvar totalTime = config.totalTime;\n\t\t\t\t\t\t\tvar minTimePerSlide = config.minimumTimePerSlide || 0;\n\t\t\t\t\t\t\tvar defaultTiming = config.defaultTiming;\n\t\t\t\t\t\t\tif ((defaultTiming == null) && (totalTime == null)) {\n\t\t\t\t\t\t\t\tcallback(null);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Setting totalTime overrides defaultTiming\n\t\t\t\t\t\t\tif (totalTime) {\n\t\t\t\t\t\t\t\tdefaultTiming = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar timings = [];\n\t\t\t\t\t\t\tfor ( var i in slideAttributes ) {\n\t\t\t\t\t\t\t\tvar slide = slideAttributes[ i ];\n\t\t\t\t\t\t\t\tvar timing = defaultTiming;\n\t\t\t\t\t\t\t\tif( slide.hasOwnProperty( 'data-timing' )) {\n\t\t\t\t\t\t\t\t\tvar t = slide[ 'data-timing' ];\n\t\t\t\t\t\t\t\t\ttiming = parseInt(t);\n\t\t\t\t\t\t\t\t\tif( isNaN(timing) ) {\n\t\t\t\t\t\t\t\t\t\tconsole.warn(\"Could not parse timing '\" + t + \"' of slide \" + i + \"; using default of \" + defaultTiming);\n\t\t\t\t\t\t\t\t\t\ttiming = defaultTiming;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimings.push(timing);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( totalTime ) {\n\t\t\t\t\t\t\t\t// After we've allocated time to individual slides, we summarize it and\n\t\t\t\t\t\t\t\t// subtract it from the total time\n\t\t\t\t\t\t\t\tvar remainingTime = totalTime - timings.reduce( function(a, b) { return a + b; }, 0 );\n\t\t\t\t\t\t\t\t// The remaining time is divided by the number of slides that have 0 seconds\n\t\t\t\t\t\t\t\t// allocated at the moment, giving the average time-per-slide on the remaining slides\n\t\t\t\t\t\t\t\tvar remainingSlides = (timings.filter( function(x) { return x == 0 }) ).length\n\t\t\t\t\t\t\t\tvar timePerSlide = Math.round( remainingTime / remainingSlides, 0 )\n\t\t\t\t\t\t\t\t// And now we replace every zero-value timing with that average\n\t\t\t\t\t\t\t\ttimings = timings.map( function(x) { return (x==0 ? timePerSlide : x) } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar slidesUnderMinimum = timings.filter( function(x) { return (x < minTimePerSlide) } ).length\n\t\t\t\t\t\t\tif ( slidesUnderMinimum ) {\n\t\t\t\t\t\t\t\tmessage = \"The pacing time for \" + slidesUnderMinimum + \" slide(s) is under the configured minimum of \" + minTimePerSlide + \" seconds. Check the data-timing attribute on individual slides, or consider increasing the totalTime or minimumTimePerSlide configuration options (or removing some slides).\";\n\t\t\t\t\t\t\t\talert(message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcallback( timings );\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/**\n\t\t\t\t * Return the number of seconds allocated for presenting\n\t\t\t\t * all slides up to and including this one.\n\t\t\t\t */\n\t\t\t\tfunction getTimeAllocated( timings, callback ) {\n\n\t\t\t\t\tcallRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {\n\t\t\t\t\t\tvar allocated = 0;\n\t\t\t\t\t\tfor (var i in timings.slice(0, currentSlide + 1)) {\n\t\t\t\t\t\t\tallocated += timings[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback( allocated );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Create the timer and clock and start updating them\n\t\t\t\t * at an interval.\n\t\t\t\t */\n\t\t\t\tfunction setupTimer() {\n\n\t\t\t\t\tvar start = new Date(),\n\t\t\t\t\ttimeEl = document.querySelector( '.speaker-controls-time' ),\n\t\t\t\t\tclockEl = timeEl.querySelector( '.clock-value' ),\n\t\t\t\t\thoursEl = timeEl.querySelector( '.hours-value' ),\n\t\t\t\t\tminutesEl = timeEl.querySelector( '.minutes-value' ),\n\t\t\t\t\tsecondsEl = timeEl.querySelector( '.seconds-value' ),\n\t\t\t\t\tpacingTitleEl = timeEl.querySelector( '.pacing-title' ),\n\t\t\t\t\tpacingEl = timeEl.querySelector( '.pacing' ),\n\t\t\t\t\tpacingHoursEl = pacingEl.querySelector( '.hours-value' ),\n\t\t\t\t\tpacingMinutesEl = pacingEl.querySelector( '.minutes-value' ),\n\t\t\t\t\tpacingSecondsEl = pacingEl.querySelector( '.seconds-value' );\n\n\t\t\t\t\tvar timings = null;\n\t\t\t\t\tgetTimings( function ( _timings ) {\n\n\t\t\t\t\t\ttimings = _timings;\n\t\t\t\t\t\tif (_timings !== null) {\n\t\t\t\t\t\t\tpacingTitleEl.style.removeProperty('display');\n\t\t\t\t\t\t\tpacingEl.style.removeProperty('display');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update once directly\n\t\t\t\t\t\t_updateTimer();\n\n\t\t\t\t\t\t// Then update every second\n\t\t\t\t\t\tsetInterval( _updateTimer, 1000 );\n\n\t\t\t\t\t} );\n\n\n\t\t\t\t\tfunction _resetTimer() {\n\n\t\t\t\t\t\tif (timings == null) {\n\t\t\t\t\t\t\tstart = new Date();\n\t\t\t\t\t\t\t_updateTimer();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Reset timer to beginning of current slide\n\t\t\t\t\t\t\tgetTimeAllocated( timings, function ( slideEndTimingSeconds ) {\n\t\t\t\t\t\t\t\tvar slideEndTiming = slideEndTimingSeconds * 1000;\n\t\t\t\t\t\t\t\tcallRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {\n\t\t\t\t\t\t\t\t\tvar currentSlideTiming = timings[currentSlide] * 1000;\n\t\t\t\t\t\t\t\t\tvar previousSlidesTiming = slideEndTiming - currentSlideTiming;\n\t\t\t\t\t\t\t\t\tvar now = new Date();\n\t\t\t\t\t\t\t\t\tstart = new Date(now.getTime() - previousSlidesTiming);\n\t\t\t\t\t\t\t\t\t_updateTimer();\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\n\t\t\t\t\t}\n\n\t\t\t\t\ttimeEl.addEventListener( 'click', function() {\n\t\t\t\t\t\t_resetTimer();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} );\n\n\t\t\t\t\tfunction _displayTime( hrEl, minEl, secEl, time) {\n\n\t\t\t\t\t\tvar sign = Math.sign(time) == -1 ? \"-\" : \"\";\n\t\t\t\t\t\ttime = Math.abs(Math.round(time / 1000));\n\t\t\t\t\t\tvar seconds = time % 60;\n\t\t\t\t\t\tvar minutes = Math.floor( time / 60 ) % 60 ;\n\t\t\t\t\t\tvar hours = Math.floor( time / ( 60 * 60 )) ;\n\t\t\t\t\t\thrEl.innerHTML = sign + zeroPadInteger( hours );\n\t\t\t\t\t\tif (hours == 0) {\n\t\t\t\t\t\t\thrEl.classList.add( 'mute' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thrEl.classList.remove( 'mute' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tminEl.innerHTML = ':' + zeroPadInteger( minutes );\n\t\t\t\t\t\tif (hours == 0 && minutes == 0) {\n\t\t\t\t\t\t\tminEl.classList.add( 'mute' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tminEl.classList.remove( 'mute' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsecEl.innerHTML = ':' + zeroPadInteger( seconds );\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction _updateTimer() {\n\n\t\t\t\t\t\tvar diff, hours, minutes, seconds,\n\t\t\t\t\t\tnow = new Date();\n\n\t\t\t\t\t\tdiff = now.getTime() - start.getTime();\n\n\t\t\t\t\t\tclockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );\n\t\t\t\t\t\t_displayTime( hoursEl, minutesEl, secondsEl, diff );\n\t\t\t\t\t\tif (timings !== null) {\n\t\t\t\t\t\t\t_updatePacing(diff);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction _updatePacing(diff) {\n\n\t\t\t\t\t\tgetTimeAllocated( timings, function ( slideEndTimingSeconds ) {\n\t\t\t\t\t\t\tvar slideEndTiming = slideEndTimingSeconds * 1000;\n\n\t\t\t\t\t\t\tcallRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {\n\t\t\t\t\t\t\t\tvar currentSlideTiming = timings[currentSlide] * 1000;\n\t\t\t\t\t\t\t\tvar timeLeftCurrentSlide = slideEndTiming - diff;\n\t\t\t\t\t\t\t\tif (timeLeftCurrentSlide < 0) {\n\t\t\t\t\t\t\t\t\tpacingEl.className = 'pacing behind';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (timeLeftCurrentSlide < currentSlideTiming) {\n\t\t\t\t\t\t\t\t\tpacingEl.className = 'pacing on-track';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tpacingEl.className = 'pacing ahead';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t_displayTime( pacingHoursEl, pacingMinutesEl, pacingSecondsEl, timeLeftCurrentSlide );\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/**\n\t\t\t\t * Sets up the speaker view layout and layout selector.\n\t\t\t\t */\n\t\t\t\tfunction setupLayout() {\n\n\t\t\t\t\tlayoutDropdown = document.querySelector( '.speaker-layout-dropdown' );\n\t\t\t\t\tlayoutLabel = document.querySelector( '.speaker-layout-label' );\n\n\t\t\t\t\t// Render the list of available layouts\n\t\t\t\t\tfor( var id in SPEAKER_LAYOUTS ) {\n\t\t\t\t\t\tvar option = document.createElement( 'option' );\n\t\t\t\t\t\toption.setAttribute( 'value', id );\n\t\t\t\t\t\toption.textContent = SPEAKER_LAYOUTS[ id ];\n\t\t\t\t\t\tlayoutDropdown.appendChild( option );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Monitor the dropdown for changes\n\t\t\t\t\tlayoutDropdown.addEventListener( 'change', function( event ) {\n\n\t\t\t\t\t\tsetLayout( layoutDropdown.value );\n\n\t\t\t\t\t}, false );\n\n\t\t\t\t\t// Restore any currently persisted layout\n\t\t\t\t\tsetLayout( getLayout() );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Sets a new speaker view layout. The layout is persisted\n\t\t\t\t * in local storage.\n\t\t\t\t */\n\t\t\t\tfunction setLayout( value ) {\n\n\t\t\t\t\tvar title = SPEAKER_LAYOUTS[ value ];\n\n\t\t\t\t\tlayoutLabel.innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' );\n\t\t\t\t\tlayoutDropdown.value = value;\n\n\t\t\t\t\tdocument.body.setAttribute( 'data-speaker-layout', value );\n\n\t\t\t\t\t// Persist locally\n\t\t\t\t\tif( supportsLocalStorage() ) {\n\t\t\t\t\t\twindow.localStorage.setItem( 'reveal-speaker-layout', value );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Returns the ID of the most recently set speaker layout\n\t\t\t\t * or our default layout if none has been set.\n\t\t\t\t */\n\t\t\t\tfunction getLayout() {\n\n\t\t\t\t\tif( supportsLocalStorage() ) {\n\t\t\t\t\t\tvar layout = window.localStorage.getItem( 'reveal-speaker-layout' );\n\t\t\t\t\t\tif( layout ) {\n\t\t\t\t\t\t\treturn layout;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Default to the first record in the layouts hash\n\t\t\t\t\tfor( var id in SPEAKER_LAYOUTS ) {\n\t\t\t\t\t\treturn id;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfunction supportsLocalStorage() {\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlocalStorage.setItem('test', 'test');\n\t\t\t\t\t\tlocalStorage.removeItem('test');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch( e ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfunction zeroPadInteger( num ) {\n\n\t\t\t\t\tvar str = '00' + parseInt( num );\n\t\t\t\t\treturn str.substring( str.length - 2 );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Limits the frequency at which a function can be called.\n\t\t\t\t */\n\t\t\t\tfunction debounce( fn, ms ) {\n\n\t\t\t\t\tvar lastTime = 0,\n\t\t\t\t\t\ttimeout;\n\n\t\t\t\t\treturn function() {\n\n\t\t\t\t\t\tvar args = arguments;\n\t\t\t\t\t\tvar context = this;\n\n\t\t\t\t\t\tclearTimeout( timeout );\n\n\t\t\t\t\t\tvar timeSinceLastCall = Date.now() - lastTime;\n\t\t\t\t\t\tif( timeSinceLastCall > ms ) {\n\t\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttimeout = setTimeout( function() {\n\t\t\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t\t\t}, ms - timeSinceLastCall );\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})();\n\n\t\t<\/script>\n\t</body>\n</html>"),!n)return void alert("Speaker view popup failed to open. Please make sure popups are allowed and reopen the speaker view.");!function(){const i=e.getConfig().url,s="string"==typeof i?i:window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search;t=setInterval((function(){n.postMessage(JSON.stringify({namespace:"reveal-notes",type:"connect",state:e.getState(),url:s}),"*")}),500),window.addEventListener("message",r)}()}}function s(t){let i=e.getCurrentSlide(),s=i.querySelectorAll("aside.notes"),r=i.querySelector(".current-fragment"),a={namespace:"reveal-notes",type:"state",notes:"",markdown:!1,whitespace:"normal",state:e.getState()};if(i.hasAttribute("data-notes")&&(a.notes=i.getAttribute("data-notes"),a.whitespace="pre-wrap"),r){let t=r.querySelector("aside.notes");t?(a.notes=t.innerHTML,a.markdown="string"==typeof t.getAttribute("data-markdown"),s=null):r.hasAttribute("data-notes")&&(a.notes=r.getAttribute("data-notes"),a.whitespace="pre-wrap",s=null)}s&&(a.notes=Array.from(s).map((t=>t.innerHTML)).join("\n"),a.markdown=s[0]&&"string"==typeof s[0].getAttribute("data-markdown")),n.postMessage(JSON.stringify(a),"*")}function r(i){if(function(t){try{return window.location.origin===t.source.location.origin}catch(t){return!1}}(i)){let s=JSON.parse(i.data);s&&"reveal-notes"===s.namespace&&"connected"===s.type?(clearInterval(t),a()):s&&"reveal-notes"===s.namespace&&"call"===s.type&&function(t,i,s){let r=e[t].apply(e,i);n.postMessage(JSON.stringify({namespace:"reveal-notes",type:"return",result:r,callId:s}),"*")}(s.methodName,s.arguments,s.callId)}}function a(){e.on("slidechanged",s),e.on("fragmentshown",s),e.on("fragmenthidden",s),e.on("overviewhidden",s),e.on("overviewshown",s),e.on("paused",s),e.on("resumed",s),s()}return{id:"notes",init:function(t){e=t,/receiver/i.test(window.location.search)||(null!==window.location.search.match(/(\?|\&)notes/gi)?i():window.addEventListener("message",(t=>{if(!n&&"string"==typeof t.data){let i;try{i=JSON.parse(t.data)}catch(t){}i&&"reveal-notes"===i.namespace&&"heartbeat"===i.type&&(e=t.source,n&&!n.closed?n.focus():(n=e,window.addEventListener("message",r),a()))}var e})),e.addKeyBinding({keyCode:83,key:"S",description:"Speaker notes view"},(function(){i()})))},open:i}}}));
diff --git a/revealjs/plugin/search/search.js b/revealjs/plugin/search/search.js
new file mode 100644
index 0000000..b0deb1e
--- /dev/null
+++ b/revealjs/plugin/search/search.js
@@ -0,0 +1,7 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).RevealSearch=t()}(this,(function(){"use strict";
+/*!
+ * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
+ * by navigatating to that slide and highlighting it.
+ *
+ * @author Jon Snyder <snyder.jon@gmail.com>, February 2013
+ */return()=>{let e,t,n,l,o,i,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML='<input type="search" class="searchinput" placeholder="Search..." style="vertical-align: top;"/>\n\t\t</span>',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){switch(t.keyCode){case 13:t.preventDefault(),function(){if(i){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new c("slidecontent"),l=r.apply(t),o=0)}l&&(l.length&&l.length<=o&&(o=0),l.length>o&&(e.slide(l[o].h,l[o].v),o++))}(),i=!1;break;default:i=!0}}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(t,n){var l=document.getElementById(t)||document.body,o=n||"EM",i=new RegExp("^(?:"+o+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w'-]+/g,"|"),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!i.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n<t.childNodes.length;n++)this.hiliteWords(t.childNodes[n]);var l,f;if(3==t.nodeType)if((l=t.nodeValue)&&(f=d.exec(l))){for(var u=t;null!=u&&"SECTION"!=u.nodeName;)u=u.parentNode;var p=e.getIndices(u),h=c.length,y=!1;for(n=0;n<h;n++)c[n].h===p.h&&c[n].v===p.v&&(y=!0);y||c.push(p),s[f[0].toLowerCase()]||(s[f[0].toLowerCase()]=r[a++%r.length]);var g=document.createElement(o);g.appendChild(document.createTextNode(f[0])),g.style.backgroundColor=s[f[0].toLowerCase()],g.style.fontStyle="inherit",g.style.color="#000";var v=t.splitText(f.index);v.nodeValue=v.nodeValue.substring(f[0].length),t.parentNode.insertBefore(g,v)}}},this.remove=function(){for(var e,t=document.getElementsByTagName(o);t.length&&(e=t[0]);)e.parentNode.replaceChild(e.firstChild,e)},this.apply=function(e){if(null!=e&&e)return this.remove(),this.setRegex(e),this.hiliteWords(l),c}}return{id:"search",init:n=>{e=n,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),t||s(),"inline"!==t.style.display?a():d())}),!1)},open:a}}}));
diff --git a/revealjs/plugin/zoom/zoom.js b/revealjs/plugin/zoom/zoom.js
new file mode 100644
index 0000000..7ac2127
--- /dev/null
+++ b/revealjs/plugin/zoom/zoom.js
@@ -0,0 +1,11 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).RevealZoom=t()}(this,(function(){"use strict";
+/*!
+ * reveal.js Zoom plugin
+ */const e={id:"zoom",init:function(e){e.getRevealElement().addEventListener("mousedown",(function(o){var n=/Linux/.test(window.navigator.platform)?"ctrl":"alt",i=(e.getConfig().zoomKey?e.getConfig().zoomKey:n)+"Key",d=e.getConfig().zoomLevel?e.getConfig().zoomLevel:2;o[i]&&!e.isOverview()&&(o.preventDefault(),t.to({x:o.clientX,y:o.clientY,scale:d,pan:!1}))}))},destroy:()=>{t.reset()}};var t=function(){var e=1,o=0,n=0,i=-1,d=-1,l="transform"in document.body.style;function s(t,o){var n=r();if(t.width=t.width||1,t.height=t.height||1,t.x-=(window.innerWidth-t.width*o)/2,t.y-=(window.innerHeight-t.height*o)/2,l)if(1===o)document.body.style.transform="";else{var i=n.x+"px "+n.y+"px",d="translate("+-t.x+"px,"+-t.y+"px) scale("+o+")";document.body.style.transformOrigin=i,document.body.style.transform=d}else 1===o?(document.body.style.position="",document.body.style.left="",document.body.style.top="",document.body.style.width="",document.body.style.height="",document.body.style.zoom=""):(document.body.style.position="relative",document.body.style.left=-(n.x+t.x)/o+"px",document.body.style.top=-(n.y+t.y)/o+"px",document.body.style.width=100*o+"%",document.body.style.height=100*o+"%",document.body.style.zoom=o);e=o,document.documentElement.classList&&(1!==e?document.documentElement.classList.add("zoomed"):document.documentElement.classList.remove("zoomed"))}function c(){var t=.12*window.innerWidth,i=.12*window.innerHeight,d=r();n<i?window.scroll(d.x,d.y-14/e*(1-n/i)):n>window.innerHeight-i&&window.scroll(d.x,d.y+(1-(window.innerHeight-n)/i)*(14/e)),o<t?window.scroll(d.x-14/e*(1-o/t),d.y):o>window.innerWidth-t&&window.scroll(d.x+(1-(window.innerWidth-o)/t)*(14/e),d.y)}function r(){return{x:void 0!==window.scrollX?window.scrollX:window.pageXOffset,y:void 0!==window.scrollY?window.scrollY:window.pageYOffset}}return l&&(document.body.style.transition="transform 0.8s ease"),document.addEventListener("keyup",(function(o){1!==e&&27===o.keyCode&&t.out()})),document.addEventListener("mousemove",(function(t){1!==e&&(o=t.clientX,n=t.clientY)})),{to:function(o){if(1!==e)t.out();else{if(o.x=o.x||0,o.y=o.y||0,o.element){var n=o.element.getBoundingClientRect();o.x=n.left-20,o.y=n.top-20,o.width=n.width+40,o.height=n.height+40}void 0!==o.width&&void 0!==o.height&&(o.scale=Math.max(Math.min(window.innerWidth/o.width,window.innerHeight/o.height),1)),o.scale>1&&(o.x*=o.scale,o.y*=o.scale,s(o,o.scale),!1!==o.pan&&(i=setTimeout((function(){d=setInterval(c,1e3/60)}),800)))}},out:function(){clearTimeout(i),clearInterval(d),s({x:0,y:0},1),e=1},magnify:function(e){this.to(e)},reset:function(){this.out()},zoomLevel:function(){return e}}}();
+/*!
+ * zoom.js 0.3 (modified for use with reveal.js)
+ * http://lab.hakim.se/zoom-js
+ * MIT licensed
+ *
+ * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
+ */return()=>e}));
diff --git a/vuc/ep/begrebet.md b/vuc/ep/begrebet.md
new file mode 100644
index 0000000..8e71633
--- /dev/null
+++ b/vuc/ep/begrebet.md
@@ -0,0 +1,11 @@
+Begrebet "appropriere" betyder [noget retnign af] "at vinde hævd",
+og "appropriation" er noget som har fået nyet eller udvidet ejerskab.
+
+Begrebet er i sig selv neutralt men opfattes ofte negativt,
+dels pga. favoriseringen af (især kommerciel) ejerskabskultur siden 1980'erne,
+og dels da nyere tids offentlige debat ofte anvender begrebet
+i sammensætningen "kulurel appropriation"
+hvor det bruges om at en stærkere gruppe (f.eks. den hvide mand)
+der approprierer kultur fra en svageres gruppe (f.eks. indianere),
+og det anses for dårlig stil - udbytning - pga. det ulige magtforhold
+(som det at slå på en der er mindre end sig selv).
diff --git a/vuc/ep/data.md b/vuc/ep/data.md
new file mode 100644
index 0000000..9919ab9
--- /dev/null
+++ b/vuc/ep/data.md
@@ -0,0 +1,48 @@
+---
+title: Inspiration og appropriation i Superflex' værk "Al data til folket"
+subtitle: Eksamensprojekt i Dansk A og Historie B
+author: Jonas Smedegaard
+date: 2023-05-02
+lang: da-DK
+---
+
+# Emne
+
+Ejerskab i kunstneriske ideer og værker
+(koncepter og objekter).
+
+## Analyse af kunstværk "Al data til folket"
+
+Superflex - "Al data til folket",
+koblet til staten kontra folket i kritik af Vietnamkrigen
+<https://holbaekart.dk/kunstner/superflex/>
+
+Kunsthistorisk belysning:
+Andy Warhol kopierede kopieringskoncepter fra Yayoi Kusama.
+<https://www.information.dk/kultur/2018/10/yayoi-kusama-hele-verdens-yndlingskunstner>
+
+Historisk analyse af webside
+<http://guarana.com/news.html> -
+
+
+## Konkret idé
+
+Appropriering af anmeldelse af "I shop therefore I am"
+adapteret til "Guaraná Power" etiket og pressemateriale.
+<https://publicdelivery.org/barbara-kruger-i-shop/>
+
+Udskift reference til Rene Descartes
+med Asger Liebsts "Øjet og pilen",
+og forskydningen (approprieringen)
+fra skjulte signaler til eksplicit joke
+i reklamer for Jolly Cola i 90'erne.
+
+Medtage kommentar om egen appropriering,
+med præcis difference som bilag.
+
+# Faldgruber
+
+Opgaven skal kun dække **dansk** og **historie**,
+(ikke samfundsfag, kunst eller andre fag).
+
+Opgaven skal kun demonstrere et *uddrag* af fagenes metoder.
diff --git a/vuc/ep/disposition.md b/vuc/ep/disposition.md
new file mode 100644
index 0000000..a364bea
--- /dev/null
+++ b/vuc/ep/disposition.md
@@ -0,0 +1,55 @@
+# Begrebet
+
+Om hvad "appropriere" og "appropriation" betyder,
+og lisså vigtigt hvad det ofte forveksles med men *ikke* betyder.
+
+[historie: belæg for at nylig øget kritik af kulturappropriation,
+f.eks. eskimo-is og julekalender,
+og (måske bedre dokumenteret historisk)
+hvide skuespillere der spiller indere/afrikanere/indianere]
+
+# Værket
+
+Kort præsentation af kunstværket "Guaraná Power" fra 2003.
+
+[historie: historisk materiale som er bevidst iscenesat -
+beskrive brug af <https://archive.org/> som "tidsmaskine"
+både til verificering og til afsløring af værkets selvcensur]
+
+# Debatten
+
+Kritik i Information i 2014 om kulturel appropriation
+i forhold til oprindelige folk i brasilien
+som burde have patent på udvindelsen af Guaraná.
+
+[måske kun fokus på selve kritikken,
+måske fokus på metateksten "en tråd"
+som starter med værkets budskab, så kritikken som svar,
+og så respons, gentagen kritik, og tavshed]
+
+[historie: metateksten starter - ifølge kritikken -
+med Mawé-indianeres udvinding af Guaraná,
+derefter popularisering i Brasilien,
+og så (formodentligt antropologers støtte til) Mawé-indianeres patentkrav]
+
+# Produktet
+
+Kobling til "Guaraná Antarctica",
+med rødder i energidrikken cola
+og - især i Danmark - tidligere symbolleg ("To store frugter" i 1991)
+og antiimperialisme (Jolly colas unikke dominans i efterkrigstiden).
+
+[historie: Dansk colahistorie,
+videreført til symbolleg i 1990'erne,
+og Guaraná først kun som medicin
+(shots med "Junglespeed" ved festivaller i 1990 blev ulovliggjort)
+til tilladelse til brug i læskedrik,
+og senere i (stærk) energidrik]
+
+# Kunsten
+
+Propagandakunst, appropriationskunst, kommerce kunst,
+Rødder i tidligere værker,
+og derfra i fredsbevægelsen i 1970'erne.
+
+[historie: belæg for kobling til fredsbevægelsen]
diff --git a/vuc/ep/emne.md b/vuc/ep/emne.md
new file mode 100644
index 0000000..c45ea1f
--- /dev/null
+++ b/vuc/ep/emne.md
@@ -0,0 +1,55 @@
+---
+lang: da-DK
+date: 2023-03-29
+---
+
+# Appropriation i multimodale tekster
+
+Jeg er stærkt optaget af fænomenet "remix culture"
+<https://en.wikipedia.org/wiki/Remix_culture>
+og har de seneste 25 år været personligt engageret
+i flere sådanne kulturer
+indenfor elektronisk musik og software-udvikling.
+
+En central problemstilling indenfor remix culture er appropriation.
+Dvs. hvorvidt det lykkes at etablere ejerskab
+i et værk (ofte en multimodal tekst) baseret på et andet værk.
+
+Jeg ønsker at analysere udvalgte multimodale tekster
+relateret til kunstværket "Guaraná Power",
+med fokus på meget forskelligartede forsøg på appropriering:
+
+ * Kunstappropriation: Værket approprierer (måske) tidligere kunstværker af Barbara Kruger (belæg er senere mere stiliserede værker af samme kunstgruppe med entydig reference til tidligere værk)
+ * Kulturel appropriation: Værket inkluderer et budskab om at det støtter sydamerikanske bønder og approprierer derved (måske) indiansk kultur i samme område
+ * Social appropriation: Kritik om kulturel appropriation kommer efter mange år og kan (måske) ses om et forsøg på at lukrere på kunstværkets succes - en teknik kendt i nogle sammenhænge som "hijacking" <https://www.urbandictionary.com/define.php?term=Thread%20Hijacking>
+ * Varemærkeappropriation: Værkets varemærke er tydeligt baseret på et beslægtet kommercielt produkt - den brasilianske sodavand Guaraná Antarctica - og kan derfor (måske) siges at være en appropriation
+
+I hvert tilfælde vil jeg undersøge,
+om der kan siges at være tale om appropriation,
+eller om det mere rimeligt må kategoriseres vagere som inspiration
+eller stærkere som plagiat/tyveri.
+
+Som primære kilder har jeg flere muligheder,
+hvor eksempelvis følgende tænkes anvendt:
+
+ * Varemærke - centralt visuelt motiv i kunstværket, fra 2003
+ * Beretning - øjenvidnefortælling fra workshop som forberedelse til kunstværk, 2003
+ * Anklage - Debatindlæg i avis om at værket er kulturel appropriation, fra 2014
+
+Jeg forventer at anvende historiske metoder
+til vurdering af de primære kilders brugbarhed
+og til at belyse historisk baggrund for anklage.
+
+Jeg forventer at anvende dansk-metoder
+bl.a. til billedanalyse af varemærke
+og retorisk analyse af anklage.
+
+Som sekundære kilder forestiller jeg mig
+bl.a. at bruge følgende:
+
+ * Cola-krigen - afhandling om Jolly colas dominans på det danske marked i perioden 1959-1965
+ * Øjet og Pilen - (omtale af) gymnasie-undervisningsbog af Asger Liebst om afkodning af skjulte koder i reklamer, udgivet i 1989
+ * Danmarks bedste reklamefilm - (omtale af) reklamefilmen "To modne frugter" som bevidst leger med koder i cola-reklamer, lanceret i 1991 <https://web.archive.org/web/20120616165602/http://programmer.tv2.dk/reklamer/>
+ * I copy therefore I am - (omtale af) senere kunstværk i samme stil om "Guaraná power" med direkte reference til "Untitled (I shop therefore I am)" af Barbara Kruger <https://www.superflex.net/works/i_copy_therefore_i_am>
+ * Untitled (I shop therefore I am) - (omtale af) tidligere kunstværk som approprierer tekst af Rene Descartes "I think therefore I am" <https://publicdelivery.org/barbara-kruger-i-shop/>
+ * Steldom - Omtale af Salling Groups dom for plagiat af keramisk håndværk <https://www.dr.dk/nyheder/seneste/salling-group-skal-betale-en-million-kroner-i-erstatning-til-keramiker>
diff --git a/vuc/ep/flow.dot b/vuc/ep/flow.dot
new file mode 100644
index 0000000..cc4de55
--- /dev/null
+++ b/vuc/ep/flow.dot
@@ -0,0 +1,37 @@
+# usage: neato -Tpdf -o flow.pdf flow.dot
+
+digraph {
+mode=KK
+
+node [ fontname="Libertinus Sans" style=rounded shape=none ]
+edge [ fontname="Libertinus Sans" len=1.2 ]
+
+page -> proj -> soda [ dir=none len=1.1 ]
+page [ fontname="Libertinus Sans Bold" label=Koncept shape=rectangle ]
+proj [ fontname="Libertinus Sans Bold" label=Projekt shape=rectangle ]
+soda [ fontname="Libertinus Sans Bold" label=Sodavand shape=rectangle ]
+
+_col [ label="udvidet kollektiv" ]
+_cpy [ label="kopiering af ideer" ]
+trus [ label="undertrykkelse\n(martyrium)" style=dotted ]
+cens [ label="censur-\nskandale" ]
+copy [ label="kopi-\naktivisme" ]
+amer [ label="(syd-)\namerikanisme" ]
+fair [ label="fair trade" ]
+beep [ label="viden\ner magt" ]
+secr [ label="magisk\ningrediens" ]
+game [ label="(cola-)\nkrig" ]
+
+page -> _col [ dir=back ]
+page -> _cpy [ dir=back style=dotted ]
+proj -> cens
+proj -> trus [ style=dotted ]
+soda -> amer
+soda -> copy
+soda -> fair
+soda -> beep
+soda -> secr
+soda -> game
+_col -> trus -> fair -> amer -> game [ style=invis ]
+_cpy -> cens -> copy -> beep -> game [ style=invis ]
+}
diff --git a/vuc/ep/flow.pdf b/vuc/ep/flow.pdf
new file mode 100644
index 0000000..fa98978
--- /dev/null
+++ b/vuc/ep/flow.pdf
Binary files differ
diff --git a/vuc/ep/guarana.md b/vuc/ep/guarana.md
new file mode 100644
index 0000000..f3f5635
--- /dev/null
+++ b/vuc/ep/guarana.md
@@ -0,0 +1,234 @@
+---
+title: Appropriation i multimodale tekster
+subtitle: |
+ Synopsis \
+ Eksamensprojekt i Dansk A og Historie B
+author: Jonas Smedegaard
+date: 2023-05-02
+lang: da-DK
+mainfont: Libertinus Serif
+mainfontoptions:
+- Numbers=Lowercase
+sansfont: Libertinus Sans
+monofont: Libertinus Mono
+format:
+# html:
+# embed-resources: true
+ pdf:
+ pdf-engine: lualatex
+ documentclass: scrartcl
+ classoption:
+ - DIV=calc
+ papersize: a4
+ csquotes: true
+ include-in-header:
+# turn inline hyperlinks into footnotes
+ - text: |
+ \usepackage{hyperref}
+ \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
+# recalculate page margins, since mainfont was set after documentclass
+ - text: |
+ \KOMAoptions{DIV=last}
+# avoid widow or orphan lines
+ - text: |
+ \ifLuaTeX\usepackage{lua-widow-control}\lwcsetup{balanced}\else\usepackage[defaultlines=4,all]{nowidow}\fi
+# enable vector language asymptote
+ - text: |
+ \usepackage{asymptote}
+# enable vector language asymptote
+ - text: |
+ \usepackage{floatrow}
+ \DeclareFloatFont{henry}{\sffamily\itshape}
+ \floatsetup[figure]{font=henry}
+toc: true
+toc-depth: 2
+link-citations: true
+bibliography: ref.bib
+# humanities: apa; social sciences: modern-language-association; history: chicago-author-date-de
+csl: nys-nydanske-sprogstudier
+resource-path:
+- /usr/share/citation-style-language/styles
+filters:
+ - quarto-tikz
+---
+
+{{< pagebreak >}}
+# Indledning
+
+Jeg deltager i et international kollektivt samarbejde
+om at udvikle og distribuere såkaldt "Fri software" -
+dvs. computerkode som frit må bruges, kopieres og ganskes.
+I 2004 mødtes vi i 2 uger i Brasilien,
+og jeg havde medbragt et bidrag til en hyggeaften:
+Reklamespots tilhørende kunstværket "Guaraná Power".
+Jeg fandt det både fagligt og politisk relevant
+hvordan en dansk kunstnergruppe havde igangsat
+et international kollektivt samarbejde
+om at udvikle og distribuere en kopi af den brasilianske nationaldrik,
+men mine brasilianske kolleger forstod ikke joken.
+
+Appropriation har fået øget fokus i nyere tid,
+ofte negativt associeret.
+"Guaraná Power" anvender appropriation som *positive* styrkemarkører
+gennem relationer til bl.a. imperialisme og fredsbevægelsen
+i flere af værkets modaliteter.
+
+Jeg vil her belyse værkets brug af appropriation
+for at afdække mulige forklaringer på
+at værket ikke er universelt selvindlysende.
+
+# Problemformulering
+
+Hvordan indeholder kunstværket "Guaraná Power" appropriation?
+
+## Problemstillinger
+
+* Hvad kommunikerer værket konkret, og til hvem?
+* Hvordan opleves værket drillende, og hvorfor?
+* Hvor og hvordan indeholder værket appropriation?
+* Hvorfor og med hvilke belæg kan værket klassificeres som politisk kunst?
+
+{{< pagebreak >}}
+# Værket
+
+!["Guaraná Power" [@webside]; foto: Anders Sune Berg](corner.png)
+
+Sodavand produceret som fair trade og solgt på danske caféer
+
+På besøg i Brasilien i bliver værket ikke forstået
+af intellektuelle og politisk engagerede unge.
+
+## Produktet
+
+![Flaske [@sodavand]; foto: Jeppe Gudmundsen-Holmgreen](bottle.png){.column-margin}
+
+![Originalt logo [@logo]](LOGO_GUARANA.jpg){.column-margin}
+
+bag titel anes logo for "Guaraná Antarctica"
+→ Brasiliens Coca cola / hyldeblomst
+→ **Produktappropriation**
+
+Denotativt: **Energidrik**
+Konotativt: **Politisk opråb** - *power to the people*
+
+::: {#fig-penta-konkret}
+\usetikzlibrary{shapes.geometric}
+\begin{tikzpicture}
+ \def\LstG{"","Politik","Superflex","Logos","Danske cafeer og butikker","Unge intellektuelle rebeller"}
+ \node[regular polygon,regular polygon sides=5,minimum width=8em] (5gon){};
+ \draw (5gon.corner 2) node[circle,fill,inner
+ sep=1.5pt,label={18+72*2:{\pgfmathsetmacro{\lbl}{{\LstG}[2]}\lbl}}]{}
+ foreach \X in {4,1,3,5,2} {-- (5gon.corner \X)
+ node[circle,fill,inner
+ sep=1.5pt,label={18+72*\X:{\pgfmathsetmacro{\lbl}{{\LstG}[\X]}\lbl}}]{}};
+\end{tikzpicture}
+
+Retorisk pentagram, konkret flaske
+:::
+
+::: {#fig-elephants}
+> GUARANÁ POWER is an energy softdrink produced by a guaraná farmers cooperative from Maués in the Brazilian Amazon, in collaboration with Superflex. The farmers have organised themselves in response to the activities of the multinational corporations Xxxxx and XxxxxXx, a cartel whose monopoly on the purchase of the raw material has driven the price of guaraná berries down 80%, while the cost of their products to the consumer has risen.
+
+Etiket [@etiket]
+:::
+
+Hemmelig komponent
+→ censurerede ord er **Ambev** og **PepsiCo** [@etiket2003]
+→ Coca colas hemmelige ingrediens
+→ Dansk Jolly cola reklame i 1990'erne
+→ Colakrig efter 2. verdenskrig skabte Jolly cola
+
+## Projektet
+
+Beskrevet/iscenesat som samarbejde med brasilianske bønder
+i en "politisk respons" til udbytning.
+
+Pop-art (som Warhol) → men her **politisk!**
+→ i kategori "udvidet kollektiv" - men reelt også "kopiering af ideer"
+→ **Produktappropriation**
+
+Agitation for "power" til bønder er reference til "power to the people"
+fra fredsbevægelsen under Vietnamkrigen.
+→ **Politisk appropriation**
+
+At støtte bønder modarbejder Guaranier i Maué
+→ Guaranier: Indiansk folk i Maués, først til at dyrke Guaraná
+→ forsøger at få eksklusivret til Guaraná
+→ **Kulturappropriation** - ifølge etnolog [@kritik].
+
+::: {.callout-warning title="Utroværdig afsender"}
+Webside er fra 2021; beskriver projekt 2003-2014
+→ Kildenær: Førstehåndsviden, primær kilde, nedfældet samtidigt
+→ Særinteresser: kommerciel success + kunstnerisk røre
+→ Validering: Beskrivelse matcher rapport til sponsor [@øjenvidne]
+→ *Ikke* politisk at værket *siger* det er politisk
+:::
+
+![handels- og markedsføringsspor](flow)
+
+FIXME: pentagram: "Kunst","Kunstnergruppen","Logos","Kunsthaller","Progressive kunstinsteresserede"
+
+{{< pagebreak >}}
+# Pointer
+
+## Effektivt i Danmark
+
+indtil 1950'erne
+: Amerikansk overklasse-idyl
+
+1970'erne
+: teenage-lykke
+
+1990'erne
+: meta-fallos-symboler i 1990'erne
+: (Asger Liebst udgav lærebog "Øjet og pilen" i 1989)
+
+2000'erne
+: Postkolonialisme
+
+Solidaritet
+: midtersøgende regering i 100 år
+
+Amerikanisme
+: USA hjælper DK (Marshall-hjælp); Jolly cola
+
+Power to the people
+: Fredsbevægelsen under Vietnamkrigen
+
+Kopiering af ideer
+: Vestlig modbevægelse siden 1980'erne
+: Mainstream (MP3 musik, Piratpartiet) siden 2000'erne
+: Farligt: potentielt ulovligt
+
+## Ineffektivt i Brasilien
+
+1500-1815
+: Portugisisk kolonialisering
+
+1964-1985
+: USA-støttet konservativt diktatur
+: Det brasilianske mirakel: Ekstremt økonomisk boom
+: Årene med bly
+2002
+: Lula: Første arbejderleder af Brasilien
+
+Solidaritet
+: konservativisme, Diktatur, libralisme, neoliberalisme frem til 2002
+: midtersøgende regering frem til 2014
+
+Amerikanisme
+: USA ville invadere Brasilien pga. gummi
+: Brasilien ofrer 300.000 "gummisoldater"
+
+Power to the people
+: USA provokerer til 21 års liberalt diktatur
+
+Kopiering af ideer
+: Normaliseret
+
+Værkets symbolik er **eurocentrisk**
+Eurocentrik komplicerer tolkning som **kunstværk**
+Eurocentrik involverer **måske** kulturappropriation
+
+{{< pagebreak >}}
+# Litteraturliste
diff --git a/vuc/ep/ref.bib b/vuc/ep/ref.bib
new file mode 100644
index 0000000..077f060
--- /dev/null
+++ b/vuc/ep/ref.bib
@@ -0,0 +1,155 @@
+@incollection{webside,
+ author = {Jakob Fenger and Bjørnstjerne Christiansen and Rasmus Rosengren Nielsen},
+ title = {Guaraná Power},
+ maintitle = {WORKS – SUPERFLEX},
+ Publisher = {Superflex},
+ year = {2021},
+ address = {København},
+ language = {en-US},
+ notes = {Udgivelsestidspunkt estimeret vha. uafhængig webarkiv-service https://web.archive.org/},
+ url = {https://www.superflex.net/works/guarana_power},
+ urldate = {2023-04-13}
+}
+
+@incollection{sodavand,
+ author = {Jakob Fenger and Bjørnstjerne Christiansen and Rasmus Rosengren Nielsen},
+ title = {STRATEGY},
+ Publisher = {Superflex},
+ year = {2003},
+ address = {København},
+ language = {en-US},
+ notes = {Udgivelsestidspunkt estimeret vha. uafhængig webarkiv-service https://web.archive.org/},
+ url = {https://www.superflex.net/press/label/guarana_power},
+ urldate = {2023-05-01}
+}
+
+@incollection{can,
+ author = {Anon},
+ Publisher = {Guarana Antarctica},
+ year = {2020},
+ address = {Sweden},
+ language = {en-US},
+ url = {https://commons.wikimedia.org/wiki/File:Guaran%C3%A1_Antarctica.jpg},
+ urldate = {2023-05-02}
+}
+
+@incollection{logo,
+ author = {Anon},
+ Publisher = {Guarana Antarctica},
+ year = {2008},
+ language = {en-US},
+ url = {https://en.wikipedia.org/wiki/File:LOGO_GUARANA.jpg},
+ urldate = {2023-05-02}
+}
+
+@incollection{etiket,
+ author = {Jakob Fenger and Bjørnstjerne Christiansen and Rasmus Rosengren Nielsen},
+ title = {STRATEGY},
+ Publisher = {Superflex},
+ year = {2005},
+ address = {København},
+ language = {en-US},
+ notes = {Udgivelsestidspunkt estimeret vha. uafhængig webarkiv-service https://web.archive.org/},
+ url = {https://web.archive.org/web/20051104001022/https://guaranapower.org/main.php?page=strategy&id=1},
+ urldate = {2023-05-01}
+}
+
+@incollection{etiket2003,
+ author = {Jakob Fenger and Bjørnstjerne Christiansen and Rasmus Rosengren Nielsen},
+ title = {GUARANÁ POWER DE MAUÉS, DO BRASIL},
+ Publisher = {Superflex},
+ year = {2003},
+ address = {København},
+ language = {en-US},
+ notes = {Udgivelsestidspunkt estimeret vha. uafhængig webarkiv-service https://web.archive.org/},
+ url = {https://web.archive.org/web/20031007033429/https://www.guaranapower.org/},
+ urldate = {2023-05-02}
+}
+
+@incollection{brundtland,
+ author = {Anon},
+ title = {1987 - Brundtland rapporten},
+ maintitle = {Bæredygtig Udviklings historie},
+ publisher = {Netværket for økologisk folkeoplysning og praksis},
+ year = {2020},
+ month = {Apr},
+ address = {Svendborg},
+ language = {da-DK},
+ url = {https://bu.dk/introduktion/baeredygtig-udviklings-historie/1987-brundtland-rapporten/},
+ urldate = {2023-04-11}
+}
+
+@inreference{DKHIST_ØkoVækst,
+ author = {Anne Sørensen},
+ title = {Økonomisk vækst og velfærdsstaten},
+ year = {2023},
+ month = {Jan},
+ language = {da-DK},
+ crossref = {DKHIST},
+ url = {https://danmarkshistorien.dk/perioder/efterkrigstiden-1945-1973/oekonomisk-vaekst-og-velfaerdsstaten/},
+ urldate = {2023-04-11}
+}
+@reference{DKHIST,
+ maintitle = {danmarkshistorien.dk},
+ publisher = {Aarhus Universitet},
+ address = {Aarhus},
+ language = {da-DK},
+}
+
+@book{havelaar,
+ author = {Andy Redfern and Paul Snedker},
+ title = {Creating market opportunities for small enterprises: Experiences of the fair trade movement},
+ publisher = {International Labour Organization},
+ year = {2002},
+ address = {Geneva},
+ language = {en-GB},
+ url = {https://web.archive.org/web/20061209015558if_/http://www.ilo.org:80/dyn/empent/docs/F1057768373/WP30-2002.pdf},
+ urldate = {2023-04-11}
+}
+
+@online{varefakta,
+ author = {Anon},
+ title = {Varefaktas historie},
+ publisher = {Fonden Varefakta},
+ year = {2022},
+ month = {Nov},
+ address = {Glostrup},
+ language = {da-DK},
+ url = {https://varefakta.dk/historie/},
+ urldate = {2023-04-11}
+}
+
+@online{øjenvidne,
+ author = {Will Bradley},
+ title = {SUPERTROPICAL},
+ publisher = {Nordic Institute for Contemporary Art},
+ year = {2003},
+ address = {Helsinki},
+ language = {da-DK},
+ url = {https://web.archive.org/web/20061003053505/http://www.nifca.org/2006/projects/2003/supertropical.html},
+ urldate = {2023-05-01}
+}
+
+@online{ømærke,
+ author = {Anon},
+ title = {Ø-mærket},
+ publisher = {Økologisk Landsforening},
+ year = {2023},
+ month = {May},
+ address = {Aarhus},
+ language = {da-DK},
+ url = {https://okologi.dk/viden-om-oekologi/salg-og-forbrug/oe-maerket/},
+ urldate = {2023-04-29}
+}
+
+@online{kritik,
+ author = {Christian Groes-Green},
+ title = {Godhedens kunst},
+ publisher = {Dagbladet Information},
+ year = {2014},
+ month = {Jan},
+ address = {København},
+ language = {da-DK},
+ url = {https://www.information.dk/debat/2014/01/godhedens-kunst},
+ urldate = {2023-05-02}
+}