gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-marketing] branch master updated: nerdearla 2021


From: gnunet
Subject: [taler-marketing] branch master updated: nerdearla 2021
Date: Mon, 25 Oct 2021 17:31:23 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository marketing.

The following commit(s) were added to refs/heads/master by this push:
     new eddd599  nerdearla 2021
eddd599 is described below

commit eddd5996257c9a844c2944df4fabbc1ffb12007e
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Oct 25 11:05:52 2021 -0300

    nerdearla 2021
---
 presentations/2021-nerdearla/README                |   3 +
 presentations/2021-nerdearla/paso_a_paso.sh        | 210 ++++++
 .../slides/deck_ Slides_files/desde_lejos.png      | Bin 0 -> 261166 bytes
 .../slides/deck_ Slides_files/logo-2021.svg        |   2 +
 .../slides/deck_ Slides_files/montserrat.css       |  20 +
 .../slides/deck_ Slides_files/opensans.css         |  38 +
 presentations/2021-nerdearla/slides/index.html     | 765 +++++++++++++++++++++
 7 files changed, 1038 insertions(+)

diff --git a/presentations/2021-nerdearla/README 
b/presentations/2021-nerdearla/README
new file mode 100644
index 0000000..658d8ff
--- /dev/null
+++ b/presentations/2021-nerdearla/README
@@ -0,0 +1,3 @@
+Video of this talk can be found in large-media.git
+
+Send any feedback to sebasjm
diff --git a/presentations/2021-nerdearla/paso_a_paso.sh 
b/presentations/2021-nerdearla/paso_a_paso.sh
new file mode 100644
index 0000000..90deb4c
--- /dev/null
+++ b/presentations/2021-nerdearla/paso_a_paso.sh
@@ -0,0 +1,210 @@
+# NO USAR ESTE SCRIPT PARA PRODUCCION
+
+# Este script fue utilizado para la demostracion en la charla:
+#    Como armar un sistema de pagos desde el patio de tu casa
+# para Nerdearla 2021 en Octubre 20
+# https://twitter.com/sebasjm/status/1450874753615552527
+
+#####
+# Setup
+#####
+
+# instalamos algunas herramientas
+apt update
+apt install -y gnupg less vim procps curl inetutils-ping jq net-tools
+
+# agregarmos el repositorio debian de taler.net
+echo deb https://deb.taler.net/apt/debian bullseye main > 
/etc/apt/sources.list.d/taler.list
+curl https://taler.net/taler-systems.gpg.key | apt-key add -
+apt update
+
+# configuramos nuestra red ad-hoc
+echo 127.0.0.1 auditor.taler exchange.taler merchant-backend.taler >> 
/etc/hosts
+
+# el banco es un servicio externo
+# agregar aqui la IP donde este el banco a usar
+echo 172.17.0.3  bank.taler >> /etc/hosts
+
+# instalamos el software Taler
+apt install -y postgresql \
+  taler-exchange \
+  taler-auditor \
+  taler-merchant \
+  taler-wallet-cli
+
+#####
+# Database
+#####
+
+# para nuestro setup vamos a usar 3 bases de datos
+service postgresql start
+su - postgres -c 'createuser -s -i -d -r -l -w root'
+createdb auditor_db
+createdb exchange_db
+createdb merchant_db
+
+#####
+# Exchange
+#####
+
+# le damos nombre a nuestra moneda
+# el nombre de la moneda esta definido por el sistema bancario al cual
+# se conecta este exchange
+taler-config -s taler -o currency -V NERDS
+
+# unidad minima de valor nominal
+taler-config -s taler -o currency_round_unit -V $(taler-config -s taler -o 
currency):0.1
+
+# id publico
+taler-config -s exchange -o MASTER_PUBLIC_KEY -V $(taler-exchange-offline 
setup)
+
+# ubicacion en la red
+taler-config -s exchange -o base_url -V http://exchange.taler:8081/
+
+# ubicacion de la base de datos
+taler-config -s exchangedb-postgres -o config -V postgres:///exchange_db
+
+# donde el exchange espera recibir fondos
+taler-config -s exchange-account-1 -o payto_uri -V 
payto://x-taler-bank/bank.taler:5882/sebasjm
+
+
+
+# la siguiente configuracion es usada por
+#   * taler-exchange-wirewatch
+#   * taler-exchange-transfer
+
+# conexion via REST API con el banco y sus credenciales
+taler-config -s exchange-accountcredentials-1 -o wire_gateway_url -V 
http://bank.taler:5882/taler-wire-gateway/sebasjm/
+taler-config -s exchange-accountcredentials-1 -o username -V sebasjm
+taler-config -s exchange-accountcredentials-1 -o password -V asd
+
+# inicializacion de la base de datos del exchange
+taler-exchange-dbinit 
+
+# usamos la herramienta de la wallet para generar una configuracion standard 
inicial
+# que vamos a guardar en el archivo coins.conf
+taler-wallet-cli deployment gen-coin-config \
+  --min-amount $(taler-config -s taler -o currency):0.1 \
+  --max-amount $(taler-config -s taler -o currency):10 \
+  >  coins.conf
+
+#revisar y editar coins.conf para configurar:
+# * duracion
+# * tamaño
+# * honorarios
+
+#luego agregamos los valores a la configuracion
+cat coins.conf >> /etc/taler/taler.conf
+
+
+#tenemos un servicio de exchange casi listo
+taler-exchange-httpd -l log.exchange -L debug &
+
+# en condiciones normales taler-exchange-offline debe usarser desde otra 
computadora
+# desconectada de internet
+
+# generamos una aprobacion de la cuenta bancaria donde el exchange recibe 
fondos
+# y una aprobacion de los honorarios para un año
+taler-exchange-offline \
+  enable-account $(taler-config -s exchange-account-1 -o payto_uri) \
+  wire-fee 2021 x-taler-bank $(taler-config -s taler -o currency):0.1 
$(taler-config -s taler -o currency):0.1 \
+  upload;
+
+# en condiciones normales los procesos *-secmod-* son los unicos que tienen
+# acceso a las claves privadas RSA y Eddsa
+
+# iniciamos los procesos de firma digital
+# este proceso puede demorar y es importante esperar a que finalice antes de 
seguir
+taler-exchange-secmod-eddsa -l log.secmod.eddsa -L debug &
+taler-exchange-secmod-rsa -l log.secmod.rsa -L debug &
+
+# normalmente este es un paso de revision de configuracion
+# primero se descarga el material en formato json para revisar que todo este 
en orden
+# si no hay differencias con lo esperado se firma el contenido
+# finalmente se envia el contenido firmado como aprobacion para que el 
exchange pueda emitir monedas
+
+# en este caso lo hacemos en un solo paso
+taler-exchange-offline download sign upload
+
+# si todo funciono correctamente el exchange responde con las configuracion 
correcta
+curl exchange.taler:8081/keys | jq .
+
+# el servicio wirewatch estara preguntando al banco por transacciones 
entrantes y salientes
+taler-exchange-wirewatch -l log.wirewatch -L debug &
+
+# el servicio transfer ejecutara movimientos en su cuenta bancaria
+taler-exchange-transfer -l log.transfer -L debug &
+
+# el servicio aggregator simplificara transacciones a un mismo destinatario 
+taler-exchange-aggregator -l log.aggregator -L debug &
+
+# el servicio closer vigilara transacciones que pueden ser cerradas
+taler-exchange-closer -l log.closer -L debug &
+
+
+#####
+# Auditor
+#####
+
+#ubicacion en la red
+taler-config -s auditor -o port -V 8083
+taler-config -s auditor -o serve -V tcp
+taler-config -s auditor -o base_url -V http://auditor.taler:8083/
+
+#ubicacion de la base de datos
+taler-config -s auditordb-postgres -o config -V postgres:///auditor_db
+
+# en condiciones normales el exchange y auditor no estan en la misma 
computadora
+
+# agregamos el exchange a la lista de servicios para auditar
+taler-auditor-exchange -m $(taler-config -s exchange -o master_public_key) -u 
$(taler-config -s exchange -o base_url)
+
+# notificamos al exchange de que va a ser auditado
+taler-exchange-offline enable-auditor $(taler-auditor-offline setup) 
$(taler-config -s auditor -o base_url) the_auditor upload
+
+# inicializamos la base de datos
+taler-auditor-dbinit
+
+# el exchange ahora informa sobre su condicion 
+curl exchange.taler:8081/keys | jq .auditors
+
+# iniciamos el servicio auditor
+taler-auditor-httpd -l log.auditor -L debug &
+
+#####
+# Merchant
+#####
+
+# ubicacion en la red
+taler-config -s merchant -o port -V 9966
+taler-config -s merchant -o serve -V tcp
+
+# ubicacion de la base de datos
+taler-config -s merchantdb-postgres -o config -V postgres:///merchant_db
+
+# agregamos una referencia al exchange
+# de esta manera confiamos en la pagos con monedas emitidas por dicho exchange
+taler-config -s merchant-exchange-nerds -o exchange_base_url -V $(taler-config 
-s exchange -o base_url)
+taler-config -s merchant-exchange-nerds -o master_key -V $(taler-config -s 
exchange -o MASTER_PUBLIC_KEY)
+taler-config -s merchant-exchange-nerds -o currency -V $(taler-config -s taler 
-o currency)
+
+# alternativamente, agregamos una referencia al auditor
+# de esta manera confiamos en pagos con monedas emitidas por cualquier 
exchange auditado por dicho auditor
+taler-config -s merchant-auditor-nerds -o AUDITOR_BASE_URL -V $(taler-config 
-s auditor -o base_url)
+taler-config -s merchant-auditor-nerds -o AUDITOR_KEY -V 
$(taler-auditor-offline setup)
+taler-config -s merchant-auditor-nerds -o currency -V $(taler-config -s taler 
-o currency)
+
+# inicializamos la base de datos
+taler-merchant-dbinit
+
+# iniciamos el servico auditor
+taler-merchant-httpd -l log.merchant -L debug &
+
+# El sistema esta completo
+# Los proximos pasos son:
+#  * obtener una billetera GNU Taler en https://wallet.taler.net
+#  * extraer dinero desde el banco usando el exchange
+#  * generar una orden de compra en el backoffice del comerciante
+#  * utilizar la billetera para pagar la orden de compra
+
+
diff --git a/presentations/2021-nerdearla/slides/deck_ 
Slides_files/desde_lejos.png b/presentations/2021-nerdearla/slides/deck_ 
Slides_files/desde_lejos.png
new file mode 100644
index 0000000..8da4856
Binary files /dev/null and b/presentations/2021-nerdearla/slides/deck_ 
Slides_files/desde_lejos.png differ
diff --git a/presentations/2021-nerdearla/slides/deck_ 
Slides_files/logo-2021.svg b/presentations/2021-nerdearla/slides/deck_ 
Slides_files/logo-2021.svg
new file mode 100644
index 0000000..8c707f4
--- /dev/null
+++ b/presentations/2021-nerdearla/slides/deck_ Slides_files/logo-2021.svg      
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="670" height="300" viewBox="0 0 
201 90"><g fill="#0042b3" fill-rule="evenodd" stroke-width=".3"><path d="M86.7 
1.1c15.6 0 29 9.4 36 23.2h-5.9A35.1 35.1 0 0086.7 6.5C67 6.5 51 23.6 51 44.7c0 
10.4 3.8 19.7 10 26.6a31.4 31.4 0 01-4.2 3A45.2 45.2 0 0146 44.7c0-24 18.2-43.6 
40.7-43.6zm35.8 64.3a40.4 40.4 0 01-39 22.8c3-1.5 6-3.5 8.6-5.7a35.6 35.6 0 
0024.6-17.1z"></path><path d="M64.2 1.1l3.1.1c-3 1.6-5.9 3.5-8.5 5.8a37.5 37.5 
0 00-30.2 37.7c0 14.3 [...]
\ No newline at end of file
diff --git a/presentations/2021-nerdearla/slides/deck_ 
Slides_files/montserrat.css b/presentations/2021-nerdearla/slides/deck_ 
Slides_files/montserrat.css
new file mode 100644
index 0000000..3226294
--- /dev/null
+++ b/presentations/2021-nerdearla/slides/deck_ Slides_files/montserrat.css     
@@ -0,0 +1,20 @@
+/* Generated by Font Squirrel (http://www.fontsquirrel.com) on May 10, 2013 */
+
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 400;
+  src: url('montserrat-regular.eot');
+  src: url('montserrat-regular.eot?#iefix') format('embedded-opentype'),
+       url('montserrat-regular.woff') format('woff'),
+       url('montserrat-regular.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 700;
+  src: url('montserrat-bold.eot');
+  src: url('montserrat-bold.eot?#iefix') format('embedded-opentype'),
+       url('montserrat-bold.woff') format('woff'),
+       url('montserrat-bold.ttf') format('truetype');
+}
diff --git a/presentations/2021-nerdearla/slides/deck_ 
Slides_files/opensans.css b/presentations/2021-nerdearla/slides/deck_ 
Slides_files/opensans.css
new file mode 100644
index 0000000..3f463e2
--- /dev/null
+++ b/presentations/2021-nerdearla/slides/deck_ Slides_files/opensans.css       
@@ -0,0 +1,38 @@
+/* Generated by Font Squirrel (http://www.fontsquirrel.com) on May 10, 2013 */
+
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: url('opensans-regular.eot');
+  src: url('opensans-regular.eot?#iefix') format('embedded-opentype'),
+       url('opensans-regular.woff') format('woff'),
+       url('opensans-regular.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: url('opensans-bold.eot');
+  src: url('opensans-bold.eot?#iefix') format('embedded-opentype'),
+       url('opensans-bold.woff') format('woff'),
+       url('opensans-bold.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: italic;
+  font-weight: 400;
+  src: url('opensans-italic.eot');
+  src: url('opensans-italic.eot?#iefix') format('embedded-opentype'),
+       url('opensans-italic.woff') format('woff'),
+       url('opensans-italic.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: italic;
+  font-weight: 700;
+  src: url('opensans-bolditalic.eot');
+  src: url('opensans-bolditalic.eot?#iefix') format('embedded-opentype'),
+       url('opensans-bolditalic.woff') format('woff'),
+       url('opensans-bolditalic.ttf') format('truetype');
+}
diff --git a/presentations/2021-nerdearla/slides/index.html 
b/presentations/2021-nerdearla/slides/index.html
new file mode 100644
index 0000000..8477e10
--- /dev/null
+++ b/presentations/2021-nerdearla/slides/index.html
@@ -0,0 +1,765 @@
+<!DOCTYPE html>
+<!-- saved from url=(0047)file:///home/sebasjm/Downloads/slides-deck.html -->
+<html class="sl-root decks export loaded ua-phantomjs&gt; &lt;head&gt; 
&lt;meta name= mz-history mz-svg mz-localstorage mz-csspositionsticky 
mz-supports mz-cssanimations mz-backgroundsize mz-no-cssgridlegacy mz-cssgrid 
mz-flexbox mz-csstransforms mz-csstransforms3d mz-csstransitions mz-fullscreen 
reveal-full-page mz-webpanimation fonts-are-ready" viewport"="" 
content="width=device-width, initial-scale=1.0"><head><meta 
http-equiv="Content-Type" content="text/html; charset=UTF-8">
+               <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+               <title>deck: Slides</title>
+               <meta name="description" content="Slides">
+               <style>/*! normalize.css v2.1.0 | MIT License | 
git.io/normalize */@import 
url("https://s3.amazonaws.com/static.slid.es/fonts/montserrat/montserrat.css";);@import
 
url("https://s3.amazonaws.com/static.slid.es/fonts/opensans/opensans.css";);@import
 url("https://s3.amazonaws.com/static.slid.es/fonts/lato/lato.css";);@import 
url("https://s3.amazonaws.com/static.slid.es/fonts/asul/asul.css";);@import 
url("https://s3.amazonaws.com/static.slid.es/fonts/josefinsans/josefinsans.css";);@import
 url("h [...]
+ * Main styles for Slides
+ *
+ * @author Hakim El Hattab
+ 
*/*{box-sizing:border-box}:-webkit-full-screen{width:100%;height:100%}:-moz-full-screen{width:100%;height:100%}:-ms-fullscreen{width:100%;height:100%}:fullscreen{width:100%;height:100%}html,body{padding:0;margin:0;color:#252525;font-family:"Inter",
 Helvetica, sans-serif;font-size:16px}html:before,body:before{content:'' 
!important}html{-webkit-font-smoothing:subpixel-antialiased 
!important}html.sl-root:not(.loaded) *{-webkit-transition:none 
!important;transition:none !important}body{over [...]
+* reveal.js 4.1.0
+* https://revealjs.com
+* MIT licensed
+*
+* Copyright (C) 2020 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:-ms-grid;display:grid}.reveal 
.r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal 
.r-vstack{display:-webkit-box;display:-ms-flexbox;display:flex}.reveal 
.r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-v [...]
+</style>
+
+               <meta name="csrf-param" content="authenticity_token">
+<meta name="csrf-token" 
content="g+XKZ+OCPjoy0fGHl33MgKkHxb1mL4FjSQn0wlOD8jnws2ScJK1PnL2MjJAE9cB0bd6LfJT3JnWeN8zpdzNkXA==">
+               <style id="user-css-output" type="text/css"></style>
+       <link rel="stylesheet" href="./deck_ Slides_files/montserrat.css"><link 
rel="stylesheet" href="./deck_ Slides_files/opensans.css"><style 
type="text/css">.hljs-ln{border-collapse:collapse}.hljs-ln 
td{padding:0}.hljs-ln-n:before{content:attr(data-line-number)}</style></head>
+       <body class="reveal-viewport theme-font-montserrat 
theme-color-grey-blue" "="" style="--slide-width:960px; --slide-height:700px;">
+               <div class="reveal slide focused has-vertical-slides 
has-horizontal-slides ready" role="application" data-transition-speed="default" 
data-background-transition="slide" style="">
+                       <div class="slides" style="width: 960px; height: 
700px;">
+                               <section 
data-id="fb06924bc041052b4302ca698d593138" class="present" style="display: 
block;"><div class="sl-block" data-block-type="text" style="width: 806px; left: 
80px; top: 70px; height: auto;" 
data-block-id="744c9dc95cc01ed26db5fd94317fb3d7"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1>GNU Taler</h1>
+</div></div>
+<div class="sl-block" data-block-type="image" data-name="image-3e114f" 
data-block-id="b5636df407f71e0b49bdc449e035a973" style="width: 323.2px; height: 
144.716px; left: 80px; top: 262.463px; min-width: 1px; min-height: 1px;"><div 
class="sl-block-content" style="z-index: 11;" data-inline-svg="false"><img 
style="" data-natural-width="670" data-natural-height="300" data-lazy-loaded="" 
src="./deck_ Slides_files/logo-2021.svg"></div></div>
+<div class="sl-block" data-block-type="text" data-name="text-5b4bd9" 
data-block-id="382d43923c458b3d485001084ca15eb3" style="height: auto; width: 
345px; left: 535px; top: 276.321px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p>Como armar un sistema de pagos en el patio de tu casa</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-0ae3a4" 
data-block-id="da8c8822f2620f277f534e37e3fc4676" style="height: auto; width: 
600px; left: 180px; top: 540.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
+<p><a href="https://taler.net/"; target="_blank">https://taler.net</a></p>
+</div></div></section><section data-id="489598d2dd16bcf1e7fd012f16a18397" 
hidden="" aria-hidden="true" class="future" style="display: block;"><div 
class="sl-block" data-block-type="text" style="width: 817px; left: 80px; top: 
70px; height: auto;" data-block-id="1c22c3fee26797dcdac473cbc06df5d9"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1 style="text-align: left;">Sobre este <span 
style="color:#40E0D0">Workshop</span>
+</h1>
+</div></div>
+<div class="sl-block" data-block-type="text" style="width: 806px; left: 77px; 
top: 228px; height: auto;" 
data-block-id="3ee61c78744e4afdc8fedf3e2c30b92c"><div class="sl-block-content" 
data-placeholder-tag="h2" data-placeholder-text="Subtitle" style="z-index: 11;">
+<p style="text-align: left;">vamos a entender de que se trata, configurar un 
sistema desde cero y usarlo</p>
+</div></div>
+<div class="sl-block" data-block-type="text" style="width: 806px; left: 77px; 
top: 350px; height: auto;" data-block-id="f6437634eb45feabb5aefaaf136760ad" 
data-name="text-d947db"><div class="sl-block-content" data-placeholder-tag="h2" 
data-placeholder-text="Subtitle" style="z-index: 12; text-align: left;">
+<p style="text-align:left">script general</p>
+
+<ol>
+       <li style="text-align: justify;">setup</li>
+       <li>configuramos GNU Taler</li>
+       <li>llenamos nuestra billetera</li>
+       <li>hacemos una compra</li>
+</ol>
+</div></div></section><section data-id="1c0269dfd3f7bf698638cd64b8f270ae" 
hidden="" aria-hidden="true" class="future" style="display: block;"><div 
class="sl-block" data-block-type="text" style="width: 817px; left: 80px; top: 
70px; height: auto;" data-block-id="59e07ea49c8a081b37332ad2c36fcd6e"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1 style="text-align:left">Pero... que es?</h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-581842" 
data-block-id="95f6e79b2e02ad67c1eae4ebc41972b6" style="height: auto; width: 
600px; left: 280px; top: 190.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: right;">
+<p>....un sistema de pagos?</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-675afa" 
data-block-id="cb51dd785431efea178414b742dba2da" style="height: auto; width: 
600px; left: 80px; top: 311px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<blockquote>
+<p>los medios a través de los cuales se transfieren dinero</p>
+</blockquote>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-f52a6e" 
data-block-id="30cdff7eac880ce761c70b58073b35f4" style="height: auto; width: 
480px; left: 80px; top: 438.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13; 
text-align: left;">
+<ul>
+       <li>efectivo</li>
+       <li>cheque</li>
+       <li>tarjeta de crédito o débito</li>
+       <li>criptomonedas</li>
+</ul>
+</div></div></section><section class="stack future" 
data-id="a649515d6fc0079a64ae83b85b88028f" hidden="" aria-hidden="true" 
style="display: none;"><section data-id="4d13e599a82abd06700166df02b80a50" 
style="display: none;"><div class="sl-block" data-block-type="text" 
style="width: 806px; left: 87px; top: 70px; height: auto;" 
data-block-id="85a347ff9e08b6f2f5565ce521323973"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1>pequeño mapa</h1>
+</div></div>
+<div class="sl-block" data-block-type="line" data-name="line-d32e2e" 
data-block-id="71e9ddcef2bc989add71cd509e581b22" style="width: auto; height: 
auto; min-width: 0px; min-height: 0px; left: 320px; top: 210px;"><div 
class="sl-block-content" data-line-x1="0" data-line-y1="302" data-line-x2="0" 
data-line-y2="0" data-line-color="#000000" data-line-start-type="none" 
data-line-end-type="none" style="z-index: 11;"><svg 
xmlns="http://www.w3.org/2000/svg"; version="1.1" preserveAspectRatio="xMidY 
[...]
+<div class="sl-block" data-block-type="line" data-name="line-55297c" 
data-block-id="20f67e32480d243fa27faa0bc8cbe600" style="width: auto; height: 
auto; min-width: 0px; min-height: 0px; left: 80px; top: 350px;"><div 
class="sl-block-content" data-line-x1="0" data-line-y1="0" data-line-x2="473" 
data-line-y2="0" data-line-color="#000000" data-line-start-type="none" 
data-line-end-type="none" style="z-index: 12;"><svg 
xmlns="http://www.w3.org/2000/svg"; version="1.1" preserveAspectRatio="xMidYM 
[...]
+<div class="sl-block" data-block-type="text" data-name="text-3d469c" 
data-block-id="624b9e88c274db10a153f1b7837015b8" style="height: auto; width: 
308px; left: 560px; top: 400.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13; 
text-align: center;">
+<p><strong>physical</strong></p>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
308px; left: 560px; top: 260.5px;" 
data-block-id="9f61b62a8991290254f832842a9b49f4" data-name="text-53a0f7"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 14; text-align: center;">
+<p><strong>digital</strong></p>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
234px; left: 43px; top: 540.5px;" 
data-block-id="375699a2ee907c378e2ada217de76028" data-name="text-72d968"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 15; text-align: center;">
+<p><strong>account</strong></p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-d39275" 
data-block-id="ce84ebcb4b1efd3311c30e08a2f86b9a" style="height: auto; width: 
232px; left: 328px; top: 540.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;">
+<p><strong>token</strong></p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-d31e77" 
data-block-id="9a8db979d2cd9c882dda43d94c029a94" style="height: auto; width: 
910px; left: 25px; top: 630px;"><div class="sl-block-style" style="z-index: 17; 
transform: rotate(0deg);"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;">
+<pre><a href="https://www.bis.org/speeches/sp191205.pdf"; target="_blank"><span 
style="font-size:0.5em">Agustín Carstens: The future of money and the payment 
system: what role for central banks? 5/12/2019</span></a></pre>
+</div></div></div>
+<div class="sl-block" data-block-type="text" data-name="text-0663be" 
data-block-id="1b4bd17cad87725ce226991954205fc3" style="height: auto; width: 
159px; left: 359px; top: 400.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 18;">
+<p>efectivo</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-84f6f4" 
data-block-id="1c65b261e3c0647485d73dbd92a944ca" style="height: auto; width: 
236px; left: 55px; top: 260.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 19;">
+<p>criptomonedas</p>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
236px; left: 55px; top: 400.5px;" 
data-block-id="83b27d6e120568261635cec149909595" data-name="text-97a7e1"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 20;">
+<p>libro contable</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-b2118e" 
data-block-id="6aee898c344d86a5b4fd986dfb13cb3b" style="height: auto; width: 
159px; left: 359px; top: 260.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 21;">
+<p>GNU Taler</p>
+</div></div></section><section data-id="e5ba3f3a0b7bd2d0929b0910f1f33ee3" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="text" data-name="text-c162c2" 
data-block-id="9f1de5455e6ea45282ff8b5dc75fa978" style="height: auto; width: 
939px; left: 10.5px; top: 50px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10; 
text-align: center;">
+<blockquote>
+<p><span style="font-size:0.9em">To explain this thought, it is useful to make 
the distinction between <strong>token</strong>-based money and 
<strong>account</strong>-based money.</span></p>
+
+<p>&nbsp;</p>
+
+<p><span style="font-size:0.9em">Throughout history, various physical tokens 
have been used as money, the most recent manifestation being <span 
style="color:#00FFFF"><strong>notes and coins</strong></span>. In most cases, 
the tokens themselves may be intrinsically worthless, but people accept them as 
payment in the expectation that everyone else will accept them too. The more 
that others trust in monetary exchange, the more willing I am to accept it. In 
game theory terms, money is an equ [...]
+
+<p><br>
+<span style="font-size:0.9em">Account-based money marked a big step forwards 
in monetary history. This uses an <span 
style="color:#FF8C00"><strong>intermediary</strong></span>, typically a bank 
that accepts deposits. The <span 
style="color:#00FFFF"><strong>sender</strong></span> and the <span 
style="color:#00FFFF"><strong>receiver</strong></span> of a payment both have 
deposit <span style="color:#FF8C00"><strong>accounts</strong></span> at the 
bank, and a payment is executed when the ban [...]
+</blockquote>
+</div></div></section></section><section 
data-id="5fa607b6c0447a3f5c2e762b57b772ef" hidden="" aria-hidden="true" 
class="future" style="display: none;"><div class="sl-block" 
data-block-type="text" style="width: 806px; left: 80px; top: 70px; height: 
auto;" data-block-id="f4d0c7b83fbad9c09f17cf0219fd5a59"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1>digital o no digital?</h1>
+</div></div>
+<div class="sl-block" data-block-type="text" style="width: 806px; left: 80px; 
top: 256px; height: auto;" 
data-block-id="f35065159854dea2a320de701ddf8e47"><div class="sl-block-content" 
data-placeholder-tag="h2" data-placeholder-text="Subtitle" style="z-index: 11; 
text-align: left;">
+<ul>
+       <li>
+       <p>ventajas:&nbsp; rapidez, distancia</p>
+       </li>
+       <li>
+       <p>desafíos: gasto doble</p>
+       </li>
+       <li>
+       <p>siempre analizar:</p>
+
+       <ul>
+               <li>
+               <p>dependencias intrinsecas</p>
+               </li>
+               <li>
+               <p>consecuencias implícitas</p>
+               </li>
+       </ul>
+       </li>
+</ul>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-4e6a88" 
data-block-id="5acc5c3a372e08f506628554af0a131d" style="height: auto; width: 
800px; left: 80px; top: 560px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p>la pregunta a cual es mejor no tiene única respuesta, depende</p>
+</div></div></section><section data-id="72d14551feed8b40a6333c4df3a834c5" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 806px; left: 80px; top: 
70px; height: auto;" data-block-id="c33af45897b6e3a4557f5c8a91a2e44b"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1>principios</h1>
+</div></div>
+<div class="sl-block" data-block-type="text" style="width: 806px; left: 80px; 
top: 256px; height: auto;" 
data-block-id="e9ec0277eb272909bb71b199622bff52"><div class="sl-block-content" 
data-placeholder-tag="h2" data-placeholder-text="Subtitle" style="z-index: 11; 
text-align: left;">
+<ul>
+       <li>
+       <p><span style="color:#00FFFF"><strong>software libre</strong></span>: 
ejecutar, cambiar y distribuir</p>
+       </li>
+       <li>
+       <p>privado para el comprador</p>
+       </li>
+       <li>
+       <p>responsable para el vendedor</p>
+       </li>
+       <li>
+       <p>altamente resiliente a fallos</p>
+
+       <ul>
+               <li>
+               <p>de servicio</p>
+               </li>
+               <li>
+               <p>de diseño</p>
+               </li>
+       </ul>
+       </li>
+       <li>
+       <p>usable, eficiente, requiere la mínima información, promueve la 
competitividad</p>
+       </li>
+</ul>
+</div></div></section><section class="stack future" 
data-id="0016615e1ca0d40dda1c226377a6435f" hidden="" aria-hidden="true" 
style="display: none;"><section data-id="c0f8743781adb59a6e5f35a16ec5466d" 
style="display: none;"><div class="sl-block" data-block-type="text" 
style="width: 806px; left: 80px; top: 70px; height: auto;" 
data-block-id="ef9d3c5fac0c063484901bcd0277c1cc"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1>componentes</h1>
+</div></div>
+<div class="sl-block" data-block-type="text" style="width: 806px; left: 80px; 
top: 256px; height: auto;" 
data-block-id="71ff6947ae24bf8a40413177535081b9"><div class="sl-block-content" 
data-placeholder-tag="h2" data-placeholder-text="Subtitle" style="z-index: 11; 
text-align: left;">
+<ul>
+       <li>
+       <p><strong>exchange:</strong>&nbsp;emite y recibe monedas GNU Taler</p>
+       </li>
+       <li>
+       <p><strong>merchant:</strong> emite contratos</p>
+       </li>
+       <li>
+       <p><strong>wallet:</strong> retira monedas y cancela contratos</p>
+       </li>
+       <li>
+       <p><strong>auditor:</strong> verifica exchanges</p>
+       </li>
+       <li>
+       <p><strong>bank facade:</strong>&nbsp;habla con el sistema bancario</p>
+       </li>
+</ul>
+</div></div></section><section data-id="6b03d47d57935d137f6ac4fc301865c8" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="text" data-name="text-5918d4" 
data-block-id="014e04d414040ebeb25e94cfc86b26c8" style="height: auto; width: 
247.625px; left: 276.188px; top: 144px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
+<h3>exchange</h3>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-738a02" 
data-block-id="50b0f2dd5571b3594fd46005545de749" style="height: auto; width: 
221px; left: 45.5px; top: 465px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
+<h3>cliente</h3>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
271px; left: 518.875px; top: 464.5px;" 
data-block-id="1b98269571abec106b79216596d65826" data-name="text-691836"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 12;">
+<h3>comerciante</h3>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
190px; left: 720px; top: 149.5px;" 
data-block-id="cf4a487c9c8847790a127ff8a79b8b4a" data-name="text-f3e13f"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 13;">
+<h3>auditor</h3>
+</div></div>
+<div class="sl-block" data-block-type="line" data-name="line-5adc6a" 
data-block-id="45efe12c270786d29e9157c40e663d33" style="width: auto; height: 
auto; min-width: 0px; min-height: 0px; left: 548px; top: 169px;"><div 
class="sl-block-content" data-line-x1="169" data-line-y1="0" data-line-x2="0" 
data-line-y2="0" data-line-color="#000000" data-line-start-type="none" 
data-line-end-type="arrow" style="z-index: 14;" data-line-width="4px"><svg 
xmlns="http://www.w3.org/2000/svg"; version="1.1" pre [...]
+<div class="sl-block" data-block-type="line" style="width: auto; height: auto; 
min-width: 0px; min-height: 0px; left: 156px; top: 210px;" 
data-block-id="d6dc0fb3c61fb73d08b02d070489e010" data-name="line-b44c95"><div 
class="sl-block-content" data-line-x1="164.125" data-line-y1="0" 
data-line-x2="0" data-line-y2="245" data-line-color="#000000" 
data-line-start-type="none" data-line-end-type="arrow" style="z-index: 15;" 
data-line-width="4px"><svg xmlns="http://www.w3.org/2000/svg"; version="1. [...]
+<div class="sl-block" data-block-type="line" style="width: auto; height: auto; 
min-width: 0px; min-height: 0px; left: 252px; top: 489.5px;" 
data-block-id="768ee2ec6d11b596d278a9e3ce704817" data-name="line-93c6bb"><div 
class="sl-block-content" data-line-x1="0" data-line-y1="0" 
data-line-x2="266.875" data-line-y2="0.5" data-line-color="#000000" 
data-line-start-type="none" data-line-end-type="arrow" style="z-index: 16;" 
data-line-width="4px"><svg xmlns="http://www.w3.org/2000/svg"; version=" [...]
+<div class="sl-block" data-block-type="line" style="width: auto; height: auto; 
min-width: 0px; min-height: 0px; left: 480px; top: 210px;" 
data-block-id="935fc3e29eb181d4e7cbc46b4950ffeb" data-name="line-3dd52e"><div 
class="sl-block-content" data-line-x1="0" data-line-y1="0" 
data-line-x2="157.875" data-line-y2="245" data-line-color="#000000" 
data-line-start-type="none" data-line-end-type="arrow" style="z-index: 17;" 
data-line-width="4px"><svg xmlns="http://www.w3.org/2000/svg"; version="1. [...]
+<div class="sl-block" data-block-type="text" data-name="text-65e231" 
data-block-id="07994ce187e0eff3389b06538304626f" style="height: auto; width: 
273.727px; left: 65.361px; top: 290.421px;"><div class="sl-block-style" 
style="z-index: 18; transform: rotate(-56deg);"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 18;">
+<p><span style="font-size:0.7em">retira </span></p>
+</div></div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
273.727px; left: 238.062px; top: 435.5px;" 
data-block-id="feeebbf8ae3b4ce6b41eb77badb28da3" data-name="text-83aaa2"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 19;">
+<p><span style="font-size:0.7em">gasta </span></p>
+</div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
273.727px; left: 459.401px; top: 297.797px;" 
data-block-id="938208c8457f467ed0d83698a0359c6f" data-name="text-8b825b"><div 
class="sl-block-style" style="z-index: 20; transform: rotate(55deg);"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 20;">
+<p><span style="font-size:0.7em">deposita </span></p>
+</div></div></div>
+<div class="sl-block" data-block-type="text" style="height: auto; width: 
273.727px; left: 480px; top: 120.5px;" 
data-block-id="057fd3c4bed03a4089496071cdbfea0d" data-name="text-551426"><div 
class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" 
style="z-index: 21;">
+<p><span style="font-size:0.7em">verifica</span></p>
+</div></div></section><section data-id="42a5dbf6ed656e6eb7b86943f58870a0" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="image" data-name="image-b1a85f" style="width: 716.35px; 
height: 518px; left: 121.825px; top: 91px; min-width: 1px; min-height: 1px;" 
data-block-id="e98c0171c5c8884610d01459677217e9"><div class="sl-block-content" 
style="z-index: 10;"><img style="" data-natural-width="1376" 
data-natural-height="995" data-lazy-loaded="" dat [...]
+<h1>Manos a la obra!</h1>
+</div></div></section><section data-id="91d12394860ba0d6933144e116b12137" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 
70px; height: auto;" data-block-id="d4093d2b52c3847d032c93f4bc6f3fec"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Setup</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
data-block-id="7d8663ba0cee2a2b46388458943560f4" style="height: auto; width: 
800px; left: 80px; top: 210px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>vamos a usar debian bullseye</li>
+       <li>instalamos algunas herramienta (curl, vim, ping, jq...)</li>
+       <li>agregamos GNU Taler source list</li>
+       <li>configuramos DNS</li>
+       <li>instalamos software</li>
+</ol>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
data-block-id="4107d1c53809548058bcc8e9f1ad6682" style="height: auto; width: 
800px; left: 80px; top: 610.5px;"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section data-id="9a0fd8eb8a868d10462b2649bab68b12" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 
70px; height: auto;" data-block-id="f7a175892c602586c7492012024d2a91"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Database</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="a5482f0288c42d5c4a7f071bce4483ab"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>vamos a usar postgresql</li>
+       <li>creamos un usuario</li>
+       <li>creamos 3 bases de datos
+       <ul>
+               <li>exchange</li>
+               <li>auditor</li>
+               <li>merchant</li>
+       </ul>
+       </li>
+       <li>cada component viene con su inicializador de base de datos <span 
style="color:#40E0D0">(taler-*-dbinit)</span>
+</li>
+</ol>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="f7fe563b109ce2747416dfa760e50336"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section class="stack future" 
data-id="2ca3b68a5709353e4413fb18fbee4b36" hidden="" aria-hidden="true" 
style="display: none;"><section data-id="59df95e960b957d157ec9f39fef89a6e" 
style="display: none;"><div class="sl-block" data-block-type="text" 
style="width: 800px; left: 80px; top: 70px; height: auto;" 
data-block-id="e8ad75613f6d5d86b0e911382b773822"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1><span style="color:#EE82EE">Exchange</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="4db975088f206923f64664ca75049a38"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>nombre de la moneda, con un tamaño mínimo</li>
+       <li>ubicación en la red</li>
+       <li>base datos</li>
+       <li>cuenta en el banco <a 
href="https://datatracker.ietf.org/doc/html/rfc8905"; target="_blank">(payto:// 
RFC 8905)</a>
+</li>
+       <li>integración con el banco</li>
+       <li>configuramos las monedas&nbsp;
+       <ul>
+               <li>valor nominal, duración, costo</li>
+       </ul>
+       </li>
+</ol>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="fa50f0edad9fa105984a8b1435e5ee55"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section data-id="980e715207b185b5bbd11dd230a927c5" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="text" style="width: 800px; left: 80px; top: 70px; height: 
auto;" data-block-id="fdcae1719d6ad008c3b68dd5ed7c618b"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Exchange</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="00b61e3594dc68c129ffef4000985521"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>emisor y receptor de monedas virtuales</li>
+       <li>define política monetaria</li>
+       <li>hace los movimientos persistentes</li>
+       <li>módulos de seguridad
+       <ul>
+               <li>offline, secmod-rsa, secmod-eddsa</li>
+       </ul>
+       </li>
+       <li>módulos funcionales
+       <ul>
+               <li>wirewatch, transfer, aggregator, closer</li>
+       </ul>
+       </li>
+</ol>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="36748136095320d09212c510ab60f2af"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section></section><section class="stack future" 
data-id="6bf79cf95bd5d85a0d34aa3111834c4b" hidden="" aria-hidden="true" 
style="display: none;"><section data-id="d4d3441e3eb443e394d081efab215ffd" 
style="display: none;"><div class="sl-block" data-block-type="text" 
style="width: 800px; left: 80px; top: 70px; height: auto;" 
data-block-id="68063120f1fa404afd9cc02f0f5a3740"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1><span style="color:#EE82EE">Bank</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="8447aef12ddb8e2f62c1817738734a2d"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>vamos a usar un banco de juguete</li>
+       <li>setup: host, port, database</li>
+       <li>configuramos currency</li>
+       <li>este banco está íntimamente integrado con GNU Taler</li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p>No es parte de GNU Taler pero necesario para la demo</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="865cb89ae4a59f3b9ac0d5924d8adc04"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section data-id="8e2c352fd032eb10bb63264ab76f1dc2" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="text" style="width: 800px; left: 80px; top: 70px; height: 
auto;" data-block-id="987a4e48a4f2c2fa97cece91dbe9f447"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Bank</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="8893bc924e467f0bd8bf1b8eb06a12d5"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<p>Interfaz básica</p>
+
+<ol>
+       <li>listar últimos movimientos</li>
+       <li>efectuar una transacción desde una cuenta a otra</li>
+</ol>
+
+<p>Interfaz extendida</p>
+
+<ol>
+       <li>emitir una URI <span style="color:#40E0D0">taler://withdraw</span>
+</li>
+       <li>soportar un <span 
style="color:#40E0D0">withdrawal-operation</span>&nbsp;</li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p>No es parte de GNU Taler pero necesario para la demo</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="609b9e16c0de6e531c9fde03584262e4"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section></section><section class="stack future" 
data-id="d4f2569999d170f5491459b941d9f009" hidden="" aria-hidden="true" 
style="display: none;"><section data-id="3c650575fa166af379e0d2eddd3af85a" 
style="display: none;"><div class="sl-block" data-block-type="text" 
style="width: 800px; left: 80px; top: 70px; height: auto;" 
data-block-id="6db3dde8d166871952574962002c0079"><div class="sl-block-content" 
data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 
10;">
+<h1><span style="color:#EE82EE">Auditor</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="0f07af8db332367becc571ff5b037aba"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>base de datos</li>
+       <li>ubicación en la red</li>
+       <li>ubicación del exchange a auditor</li>
+       <li>notificamos al exchange sobre el auditor</li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p>No es estrictamente necesario pero útil</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="e35daca5ed1da406cbc7a4f6300f7799"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section data-id="eb8c973e0c9958e7f32a329f3fd1ac4a" 
class="future" aria-hidden="true" style="display: none;"><div class="sl-block" 
data-block-type="text" style="width: 800px; left: 80px; top: 70px; height: 
auto;" data-block-id="8e309050102d02bde8a971979356f9e7"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Auditor</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="e9f0feab394512d669d626eed51cff1f"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<p>Porque necesito un auditor?</p>
+
+<ol>
+       <li>confiar en un auditor significa confiar en todos los exchanges que 
audita</li>
+       <li>simplifica la red de confianza</li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p>En su lugar tanto el <span style="color:#40E0D0">merchant</span> como las 
<span style="color:#40E0D0">wallet</span> pueden confiar a cada exchange 
manualmente</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="31f790678e75b0a27327ab51d84c1034"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section></section><section 
data-id="d9cb4e74c043456e87a2b20742a471f4" hidden="" aria-hidden="true" 
class="future" style="display: none;"><div class="sl-block" 
data-block-type="text" style="width: 800px; left: 80px; top: 70px; height: 
auto;" data-block-id="faa37adb560bd0c9aec7f7afe03418b9"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Merchant</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="58c8e5265f4c70968104542bfd9e8b0f"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>base de datos</li>
+       <li>exchange de confianza</li>
+       <li>auditor de confianza</li>
+       <li>creamos una instancia</li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p>El servicio merchant es multi-tenant, con un mismo sistema podemos servir 
diferentes comerciantes independientes</p>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-c144f3" 
style="height: auto; width: 800px; left: 80px; top: 610.5px;" 
data-block-id="d5482c6d4c01863a3f964fb9948d0a50"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
+<p><span style="color:#FF8C00">NO HAGAN ESTO EN PRODUCCION</span></p>
+</div></div></section><section data-id="4dcbd35866f07d99c09bb7417d328446" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 806px; left: 77px; top: 
301.5px; height: auto;" data-block-id="db0652b465243a4306b0a32300bdcdd1"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1>Demo time!</h1>
+</div></div></section><section data-id="e8fa2489bcebde133abbca7e25061a5a" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 
70px; height: auto;" data-block-id="50233c8123af1e89a6334e271cadf593"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><font color="#ee82ee">Wallet</font></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 800px; left: 80px; top: 210px;" 
data-block-id="3f0f58ee556f7c2f9014f7406adefec1"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<p>Principales servicios</p>
+
+<ul>
+       <li>withdraw: extracción de monedas</li>
+       <li>pay: cancelar un contrato</li>
+       <li>refund: recibir devoluciones</li>
+       <li>deposit: liquidar monedas</li>
+       <li>backup: hacer copias de seguridad</li>
+       <li>tip: recibir propina</li>
+       <li>donation: efectuar donaciones (sin contratos)</li>
+</ul>
+</div></div></section><section data-id="63be0e31163b067b2fb75739ca0c7248" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 
70px; height: auto;" data-block-id="782b5c38fabca4e71a2a1866c37d1aaa"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">Demo</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 640px; left: 160px; top: 280px;" 
data-block-id="fb9a7afad5c25a70f3cf779b7f7baf2f"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ol>
+       <li>retirar monedas</li>
+       <li>crear una orden de compra</li>
+       <li>efectuar el pago</li>
+</ol>
+</div></div></section><section data-id="edf73c3f8b549b28acbdb3181f6a9545" 
hidden="" aria-hidden="true" class="future" style="display: none;"><div 
class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 
70px; height: auto;" data-block-id="6bfcca3b54fdc8c9742a44d4aedf4419"><div 
class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title 
Text" style="z-index: 10;">
+<h1><span style="color:#EE82EE">No termina acá</span></h1>
+</div></div>
+<div class="sl-block" data-block-type="text" data-name="text-a0cba4" 
style="height: auto; width: 640px; left: 147px; top: 226px;" 
data-block-id="27fef51e66865c78e629987c8f8e2519"><div class="sl-block-content" 
data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11; 
text-align: left;">
+<ul>
+       <li>demo.taler.net</li>
+       <li>docs.taler.net</li>
+       <li>git.taler.net</li>
+       <li>taler@gnu.org</li>
+       <li>#taler en libera.chat</li>
+       <li>
+<span style="color:rgb(255, 255, 255)">twitter.com/</span>taler en&nbsp;</li>
+</ul>
+
+<p>&nbsp;</p>
+
+<p>Happy hacking!</p>
+</div></div></section>
+                       </div>
+               <div class="backgrounds"><div class="slide-background present" 
data-loaded="true" style="display: block;"><div 
class="slide-background-content"></div></div><div class="slide-background 
future" data-loaded="true" style="display: block;"><div 
class="slide-background-content"></div></div><div class="slide-background 
future" data-loaded="true" style="display: block;"><div 
class="slide-background-content"></div></div><div class="slide-background stack 
future" style="display: none;"><div cla [...]
+                       <button class="navigate-right highlight enabled" 
aria-label="next slide"><div class="controls-arrow"></div></button>
+                       <button class="navigate-up" aria-label="above slide" 
disabled="disabled"><div class="controls-arrow"></div></button>
+                       <button class="navigate-down" aria-label="below slide" 
disabled="disabled"><div class="controls-arrow"></div></button></aside><div 
class="progress" style="display: block;"><span style="transform: 
scaleX(0);"></span></div><div class="speaker-notes" data-prevent-swipe="" 
tabindex="0"></div><div class="pause-overlay"><button 
class="resume-button">Resume presentation</button></div><div 
class="aria-status" aria-live="polite" aria-atomic="true" style="position: 
absolute; height: 1px; width: [...]
+
+               
+<script>
+       var SLConfig = 
{"current_user":{"id":233396,"username":"sebasjm","name":"Sebastian 
Marchano","description":"","thumbnail_url":"https://lh3.googleusercontent.com/-K0BTr9B1jmo/AAAAAAAAAAI/AAAAAAAAD7k/xf6W0oNxnxw/photo.jpg","account_type":"default","team_id":null,"settings":{"id":39747,"present_controls":false,"present_upsizing":true,"present_pointer":false,"present_notes":true,"default_deck_tag_id":null,"editor_grid":true,"editor_grid_on_top":false,"editor_snap":true,"editor_fixed_notes":
 [...]
+</script>
+
+               <script>
+                       !function(t){function 
e(t,e,r,n,i){this._listener=e,this._isOnce=r,this.context=n,this._signal=t,this._priority=i||0}function
 r(t,e){if("function"!=typeof t)throw new Error("listener is a required param 
of {fn}() and should be a Function.".replace("{fn}",e))}function 
n(){this._bindings=[],this._prevParams=null;var 
t=this;this.dispatch=function(){n.prototype.dispatch.apply(t,arguments)}}e.prototype={active:!0,params:null,execute:function(t){var
 e,r;return this.active&&this._listener&&( [...]
+/*!
+{
+  "name": "History API",
+  "property": "history",
+  "caniuse": "history",
+  "tags": ["history"],
+  "authors": ["Hay Kranen", "Alexander Farkas"],
+  "notes": [{
+    "name": "W3C Spec",
+    "href": "https://www.w3.org/TR/html51/browsers.html#the-history-interface";
+  }, {
+    "name": "MDN documentation",
+    "href": "https://developer.mozilla.org/en-US/docs/Web/API/window.history";
+  }],
+  "polyfills": ["historyjs", "html5historyapi"]
+}
+!*/
+(S=new S).addTest("history",function(){var 
e=navigator.userAgent;return(-1===e.indexOf("Android 
2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile 
Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows 
Phone")||"file:"===location.protocol)&&(t.history&&"pushState"in t.history)}),
+/*!
+{
+  "name": "SVG",
+  "property": "svg",
+  "caniuse": "svg",
+  "tags": ["svg"],
+  "authors": ["Erik Dahlstrom"],
+  "polyfills": [
+    "svgweb",
+    "raphael",
+    "amplesdk",
+    "canvg",
+    "svg-boilerplate",
+    "sie",
+    "dojogfx",
+    "fabricjs"
+  ]
+}
+!*/
+S.addTest("svg",!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg";).createSVGRect),
+/*!
+{
+  "name": "Local Storage",
+  "property": "localstorage",
+  "caniuse": "namevalue-storage",
+  "tags": ["storage"],
+  "knownBugs": [],
+  "notes": [],
+  "warnings": [],
+  "polyfills": [
+    "joshuabell-polyfill",
+    "cupcake",
+    "storagepolyfill",
+    "amplifyjs",
+    "yui-cacheoffline"
+  ]
+}
+!*/
+S.addTest("localstorage",function(){var t="modernizr";try{return 
localStorage.setItem(t,t),localStorage.removeItem(t),!0}catch(e){return!1}});var
 A=k._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" 
"):["",""];k._prefixes=A;var 
M=e.documentElement,z="svg"===M.nodeName.toLowerCase(),T="Moz O ms 
Webkit",C=k._config.usePrefixes?T.toLowerCase().split(" "):[];k._domPrefixes=C,
+/*!
+{
+  "name": "CSS position: sticky",
+  "property": "csspositionsticky",
+  "tags": ["css"],
+  "builderAliases": ["css_positionsticky"],
+  "notes": [{
+    "name": "Chrome bug report",
+    "href":"https://code.google.com/p/chromium/issues/detail?id=322972";
+  }],
+  "warnings": [ "using position:sticky on anything but top aligned elements is 
buggy in Chrome < 37 and iOS <=7+" ]
+}
+!*/
+S.addTest("csspositionsticky",function(){var 
t="position:",e="sticky",r=o("a").style;return 
r.cssText=t+A.join(e+";"+t).slice(0,-t.length),-1!==r.position.indexOf(e)});
+/*!
+{
+  "name": "CSS Supports",
+  "property": "supports",
+  "caniuse": "css-featurequeries",
+  "tags": ["css"],
+  "builderAliases": ["css_supports"],
+  "notes": [{
+    "name": "W3 Spec",
+    "href": "http://dev.w3.org/csswg/css3-conditional/#at-supports";
+  },{
+    "name": "Related Github Issue",
+    "href": "https://github.com/Modernizr/Modernizr/issues/648";
+  },{
+    "name": "W3 Info",
+    "href": 
"http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface";
+  }]
+}
+!*/
+var B="CSS"in t&&"supports"in t.CSS,L="supportsCSS"in 
t;S.addTest("supports",B||L);var N=k._config.usePrefixes?T.split(" 
"):[];k._cssomPrefixes=N;var E,O,q=k.testStyles=c,I=function(e){var 
n,i=A.length,a=t.CSSRule;if(void 0===a)return 
r;if(!e)return!1;if((n=(e=e.replace(/^@/,"")).replace(/-/g,"_").toUpperCase()+"_RULE")in
 a)return"@"+e;for(var o=0;o<i;o++){var s=A[o];if(s.toUpperCase()+"_"+n in 
a)return"@-"+s.toLowerCase()+"-"+e}return!1};k.atRule=I,O={}.hasOwnProperty,E=n(O,"undefined")
 [...]
+/*!
+{
+  "name": "Webp Animation",
+  "async": true,
+  "property": "webpanimation",
+  "aliases": ["webp-animation"],
+  "tags": ["image"],
+  "authors": ["Krister Kari", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
+  "notes": [{
+    "name": "WebP Info",
+    "href": "https://developers.google.com/speed/webp/";
+  },{
+    "name": "Chromium blog - Chrome 32 Beta: Animated WebP images and faster 
Chrome for Android touch input",
+    "href": 
"https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html";
+  }]
+}
+!*/
+S.addAsyncTest(function(){var t=new 
Image;t.onerror=function(){m("webpanimation",!1,{aliases:["webp-animation"]})},t.onload=function(){m("webpanimation",1==t.width,{aliases:["webp-animation"]})},t.src="data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA"});var
 R={elem:o("modernizr")};S._q.push(function(){delete R.elem});var 
_={style:R.elem.style};S._q.unshift(function(){delete _.style});k.testProp [...]
+/*!
+{
+  "name": "CSS Animations",
+  "property": "cssanimations",
+  "caniuse": "css-animation",
+  "polyfills": ["transformie", "csssandpaper"],
+  "tags": ["css"],
+  "warnings": ["Android < 4 will pass this test, but can only animate a single 
property at a time"],
+  "notes": [{
+    "name" : "Article: 'Dispelling the Android CSS animation myths'",
+    "href": "https://goo.gl/OGw5Gm";
+  }]
+}
+!*/
+S.addTest("cssanimations",x("animationName","a",!0)),
+/*!
+{
+  "name": "Background Size",
+  "property": "backgroundsize",
+  "tags": ["css"],
+  "knownBugs": ["This will false positive in Opera Mini - 
https://github.com/Modernizr/Modernizr/issues/396";],
+  "notes": [{
+    "name": "Related Issue",
+    "href": "https://github.com/Modernizr/Modernizr/issues/396";
+  }]
+}
+!*/
+S.addTest("backgroundsize",x("backgroundSize","100%",!0)),
+/*!
+{
+  "name": "CSS Grid (old & new)",
+  "property": ["cssgrid", "cssgridlegacy"],
+  "authors": ["Faruk Ates"],
+  "tags": ["css"],
+  "notes": [{
+    "name": "The new, standardized CSS Grid",
+    "href": "https://www.w3.org/TR/css3-grid-layout/";
+  }, {
+    "name": "The _old_ CSS Grid (legacy)",
+    "href": "https://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/";
+  }]
+}
+!*/
+S.addTest("cssgridlegacy",x("grid-columns","10px",!0)),S.addTest("cssgrid",x("grid-template-rows","none",!0)),
+/*!
+{
+  "name": "Flexbox",
+  "property": "flexbox",
+  "caniuse": "flexbox",
+  "tags": ["css"],
+  "notes": [{
+    "name": "The _new_ flexbox",
+    "href": "http://dev.w3.org/csswg/css3-flexbox";
+  }],
+  "warnings": [
+    "A `true` result for this detect does not imply that the `flex-wrap` 
property is supported; see the `flexwrap` detect."
+  ]
+}
+!*/
+S.addTest("flexbox",x("flexBasis","1px",!0)),
+/*!
+{
+  "name": "CSS Transforms",
+  "property": "csstransforms",
+  "caniuse": "transforms2d",
+  "tags": ["css"]
+}
+!*/
+S.addTest("csstransforms",function(){return-1===navigator.userAgent.indexOf("Android
 2.")&&x("transform","scale(1)",!0)}),
+/*!
+{
+  "name": "CSS Transforms 3D",
+  "property": "csstransforms3d",
+  "caniuse": "transforms3d",
+  "tags": ["css"],
+  "warnings": [
+    "Chrome may occassionally fail this test on some systems; more info: 
https://code.google.com/p/chromium/issues/detail?id=129004";
+  ]
+}
+!*/
+S.addTest("csstransforms3d",function(){var 
t=!!x("perspective","1px",!0),e=S._config.usePrefixes;if(t&&(!e||"webkitPerspective"in
 M.style)){var r,n="#modernizr{width:0;height:0}";S.supports?r="@supports 
(perspective: 1px)":(r="@media 
(transform-3d)",e&&(r+=",(-webkit-transform-3d)")),q(n+(r+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}"),function(e){t=7===e.offsetWidth&&18===e.offsetHeight})}return
 t}),
+/*!
+{
+  "name": "CSS Transitions",
+  "property": "csstransitions",
+  "caniuse": "css-transitions",
+  "tags": ["css"]
+}
+!*/
+S.addTest("csstransitions",x("transition","all",!0));var 
P=k.prefixed=function(t,e,r){return 
0===t.indexOf("@")?I(t):(-1!=t.indexOf("-")&&(t=l(t)),e?y(t,e,r):y(t,"pfx"))};
+/*!
+{
+  "name": "Fullscreen API",
+  "property": "fullscreen",
+  "caniuse": "fullscreen",
+  "notes": [{
+    "name": "MDN documentation",
+    "href": "https://developer.mozilla.org/en/API/Fullscreen";
+  }],
+  "polyfills": ["screenfulljs"],
+  "builderAliases": ["fullscreen_api"]
+}
+!*/S.addTest("fullscreen",!(!P("exitFullscreen",e,!1)&&!P("cancelFullScreen",e,!1))),i(),a(b),delete
 k.addTest,delete k.addAsyncTest;for(var 
D=0;D<S._q.length;D++)S._q[D]();t.Modernizr=S}(window,document),function(t,e){"object"==typeof
 exports&&"object"==typeof module?module.exports=e():"function"==typeof 
define&&define.amd?define([],e):"object"==typeof 
exports?exports.katex=e():t.katex=e()}("undefined"!=typeof 
self?self:this,function(){return function(t){function e(n){if(r[n])return r[n 
[...]
+var t=document.createElementNS("http://www.w3.org/2000/svg","svg";);for(var e 
in 
this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var
 r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return 
t},e.toMarkup=function(){var t="<svg";for(var e in 
this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" 
"+e+"='"+this.attributes[e]+"'");t+=">";for(var 
r=0;r<this.children.length;r++)t+=thi [...]
+8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.67,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55
 [...]
+o("math",vt,"close","\u23b1","\\rmoustache",!0),o("math",vt,"open","\u23b0","\\lmoustache",!0),o("math",vt,"close","\u27ef","\\rgroup",!0),o("math",vt,"open","\u27ee","\\lgroup",!0),o("math",vt,xt,"\u2213","\\mp",!0),o("math",vt,xt,"\u2296","\\ominus",!0),o("math",vt,xt,"\u228e","\\uplus",!0),o("math",vt,xt,"\u2293","\\sqcap",!0),o("math",vt,xt,"\u2217","\\ast"),o("math",vt,xt,"\u2294","\\sqcup",!0),o("math",vt,xt,"\u25ef","\\bigcirc"),o("math",vt,xt,"\u2219","\\bullet"),o("math",vt,xt,"
 [...]
+}else if("bottom"===t.positionType)l=-t.positionData;else{var 
u=t.children[0];if("elem"!==u.type)throw new Error('First child must have type 
"elem".');if("shift"===t.positionType)l=-u.elem.depth-t.positionData;else{if("firstBaseline"!==t.positionType)throw
 new Error("Invalid positionType 
"+t.positionType+".");l=-u.elem.depth}}return{children:t.children,depth:l}}(t),r=e.children,n=e.depth,i=0,a=0;a<r.length;a++){var
 o=r[a];if("elem"===o.type){var s=o.elem;i=Math.max(i,s.maxFontSize,s.heig [...]
+n=.833/o):"large"===a.type?(c=1080*lr[a.size],h=(lr[a.size]+s)/o,l=(lr[a.size]+s+.08)/o,(r=ir("sqrtSize"+a.size,l,c,s,e)).style.minWidth="1.02em",n=1/o):(l=t+s+.08,h=t+s,c=Math.floor(1e3*t+s)+80,(r=ir("sqrtTall",l,c,s,e)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=l+"em",{span:r,advanceWidth:n,ruleWidth:(e.fontMetrics().sqrtRuleThickness+s)*o}},gr=function(t,e,r,n,i){if("<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),R.con
 [...]
+;return(h instanceof 
at||"\\oiint"===i.name||"\\oiiint"===i.name)&&!i.suppressBaseShift&&(x=(h.height-h.depth)/2-e.fontMetrics().axisHeight,b=h.italic),a?jr(h,r,n,e,c,b,x):(x&&(h.style.position="relative",h.style.top=x+"em"),h)},Gr=function(t,e){var
 r;if(t.symbol)r=new 
Te("mo",[Le(t.name,t.mode)]),R.contains(Ur,t.name)&&r.setAttribute("largeop","false");else
 if(t.body)r=new Te("mo",Oe(t.body,e));else{r=new Te("mi",[new 
Ce(t.name.slice(1))]);var n=new Te("mo",[Le("\u2061","text")]);r=t.pa [...]
+T("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),T("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),T("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),T("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),T("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),T("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),T("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),T("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),T("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),T("\\nshortparallel","\
 [...]
+/*! Native Promise Only
+    v0.8.1 (c) Kyle Simpson
+    MIT License: http://getify.mit-license.org
+    https://github.com/getify/native-promise-only
+*/
+function(t,e,r){e[t]=e[t]||r(),"undefined"!=typeof 
module&&module.exports?module.exports=e[t]:"function"==typeof 
define&&define.amd&&define(function(){return 
e[t]})}("Promise","undefined"!=typeof global?global:this,function(){"use 
strict";function t(t,e){u.add(t,e),m||(m=p(u.drain))}function e(t){var 
e,r=typeof t;return 
null==t||"object"!=r&&"function"!=r||(e=t.then),"function"==typeof 
e&&e}function r(){for(var 
t=0;t<this.chain.length;t++)n(this,1===this.state?this.chain[t].success:this. 
[...]
+to:a.style.zIndex},/text|snippet|table/i.test(l)?h.width={property:"width"}:/code|math/i.test(l)&&(h.width={property:"width"},h.height={property:"height"}),o&&s?(h.opacity={property:"opacity",from:o.style.opacity||"1",to:s.style.opacity||"1"},(o.style.transform||s.style.transform)&&(h.width={property:"width"},h.height={property:"height"},t.push({from:o,to:s,options:{translate:!1,scale:!1,styles:[{property:"transform"}]}}))):o?(h.opacity={property:"opacity",from:o.style.opacity||"1",to:"1
 [...]
+               </script>
+               <script>
+                       !function(t,e){"object"==typeof 
exports&&"object"==typeof module?module.exports=e():"function"==typeof 
define&&define.amd?define([],e):"object"==typeof 
exports?exports.katex=e():t.katex=e()}("undefined"!=typeof 
self?self:this,function(){return function(t){function e(n){if(r[n])return 
r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return 
t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return 
e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{enumerable:!0,
 [...]
+;for(var 
r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return 
t},e.toMarkup=function(){var t="<svg";for(var e in 
this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" 
"+e+"='"+this.attributes[e]+"'");t+=">";for(var 
r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return 
t+"</svg>"},t}(),st=function(){function t(t,e){this.pathName=void 
0,this.alternate=void 0,this.pathName=t,this.alternate=e}var 
e=t.prototype;return e.toNode= [...]
+8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],886
 [...]
+o("math",vt,bt,"\u2296","\\ominus",!0),o("math",vt,bt,"\u228e","\\uplus",!0),o("math",vt,bt,"\u2293","\\sqcap",!0),o("math",vt,bt,"\u2217","\\ast"),o("math",vt,bt,"\u2294","\\sqcup",!0),o("math",vt,bt,"\u25ef","\\bigcirc"),o("math",vt,bt,"\u2219","\\bullet"),o("math",vt,bt,"\u2021","\\ddagger"),o("math",vt,bt,"\u2240","\\wr",!0),o("math",vt,bt,"\u2a3f","\\amalg"),o("math",vt,bt,"&","\\And"),o("math",vt,kt,"\u27f5","\\longleftarrow",!0),o("math",vt,kt,"\u21d0","\\Leftarrow",!0),o("math",v
 [...]
+if("firstBaseline"!==t.positionType)throw new Error("Invalid positionType 
"+t.positionType+".");l=-d.elem.depth}}return{children:t.children,depth:l}}(t),r=e.children,n=e.depth,i=0,a=0;a<r.length;a++){var
 o=r[a];if("elem"===o.type){var 
s=o.elem;i=Math.max(i,s.maxFontSize,s.height)}}i+=2;var 
l=te(["pstrut"],[]);l.style.height=i+"em";for(var 
c=[],h=n,u=n,d=n,m=0;m<r.length;m++){var 
p=r[m];if("kern"===p.type)d+=p.size;else{var 
f=p.elem,g=p.wrapperClasses||[],v=p.wrapperStyle||{},y=te(g,[l,f] [...]
+(r=ir("sqrtTall",l,h,s,e)).style.minWidth="0.742em",n=1.056),r.height=c,r.style.height=l+"em",{span:r,advanceWidth:n,ruleWidth:(e.fontMetrics().sqrtRuleThickness+s)*o}},gr=function(t,e,r,n,i){if("<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),B.contains(ar,t)||B.contains(sr,t))return
 tr(t,e,!1,r,n,i);if(B.contains(or,t))return nr(t,lr[e],!1,r,n,i);throw new 
L("Illegal delimiter: '"+t+"'")},vr=pr,yr=function(t,e,r,n,i,a){var 
o=n.fontMetrics [...]
+c.style.top=b+"em"),c)},Wr=function(t,e){var r;if(t.symbol)r=new 
Re("mo",[ze(t.name,t.mode)]),B.contains(Vr,t.name)&&r.setAttribute("largeop","false");else
 if(t.body)r=new Re("mo",Ie(t.body,e));else{r=new Re("mi",[new 
Ce(t.name.slice(1))]);var n=new 
Re("mo",[ze("\u2061","text")]);r=t.parentIsSupSub?new 
Re("mo",[r,n]):g([r,n])}return 
r},Gr={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\b
 [...]
+R("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),R("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),R("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),R("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),R("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),R("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),R("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),R("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),R("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u2
 [...]
+Ft.slides=t.querySelector(".slides"),Pt=c(c(c(c(c({},Ls),Pt),e),r),Io()),i(),window.addEventListener("load",C,!1),ne.load(Pt.plugins,Pt.dependencies).then(a),new
 Promise(function(t){return It.on("ready",t)})}function 
i(){!0===Pt.embedded?Ft.viewport=zo(t,".reveal-viewport")||t:(Ft.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),Ft.viewport.classList.add("reveal-viewport")}function
 a(){Ot=!0,o(),s(),m(),d(),G(),p(),Qt.readURL(),$t.update(!0),setTimeout(f [...]
+t.write(je("document.F=Object")),t.close(),t.F);for(var 
r=zt.length;r--;)delete Ue.prototype[zt[r]];return Ue()};it[He]=!0;var 
Ve=Object.create||function(t,e){var r;return null!==t?(Fe.prototype=D(t),r=new 
Fe,Fe.prototype=null,r[He]=t):r=Ue(),void 
0===e?r:qe(r,e)},_e=Nt.f,We={}.toString,Ge="object"==typeof 
window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Ye={f:function(t){return
 Ge&&"[object Window]"==We.call(t)?function(t){try{return _e(t)}catch(t){return 
[...]
+;Eo(t,"source[data-src]").forEach(function(t){t.setAttribute("src",t.getAttribute("data-src")),t.removeAttribute("data-src"),t.setAttribute("data-lazy-loaded",""),e+=1}),qo&&"VIDEO"===t.tagName&&t.setAttribute("playsinline",""),e>0&&t.load()});var
 n=t.slideBackgroundElement;if(n){n.style.display="block";var 
i=t.slideBackgroundContentElement,a=t.getAttribute("data-background-iframe");if(!1===n.hasAttribute("data-loaded")){n.setAttribute("data-loaded","true");var
 o=t.getAttribute("data-bac [...]
+;if("focused"===e.keyboardCondition&&!this.Reveal.isFocused())return!0;var 
r=t.keyCode,i=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(t);var 
a=document.activeElement&&!0===document.activeElement.isContentEditable,o=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),s=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),l=t.shiftKey&&32===t.keyCode,c=t.shiftKey&
 [...]
+;"click"===i?(this.addAnimationEventListener(n,"touchstart",this.onTriggerTouchStart.bind(this,e)),this.addAnimationEventListener(n,"click",this.onTriggerClick.bind(this,e))):"hover"===i&&(this.addAnimationEventListener(n,"mouseover",this.onTriggerMouseOver.bind(this,e)),this.addAnimationEventListener(n,"mouseout",this.onTriggerMouseOut.bind(this,e)))}}}.bind(this))},addAnimationEventListener:function(t,e,r){t.addEventListener(e,r),/click|touchstart/gi.test(e)&&t.classList.add("animation
 [...]
+               </script>
+               <script>
+                       !function(e,t){"object"==typeof 
exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof 
define&&define.amd?define(t):(e=e||self).RevealHighlight=t()}(this,function(){"use
 strict";function e(e,t,a){return 
e(a={path:t,exports:{},require:function(e,t){return function(){throw new 
Error("Dynamic requires are not currently supported by 
@rollup/plugin-commonjs")}(null==t&&a.path)}},a.exports),a.exports}function 
t(e,t){return RegExp(e,t)}function a(e){return(a="function"==ty [...]
+;nr?r&&!i&&(e=e.source):e instanceof 
ir&&(i&&(t=Na.call(e)),e=e.source),rr&&(a=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,""));var
 o=jt(nr?new Jn(e,t):Jn(e,t),n?this:er,ir);return 
rr&&a&&Xn(o,{sticky:a}),o},or=function(e){e in 
ir||Kn(ir,e,{configurable:!0,get:function(){return 
Jn[e]},set:function(t){Jn[e]=t}})},sr=jn(Jn),lr=0;sr.length>lr;)or(sr[lr++]);er.constructor=ir,ir.prototype=er,be(N,"RegExp",ir)}!function(){var
 e=Re("RegExp"),t=$.f;v&&e&&!e[$n]&&t(e,$n,{configurable:!0,get:functi [...]
+built_in:"\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0440\u0430\u043d\u0438\u0446
 
\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0440\u043e\u043a
 
\u0441\u0438\u043c\u0432\u043e\u043b\u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438
 ansitooem oemtoansi 
\u0432\u0432\u0435\u0441\u0442\u0438\u0432\u0438\u0434\u0441\u0443\u0431\u043a\u043e\u043d\u0442\u043e
 \u0432\u0432\u0435\u0441\u0442\u0438\u043f\u0435\u0440\u0435\u [...]
+"class":"web\u0446\u0432\u0435\u0442\u0430 
windows\u0446\u0432\u0435\u0442\u0430 
windows\u0448\u0440\u0438\u0444\u0442\u044b 
\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a
 \u0440\u0430\u043c\u043a\u0438\u0441\u0442\u0438\u043b\u044f 
\u0441\u0438\u043c\u0432\u043e\u043b\u044b 
\u0446\u0432\u0435\u0442\u0430\u0441\u0442\u0438\u043b\u044f 
\u0448\u0440\u0438\u0444\u0442\u044b\u0441\u0442\u0438\u043b\u044f 
\u0430\u0432\u0442\u043e\u [...]
+type:"com\u043e\u0431\u044a\u0435\u043a\u0442 
ftp\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 
http\u0437\u0430\u043f\u0440\u043e\u0441 
http\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0442\u0432\u0435\u0442 
http\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 
ws\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f 
ws\u043f\u0440\u043e\u043a\u0441\u0438 xbase 
\u0430\u043d\u0430\u043b\u0438\u0437\u0434\u0430\u043d\u043d\u044b\u0445 
\u0430\u043d\u043d [...]
+built_in:"alias application boolean class constant date file integer list 
number real record string text activate beep count delay launch log offset read 
round run say summarize write character characters contents day frontmost id 
item length month name paragraph paragraphs rest reverse running time version 
weekday word words 
year"},contains:[t,e.C_NUMBER_MODE,{className:"built_in",begin:"\\b(clipboard 
info|the clipboard|info for|list (disks|folder)|mount volume|path 
to|(close|open for)  [...]
+built_in:"break cd continue eval exec exit export getopts hash pwd readonly 
return shift test times trap umask unset alias bind builtin caller command 
declare echo enable help let local logout mapfile printf read readarray source 
type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone 
comparguments compcall compctl compdescribe compfiles compgroups compquote 
comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg 
float functions getcap getln hist [...]
+begin:"^( 
{4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},Li=function(e){var
 
t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},a={className:"subst",variants:[{begin:"\\${",end:"}"}],keywords:"true
 false null this is new 
super"},n={className:"string",variants:[{begin:"r'''",end:" [...]
+contains:[e.BACKSLASH_ESCAPE]},r={begin:"/",end:"/",keywords:t,contains:[n,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},i={begin:/[a-z][a-z0-9_]*(\([a-z0-9_,
 ]*\))?[ 
\t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[n,r,{className:"comment",begin:/([
 
]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,relevance:0}]};return{name:"GAMS",aliases:["gms"],case_insensitive:!0,keywords:t,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{clas
 [...]
+built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr 
is_vec3 is_vec4 is_matrix is_bool typeof variable_global_exists 
variable_global_get variable_global_set variable_instance_exists 
variable_instance_get variable_instance_set variable_instance_get_names 
array_length_1d array_length_2d array_height_2d array_equals array_create 
array_copy random random_range irandom irandom_range random_set_seed 
random_get_seed randomize randomise choose abs round floor ceil sign frac [...]
+literal:"self other all noone global local undefined pointer_invalid 
pointer_null path_action_stop path_action_restart path_action_continue 
path_action_reverse true false pi GM_build_date GM_version GM_runtime_version  
timezone_local timezone_utc gamespeed_fps gamespeed_microseconds  ev_create 
ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw 
ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease 
ev_trigger ev_left_button ev_right_button [...]
+contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{name:"TOML,
 also 
INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{begin:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,className:"attr",starts:{end:/$/,contains:[a,{begin:/\[/,end:/\]/,contains:[a,r,n,i,t,"self"],relevance:0},r,n,i,t]}}]}},Co=function(e){return{name:"IRPF90",case_
 [...]
+built_in:"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT 
SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW 
SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW 
SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE 
SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE 
SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE 
SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE 
SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE 
SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_AC [...]
+"class":"AltState Application CallType ComponentTokens CreatedJobs 
CreatedNotices ControlState DialogResult Dialogs EDocuments 
EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference 
LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References 
Requisite ReportName Reports Result Scripts Searches SelectedAttachments 
SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask 
SystemDialogs Tasks Wizard Wizards Work \u0412\u044b\u0437 [...]
+built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix 
AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray 
AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange 
AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError 
Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt 
BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool 
CapturedException CartesianIndex CartesianRange Cchar Cdouble Cflo [...]
+begin:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHI
 [...]
+keywords:"AASTriangle AbelianGroup Abort AbortKernels AbortProtect 
AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation 
AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing 
AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness 
AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate 
Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions 
Activate Active ActiveClassification ActiveClassificationObje [...]
+contains:[e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}},Vo=function(e){var
 
t={relevance:0,contains:[{begin:"('|\\.')+"}]};return{name:"Matlab",keywords:{keyword:"break
 case catch classdef continue else elseif end enumerated events for function 
global if methods otherwise parfor persistent properties return spmd switch try 
while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh 
tan tand tanh atan atand atan2 atanh sec secd s [...]
+keywords:"int float string vector matrix if else switch case default while do 
for in break continue global proc return about abs addAttr 
addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory 
addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air 
alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight 
angle angleBetween animCone animCurveEditor animDisplay animView annotate 
appendStringArray applicationName applyAttrPreset [...]
+built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float 
float32 float64 bool char string cstring pointer expr stmt void auto any range 
array openarray varargs seq set clong culong cchar cschar cshort cint csize 
clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong 
cstringarray 
semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([
 [...]
+begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,keywords:{keyword:"RETURNS",type:"LANGUAGE_HANDLER
 TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER 
TSM_HANDLER"}},{begin:"\\b("+r+")\\s*\\("},{begin:"\\.("+n+")\\b"},{begin:"\\b("+n+")\\s+PATH\\b",keywords:{keyword:"PATH",type:a.replace("PATH
 
","")}},{className:"type",begin:"\\b("+n+")\\b"},{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:"(e|
 [...]
+;return{name:"Roboconf",aliases:["graph","instances"],case_insensitive:!0,keywords:"import",contains:[{begin:"^facet
 
[a-zA-Z-_][^\\n{]+\\{",end:"}",keywords:"facet",contains:[t,e.HASH_COMMENT_MODE]},{begin:"^\\s*instance
 of [a-zA-Z-_][^\\n{]+\\{",end:"}",keywords:"name count channels instance-data 
instance-state instance 
of",illegal:/\S/,contains:["self",t,e.HASH_COMMENT_MODE]},{begin:"^[a-zA-Z-_][^\\n{]+\\{",end:"}",contains:[t,e.HASH_COMMENT_MODE]},e.HASH_COMMENT_MODE]}},Ms=function(e)
 [...]
+built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages 
actionKeysNames actionKeysNamesArray actionName actionParams activateAddons 
activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer 
addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal 
addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects 
addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addForce 
addGoggles addGroupIcon addHa [...]
+keyword:"as abort abs absolute acc acce accep accept access accessed 
accessible account acos action activate add addtime admin administer advanced 
advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all 
allocate allow alter always analyze ancillary and anti any anydata anydataset 
anyschema anytype apply archive archived archivelog are as asc ascii asin 
assembly assertion associate asynchronous at atan atn2 attr attri attrib 
attribu attribut attribute attributes audit auth [...]
+keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues 
by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust 
ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms 
anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm 
areg areg_p args arima arima_dr arima_estat arima_p as asmprobit 
asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser 
assert avplot avplot_7 avplots avplots_7 [...]
+contains:[e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:r,starts:{endsWithParent:!0,contains:[n,a],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:["self",n,a]}]}},il=function(e){var
 t={keyword:"in if for while finally var new function do return void else break 
catch instanceof with throw case default try this switch continue typeof delete 
let yield const class public private protected g [...]
+keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam 
aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts 
call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg 
cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das 
dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb 
fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp 
fcompp fcos fdecstp fdisi [...]
+Hr.registerLanguage("step21",$s),Hr.registerLanguage("stylus",Ks),Hr.registerLanguage("subunit",js),Hr.registerLanguage("swift",Xs),Hr.registerLanguage("taggerscript",Zs),Hr.registerLanguage("yaml",Js),Hr.registerLanguage("tap",el),Hr.registerLanguage("tcl",tl),Hr.registerLanguage("thrift",al),Hr.registerLanguage("tp",nl),Hr.registerLanguage("twig",rl),Hr.registerLanguage("typescript",il),Hr.registerLanguage("vala",ol),Hr.registerLanguage("vbnet",sl),Hr.registerLanguage("vbscript",ll),Hr
 [...]
+/*!
+        * reveal.js plugin that adds syntax highlight support.
+        */
+var 
Tl={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:Sl,init:function(e){var
 t=e.getConfig().highlight||{};t.highlightOnLoad="boolean"!=typeof 
t.highlightOnLoad||t.highlightOnLoad,t.escapeHTML="boolean"!=typeof 
t.escapeHTML||t.escapeHTML,[].slice.call(e.getRevealElement().querySelectorAll("pre
 code")).forEach(function(e){e.hasAttribute("data-trim")&&"function"==typeof 
e.innerHTML.trim&&(e.innerHTML=function(e){function t [...]
+               </script>
+               <script>
+                       Reveal.initialize({
+                               width: SLConfig.deck.width,
+                               height: SLConfig.deck.height,
+                               margin: 0.05,
+                               maxScale: 1,
+
+                               hash: true,
+                               controls: true,
+                               progress: true,
+                               mouseWheel: false,
+                               showNotes: SLConfig.deck.share_notes ? 
'separate-page' : false,
+                               slideNumber: SLConfig.deck.slide_number,
+                               fragmentInURL: true,
+
+                               autoSlide: SLConfig.deck.auto_slide_interval || 
0,
+                               autoSlideStoppable: true,
+
+                               autoAnimateMatcher: SL.deck.AutoAnimate.matcher,
+
+                               rollingLinks: false,
+                               center: SLConfig.deck.center || false,
+                               shuffle: SLConfig.deck.shuffle || false,
+                               loop: SLConfig.deck.should_loop || false,
+                               rtl: SLConfig.deck.rtl || false,
+                               navigationMode: SLConfig.deck.navigation_mode,
+
+                               transition: SLConfig.deck.transition,
+                               backgroundTransition: 
SLConfig.deck.background_transition,
+
+                               pdfMaxPagesPerSlide: 1,
+
+                               highlight: {
+                                       escapeHTML: false
+                               },
+
+                               plugins: [ RevealHighlight ]
+                       });
+               </script>
+
+               
+
+       
+
+</body></html>

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]