diff --git a/public/index.html b/public/index.html index 3a1d8723419..852ffd23b52 100644 --- a/public/index.html +++ b/public/index.html @@ -5,6 +5,9 @@ + + + diff --git a/public/static/images/figures/oatutor/a0098c7real11/figure1.gif b/public/static/images/figures/oatutor/a0098c7real11/figure1.gif new file mode 100644 index 00000000000..fb690e1fc20 Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7real11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers18/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers18/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers19/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers19/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers20/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers20/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers21/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers21/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers22/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers22/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers23/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers23/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers24/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers24/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers25/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers25/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers26/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers26/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers27/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers27/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers28/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers28/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers29/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers29/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers29/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0098c7realnumbers30/figure1.gif b/public/static/images/figures/oatutor/a0098c7realnumbers30/figure1.gif new file mode 100644 index 00000000000..5b5429e018b Binary files /dev/null and b/public/static/images/figures/oatutor/a0098c7realnumbers30/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal22/figure1.gif b/public/static/images/figures/oatutor/a01186breal22/figure1.gif new file mode 100644 index 00000000000..5e3d0abdf8a Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal22/figure2.gif b/public/static/images/figures/oatutor/a01186breal22/figure2.gif new file mode 100644 index 00000000000..9ea6e4d530b Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal22/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal23/figure1.gif b/public/static/images/figures/oatutor/a01186breal23/figure1.gif new file mode 100644 index 00000000000..5e3d0abdf8a Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal23/figure2.gif b/public/static/images/figures/oatutor/a01186breal23/figure2.gif new file mode 100644 index 00000000000..9ea6e4d530b Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal23/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal24/figure1.gif b/public/static/images/figures/oatutor/a01186breal24/figure1.gif new file mode 100644 index 00000000000..5e3d0abdf8a Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal24/figure2.gif b/public/static/images/figures/oatutor/a01186breal24/figure2.gif new file mode 100644 index 00000000000..9ea6e4d530b Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal24/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal25/figure1.gif b/public/static/images/figures/oatutor/a01186breal25/figure1.gif new file mode 100644 index 00000000000..5e3d0abdf8a Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a01186breal25/figure2.gif b/public/static/images/figures/oatutor/a01186breal25/figure2.gif new file mode 100644 index 00000000000..9ea6e4d530b Binary files /dev/null and b/public/static/images/figures/oatutor/a01186breal25/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a0bf68dadd3/figure1.gif b/public/static/images/figures/oatutor/a0bf68dadd3/figure1.gif new file mode 100644 index 00000000000..2116030c069 Binary files /dev/null and b/public/static/images/figures/oatutor/a0bf68dadd3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0bf68dadd3/figure2.gif b/public/static/images/figures/oatutor/a0bf68dadd3/figure2.gif new file mode 100644 index 00000000000..32b609a0d87 Binary files /dev/null and b/public/static/images/figures/oatutor/a0bf68dadd3/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a0bf68dadd4/figure1.gif b/public/static/images/figures/oatutor/a0bf68dadd4/figure1.gif new file mode 100644 index 00000000000..9641a9e9541 Binary files /dev/null and b/public/static/images/figures/oatutor/a0bf68dadd4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0bf68dadd4/figure2.gif b/public/static/images/figures/oatutor/a0bf68dadd4/figure2.gif new file mode 100644 index 00000000000..9faba8479db Binary files /dev/null and b/public/static/images/figures/oatutor/a0bf68dadd4/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a0e4683PlotCorrelation/figure1.gif b/public/static/images/figures/oatutor/a0e4683PlotCorrelation/figure1.gif new file mode 100644 index 00000000000..3990bc38078 Binary files /dev/null and b/public/static/images/figures/oatutor/a0e4683PlotCorrelation/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0e4683PlotDirection/figure1.gif b/public/static/images/figures/oatutor/a0e4683PlotDirection/figure1.gif new file mode 100644 index 00000000000..3990bc38078 Binary files /dev/null and b/public/static/images/figures/oatutor/a0e4683PlotDirection/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0e4683PlotShape/figure1.gif b/public/static/images/figures/oatutor/a0e4683PlotShape/figure1.gif new file mode 100644 index 00000000000..3990bc38078 Binary files /dev/null and b/public/static/images/figures/oatutor/a0e4683PlotShape/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a0e4683regr2/figure1.gif b/public/static/images/figures/oatutor/a0e4683regr2/figure1.gif new file mode 100644 index 00000000000..b8ec4fe0440 Binary files /dev/null and b/public/static/images/figures/oatutor/a0e4683regr2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1435ed10.4coach/figure1.gif b/public/static/images/figures/oatutor/a1435ed10.4coach/figure1.gif new file mode 100644 index 00000000000..56dd9e414df Binary files /dev/null and b/public/static/images/figures/oatutor/a1435ed10.4coach/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1435ed10.4coach/figure2.gif b/public/static/images/figures/oatutor/a1435ed10.4coach/figure2.gif new file mode 100644 index 00000000000..5bde464e3e4 Binary files /dev/null and b/public/static/images/figures/oatutor/a1435ed10.4coach/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1435ed10.4golf/figure1.gif b/public/static/images/figures/oatutor/a1435ed10.4golf/figure1.gif new file mode 100644 index 00000000000..d3df9768d9e Binary files /dev/null and b/public/static/images/figures/oatutor/a1435ed10.4golf/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1435ed10.4hypnotism/figure1.gif b/public/static/images/figures/oatutor/a1435ed10.4hypnotism/figure1.gif new file mode 100644 index 00000000000..f5f3ad8c181 Binary files /dev/null and b/public/static/images/figures/oatutor/a1435ed10.4hypnotism/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real14/figure1.gif b/public/static/images/figures/oatutor/a193928real14/figure1.gif new file mode 100644 index 00000000000..00fed94b6f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real15/figure1.gif b/public/static/images/figures/oatutor/a193928real15/figure1.gif new file mode 100644 index 00000000000..e05357bc64d Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real16/figure1.gif b/public/static/images/figures/oatutor/a193928real16/figure1.gif new file mode 100644 index 00000000000..995d9f458ca Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real17/figure1.gif b/public/static/images/figures/oatutor/a193928real17/figure1.gif new file mode 100644 index 00000000000..311fa334d0a Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real18/figure1.gif b/public/static/images/figures/oatutor/a193928real18/figure1.gif new file mode 100644 index 00000000000..3e587293e36 Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real25/figure1.gif b/public/static/images/figures/oatutor/a193928real25/figure1.gif new file mode 100644 index 00000000000..20da9051350 Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real26/figure1.gif b/public/static/images/figures/oatutor/a193928real26/figure1.gif new file mode 100644 index 00000000000..3fa66b503e5 Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a193928real3/figure1.gif b/public/static/images/figures/oatutor/a193928real3/figure1.gif new file mode 100644 index 00000000000..380bdf8d40b Binary files /dev/null and b/public/static/images/figures/oatutor/a193928real3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem1/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem1/figure1.gif new file mode 100644 index 00000000000..fed1352fa39 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem10/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem10/figure1.gif new file mode 100644 index 00000000000..f61151469ed Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem10/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem10/figure2.gif new file mode 100644 index 00000000000..e4c962b0262 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem10/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem11/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem11/figure1.gif new file mode 100644 index 00000000000..c9eb3f833d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem11/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem11/figure2.gif new file mode 100644 index 00000000000..e27596ee8c7 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem11/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem12/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem12/figure1.gif new file mode 100644 index 00000000000..8bd880c8005 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem12/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem12/figure2.gif new file mode 100644 index 00000000000..aad2e471f21 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem12/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem13/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem13/figure1.gif new file mode 100644 index 00000000000..4c5ff4452e4 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem13/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem13/figure2.gif new file mode 100644 index 00000000000..aad2e471f21 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem13/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem14/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem14/figure1.gif new file mode 100644 index 00000000000..9e9bb142f47 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem14/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem14/figure2.gif new file mode 100644 index 00000000000..4f9a8587047 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem14/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem15/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem15/figure1.gif new file mode 100644 index 00000000000..179c05e59db Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem15/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem15/figure2.gif new file mode 100644 index 00000000000..f006533e384 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem15/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem2/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem2/figure1.gif new file mode 100644 index 00000000000..49fffa83f36 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem3/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem3/figure1.gif new file mode 100644 index 00000000000..d5cccfc5a49 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem4/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem4/figure1.gif new file mode 100644 index 00000000000..8b8d892e7eb Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem5/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem5/figure1.gif new file mode 100644 index 00000000000..b6f39ddd727 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem6/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem6/figure1.gif new file mode 100644 index 00000000000..e10e508d7c6 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem7/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem7/figure1.gif new file mode 100644 index 00000000000..fecbcc75331 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem8/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem8/figure1.gif new file mode 100644 index 00000000000..03c7413f8a8 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem8/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem8/figure2.gif new file mode 100644 index 00000000000..866faa7d1d1 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem8/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem9/figure1.gif b/public/static/images/figures/oatutor/a1b6be2stem9/figure1.gif new file mode 100644 index 00000000000..6bbe7d1e707 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1b6be2stem9/figure2.gif b/public/static/images/figures/oatutor/a1b6be2stem9/figure2.gif new file mode 100644 index 00000000000..3029853d997 Binary files /dev/null and b/public/static/images/figures/oatutor/a1b6be2stem9/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a1fac02a1cc0dcareas3/figure1.gif b/public/static/images/figures/oatutor/a1fac02a1cc0dcareas3/figure1.gif new file mode 100644 index 00000000000..1c74c8ce0de Binary files /dev/null and b/public/static/images/figures/oatutor/a1fac02a1cc0dcareas3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a1fac02a1cc0dcareas4/figure1.gif b/public/static/images/figures/oatutor/a1fac02a1cc0dcareas4/figure1.gif new file mode 100644 index 00000000000..2bce52016d3 Binary files /dev/null and b/public/static/images/figures/oatutor/a1fac02a1cc0dcareas4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a29d75aclt1/figure1.gif b/public/static/images/figures/oatutor/a29d75aclt1/figure1.gif new file mode 100644 index 00000000000..87ae0ed6c58 Binary files /dev/null and b/public/static/images/figures/oatutor/a29d75aclt1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2eb6bb4.1baker1/figure1.gif b/public/static/images/figures/oatutor/a2eb6bb4.1baker1/figure1.gif new file mode 100644 index 00000000000..5ea01abf991 Binary files /dev/null and b/public/static/images/figures/oatutor/a2eb6bb4.1baker1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2eb6bb4.1employer1/figure1.gif b/public/static/images/figures/oatutor/a2eb6bb4.1employer1/figure1.gif new file mode 100644 index 00000000000..dab381e8808 Binary files /dev/null and b/public/static/images/figures/oatutor/a2eb6bb4.1employer1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox1/figure1.gif b/public/static/images/figures/oatutor/a2f619abox1/figure1.gif new file mode 100644 index 00000000000..4dd49c3dfb8 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox10/figure1.gif b/public/static/images/figures/oatutor/a2f619abox10/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox11/figure1.gif b/public/static/images/figures/oatutor/a2f619abox11/figure1.gif new file mode 100644 index 00000000000..fcb30ccbbc6 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox12/figure1.gif b/public/static/images/figures/oatutor/a2f619abox12/figure1.gif new file mode 100644 index 00000000000..fcb30ccbbc6 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox13/figure1.gif b/public/static/images/figures/oatutor/a2f619abox13/figure1.gif new file mode 100644 index 00000000000..fcb30ccbbc6 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox2/figure1.gif b/public/static/images/figures/oatutor/a2f619abox2/figure1.gif new file mode 100644 index 00000000000..4dd49c3dfb8 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox3/figure1.gif b/public/static/images/figures/oatutor/a2f619abox3/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox4/figure1.gif b/public/static/images/figures/oatutor/a2f619abox4/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox5/figure1.gif b/public/static/images/figures/oatutor/a2f619abox5/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox6/figure1.gif b/public/static/images/figures/oatutor/a2f619abox6/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox7/figure1.gif b/public/static/images/figures/oatutor/a2f619abox7/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox8/figure1.gif b/public/static/images/figures/oatutor/a2f619abox8/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f619abox9/figure1.gif b/public/static/images/figures/oatutor/a2f619abox9/figure1.gif new file mode 100644 index 00000000000..d325023d0f4 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f619abox9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f73b1indep1/figure1.gif b/public/static/images/figures/oatutor/a2f73b1indep1/figure1.gif new file mode 100644 index 00000000000..ef587f12421 Binary files /dev/null and b/public/static/images/figures/oatutor/a2f73b1indep1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f73b1indep1/figure2.gif b/public/static/images/figures/oatutor/a2f73b1indep1/figure2.gif new file mode 100644 index 00000000000..416eb728cbc Binary files /dev/null and b/public/static/images/figures/oatutor/a2f73b1indep1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a2f73b1indep2/figure1.gif b/public/static/images/figures/oatutor/a2f73b1indep2/figure1.gif new file mode 100644 index 00000000000..4aaae5fd76d Binary files /dev/null and b/public/static/images/figures/oatutor/a2f73b1indep2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a2f73b1indep3/figure1.gif b/public/static/images/figures/oatutor/a2f73b1indep3/figure1.gif new file mode 100644 index 00000000000..4aaae5fd76d Binary files /dev/null and b/public/static/images/figures/oatutor/a2f73b1indep3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a32c9a5work4/figure1.gif b/public/static/images/figures/oatutor/a32c9a5work4/figure1.gif new file mode 100644 index 00000000000..fe5fd517a08 Binary files /dev/null and b/public/static/images/figures/oatutor/a32c9a5work4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize1/figure1.gif b/public/static/images/figures/oatutor/a3476d7optimize1/figure1.gif new file mode 100644 index 00000000000..1a5c468f5be Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize15/figure1.gif b/public/static/images/figures/oatutor/a3476d7optimize15/figure1.gif new file mode 100644 index 00000000000..b570a67f962 Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize3/figure1.gif b/public/static/images/figures/oatutor/a3476d7optimize3/figure1.gif new file mode 100644 index 00000000000..e77e78d15d4 Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize3/figure2.gif b/public/static/images/figures/oatutor/a3476d7optimize3/figure2.gif new file mode 100644 index 00000000000..e77e78d15d4 Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize3/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize7/figure1.gif b/public/static/images/figures/oatutor/a3476d7optimize7/figure1.gif new file mode 100644 index 00000000000..a396dc2c353 Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3476d7optimize9/figure1.gif b/public/static/images/figures/oatutor/a3476d7optimize9/figure1.gif new file mode 100644 index 00000000000..866a129c69a Binary files /dev/null and b/public/static/images/figures/oatutor/a3476d7optimize9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr1/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr1/figure1.gif new file mode 100644 index 00000000000..c5e4210d6ef Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr2/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr2/figure1.gif new file mode 100644 index 00000000000..c5e4210d6ef Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr3/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr3/figure1.gif new file mode 100644 index 00000000000..c5e4210d6ef Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr4/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr4/figure1.gif new file mode 100644 index 00000000000..417058c6003 Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr5/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr5/figure1.gif new file mode 100644 index 00000000000..417058c6003 Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr6/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr6/figure1.gif new file mode 100644 index 00000000000..417058c6003 Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a36d9e8corr7/figure1.gif b/public/static/images/figures/oatutor/a36d9e8corr7/figure1.gif new file mode 100644 index 00000000000..417058c6003 Binary files /dev/null and b/public/static/images/figures/oatutor/a36d9e8corr7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a37e07emodels28/figure1.gif b/public/static/images/figures/oatutor/a37e07emodels28/figure1.gif new file mode 100644 index 00000000000..aa207086f8e Binary files /dev/null and b/public/static/images/figures/oatutor/a37e07emodels28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good1/figure1.gif b/public/static/images/figures/oatutor/a39def5good1/figure1.gif new file mode 100644 index 00000000000..7741136e351 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good1/figure2.gif b/public/static/images/figures/oatutor/a39def5good1/figure2.gif new file mode 100644 index 00000000000..dd963de301f Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good1/figure3.gif b/public/static/images/figures/oatutor/a39def5good1/figure3.gif new file mode 100644 index 00000000000..ae744b40ade Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good1/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good10/figure1.gif b/public/static/images/figures/oatutor/a39def5good10/figure1.gif new file mode 100644 index 00000000000..8d6475d5e8f Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good11/figure1.gif b/public/static/images/figures/oatutor/a39def5good11/figure1.gif new file mode 100644 index 00000000000..876007ba3bc Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good12/figure1.gif b/public/static/images/figures/oatutor/a39def5good12/figure1.gif new file mode 100644 index 00000000000..79a7c397714 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good13/figure1.gif b/public/static/images/figures/oatutor/a39def5good13/figure1.gif new file mode 100644 index 00000000000..8f8406aa864 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good13/figure2.gif b/public/static/images/figures/oatutor/a39def5good13/figure2.gif new file mode 100644 index 00000000000..7279726d5b9 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good13/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good14/figure1.gif b/public/static/images/figures/oatutor/a39def5good14/figure1.gif new file mode 100644 index 00000000000..0f9f11b3b3a Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good14/figure2.gif b/public/static/images/figures/oatutor/a39def5good14/figure2.gif new file mode 100644 index 00000000000..3f4a8857400 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good14/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good15/figure1.gif b/public/static/images/figures/oatutor/a39def5good15/figure1.gif new file mode 100644 index 00000000000..62c5eb78d3e Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good2/figure1.gif b/public/static/images/figures/oatutor/a39def5good2/figure1.gif new file mode 100644 index 00000000000..7741136e351 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good2/figure2.gif b/public/static/images/figures/oatutor/a39def5good2/figure2.gif new file mode 100644 index 00000000000..ae744b40ade Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good3/figure1.gif b/public/static/images/figures/oatutor/a39def5good3/figure1.gif new file mode 100644 index 00000000000..513e609dae0 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good4/figure1.gif b/public/static/images/figures/oatutor/a39def5good4/figure1.gif new file mode 100644 index 00000000000..5d718fe0ad8 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good8/figure1.gif b/public/static/images/figures/oatutor/a39def5good8/figure1.gif new file mode 100644 index 00000000000..1f95b95348d Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a39def5good9/figure1.gif b/public/static/images/figures/oatutor/a39def5good9/figure1.gif new file mode 100644 index 00000000000..bb455abbfe9 Binary files /dev/null and b/public/static/images/figures/oatutor/a39def5good9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3acaad9.3baker1/figure1.gif b/public/static/images/figures/oatutor/a3acaad9.3baker1/figure1.gif new file mode 100644 index 00000000000..dca91dd6f37 Binary files /dev/null and b/public/static/images/figures/oatutor/a3acaad9.3baker1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real22/figure1.gif b/public/static/images/figures/oatutor/a3ae150real22/figure1.gif new file mode 100644 index 00000000000..98328fa55fd Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real23/figure1.gif b/public/static/images/figures/oatutor/a3ae150real23/figure1.gif new file mode 100644 index 00000000000..557ac4d9641 Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real24/figure1.gif b/public/static/images/figures/oatutor/a3ae150real24/figure1.gif new file mode 100644 index 00000000000..3b6d8be0e8a Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real25/figure1.gif b/public/static/images/figures/oatutor/a3ae150real25/figure1.gif new file mode 100644 index 00000000000..0545f61783d Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real26/figure1.gif b/public/static/images/figures/oatutor/a3ae150real26/figure1.gif new file mode 100644 index 00000000000..28c25a12a1b Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real27/figure1.gif b/public/static/images/figures/oatutor/a3ae150real27/figure1.gif new file mode 100644 index 00000000000..0087a40d644 Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real28/figure1.gif b/public/static/images/figures/oatutor/a3ae150real28/figure1.gif new file mode 100644 index 00000000000..ac12f0f5259 Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real29/figure1.gif b/public/static/images/figures/oatutor/a3ae150real29/figure1.gif new file mode 100644 index 00000000000..aa55bb8e708 Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real29/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a3ae150real30/figure1.gif b/public/static/images/figures/oatutor/a3ae150real30/figure1.gif new file mode 100644 index 00000000000..276bc79860c Binary files /dev/null and b/public/static/images/figures/oatutor/a3ae150real30/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model1/figure1.gif b/public/static/images/figures/oatutor/a4384a1model1/figure1.gif new file mode 100644 index 00000000000..3e26a15f987 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model19/figure1.gif b/public/static/images/figures/oatutor/a4384a1model19/figure1.gif new file mode 100644 index 00000000000..ea8ff306ab5 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model2/figure1.gif b/public/static/images/figures/oatutor/a4384a1model2/figure1.gif new file mode 100644 index 00000000000..3e26a15f987 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model20/figure1.gif b/public/static/images/figures/oatutor/a4384a1model20/figure1.gif new file mode 100644 index 00000000000..ea8ff306ab5 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model21/figure1.gif b/public/static/images/figures/oatutor/a4384a1model21/figure1.gif new file mode 100644 index 00000000000..a0261d76006 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model22/figure1.gif b/public/static/images/figures/oatutor/a4384a1model22/figure1.gif new file mode 100644 index 00000000000..a0261d76006 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model23/figure1.gif b/public/static/images/figures/oatutor/a4384a1model23/figure1.gif new file mode 100644 index 00000000000..a0261d76006 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model24/figure1.gif b/public/static/images/figures/oatutor/a4384a1model24/figure1.gif new file mode 100644 index 00000000000..ca377c2303c Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model25/figure1.gif b/public/static/images/figures/oatutor/a4384a1model25/figure1.gif new file mode 100644 index 00000000000..ca377c2303c Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model26/figure1.gif b/public/static/images/figures/oatutor/a4384a1model26/figure1.gif new file mode 100644 index 00000000000..ca377c2303c Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model27/figure1.gif b/public/static/images/figures/oatutor/a4384a1model27/figure1.gif new file mode 100644 index 00000000000..da1b181c345 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model28/figure1.gif b/public/static/images/figures/oatutor/a4384a1model28/figure1.gif new file mode 100644 index 00000000000..da1b181c345 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model29/figure1.gif b/public/static/images/figures/oatutor/a4384a1model29/figure1.gif new file mode 100644 index 00000000000..da1b181c345 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model29/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model3/figure1.gif b/public/static/images/figures/oatutor/a4384a1model3/figure1.gif new file mode 100644 index 00000000000..3e26a15f987 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model4/figure1.gif b/public/static/images/figures/oatutor/a4384a1model4/figure1.gif new file mode 100644 index 00000000000..3e26a15f987 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4384a1model5/figure1.gif b/public/static/images/figures/oatutor/a4384a1model5/figure1.gif new file mode 100644 index 00000000000..3e26a15f987 Binary files /dev/null and b/public/static/images/figures/oatutor/a4384a1model5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist4/figure1.gif b/public/static/images/figures/oatutor/a4a299dhist4/figure1.gif new file mode 100644 index 00000000000..fb546f11305 Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist6/figure1.gif b/public/static/images/figures/oatutor/a4a299dhist6/figure1.gif new file mode 100644 index 00000000000..e1198f53bbe Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist6/figure2.gif b/public/static/images/figures/oatutor/a4a299dhist6/figure2.gif new file mode 100644 index 00000000000..1be82777041 Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist6/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist7/figure1.gif b/public/static/images/figures/oatutor/a4a299dhist7/figure1.gif new file mode 100644 index 00000000000..bdb7c91bcdd Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist7/figure2.gif b/public/static/images/figures/oatutor/a4a299dhist7/figure2.gif new file mode 100644 index 00000000000..1be82777041 Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist7/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist8/figure1.gif b/public/static/images/figures/oatutor/a4a299dhist8/figure1.gif new file mode 100644 index 00000000000..3ccbd110549 Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4a299dhist9/figure1.gif b/public/static/images/figures/oatutor/a4a299dhist9/figure1.gif new file mode 100644 index 00000000000..80d5e7343a8 Binary files /dev/null and b/public/static/images/figures/oatutor/a4a299dhist9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole13/figure1.gif b/public/static/images/figures/oatutor/a4d0c67whole13/figure1.gif new file mode 100644 index 00000000000..46535af55d9 Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole13/figure2.gif b/public/static/images/figures/oatutor/a4d0c67whole13/figure2.gif new file mode 100644 index 00000000000..399a63613cc Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole13/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole13/figure3.gif b/public/static/images/figures/oatutor/a4d0c67whole13/figure3.gif new file mode 100644 index 00000000000..bcfa5c4ae1c Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole13/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole13/figure4.gif b/public/static/images/figures/oatutor/a4d0c67whole13/figure4.gif new file mode 100644 index 00000000000..d9de30ff95d Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole13/figure4.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole20/figure1.gif b/public/static/images/figures/oatutor/a4d0c67whole20/figure1.gif new file mode 100644 index 00000000000..46535af55d9 Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole20/figure2.gif b/public/static/images/figures/oatutor/a4d0c67whole20/figure2.gif new file mode 100644 index 00000000000..399a63613cc Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole20/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole20/figure3.gif b/public/static/images/figures/oatutor/a4d0c67whole20/figure3.gif new file mode 100644 index 00000000000..bcfa5c4ae1c Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole20/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole20/figure4.gif b/public/static/images/figures/oatutor/a4d0c67whole20/figure4.gif new file mode 100644 index 00000000000..d9de30ff95d Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole20/figure4.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole21/figure1.gif b/public/static/images/figures/oatutor/a4d0c67whole21/figure1.gif new file mode 100644 index 00000000000..46535af55d9 Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole21/figure2.gif b/public/static/images/figures/oatutor/a4d0c67whole21/figure2.gif new file mode 100644 index 00000000000..399a63613cc Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole21/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole21/figure3.gif b/public/static/images/figures/oatutor/a4d0c67whole21/figure3.gif new file mode 100644 index 00000000000..bcfa5c4ae1c Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole21/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a4d0c67whole21/figure4.gif b/public/static/images/figures/oatutor/a4d0c67whole21/figure4.gif new file mode 100644 index 00000000000..d9de30ff95d Binary files /dev/null and b/public/static/images/figures/oatutor/a4d0c67whole21/figure4.gif differ diff --git a/public/static/images/figures/oatutor/a590f38trigonometric10/figure1.gif b/public/static/images/figures/oatutor/a590f38trigonometric10/figure1.gif new file mode 100644 index 00000000000..927b49d2276 Binary files /dev/null and b/public/static/images/figures/oatutor/a590f38trigonometric10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a590f38trigonometric11/figure1.gif b/public/static/images/figures/oatutor/a590f38trigonometric11/figure1.gif new file mode 100644 index 00000000000..20448134045 Binary files /dev/null and b/public/static/images/figures/oatutor/a590f38trigonometric11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a590f38trigonometric12/figure1.gif b/public/static/images/figures/oatutor/a590f38trigonometric12/figure1.gif new file mode 100644 index 00000000000..20448134045 Binary files /dev/null and b/public/static/images/figures/oatutor/a590f38trigonometric12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a590f38trigonometric9/figure1.gif b/public/static/images/figures/oatutor/a590f38trigonometric9/figure1.gif new file mode 100644 index 00000000000..927b49d2276 Binary files /dev/null and b/public/static/images/figures/oatutor/a590f38trigonometric9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue1/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue1/figure1.gif new file mode 100644 index 00000000000..9d1196a7907 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue11/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue11/figure1.gif new file mode 100644 index 00000000000..617e40ccf01 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue12/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue12/figure1.gif new file mode 100644 index 00000000000..b7524d187f1 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue13/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue13/figure1.gif new file mode 100644 index 00000000000..4e5a3ae38ec Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue14/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue14/figure1.gif new file mode 100644 index 00000000000..4e5a3ae38ec Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue15/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue15/figure1.gif new file mode 100644 index 00000000000..dba07dee314 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue16/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue16/figure1.gif new file mode 100644 index 00000000000..26161478769 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue17/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue17/figure1.gif new file mode 100644 index 00000000000..fc868c65916 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue18/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue18/figure1.gif new file mode 100644 index 00000000000..9a549b39c8b Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue19/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue19/figure1.gif new file mode 100644 index 00000000000..da205426b44 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue2/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue2/figure1.gif new file mode 100644 index 00000000000..a9309758ef9 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue20/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue20/figure1.gif new file mode 100644 index 00000000000..a22209a68ac Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue23/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue23/figure1.gif new file mode 100644 index 00000000000..b79e4c46254 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue24/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue24/figure1.gif new file mode 100644 index 00000000000..0a0138a19e1 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue3/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue3/figure1.gif new file mode 100644 index 00000000000..a9309758ef9 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue4/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue4/figure1.gif new file mode 100644 index 00000000000..1d5daa940e0 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue5/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue5/figure1.gif new file mode 100644 index 00000000000..c904f474f07 Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue8/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue8/figure1.gif new file mode 100644 index 00000000000..28cf90be6fd Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a59eb5bexpectedvalue9/figure1.gif b/public/static/images/figures/oatutor/a59eb5bexpectedvalue9/figure1.gif new file mode 100644 index 00000000000..68380822e7e Binary files /dev/null and b/public/static/images/figures/oatutor/a59eb5bexpectedvalue9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a5f8927normal4/figure1.gif b/public/static/images/figures/oatutor/a5f8927normal4/figure1.gif new file mode 100644 index 00000000000..be29494869b Binary files /dev/null and b/public/static/images/figures/oatutor/a5f8927normal4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a5f8927normal5/figure1.gif b/public/static/images/figures/oatutor/a5f8927normal5/figure1.gif new file mode 100644 index 00000000000..0cf393c8394 Binary files /dev/null and b/public/static/images/figures/oatutor/a5f8927normal5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a649fc5linear1/figure1.gif b/public/static/images/figures/oatutor/a649fc5linear1/figure1.gif new file mode 100644 index 00000000000..70934534718 Binary files /dev/null and b/public/static/images/figures/oatutor/a649fc5linear1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin15/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin15/figure1.gif new file mode 100644 index 00000000000..0310ee6b8dc Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin16/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin16/figure1.gif new file mode 100644 index 00000000000..207e68cab05 Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin17/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin17/figure1.gif new file mode 100644 index 00000000000..81631274b48 Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin18/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin18/figure1.gif new file mode 100644 index 00000000000..df92deef2af Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin19/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin19/figure1.gif new file mode 100644 index 00000000000..6869acdd6fb Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin20/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin20/figure1.gif new file mode 100644 index 00000000000..862cfa668c9 Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin21/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin21/figure1.gif new file mode 100644 index 00000000000..6f44a1065fb Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin22/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin22/figure1.gif new file mode 100644 index 00000000000..3e77a55d970 Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin23/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin23/figure1.gif new file mode 100644 index 00000000000..27e31f8460b Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin24/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin24/figure1.gif new file mode 100644 index 00000000000..89d4c8dc1ef Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a662caelawsin25/figure1.gif b/public/static/images/figures/oatutor/a662caelawsin25/figure1.gif new file mode 100644 index 00000000000..2c4eab0896f Binary files /dev/null and b/public/static/images/figures/oatutor/a662caelawsin25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq1/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq1/figure1.gif new file mode 100644 index 00000000000..1a67a5f922b Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq1/figure2.gif b/public/static/images/figures/oatutor/a69a61eineq1/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq10/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq10/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq11/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq11/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq12/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq12/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq2/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq2/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq3/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq3/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq4/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq4/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq5/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq5/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq6/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq6/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq7/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq7/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq8/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq8/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a69a61eineq9/figure1.gif b/public/static/images/figures/oatutor/a69a61eineq9/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a69a61eineq9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6ca47dlimit11/figure1.gif b/public/static/images/figures/oatutor/a6ca47dlimit11/figure1.gif new file mode 100644 index 00000000000..080f8331f58 Binary files /dev/null and b/public/static/images/figures/oatutor/a6ca47dlimit11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv18/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv18/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv20/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv20/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv3/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv3/figure1.gif new file mode 100644 index 00000000000..d44c4530d0d Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv4/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv4/figure1.gif new file mode 100644 index 00000000000..759bf97916f Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv5/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv5/figure1.gif new file mode 100644 index 00000000000..459efbece5e Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv6/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv6/figure1.gif new file mode 100644 index 00000000000..0e21ffb2f94 Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv7/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv7/figure1.gif new file mode 100644 index 00000000000..9152912141d Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6cbbb5deriv8/figure1.gif b/public/static/images/figures/oatutor/a6cbbb5deriv8/figure1.gif new file mode 100644 index 00000000000..863a5c02a04 Binary files /dev/null and b/public/static/images/figures/oatutor/a6cbbb5deriv8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a6dffedreal4/figure1.gif b/public/static/images/figures/oatutor/a6dffedreal4/figure1.gif new file mode 100644 index 00000000000..6aa1fd3a3ea Binary files /dev/null and b/public/static/images/figures/oatutor/a6dffedreal4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a755010polynomial22/figure1.gif b/public/static/images/figures/oatutor/a755010polynomial22/figure1.gif new file mode 100644 index 00000000000..ea9b47302a2 Binary files /dev/null and b/public/static/images/figures/oatutor/a755010polynomial22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a755010polynomial23/figure1.gif b/public/static/images/figures/oatutor/a755010polynomial23/figure1.gif new file mode 100644 index 00000000000..589d0b3319c Binary files /dev/null and b/public/static/images/figures/oatutor/a755010polynomial23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a755010polynomial4/figure1.gif b/public/static/images/figures/oatutor/a755010polynomial4/figure1.gif new file mode 100644 index 00000000000..d72964f185a Binary files /dev/null and b/public/static/images/figures/oatutor/a755010polynomial4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a755010polynomial5/figure1.gif b/public/static/images/figures/oatutor/a755010polynomial5/figure1.gif new file mode 100644 index 00000000000..05916280cff Binary files /dev/null and b/public/static/images/figures/oatutor/a755010polynomial5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a755010polynomial8/figure1.gif b/public/static/images/figures/oatutor/a755010polynomial8/figure1.gif new file mode 100644 index 00000000000..36f405fb73b Binary files /dev/null and b/public/static/images/figures/oatutor/a755010polynomial8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a7587b3rotational11/figure1.gif b/public/static/images/figures/oatutor/a7587b3rotational11/figure1.gif new file mode 100644 index 00000000000..c15f4112f17 Binary files /dev/null and b/public/static/images/figures/oatutor/a7587b3rotational11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions1/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions1/figure1.gif new file mode 100644 index 00000000000..85ee00ca9aa Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions17/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions17/figure1.gif new file mode 100644 index 00000000000..078cd3c6ed0 Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions18/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions18/figure1.gif new file mode 100644 index 00000000000..59ab7357c4f Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions22/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions22/figure1.gif new file mode 100644 index 00000000000..a9c5f5d210f Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions23/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions23/figure1.gif new file mode 100644 index 00000000000..bfbfe7032bc Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions24/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions24/figure1.gif new file mode 100644 index 00000000000..a9c5f5d210f Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions28/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions28/figure1.gif new file mode 100644 index 00000000000..1ff0fa67de4 Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions29/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions29/figure1.gif new file mode 100644 index 00000000000..5e4c799292f Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions29/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions5/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions5/figure1.gif new file mode 100644 index 00000000000..234548ce58f Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions6/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions6/figure1.gif new file mode 100644 index 00000000000..c9b459e6cb7 Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions6/figure2.gif b/public/static/images/figures/oatutor/a764a0ffunctions6/figure2.gif new file mode 100644 index 00000000000..fe49759fb01 Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions6/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions6/figure3.gif b/public/static/images/figures/oatutor/a764a0ffunctions6/figure3.gif new file mode 100644 index 00000000000..49fb6f33f39 Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions6/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a764a0ffunctions7/figure1.gif b/public/static/images/figures/oatutor/a764a0ffunctions7/figure1.gif new file mode 100644 index 00000000000..e2ebdc9940c Binary files /dev/null and b/public/static/images/figures/oatutor/a764a0ffunctions7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a7b7c31limits1/figure1.gif b/public/static/images/figures/oatutor/a7b7c31limits1/figure1.gif new file mode 100644 index 00000000000..5ea0c205e5f Binary files /dev/null and b/public/static/images/figures/oatutor/a7b7c31limits1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a7b7c31limits2/figure1.gif b/public/static/images/figures/oatutor/a7b7c31limits2/figure1.gif new file mode 100644 index 00000000000..524c3808d4d Binary files /dev/null and b/public/static/images/figures/oatutor/a7b7c31limits2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a7c4d83displacement1/figure1.gif b/public/static/images/figures/oatutor/a7c4d83displacement1/figure1.gif new file mode 100644 index 00000000000..53c270bf5b0 Binary files /dev/null and b/public/static/images/figures/oatutor/a7c4d83displacement1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a7c4d83displacement3/figure1.gif b/public/static/images/figures/oatutor/a7c4d83displacement3/figure1.gif new file mode 100644 index 00000000000..53c270bf5b0 Binary files /dev/null and b/public/static/images/figures/oatutor/a7c4d83displacement3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a80f26flinear6/figure1.gif b/public/static/images/figures/oatutor/a80f26flinear6/figure1.gif new file mode 100644 index 00000000000..8d492dc970d Binary files /dev/null and b/public/static/images/figures/oatutor/a80f26flinear6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a82acbdstat9/figure1.gif b/public/static/images/figures/oatutor/a82acbdstat9/figure1.gif new file mode 100644 index 00000000000..872b7317f5d Binary files /dev/null and b/public/static/images/figures/oatutor/a82acbdstat9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical1/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical1/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical2/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical2/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical3/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical3/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical4/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical4/figure1.gif new file mode 100644 index 00000000000..d1d64c0e9fd Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical7/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical7/figure1.gif new file mode 100644 index 00000000000..ab65a0f6df2 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectoranalytical8/figure1.gif b/public/static/images/figures/oatutor/a838a73vectoranalytical8/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectoranalytical8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical1/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical1/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical2/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical2/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical3/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical3/figure1.gif new file mode 100644 index 00000000000..932574ace42 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical4/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical4/figure1.gif new file mode 100644 index 00000000000..d1d64c0e9fd Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical6/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical6/figure1.gif new file mode 100644 index 00000000000..342efc9217e Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical7/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical7/figure1.gif new file mode 100644 index 00000000000..342efc9217e Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical8/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical8/figure1.gif new file mode 100644 index 00000000000..d4cd72ab171 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a838a73vectorgraphical9/figure1.gif b/public/static/images/figures/oatutor/a838a73vectorgraphical9/figure1.gif new file mode 100644 index 00000000000..146ac4b3818 Binary files /dev/null and b/public/static/images/figures/oatutor/a838a73vectorgraphical9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities10/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities10/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities11/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities11/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities12/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities12/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities13/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities13/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities14/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities14/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities15/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities15/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities4/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities4/figure1.gif new file mode 100644 index 00000000000..1a67a5f922b Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities4/figure2.gif b/public/static/images/figures/oatutor/a85f143inequalities4/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities4/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities5/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities5/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities6/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities6/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities7/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities7/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities8/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities8/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a85f143inequalities9/figure1.gif b/public/static/images/figures/oatutor/a85f143inequalities9/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/a85f143inequalities9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3computer1/figure1.gif b/public/static/images/figures/oatutor/a883d8f5.3computer1/figure1.gif new file mode 100644 index 00000000000..d47fd3b9390 Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3computer1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3intro2/figure1.gif b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure1.gif new file mode 100644 index 00000000000..239c931e806 Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3intro2/figure2.gif b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure2.gif new file mode 100644 index 00000000000..0d996aaebc5 Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3intro2/figure3.gif b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure3.gif new file mode 100644 index 00000000000..9b9492468fb Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3intro2/figure3.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3police1/figure1.gif b/public/static/images/figures/oatutor/a883d8f5.3police1/figure1.gif new file mode 100644 index 00000000000..cae343e788b Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3police1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a883d8f5.3store1/figure1.gif b/public/static/images/figures/oatutor/a883d8f5.3store1/figure1.gif new file mode 100644 index 00000000000..10d71b017d9 Binary files /dev/null and b/public/static/images/figures/oatutor/a883d8f5.3store1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a88bf5afacts9/figure1.gif b/public/static/images/figures/oatutor/a88bf5afacts9/figure1.gif new file mode 100644 index 00000000000..713426a7034 Binary files /dev/null and b/public/static/images/figures/oatutor/a88bf5afacts9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8b65afdynamics10/figure1.gif b/public/static/images/figures/oatutor/a8b65afdynamics10/figure1.gif new file mode 100644 index 00000000000..bb5cd859fa3 Binary files /dev/null and b/public/static/images/figures/oatutor/a8b65afdynamics10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8b65afdynamics18/figure1.gif b/public/static/images/figures/oatutor/a8b65afdynamics18/figure1.gif new file mode 100644 index 00000000000..bd21a818e63 Binary files /dev/null and b/public/static/images/figures/oatutor/a8b65afdynamics18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8b65afdynamics19/figure1.gif b/public/static/images/figures/oatutor/a8b65afdynamics19/figure1.gif new file mode 100644 index 00000000000..7796b11119b Binary files /dev/null and b/public/static/images/figures/oatutor/a8b65afdynamics19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8b65afdynamics3/figure1.gif b/public/static/images/figures/oatutor/a8b65afdynamics3/figure1.gif new file mode 100644 index 00000000000..6d3d7475ff9 Binary files /dev/null and b/public/static/images/figures/oatutor/a8b65afdynamics3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8b65afdynamics4/figure1.gif b/public/static/images/figures/oatutor/a8b65afdynamics4/figure1.gif new file mode 100644 index 00000000000..6d3d7475ff9 Binary files /dev/null and b/public/static/images/figures/oatutor/a8b65afdynamics4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8e1cdafriction7/figure1.gif b/public/static/images/figures/oatutor/a8e1cdafriction7/figure1.gif new file mode 100644 index 00000000000..0ae552b3c7e Binary files /dev/null and b/public/static/images/figures/oatutor/a8e1cdafriction7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8f47f3deriv13/figure1.gif b/public/static/images/figures/oatutor/a8f47f3deriv13/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a8f47f3deriv13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8f47f3deriv14/figure1.gif b/public/static/images/figures/oatutor/a8f47f3deriv14/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a8f47f3deriv14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8f47f3deriv15/figure1.gif b/public/static/images/figures/oatutor/a8f47f3deriv15/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a8f47f3deriv15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a8f47f3deriv18/figure1.gif b/public/static/images/figures/oatutor/a8f47f3deriv18/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/a8f47f3deriv18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction10/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction10/figure1.gif new file mode 100644 index 00000000000..4c474604f3b Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction11/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction11/figure1.gif new file mode 100644 index 00000000000..4c474604f3b Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction12/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction12/figure1.gif new file mode 100644 index 00000000000..4c474604f3b Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction4/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction4/figure1.gif new file mode 100644 index 00000000000..7304c1ffc8a Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction5/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction5/figure1.gif new file mode 100644 index 00000000000..7304c1ffc8a Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction6/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction6/figure1.gif new file mode 100644 index 00000000000..7304c1ffc8a Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction7/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction7/figure1.gif new file mode 100644 index 00000000000..7304c1ffc8a Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction8/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction8/figure1.gif new file mode 100644 index 00000000000..7304c1ffc8a Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a94a0a4prediction9/figure1.gif b/public/static/images/figures/oatutor/a94a0a4prediction9/figure1.gif new file mode 100644 index 00000000000..4c474604f3b Binary files /dev/null and b/public/static/images/figures/oatutor/a94a0a4prediction9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a95836f13.1driverslicense/figure1.gif b/public/static/images/figures/oatutor/a95836f13.1driverslicense/figure1.gif new file mode 100644 index 00000000000..3f0fb2f4012 Binary files /dev/null and b/public/static/images/figures/oatutor/a95836f13.1driverslicense/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a95836f13.1traffic/figure1.gif b/public/static/images/figures/oatutor/a95836f13.1traffic/figure1.gif new file mode 100644 index 00000000000..6d245d606a8 Binary files /dev/null and b/public/static/images/figures/oatutor/a95836f13.1traffic/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a96f11611.6post/figure1.gif b/public/static/images/figures/oatutor/a96f11611.6post/figure1.gif new file mode 100644 index 00000000000..3e0982cbeec Binary files /dev/null and b/public/static/images/figures/oatutor/a96f11611.6post/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a9c994ba1cc0dcareas11/figure1.gif b/public/static/images/figures/oatutor/a9c994ba1cc0dcareas11/figure1.gif new file mode 100644 index 00000000000..2cf050a711a Binary files /dev/null and b/public/static/images/figures/oatutor/a9c994ba1cc0dcareas11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a9c994ba1cc0dcareas6/figure1.gif b/public/static/images/figures/oatutor/a9c994ba1cc0dcareas6/figure1.gif new file mode 100644 index 00000000000..d1f72212eec Binary files /dev/null and b/public/static/images/figures/oatutor/a9c994ba1cc0dcareas6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a9fd720matrix1/figure1.gif b/public/static/images/figures/oatutor/a9fd720matrix1/figure1.gif new file mode 100644 index 00000000000..7d6ac7e9d7a Binary files /dev/null and b/public/static/images/figures/oatutor/a9fd720matrix1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/a9fd720matrix2/figure1.gif b/public/static/images/figures/oatutor/a9fd720matrix2/figure1.gif new file mode 100644 index 00000000000..7d6ac7e9d7a Binary files /dev/null and b/public/static/images/figures/oatutor/a9fd720matrix2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aa47907quad19/figure1.gif b/public/static/images/figures/oatutor/aa47907quad19/figure1.gif new file mode 100644 index 00000000000..299d92a3681 Binary files /dev/null and b/public/static/images/figures/oatutor/aa47907quad19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aa4d8eereal25/figure1.gif b/public/static/images/figures/oatutor/aa4d8eereal25/figure1.gif new file mode 100644 index 00000000000..6cb29bdc6b4 Binary files /dev/null and b/public/static/images/figures/oatutor/aa4d8eereal25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aa4d8eereal26/figure1.gif b/public/static/images/figures/oatutor/aa4d8eereal26/figure1.gif new file mode 100644 index 00000000000..6cb29bdc6b4 Binary files /dev/null and b/public/static/images/figures/oatutor/aa4d8eereal26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aa4d8eereal27/figure1.gif b/public/static/images/figures/oatutor/aa4d8eereal27/figure1.gif new file mode 100644 index 00000000000..6cb29bdc6b4 Binary files /dev/null and b/public/static/images/figures/oatutor/aa4d8eereal27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aa4d8eereal28/figure1.gif b/public/static/images/figures/oatutor/aa4d8eereal28/figure1.gif new file mode 100644 index 00000000000..6cb29bdc6b4 Binary files /dev/null and b/public/static/images/figures/oatutor/aa4d8eereal28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465eanov1/figure1.gif b/public/static/images/figures/oatutor/aaa465eanov1/figure1.gif new file mode 100644 index 00000000000..49a3823d86f Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465eanov1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465eanov2/figure1.gif b/public/static/images/figures/oatutor/aaa465eanov2/figure1.gif new file mode 100644 index 00000000000..dab80f49916 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465eanov2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465eanov3/figure1.gif b/public/static/images/figures/oatutor/aaa465eanov3/figure1.gif new file mode 100644 index 00000000000..9f36fcde219 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465eanov3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465eanov4/figure1.gif b/public/static/images/figures/oatutor/aaa465eanov4/figure1.gif new file mode 100644 index 00000000000..02a63a4255c Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465eanov4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465eanov5/figure1.gif b/public/static/images/figures/oatutor/aaa465eanov5/figure1.gif new file mode 100644 index 00000000000..1aec7ca9e71 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465eanov5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist1/figure1.gif b/public/static/images/figures/oatutor/aaa465efdist1/figure1.gif new file mode 100644 index 00000000000..e7a23615d0e Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist1/figure2.gif b/public/static/images/figures/oatutor/aaa465efdist1/figure2.gif new file mode 100644 index 00000000000..84faed12356 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist1/figure3.gif b/public/static/images/figures/oatutor/aaa465efdist1/figure3.gif new file mode 100644 index 00000000000..8f0c8ed2597 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist1/figure3.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist2/figure1.gif b/public/static/images/figures/oatutor/aaa465efdist2/figure1.gif new file mode 100644 index 00000000000..30a4b125341 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist2/figure2.gif b/public/static/images/figures/oatutor/aaa465efdist2/figure2.gif new file mode 100644 index 00000000000..8ee686c32e8 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist2/figure3.gif b/public/static/images/figures/oatutor/aaa465efdist2/figure3.gif new file mode 100644 index 00000000000..70eafa7bf25 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist2/figure3.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist3/figure1.gif b/public/static/images/figures/oatutor/aaa465efdist3/figure1.gif new file mode 100644 index 00000000000..3c082064819 Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist3/figure2.gif b/public/static/images/figures/oatutor/aaa465efdist3/figure2.gif new file mode 100644 index 00000000000..09a98c37a3b Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist3/figure2.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist3/figure3.gif b/public/static/images/figures/oatutor/aaa465efdist3/figure3.gif new file mode 100644 index 00000000000..dae40bf718a Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist3/figure3.gif differ diff --git a/public/static/images/figures/oatutor/aaa465efdist3/figure4.gif b/public/static/images/figures/oatutor/aaa465efdist3/figure4.gif new file mode 100644 index 00000000000..ce62ebd986d Binary files /dev/null and b/public/static/images/figures/oatutor/aaa465efdist3/figure4.gif differ diff --git a/public/static/images/figures/oatutor/aac97ednormal1/figure1.gif b/public/static/images/figures/oatutor/aac97ednormal1/figure1.gif new file mode 100644 index 00000000000..2601308335a Binary files /dev/null and b/public/static/images/figures/oatutor/aac97ednormal1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aac97ednormal13/figure1.gif b/public/static/images/figures/oatutor/aac97ednormal13/figure1.gif new file mode 100644 index 00000000000..869231ac7b8 Binary files /dev/null and b/public/static/images/figures/oatutor/aac97ednormal13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aac97ednormal4/figure1.gif b/public/static/images/figures/oatutor/aac97ednormal4/figure1.gif new file mode 100644 index 00000000000..36faf60e6af Binary files /dev/null and b/public/static/images/figures/oatutor/aac97ednormal4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aac97ednormal6/figure1.gif b/public/static/images/figures/oatutor/aac97ednormal6/figure1.gif new file mode 100644 index 00000000000..b4f46ce1d8a Binary files /dev/null and b/public/static/images/figures/oatutor/aac97ednormal6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aac97ednormal7/figure1.gif b/public/static/images/figures/oatutor/aac97ednormal7/figure1.gif new file mode 100644 index 00000000000..6b2461ffce2 Binary files /dev/null and b/public/static/images/figures/oatutor/aac97ednormal7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses20/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses20/figure1.gif new file mode 100644 index 00000000000..c21f015c538 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses21/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses21/figure1.gif new file mode 100644 index 00000000000..c21f015c538 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses22/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses22/figure1.gif new file mode 100644 index 00000000000..fcf33384d6b Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses23/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses23/figure1.gif new file mode 100644 index 00000000000..1a5f84ccc07 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses24/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses24/figure1.gif new file mode 100644 index 00000000000..a0b047a0332 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses25/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses25/figure1.gif new file mode 100644 index 00000000000..c21f015c538 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses26/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses26/figure1.gif new file mode 100644 index 00000000000..2ecf1e406a0 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses6/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses6/figure1.gif new file mode 100644 index 00000000000..a0b047a0332 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab0ba5einverses7/figure1.gif b/public/static/images/figures/oatutor/ab0ba5einverses7/figure1.gif new file mode 100644 index 00000000000..a0b047a0332 Binary files /dev/null and b/public/static/images/figures/oatutor/ab0ba5einverses7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure1.gif b/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure1.gif new file mode 100644 index 00000000000..4768c76a906 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure2.gif b/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure2.gif new file mode 100644 index 00000000000..4768c76a906 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dgraphExp12/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure1.gif b/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure1.gif new file mode 100644 index 00000000000..4768c76a906 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure2.gif b/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure2.gif new file mode 100644 index 00000000000..4768c76a906 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dgraphExp13/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dlog13/figure1.gif b/public/static/images/figures/oatutor/ab7c38dlog13/figure1.gif new file mode 100644 index 00000000000..824350ea9e7 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dlog13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dlog13/figure2.gif b/public/static/images/figures/oatutor/ab7c38dlog13/figure2.gif new file mode 100644 index 00000000000..824350ea9e7 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dlog13/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dlog14/figure1.gif b/public/static/images/figures/oatutor/ab7c38dlog14/figure1.gif new file mode 100644 index 00000000000..3c5db03eee1 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dlog14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ab7c38dlog14/figure2.gif b/public/static/images/figures/oatutor/ab7c38dlog14/figure2.gif new file mode 100644 index 00000000000..3c5db03eee1 Binary files /dev/null and b/public/static/images/figures/oatutor/ab7c38dlog14/figure2.gif differ diff --git a/public/static/images/figures/oatutor/abcfddehomogen1/figure1.gif b/public/static/images/figures/oatutor/abcfddehomogen1/figure1.gif new file mode 100644 index 00000000000..7401bdc8dc5 Binary files /dev/null and b/public/static/images/figures/oatutor/abcfddehomogen1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/abcfddehomogen1/figure2.gif b/public/static/images/figures/oatutor/abcfddehomogen1/figure2.gif new file mode 100644 index 00000000000..e1a66ac0270 Binary files /dev/null and b/public/static/images/figures/oatutor/abcfddehomogen1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/abcfddehomogen2/figure1.gif b/public/static/images/figures/oatutor/abcfddehomogen2/figure1.gif new file mode 100644 index 00000000000..b3c9eb340f3 Binary files /dev/null and b/public/static/images/figures/oatutor/abcfddehomogen2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/abcfddehomogen2/figure2.gif b/public/static/images/figures/oatutor/abcfddehomogen2/figure2.gif new file mode 100644 index 00000000000..b7b8fd265a9 Binary files /dev/null and b/public/static/images/figures/oatutor/abcfddehomogen2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/abfba37quadratic1/figure1.gif b/public/static/images/figures/oatutor/abfba37quadratic1/figure1.gif new file mode 100644 index 00000000000..d956b1e9a1d Binary files /dev/null and b/public/static/images/figures/oatutor/abfba37quadratic1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/abfba37quadratic2/figure1.gif b/public/static/images/figures/oatutor/abfba37quadratic2/figure1.gif new file mode 100644 index 00000000000..a6dd3e4d63d Binary files /dev/null and b/public/static/images/figures/oatutor/abfba37quadratic2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/abfba37quadratic28/figure1.gif b/public/static/images/figures/oatutor/abfba37quadratic28/figure1.gif new file mode 100644 index 00000000000..2c7aad51560 Binary files /dev/null and b/public/static/images/figures/oatutor/abfba37quadratic28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac039acderiv10/figure1.gif b/public/static/images/figures/oatutor/ac039acderiv10/figure1.gif new file mode 100644 index 00000000000..c3b8a8f4e80 Binary files /dev/null and b/public/static/images/figures/oatutor/ac039acderiv10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac039acderiv18/figure1.gif b/public/static/images/figures/oatutor/ac039acderiv18/figure1.gif new file mode 100644 index 00000000000..14dfb153e1d Binary files /dev/null and b/public/static/images/figures/oatutor/ac039acderiv18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac039acderiv7/figure1.gif b/public/static/images/figures/oatutor/ac039acderiv7/figure1.gif new file mode 100644 index 00000000000..9152912141d Binary files /dev/null and b/public/static/images/figures/oatutor/ac039acderiv7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac039acderiv8/figure1.gif b/public/static/images/figures/oatutor/ac039acderiv8/figure1.gif new file mode 100644 index 00000000000..863a5c02a04 Binary files /dev/null and b/public/static/images/figures/oatutor/ac039acderiv8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac039acderiv9/figure1.gif b/public/static/images/figures/oatutor/ac039acderiv9/figure1.gif new file mode 100644 index 00000000000..59c3cc9b3f4 Binary files /dev/null and b/public/static/images/figures/oatutor/ac039acderiv9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means1/figure1.gif b/public/static/images/figures/oatutor/ac22d42means1/figure1.gif new file mode 100644 index 00000000000..34562c0fa35 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means3/figure1.gif b/public/static/images/figures/oatutor/ac22d42means3/figure1.gif new file mode 100644 index 00000000000..db50c8ebd2d Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means4/figure1.gif b/public/static/images/figures/oatutor/ac22d42means4/figure1.gif new file mode 100644 index 00000000000..db50c8ebd2d Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means5/figure1.gif b/public/static/images/figures/oatutor/ac22d42means5/figure1.gif new file mode 100644 index 00000000000..a4e279a88fe Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means6/figure1.gif b/public/static/images/figures/oatutor/ac22d42means6/figure1.gif new file mode 100644 index 00000000000..a4e279a88fe Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means7/figure1.gif b/public/static/images/figures/oatutor/ac22d42means7/figure1.gif new file mode 100644 index 00000000000..ef994a74a29 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means8/figure1.gif b/public/static/images/figures/oatutor/ac22d42means8/figure1.gif new file mode 100644 index 00000000000..ef994a74a29 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42means9/figure1.gif b/public/static/images/figures/oatutor/ac22d42means9/figure1.gif new file mode 100644 index 00000000000..ef994a74a29 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42means9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std1/figure1.gif b/public/static/images/figures/oatutor/ac22d42std1/figure1.gif new file mode 100644 index 00000000000..b272218c59a Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std1/figure2.gif b/public/static/images/figures/oatutor/ac22d42std1/figure2.gif new file mode 100644 index 00000000000..ea5e35307aa Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std1/figure3.gif b/public/static/images/figures/oatutor/ac22d42std1/figure3.gif new file mode 100644 index 00000000000..95427b58968 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std1/figure3.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std10/figure1.gif b/public/static/images/figures/oatutor/ac22d42std10/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std11/figure1.gif b/public/static/images/figures/oatutor/ac22d42std11/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std12/figure1.gif b/public/static/images/figures/oatutor/ac22d42std12/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std13/figure1.gif b/public/static/images/figures/oatutor/ac22d42std13/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std14/figure1.gif b/public/static/images/figures/oatutor/ac22d42std14/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std15/figure1.gif b/public/static/images/figures/oatutor/ac22d42std15/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std16/figure1.gif b/public/static/images/figures/oatutor/ac22d42std16/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std16/figure2.gif b/public/static/images/figures/oatutor/ac22d42std16/figure2.gif new file mode 100644 index 00000000000..da7e089ae9e Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std16/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std17/figure1.gif b/public/static/images/figures/oatutor/ac22d42std17/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std18/figure1.gif b/public/static/images/figures/oatutor/ac22d42std18/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std19/figure1.gif b/public/static/images/figures/oatutor/ac22d42std19/figure1.gif new file mode 100644 index 00000000000..61c41a78559 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std19/figure2.gif b/public/static/images/figures/oatutor/ac22d42std19/figure2.gif new file mode 100644 index 00000000000..9547c86f957 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std19/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std20/figure1.gif b/public/static/images/figures/oatutor/ac22d42std20/figure1.gif new file mode 100644 index 00000000000..9547c86f957 Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac22d42std7/figure1.gif b/public/static/images/figures/oatutor/ac22d42std7/figure1.gif new file mode 100644 index 00000000000..da7e089ae9e Binary files /dev/null and b/public/static/images/figures/oatutor/ac22d42std7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q12/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q12/figure1.gif new file mode 100644 index 00000000000..af2076e7d2f Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q13/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q13/figure1.gif new file mode 100644 index 00000000000..af2076e7d2f Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q14/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q14/figure1.gif new file mode 100644 index 00000000000..af2076e7d2f Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q15/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q15/figure1.gif new file mode 100644 index 00000000000..97bdfd8c3d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q16/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q16/figure1.gif new file mode 100644 index 00000000000..97bdfd8c3d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q17/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q17/figure1.gif new file mode 100644 index 00000000000..ec061ff33c1 Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q18/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q18/figure1.gif new file mode 100644 index 00000000000..ec061ff33c1 Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac2cc23q19/figure1.gif b/public/static/images/figures/oatutor/ac2cc23q19/figure1.gif new file mode 100644 index 00000000000..ec061ff33c1 Binary files /dev/null and b/public/static/images/figures/oatutor/ac2cc23q19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac591festat12/figure1.gif b/public/static/images/figures/oatutor/ac591festat12/figure1.gif new file mode 100644 index 00000000000..703cbebbebf Binary files /dev/null and b/public/static/images/figures/oatutor/ac591festat12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac591festat13/figure1.gif b/public/static/images/figures/oatutor/ac591festat13/figure1.gif new file mode 100644 index 00000000000..703cbebbebf Binary files /dev/null and b/public/static/images/figures/oatutor/ac591festat13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac591festat14/figure1.gif b/public/static/images/figures/oatutor/ac591festat14/figure1.gif new file mode 100644 index 00000000000..df23ddd935f Binary files /dev/null and b/public/static/images/figures/oatutor/ac591festat14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ac591festat15/figure1.gif b/public/static/images/figures/oatutor/ac591festat15/figure1.gif new file mode 100644 index 00000000000..de803cdff9e Binary files /dev/null and b/public/static/images/figures/oatutor/ac591festat15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/acc585clocation5/figure1.gif b/public/static/images/figures/oatutor/acc585clocation5/figure1.gif new file mode 100644 index 00000000000..845a3909e33 Binary files /dev/null and b/public/static/images/figures/oatutor/acc585clocation5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs11/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs11/figure1.gif new file mode 100644 index 00000000000..a15ea7f7669 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs12/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs12/figure1.gif new file mode 100644 index 00000000000..99e29c1be19 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs24/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs24/figure1.gif new file mode 100644 index 00000000000..cfa63f34dd7 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs25/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs25/figure1.gif new file mode 100644 index 00000000000..d679f4e3b04 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs26/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs26/figure1.gif new file mode 100644 index 00000000000..64fde02d632 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad05581triggraphs27/figure1.gif b/public/static/images/figures/oatutor/ad05581triggraphs27/figure1.gif new file mode 100644 index 00000000000..82436820d09 Binary files /dev/null and b/public/static/images/figures/oatutor/ad05581triggraphs27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad1dfa0problem29/figure1.gif b/public/static/images/figures/oatutor/ad1dfa0problem29/figure1.gif new file mode 100644 index 00000000000..29d87887240 Binary files /dev/null and b/public/static/images/figures/oatutor/ad1dfa0problem29/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad33ee8parabolas19/figure1.gif b/public/static/images/figures/oatutor/ad33ee8parabolas19/figure1.gif new file mode 100644 index 00000000000..4f79fc59810 Binary files /dev/null and b/public/static/images/figures/oatutor/ad33ee8parabolas19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad33ee8parabolas20/figure1.gif b/public/static/images/figures/oatutor/ad33ee8parabolas20/figure1.gif new file mode 100644 index 00000000000..4f79fc59810 Binary files /dev/null and b/public/static/images/figures/oatutor/ad33ee8parabolas20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad33ee8parabolas21/figure1.gif b/public/static/images/figures/oatutor/ad33ee8parabolas21/figure1.gif new file mode 100644 index 00000000000..4f79fc59810 Binary files /dev/null and b/public/static/images/figures/oatutor/ad33ee8parabolas21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ad33ee8parabolas22/figure1.gif b/public/static/images/figures/oatutor/ad33ee8parabolas22/figure1.gif new file mode 100644 index 00000000000..4f79fc59810 Binary files /dev/null and b/public/static/images/figures/oatutor/ad33ee8parabolas22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig16/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig16/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig17/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig17/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig18/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig18/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig19/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig19/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig20/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig20/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig21/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig21/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig22/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig22/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig23/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig23/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig24/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig24/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig25/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig25/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig26/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig26/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adaa3f9righttrig27/figure1.gif b/public/static/images/figures/oatutor/adaa3f9righttrig27/figure1.gif new file mode 100644 index 00000000000..93afa13072c Binary files /dev/null and b/public/static/images/figures/oatutor/adaa3f9righttrig27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/add1c75trig18/figure1.gif b/public/static/images/figures/oatutor/add1c75trig18/figure1.gif new file mode 100644 index 00000000000..31b997c4b22 Binary files /dev/null and b/public/static/images/figures/oatutor/add1c75trig18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/add1c75trig19/figure1.gif b/public/static/images/figures/oatutor/add1c75trig19/figure1.gif new file mode 100644 index 00000000000..31b997c4b22 Binary files /dev/null and b/public/static/images/figures/oatutor/add1c75trig19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/add1c75trig20/figure1.gif b/public/static/images/figures/oatutor/add1c75trig20/figure1.gif new file mode 100644 index 00000000000..31b997c4b22 Binary files /dev/null and b/public/static/images/figures/oatutor/add1c75trig20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/add1c75trig21/figure1.gif b/public/static/images/figures/oatutor/add1c75trig21/figure1.gif new file mode 100644 index 00000000000..31b997c4b22 Binary files /dev/null and b/public/static/images/figures/oatutor/add1c75trig21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ade8ce7domain3/figure1.gif b/public/static/images/figures/oatutor/ade8ce7domain3/figure1.gif new file mode 100644 index 00000000000..5816f18eabc Binary files /dev/null and b/public/static/images/figures/oatutor/ade8ce7domain3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ade8ce7domain5/figure1.gif b/public/static/images/figures/oatutor/ade8ce7domain5/figure1.gif new file mode 100644 index 00000000000..080f4bf7842 Binary files /dev/null and b/public/static/images/figures/oatutor/ade8ce7domain5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ade8ce7domain6/figure1.gif b/public/static/images/figures/oatutor/ade8ce7domain6/figure1.gif new file mode 100644 index 00000000000..9244d37b1a6 Binary files /dev/null and b/public/static/images/figures/oatutor/ade8ce7domain6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ade8ce7domain7/figure1.gif b/public/static/images/figures/oatutor/ade8ce7domain7/figure1.gif new file mode 100644 index 00000000000..282845c5b69 Binary files /dev/null and b/public/static/images/figures/oatutor/ade8ce7domain7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/adfa1cbterminology25/figure1.gif b/public/static/images/figures/oatutor/adfa1cbterminology25/figure1.gif new file mode 100644 index 00000000000..58ce5c1d574 Binary files /dev/null and b/public/static/images/figures/oatutor/adfa1cbterminology25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae379ba13.4collegeinstructor1/figure1.gif b/public/static/images/figures/oatutor/ae379ba13.4collegeinstructor1/figure1.gif new file mode 100644 index 00000000000..cc549d780ca Binary files /dev/null and b/public/static/images/figures/oatutor/ae379ba13.4collegeinstructor1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae379ba13.4nycsingers/figure1.gif b/public/static/images/figures/oatutor/ae379ba13.4nycsingers/figure1.gif new file mode 100644 index 00000000000..dfbbf5e2e5c Binary files /dev/null and b/public/static/images/figures/oatutor/ae379ba13.4nycsingers/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread10/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread10/figure1.gif new file mode 100644 index 00000000000..3b883b8d79b Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread14/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread14/figure1.gif new file mode 100644 index 00000000000..687277740a0 Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread17/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread17/figure1.gif new file mode 100644 index 00000000000..2c89edc5f2b Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread18/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread18/figure1.gif new file mode 100644 index 00000000000..d85eaed5a44 Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread19/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread19/figure1.gif new file mode 100644 index 00000000000..38caa09d3b2 Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread25/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread25/figure1.gif new file mode 100644 index 00000000000..0dc66951de6 Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae41a5fspread9/figure1.gif b/public/static/images/figures/oatutor/ae41a5fspread9/figure1.gif new file mode 100644 index 00000000000..f9f89653790 Binary files /dev/null and b/public/static/images/figures/oatutor/ae41a5fspread9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure1.gif new file mode 100644 index 00000000000..253829d85d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure2.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure3.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure3.gif new file mode 100644 index 00000000000..9709db6883f Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure3.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure4.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure4.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure4.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure5.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure5.gif new file mode 100644 index 00000000000..6a06420e4df Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure5.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities1/figure6.gif b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure6.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities1/figure6.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities10/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities10/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities11/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities11/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities12/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities12/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities13/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities13/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities13/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities14/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities14/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities15/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities15/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities2/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities2/figure2.gif b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities2/figure3.gif b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure3.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities2/figure3.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities3/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities3/figure2.gif b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities3/figure3.gif b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure3.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities3/figure3.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities4/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities4/figure1.gif new file mode 100644 index 00000000000..1a67a5f922b Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities4/figure2.gif b/public/static/images/figures/oatutor/ae63c0cinequalities4/figure2.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities4/figure2.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities5/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities5/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities6/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities6/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities7/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities7/figure1.gif new file mode 100644 index 00000000000..a6f8d4f8233 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities8/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities8/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/ae63c0cinequalities9/figure1.gif b/public/static/images/figures/oatutor/ae63c0cinequalities9/figure1.gif new file mode 100644 index 00000000000..598a7a048d5 Binary files /dev/null and b/public/static/images/figures/oatutor/ae63c0cinequalities9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel23/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel23/figure1.gif new file mode 100644 index 00000000000..d95e247d003 Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel24/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel24/figure1.gif new file mode 100644 index 00000000000..37f78997d9e Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel25/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel25/figure1.gif new file mode 100644 index 00000000000..73672ec90dc Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel26/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel26/figure1.gif new file mode 100644 index 00000000000..abef3290681 Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel27/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel27/figure1.gif new file mode 100644 index 00000000000..13a697672f0 Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel27/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel28/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel28/figure1.gif new file mode 100644 index 00000000000..9e85e6ab6e9 Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel28/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aea0f93trigmodel8/figure1.gif b/public/static/images/figures/oatutor/aea0f93trigmodel8/figure1.gif new file mode 100644 index 00000000000..73672ec90dc Binary files /dev/null and b/public/static/images/figures/oatutor/aea0f93trigmodel8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aed4feastability10/figure1.gif b/public/static/images/figures/oatutor/aed4feastability10/figure1.gif new file mode 100644 index 00000000000..e8123a0f8ff Binary files /dev/null and b/public/static/images/figures/oatutor/aed4feastability10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aed4feastability2/figure1.gif b/public/static/images/figures/oatutor/aed4feastability2/figure1.gif new file mode 100644 index 00000000000..ea0d7d93711 Binary files /dev/null and b/public/static/images/figures/oatutor/aed4feastability2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aed4feastability3/figure1.gif b/public/static/images/figures/oatutor/aed4feastability3/figure1.gif new file mode 100644 index 00000000000..780d92c9f79 Binary files /dev/null and b/public/static/images/figures/oatutor/aed4feastability3/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aed4feastability5/figure1.gif b/public/static/images/figures/oatutor/aed4feastability5/figure1.gif new file mode 100644 index 00000000000..51047dcbd1f Binary files /dev/null and b/public/static/images/figures/oatutor/aed4feastability5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aed4feastability9/figure1.gif b/public/static/images/figures/oatutor/aed4feastability9/figure1.gif new file mode 100644 index 00000000000..a5faa4191c2 Binary files /dev/null and b/public/static/images/figures/oatutor/aed4feastability9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/aef8b03optimize1/figure1.gif b/public/static/images/figures/oatutor/aef8b03optimize1/figure1.gif new file mode 100644 index 00000000000..1a5c468f5be Binary files /dev/null and b/public/static/images/figures/oatutor/aef8b03optimize1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af0394ereal5/figure1.gif b/public/static/images/figures/oatutor/af0394ereal5/figure1.gif new file mode 100644 index 00000000000..1ddede06f31 Binary files /dev/null and b/public/static/images/figures/oatutor/af0394ereal5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af0394ereal8/figure1.gif b/public/static/images/figures/oatutor/af0394ereal8/figure1.gif new file mode 100644 index 00000000000..bbb2b16b03f Binary files /dev/null and b/public/static/images/figures/oatutor/af0394ereal8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af0394ereal9/figure1.gif b/public/static/images/figures/oatutor/af0394ereal9/figure1.gif new file mode 100644 index 00000000000..4f1614da704 Binary files /dev/null and b/public/static/images/figures/oatutor/af0394ereal9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af38be6prop8/figure1.gif b/public/static/images/figures/oatutor/af38be6prop8/figure1.gif new file mode 100644 index 00000000000..9fec3f05c5a Binary files /dev/null and b/public/static/images/figures/oatutor/af38be6prop8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af3b50aangles4/figure1.gif b/public/static/images/figures/oatutor/af3b50aangles4/figure1.gif new file mode 100644 index 00000000000..8d4c3747d47 Binary files /dev/null and b/public/static/images/figures/oatutor/af3b50aangles4/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af3b50aangles5/figure1.gif b/public/static/images/figures/oatutor/af3b50aangles5/figure1.gif new file mode 100644 index 00000000000..8d4c3747d47 Binary files /dev/null and b/public/static/images/figures/oatutor/af3b50aangles5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af3b50aangles6/figure1.gif b/public/static/images/figures/oatutor/af3b50aangles6/figure1.gif new file mode 100644 index 00000000000..6f3d6621867 Binary files /dev/null and b/public/static/images/figures/oatutor/af3b50aangles6/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af3b50aangles7/figure1.gif b/public/static/images/figures/oatutor/af3b50aangles7/figure1.gif new file mode 100644 index 00000000000..6f3d6621867 Binary files /dev/null and b/public/static/images/figures/oatutor/af3b50aangles7/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos14/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos14/figure1.gif new file mode 100644 index 00000000000..a4bc526518d Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos14/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos15/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos15/figure1.gif new file mode 100644 index 00000000000..9d3ec66e07d Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos15/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos16/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos16/figure1.gif new file mode 100644 index 00000000000..47b368d7f32 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos17/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos17/figure1.gif new file mode 100644 index 00000000000..bdca18210f8 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos18/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos18/figure1.gif new file mode 100644 index 00000000000..266f6ce9829 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos19/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos19/figure1.gif new file mode 100644 index 00000000000..9344f8ba8d3 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos20/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos20/figure1.gif new file mode 100644 index 00000000000..d7baa8965dd Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos21/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos21/figure1.gif new file mode 100644 index 00000000000..418e4f2785e Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos22/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos22/figure1.gif new file mode 100644 index 00000000000..283b61daa0d Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos23/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos23/figure1.gif new file mode 100644 index 00000000000..952a8ea59e9 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos24/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos24/figure1.gif new file mode 100644 index 00000000000..eef6f592be0 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos24/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af4dc22Lawcos30/figure1.gif b/public/static/images/figures/oatutor/af4dc22Lawcos30/figure1.gif new file mode 100644 index 00000000000..fe437a32137 Binary files /dev/null and b/public/static/images/figures/oatutor/af4dc22Lawcos30/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center10/figure1.gif b/public/static/images/figures/oatutor/af5cb05center10/figure1.gif new file mode 100644 index 00000000000..f58158bdc9a Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center10/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center11/figure1.gif b/public/static/images/figures/oatutor/af5cb05center11/figure1.gif new file mode 100644 index 00000000000..95fcaf75e4e Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center11/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center12/figure1.gif b/public/static/images/figures/oatutor/af5cb05center12/figure1.gif new file mode 100644 index 00000000000..e6fe01b2d03 Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center12/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center19/figure1.gif b/public/static/images/figures/oatutor/af5cb05center19/figure1.gif new file mode 100644 index 00000000000..6e301aaada3 Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center20/figure1.gif b/public/static/images/figures/oatutor/af5cb05center20/figure1.gif new file mode 100644 index 00000000000..8e6924b0f2d Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center8/figure1.gif b/public/static/images/figures/oatutor/af5cb05center8/figure1.gif new file mode 100644 index 00000000000..798201ae97e Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center8/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af5cb05center9/figure1.gif b/public/static/images/figures/oatutor/af5cb05center9/figure1.gif new file mode 100644 index 00000000000..406ef339e10 Binary files /dev/null and b/public/static/images/figures/oatutor/af5cb05center9/figure1.gif differ diff --git a/public/static/images/figures/oatutor/af985e8a1cc0dcareas1/figure1.gif b/public/static/images/figures/oatutor/af985e8a1cc0dcareas1/figure1.gif new file mode 100644 index 00000000000..11864d1567f Binary files /dev/null and b/public/static/images/figures/oatutor/af985e8a1cc0dcareas1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real1/figure1.gif b/public/static/images/figures/oatutor/afa63f8real1/figure1.gif new file mode 100644 index 00000000000..1470e4388ef Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real1/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real1/figure2.gif b/public/static/images/figures/oatutor/afa63f8real1/figure2.gif new file mode 100644 index 00000000000..1470e4388ef Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real1/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real16/figure1.gif b/public/static/images/figures/oatutor/afa63f8real16/figure1.gif new file mode 100644 index 00000000000..389393702a2 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real16/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real16/figure2.gif b/public/static/images/figures/oatutor/afa63f8real16/figure2.gif new file mode 100644 index 00000000000..389393702a2 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real16/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real17/figure1.gif b/public/static/images/figures/oatutor/afa63f8real17/figure1.gif new file mode 100644 index 00000000000..0ffcd26f6ed Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real17/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real17/figure2.gif b/public/static/images/figures/oatutor/afa63f8real17/figure2.gif new file mode 100644 index 00000000000..0ffcd26f6ed Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real17/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real18/figure1.gif b/public/static/images/figures/oatutor/afa63f8real18/figure1.gif new file mode 100644 index 00000000000..e86f4e2e1f4 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real18/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real18/figure2.gif b/public/static/images/figures/oatutor/afa63f8real18/figure2.gif new file mode 100644 index 00000000000..e86f4e2e1f4 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real18/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real2/figure1.gif b/public/static/images/figures/oatutor/afa63f8real2/figure1.gif new file mode 100644 index 00000000000..ae28b8a63b8 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real2/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real2/figure2.gif b/public/static/images/figures/oatutor/afa63f8real2/figure2.gif new file mode 100644 index 00000000000..ae28b8a63b8 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real2/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real25/figure1.gif b/public/static/images/figures/oatutor/afa63f8real25/figure1.gif new file mode 100644 index 00000000000..64e434165f9 Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real25/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real26/figure1.gif b/public/static/images/figures/oatutor/afa63f8real26/figure1.gif new file mode 100644 index 00000000000..fe24f96fe4c Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real26/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real5/figure1.gif b/public/static/images/figures/oatutor/afa63f8real5/figure1.gif new file mode 100644 index 00000000000..c2ba0075a1f Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real5/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afa63f8real5/figure2.gif b/public/static/images/figures/oatutor/afa63f8real5/figure2.gif new file mode 100644 index 00000000000..c2ba0075a1f Binary files /dev/null and b/public/static/images/figures/oatutor/afa63f8real5/figure2.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc19/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc19/figure1.gif new file mode 100644 index 00000000000..d39eec87799 Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc19/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc20/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc20/figure1.gif new file mode 100644 index 00000000000..35e191fedf2 Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc20/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc21/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc21/figure1.gif new file mode 100644 index 00000000000..9a13862f2c2 Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc21/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc22/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc22/figure1.gif new file mode 100644 index 00000000000..b4633a2c17a Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc22/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc23/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc23/figure1.gif new file mode 100644 index 00000000000..2ffb196b63f Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc23/figure1.gif differ diff --git a/public/static/images/figures/oatutor/afc3761Unitcirc24/figure1.gif b/public/static/images/figures/oatutor/afc3761Unitcirc24/figure1.gif new file mode 100644 index 00000000000..4ab5ae22767 Binary files /dev/null and b/public/static/images/figures/oatutor/afc3761Unitcirc24/figure1.gif differ diff --git a/public/static/images/icons/folder.svg b/public/static/images/icons/folder.svg new file mode 100644 index 00000000000..bb0e669c679 --- /dev/null +++ b/public/static/images/icons/folder.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/static/images/icons/folder_outline_1.svg b/public/static/images/icons/folder_outline_1.svg new file mode 100644 index 00000000000..97e064fa37d --- /dev/null +++ b/public/static/images/icons/folder_outline_1.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/static/images/icons/folder_outline_2.svg b/public/static/images/icons/folder_outline_2.svg new file mode 100644 index 00000000000..487b28ce3a7 --- /dev/null +++ b/public/static/images/icons/folder_outline_2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/static/images/icons/information-icon.png b/public/static/images/icons/information-icon.png new file mode 100644 index 00000000000..2f21ee155c6 Binary files /dev/null and b/public/static/images/icons/information-icon.png differ diff --git a/public/static/images/icons/mastery-bolt.png b/public/static/images/icons/mastery-bolt.png new file mode 100644 index 00000000000..717adf1ef8c Binary files /dev/null and b/public/static/images/icons/mastery-bolt.png differ diff --git a/src/App.js b/src/App.js index 05ac75f1225..ba49d32d2a4 100644 --- a/src/App.js +++ b/src/App.js @@ -18,11 +18,10 @@ import { ThemeContext, USER_ID_STORAGE_KEY, } from "./config/config.js"; -import { - createTheme, - responsiveFontSizes, - ThemeProvider, -} from "@material-ui/core/styles"; + +import { ThemeProvider } from "@material-ui/core/styles"; +import { theme } from './theme'; + import { toast, ToastContainer } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; @@ -47,13 +46,11 @@ import experimentalBKTParams from "./content-sources/oatutor/bkt-params/experime import { heuristic as defaultHeuristic } from "./models/BKT/problem-select-heuristics/defaultHeuristic.js"; import { heuristic as experimentalHeuristic } from "./models/BKT/problem-select-heuristics/experimentalHeuristic.js"; import BrowserStorage from "./util/browserStorage"; +import tableOfContents from "@components/tableOfContents"; // ### END CUSTOMIZABLE IMPORTS ### loadFirebaseEnvConfig(config); -let theme = createTheme(); -theme = responsiveFontSizes(theme); - const queryParamToContext = { token: "jwt", lis_person_name_full: "studentName", @@ -429,6 +426,14 @@ class App extends React.Component { /> )} /> + + + diff --git a/src/assets/Circle.svg b/src/assets/Circle.svg new file mode 100644 index 00000000000..2668f9c104f --- /dev/null +++ b/src/assets/Circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/Logo.svg b/src/assets/Logo.svg new file mode 100644 index 00000000000..048bacec9eb --- /dev/null +++ b/src/assets/Logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/TOC-icon.svg b/src/assets/TOC-icon.svg new file mode 100644 index 00000000000..50b96f966e4 --- /dev/null +++ b/src/assets/TOC-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/UserThumb.svg b/src/assets/UserThumb.svg new file mode 100644 index 00000000000..b22917245ea --- /dev/null +++ b/src/assets/UserThumb.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/book-open-greyed.svg b/src/assets/book-open-greyed.svg new file mode 100644 index 00000000000..7bc0d533e40 --- /dev/null +++ b/src/assets/book-open-greyed.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/book-open.svg b/src/assets/book-open.svg new file mode 100644 index 00000000000..320f51058a7 --- /dev/null +++ b/src/assets/book-open.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/chevron-left.svg b/src/assets/chevron-left.svg new file mode 100644 index 00000000000..0ae9f46ed2b --- /dev/null +++ b/src/assets/chevron-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/file-check-02.svg b/src/assets/file-check-02.svg new file mode 100644 index 00000000000..ec057222047 --- /dev/null +++ b/src/assets/file-check-02.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/layoutLeft.svg b/src/assets/layoutLeft.svg new file mode 100644 index 00000000000..d2ebca53445 --- /dev/null +++ b/src/assets/layoutLeft.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/menuIcon.svg b/src/assets/menuIcon.svg new file mode 100644 index 00000000000..d41b9873346 --- /dev/null +++ b/src/assets/menuIcon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/stars-02.svg b/src/assets/stars-02.svg new file mode 100644 index 00000000000..0f5b2d245e7 --- /dev/null +++ b/src/assets/stars-02.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/teacher guidance-cropped.svg b/src/assets/teacher guidance-cropped.svg new file mode 100644 index 00000000000..b810ccc84d7 --- /dev/null +++ b/src/assets/teacher guidance-cropped.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/teacher guidance.svg b/src/assets/teacher guidance.svg new file mode 100644 index 00000000000..9dbac7d4096 --- /dev/null +++ b/src/assets/teacher guidance.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/zap-blue.svg b/src/assets/zap-blue.svg new file mode 100644 index 00000000000..b37856d8608 --- /dev/null +++ b/src/assets/zap-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/zap.svg b/src/assets/zap.svg new file mode 100644 index 00000000000..697f9b8abbd --- /dev/null +++ b/src/assets/zap.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/BrandLogoNav.js b/src/components/BrandLogoNav.js index 978b4ba8573..424805785f7 100644 --- a/src/components/BrandLogoNav.js +++ b/src/components/BrandLogoNav.js @@ -1,7 +1,8 @@ import React, { useContext } from "react"; -import { SITE_NAME, SITE_VERSION, ThemeContext } from "../config/config"; +import { ThemeContext } from "../config/config"; import { useHistory } from "react-router-dom"; import { makeStyles } from "@material-ui/core"; +import {ReactComponent as Logo} from "../assets/Logo.svg"; const useStyles = makeStyles({ "siteNavLink": { @@ -10,7 +11,15 @@ const useStyles = makeStyles({ "&:hover": { cursor: "pointer" } + }, + "logo": { + height: "28px", + "&:hover": { + cursor: "pointer" + } } + + }) function BrandLogoNav({ isPrivileged = false, noLink = false }) { @@ -18,7 +27,6 @@ function BrandLogoNav({ isPrivileged = false, noLink = false }) { const history = useHistory() const classes = useStyles() - const brandString = `${SITE_NAME} (v${SITE_VERSION})` const navigateLink = (evt) => { if (evt.type === "click" || evt.key === "Enter") { @@ -29,13 +37,13 @@ function BrandLogoNav({ isPrivileged = false, noLink = false }) { return <> {/* specified to not link or was launched from lms as student*/} {noLink || (context.jwt.length !== 0 && !isPrivileged) - ?
- {brandString} + ?
+
:
- {brandString} +
} diff --git a/src/components/Tooltip.js b/src/components/Tooltip.js new file mode 100644 index 00000000000..e27c4c9aa4f --- /dev/null +++ b/src/components/Tooltip.js @@ -0,0 +1,22 @@ +import Tooltip from "@material-ui/core/Tooltip"; +import { withStyles } from "@material-ui/core/styles"; + +export const ProgressTooltip = withStyles((theme) => ({ + tooltip: { + backgroundColor: "rgba(97,97,97,0.9)", + color: "#fff", + padding: 16, + borderRadius: 6, + width: 280, + maxWidth: 280, + boxSizing: "border-box", + fontFamily: theme.typography.fontFamily, + boxShadow: "none", + }, + arrow: { color: "rgba(97,97,97,0.9)" }, +}))(Tooltip); + +export const InfoTooltip = withStyles(() => ({ + tooltip: { backgroundColor: "rgba(97,97,97,0.9)", color:"#fff", padding:12, borderRadius:6, maxWidth:240, fontFamily:"Inter, sans-serif", boxShadow:"none" }, + arrow: { color: "rgba(97,97,97,0.9)" }, +}))(Tooltip); \ No newline at end of file diff --git a/src/components/problem-input/MultipleChoice.js b/src/components/problem-input/MultipleChoice.js index 8742a92f16d..618aa796d11 100644 --- a/src/components/problem-input/MultipleChoice.js +++ b/src/components/problem-input/MultipleChoice.js @@ -36,12 +36,12 @@ class MultipleChoice extends React.Component { } return ( -
+
{choices.length > 0 ? choices.map((choice, i) => - } + } label={renderText(choice, null, variabilization, this.context)} key={choice}/>) : "Error: This problem has no answer choices. Please submit feedback."} diff --git a/src/components/problem-layout/HintTextbox.js b/src/components/problem-layout/HintTextbox.js index 959b71eea4f..37579486193 100644 --- a/src/components/problem-layout/HintTextbox.js +++ b/src/components/problem-layout/HintTextbox.js @@ -32,6 +32,7 @@ class HintTextbox extends React.Component { isCorrect: context.use_expanded_view && context.debug ? true : null, checkMarkOpacity: context.use_expanded_view && context.debug ? '100' : '0', showHints: false, + answerSelected: false } } @@ -74,7 +75,11 @@ class HintTextbox extends React.Component { setInputValState = (inputVal) => { // console.debug("new inputVal state: ", inputVal) - this.setState(({ isCorrect }) => ({ inputVal, isCorrect: isCorrect ? true : null })) + this.setState(({ isCorrect }) => ({ + inputVal, + isCorrect: isCorrect ? true : null, + answerSelected: inputVal.trim() !== "" + })) } render() { @@ -130,7 +135,7 @@ class HintTextbox extends React.Component {
- -
- +
+ + {/* top-right “view all problems” button */} + this.props.history.push(`/lessons/${lesson.id}/problems`)} + > + + +

+ {lesson.name.replace(/##/g, "")} +

+

{lesson.topics}

+ +
+
+ ) }) } @@ -171,10 +181,24 @@ class LessonSelection extends React.Component { {!this.isPrivileged && {this.state.preparedRemoveProgress ? - : - } } @@ -182,12 +206,17 @@ class LessonSelection extends React.Component {
+ + +
{SHOW_COPYRIGHT && <>© {new Date().getFullYear()} {SITE_NAME}}
-
+ + + {/*
- + */} +
+ + + + ) } diff --git a/src/components/problem-layout/Problem.js b/src/components/problem-layout/Problem.js index 7ef80d2ffd1..95df86b5298 100644 --- a/src/components/problem-layout/Problem.js +++ b/src/components/problem-layout/Problem.js @@ -35,6 +35,9 @@ import { cleanArray } from "../../util/cleanObject"; import Popup from '../Popup/Popup.js'; import About from '../../pages/Posts/About.js'; +import {Accordion, AccordionSummary, AccordionDetails, typography} from "@material-ui/core"; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; + class Problem extends React.Component { static defaultProps = { autoScroll: true @@ -81,8 +84,11 @@ class Problem extends React.Component { showFeedback: false, feedback: "", feedbackSubmitted: false, - showPopup: false + showPopup: false, + expandedAccordion: null }; + + this.togglePopup = this.togglePopup.bind(this); } componentDidMount() { @@ -351,7 +357,7 @@ class Problem extends React.Component { }; submitFeedback = () => { - const { problem } = this.props; + const problem = this.state.currProblem; console.debug("problem when submitting feedback", problem); this.context.firebase.submitFeedback( @@ -427,6 +433,14 @@ class Problem extends React.Component { return [oerLink, oerName, licenseLink, licenseName]; }; + accordionChange = (panel) => (event, isExpanded) => { + this.setState({ + expandedAccordion: isExpanded + ? panel + : null, + }); + }; + render() { const { translate } = this.props; const { classes, problem, seed } = this.props; @@ -439,146 +453,183 @@ class Problem extends React.Component { return ( <> -
-
- - -

- {renderText( - problem.title, - problem.id, - chooseVariables( - problem.variabilization, - seed - ), - this.context - )} -
-

-
- {renderText( - problem.body, - problem.id, - chooseVariables( - problem.variabilization, - seed - ), - this.context - )} +
+
+
+ + +
+
+ {renderText( + problem.title, + problem.id, + chooseVariables( + problem.variabilization, + seed + ), + this.context + )} + +
- -
- -
-
-
- {problem.steps.map((step, idx) => ( - - - - ))} -
-
- {this.context.debug ? ( - - - - -
+ +
+ {problem.steps.map((step, idx) => ( + + + + ))} +
+
+ {this.context.debug ? ( + + + + - {translate('problem.PreviousProblem')} - - + + + + + + + + + + - - - + - - - - - ) : ( - - - - - + - - - )} + + )} +
+
)}
-
- + */}
- {this.state.showFeedback ? ( -
+ + + {/* {this.state.showFeedback ? ( +

{translate('problem.Feedback')}

@@ -763,7 +826,8 @@ class Problem extends React.Component {
) : ( "" - )} + )} */} +
); diff --git a/src/components/problem-layout/ProblemCard.js b/src/components/problem-layout/ProblemCard.js index a6a0408cbab..25d920b5ca7 100644 --- a/src/components/problem-layout/ProblemCard.js +++ b/src/components/problem-layout/ProblemCard.js @@ -36,6 +36,16 @@ import { joinList } from "../../util/formListString"; import withTranslation from "../../util/withTranslation.js" import CryptoJS from "crypto-js"; +import fileCheck from "../../assets/file-check-02.svg" +import stars from "../../assets/stars-02.svg" +import teacherGuide from "../../assets/teacher guidance-cropped.svg" + +import clsx from 'clsx'; +import {Accordion, AccordionSummary, AccordionDetails, typography} from "@material-ui/core"; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; + +import withWidth from '@material-ui/core/withWidth'; + class ProblemCard extends React.Component { static contextType = ThemeContext; @@ -146,6 +156,7 @@ class ProblemCard extends React.Component { // When we are currently streaming the response from ChatGPT, this variable is `true` isGeneratingHint: false, lastAIHintHash: null, + answerSelected: false, }; // This is used for AI hint generation @@ -297,6 +308,7 @@ class ProblemCard extends React.Component { this.setState(({ isCorrect }) => ({ inputVal, isCorrect: isCorrect ? true : null, + answerSelected: inputVal.trim() !== "" })); }; @@ -615,11 +627,21 @@ class ProblemCard extends React.Component { const { isCorrect } = this.state; const { debug, use_expanded_view } = this.context; + const isMobile = this.props.width === "xs"; + const problemAttempted = isCorrect != null; return ( - - + //
+ +

{renderText( this.step.stepTitle, @@ -637,218 +659,320 @@ class ProblemCard extends React.Component {

-
- {renderText( - this.step.stepBody, - problemID, - chooseVariables( - Object.assign( - {}, - problemVars, - this.step.variabilization - ), - seed - ), - this.context - )} -
- {(this.state.activeHintType === "normal" || (debug && use_expanded_view)) && - this.showHints && ( -
- - + {renderText( + this.step.stepBody, + problemID, + chooseVariables( + Object.assign( + {}, + problemVars, + this.step.variabilization + ), + seed + ), + this.context + )} +
+ {(this.state.activeHintType === "normal" || (debug && use_expanded_view)) && + this.showHints && ( +
+ + + + +
+ )} + +
+ - - + ), + this.props.seed + )} + allowRetry={this.allowRetry} + giveStuFeedback={this.giveStuFeedback} + showCorrectness={this.showCorrectness} + classes={classes} + state={this.state} + step={this.step} + seed={this.props.seed} + keepMCOrder={this.props.keepMCOrder} + keyboardType={this.props.keyboardType} + _setState={(state) => this.setState(state)} + context={this.context} + editInput={this.editInput} + setInputValState={this.setInputValState} + handleKey={this.handleKey} + index={this.props.index} + />
- )} +
-
- this.setState(state)} - context={this.context} - editInput={this.editInput} - setInputValState={this.setInputValState} - handleKey={this.handleKey} - index={this.props.index} - /> -
- - - - - - {this.showHints && ( -
- - + + + {/* + {this.showHints && ( +
+ + + - -
- )} -
- -
- -
-
- -
+ hintToggle + + + +
+ )} +
*/} + + + - {(!this.showCorrectness || - !this.allowRetry) && ( - + + + + + {(!this.showCorrectness || + !this.allowRetry) && ( Green Checkmark Icon )} - {this.state.isCorrect === false && - this.showCorrectness && - this.allowRetry && ( - Green Checkmark Icon + )} + {this.state.isCorrect === false && + this.showCorrectness && + this.allowRetry && ( + Red X Icon + )} + + + + + + {/* + + */} + +
- - - - -
+ > + +
+ Teacher Guidance +
+ Teacher Guidance + + + + + + //
); } } -export default withStyles(styles)(withTranslation(ProblemCard)); +export default withWidth()(withStyles(styles)(withTranslation(ProblemCard))); diff --git a/src/components/problem-layout/ViewAllProblems.js b/src/components/problem-layout/ViewAllProblems.js index b2d95790b40..967a59acb9c 100644 --- a/src/components/problem-layout/ViewAllProblems.js +++ b/src/components/problem-layout/ViewAllProblems.js @@ -25,6 +25,12 @@ import { findLessonById, ThemeContext, SHOW_COPYRIGHT, SITE_NAME } from '../../c import { CONTENT_SOURCE } from '@common/global-config'; import withTranslation from '../../util/withTranslation.js'; +import userIcon from "../../assets/UserThumb.svg"; +import FeedbackOutlinedIcon from "@material-ui/icons/FeedbackOutlined"; +import leftArrow from "../../assets/chevron-left.svg"; + +import { withRouter } from 'react-router-dom'; + const useStyles = makeStyles(theme => ({ root: { backgroundColor: theme.palette.background.default, @@ -47,6 +53,7 @@ const useStyles = makeStyles(theme => ({ '& div[width="100%"]': { display: 'none', }, + paddingRight: theme.spacing(8), }, loadingBox: { textAlign: 'center', @@ -73,7 +80,7 @@ const useStyles = makeStyles(theme => ({ const BATCH_SIZE = 3; -const ViewAllProblems = ({ translate }) => { +const ViewAllProblems = ({ translate, history }) => { const classes = useStyles(); const { lessonID } = useParams(); const context = useContext(ThemeContext); @@ -85,6 +92,10 @@ const ViewAllProblems = ({ translate }) => { const [showPopup, setShowPopup] = useState(false); const [seed] = useState(() => Date.now().toString()); + const studentNameDisplay = context.studentName + ? decodeURIComponent(context.studentName) + : translate('platform.LoggedIn'); + // no-op handlers for ProblemWrapper const displayMastery = () => {}; const problemComplete = () => {}; @@ -139,25 +150,113 @@ const ViewAllProblems = ({ translate }) => { : String(lesson.topics) : ''; + const togglePopup = () => setShowPopup(prev => !prev); + return ( - + + + - + + - - {lesson?.name}{topicsText && `: ${topicsText}`} + + +
+ User Icon +
+ {studentNameDisplay} +
+
- +
- + + + + +
+ history.goBack()} + aria-label = "Back" + > + Back Arrow + + +
+
+ + + +
+ + + + + +
+ + + + +
+ +
+
+
+ + + {visibleProblems.length ? visibleProblems.map(problem => ( {/* ID badge */} - + {problem.id} @@ -186,16 +285,16 @@ const ViewAllProblems = ({ translate }) => { {SHOW_COPYRIGHT && `© ${new Date().getFullYear()} ${SITE_NAME}`} - setShowPopup(true)} title={`About ${SITE_NAME}`}> + {/* setShowPopup(true)} title={`About ${SITE_NAME}`}> - + */} - setShowPopup(false)}> + {/* setShowPopup(false)}> - + */} ); }; -export default withTranslation(ViewAllProblems); +export default withTranslation(withRouter(ViewAllProblems)); diff --git a/src/components/problem-layout/common-styles.js b/src/components/problem-layout/common-styles.js index 2af2301ee2e..b3f79de5756 100644 --- a/src/components/problem-layout/common-styles.js +++ b/src/components/problem-layout/common-styles.js @@ -1,9 +1,8 @@ const styles = theme => ({ card: { - width: '65%', marginLeft: 'auto', marginRight: 'auto', - marginBottom: 20 + marginBottom: 32, }, hintCard: { width: '40em', @@ -24,7 +23,6 @@ const styles = theme => ({ }, button: { - backgroundColor: '#8c94ff', marginLeft: 'auto', marginRight: 'auto', paddingLeft: 10, @@ -36,14 +34,14 @@ const styles = theme => ({ //textAlign: 'center', fontSize: 20, marginTop: 0, - marginLeft: 10 + marginBottom: 20 + //marginLeft: 10 }, stepBody: { //textAlign: 'center', fontSize: 20, marginTop: 10, - marginBottom: 30, marginLeft: 10 }, @@ -80,7 +78,8 @@ const styles = theme => ({ }, paper: { - padding: theme.spacing(3, 2), + padding: theme.spacing(2, 2), + boxShadow: "0 4px 4px rgba(0, 0, 0, 0.08)", }, // Problem @@ -88,23 +87,24 @@ const styles = theme => ({ marginLeft: 0, marginRight: 0, marginTop: 20, - textAlign: 'center', + marginBottom: 32, + textAlign: 'left', fontSize: 20, - fontFamily: 'Titillium Web, sans-serif', + fontFamily: 'Titillium Web, Inter, sans-serif', }, titleCard: { - width: '75%', marginLeft: 'auto', marginRight: 'auto', paddingBottom: 0, }, problemHeader: { - fontSize: 25, + fontSize: 22, + fontWeight: 700, marginTop: 0, }, problemBody: { - fontSize: 20, - marginTop: 10, + fontSize: 18, + marginTop: 0, }, problemStepHeader: { fontSize: 25, @@ -156,8 +156,35 @@ const styles = theme => ({ '&:focus-within': { border: "1px solid GoldenRod", }, - } + }, + + toolbarOffset: theme.mixins.toolbar, + + secondBarOffset: { + top: 56, + [theme.breakpoints.up("sm")]: { + top: 64, + }, + position: 'fixed', + zIndex: theme.zIndex.appBar, + }, + + drawerPaper: { + top: 112, + height: 'calc(100vh - 112px)', + [theme.breakpoints.up('sm')]: { + top: 120, + height: 'calc(100vh - 120px)', + }, + zIndex: theme.zIndex.drawer, + }, + + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing(3), + } }); export default styles; diff --git a/src/components/tableOfContents.js b/src/components/tableOfContents.js new file mode 100644 index 00000000000..751e2fd115c --- /dev/null +++ b/src/components/tableOfContents.js @@ -0,0 +1,431 @@ +import React, { useState, useRef, useEffect } from "react"; +import courses from "../content-sources/oatutor/coursePlans.json"; +import Grid from "@material-ui/core/Grid"; + +import GeometryIcon from "../assets/TOC-icon.svg"; +import { CircularProgress, Box, Typography, makeStyles } from '@material-ui/core'; + +import {Accordion, AccordionSummary, AccordionDetails, typography} from "@material-ui/core"; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; + +import {ReactComponent as BookIcon} from "../assets/book-open.svg"; +import LightningBoltIcon from "../assets/zap-blue.svg"; +import GreyLightningBoltIcon from "../assets/zap.svg"; +import CheckMark from "../assets/Circle.svg"; + +import { MASTERY_THRESHOLD } from "../config/config.js"; + +const useStyles = makeStyles(() => ({ + roundedCaps: { + "& .MuiCircularProgress-circle": { + strokeLinecap: "round", + }, + }, + lessonCard: { + backgroundColor: "#ffffff", + padding: "16px", + borderLeft: "4px solid #EBEFF2", + listStyle: "none", + display: "flex", + alignItems: "center", + }, +})); + +// Big numeric ring (course/textbook level) +const MasteryRing = ({ mastery = 0 }) => { + const classes = useStyles(); + const progressPercent = Math.min(100, Math.max(0, mastery * 100)); + + return ( + + + + + + {`${Math.round(progressPercent)}%`} + + + + ); +}; + +const calcGroupProgress = (lessons, masteryMap) => { + if (!Array.isArray(lessons) || lessons.length === 0) return 0; + const completed = lessons.reduce((acc, l) => acc + ((masteryMap?.[l.id] ?? 0) >= MASTERY_THRESHOLD ? 1 : 0), 0); + return completed / lessons.length; // 0..1 +}; + +// LESSON ring in accordion header: empty / half / full based on sublessons +const LessonCompletionRing = ({ progress = 0 }) => { + const classes = useStyles(); + const pct = Math.round(Math.min(100, Math.max(0, progress * 100))); + + + return ( + + {/* background ring */} + + {/* filled to % */} + + {/* center icon */} + + + + + ); +}; + +// SUBLESSON ring (unchanged logic) +const SublessonCompletionRing = ({ mastery }) => { + const progressPercent = Math.min(100, Math.max(0, mastery * 100)); + const wholeMasteryThreshold = Math.min(100, Math.max(0, MASTERY_THRESHOLD * 100)); + const classes = useStyles(); + + let completionStatus; + if (progressPercent < 11) { + completionStatus = "not-started"; + } else if (progressPercent < wholeMasteryThreshold) { + completionStatus = "in-progress"; + } else { + completionStatus = "completed"; + } + + if (completionStatus === "completed") { + return ( + + Lesson Complete + + ); + } + + return ( + + {/* gray ring */} + + {/* half overlay when in progress */} + {completionStatus === "in-progress" && ( + + )} + {/* center icon */} + + {completionStatus === "not-started" && ( + Sublesson Greyed Icon + )} + {completionStatus === "in-progress" && ( + Sublesson Completion Icon + )} + + + ); +}; + +// Utility: derive header status from its sublessons +const calcGroupStatus = (lessons, masteryMap) => { + if (!Array.isArray(lessons) || lessons.length === 0) return "not-started"; + const toPct = (id) => Math.min(100, Math.max(0, (masteryMap?.[id] ?? 0) * 100)); + const threshPct = Math.min(100, Math.max(0, MASTERY_THRESHOLD * 100)); + + let started = 0; + let completed = 0; + for (const l of lessons) { + const pct = toPct(l.id); + if (pct >= 11) started += 1; + if (pct >= threshPct) completed += 1; + } + if (completed === lessons.length) return "completed"; + if (started > 0) return "in-progress"; + return "not-started"; +}; + +const TableOfContents = ({ + courseName, + courseMastery = 0, // big ring (0..1) + mastery = {}, // per-sublesson mastery map: { [lessonId]: 0..1 } + onLessonClick, + selectedLessonId, + drawerOpen +}) => { + const coursePlansFiltered = courses.filter( + (course) => courseName && course.courseName === courseName + ); + const classes = useStyles(); + const selectedLessonRef = useRef(null); + + const lessonPlans = []; + for (let i = 0; i < coursePlansFiltered.length; i++) { + const course = coursePlansFiltered[i]; + for (let j = 0; j < course.lessons.length; j++) { + lessonPlans.push({ ...course.lessons[j], courseName: course.courseName }); + } + } + + const totalSublessons = lessonPlans.length; + + const completedSublessons = lessonPlans.reduce((sum, l) => { + const m = (mastery && typeof mastery[l.id] === "number") ? mastery[l.id] : 0; + return sum + (m >= MASTERY_THRESHOLD ? 1 : 0); + }, 0); + + const courseCompletionRatio = totalSublessons > 0 + ? completedSublessons / totalSublessons + : 0; + + const getLessonGroup = (title) => { + const match = title.match(/Lesson\s*(\d+)\.\d+/i); + return match ? `Lesson ${match[1]}` : "Other"; + }; + + const getLessonStatus = (lessons) => { + if (!lessons || lessons.length === 0) return "not-started"; + + let anyStarted = false; + let allCompleted = true; + + for (const l of lessons) { + const m = (mastery && typeof mastery[l.id] === "number") ? mastery[l.id] : 0; // mastery is per-sublesson (lesson row) + const pct = Math.min(100, Math.max(0, m * 100)); + + if (pct >= 11) anyStarted = true; + if (pct < (MASTERY_THRESHOLD * 100)) allCompleted = false; + } + + if (allCompleted) return "completed"; + if (anyStarted) return "in-progress"; + return "not-started"; + }; + + const groupedLessons = {}; + lessonPlans.forEach((lesson) => { + const title = lesson.name || lesson.topics || " "; + const group = getLessonGroup(title); + if (!groupedLessons[group]) groupedLessons[group] = []; + groupedLessons[group].push(lesson); + }); + + const selectedLesson = lessonPlans.find(l => l.id === selectedLessonId); + const selectedGroup = selectedLesson + ? getLessonGroup(selectedLesson.name || selectedLesson.topics || " ") + : null; + + const [expanded, setExpanded] = useState(selectedGroup || false); + useEffect(() => { + if (!selectedGroup) return; + setExpanded(selectedGroup); + }, [selectedGroup]); + + useEffect(() => { + if (!drawerOpen) return; + if (expanded !== selectedGroup) return; // wait until the group is open + if (selectedLessonRef.current) { + selectedLessonRef.current.scrollIntoView({ behavior: "smooth", block: "center" }); + } + }, [drawerOpen, expanded, selectedGroup, selectedLessonId]); + + const handleChange = (panel) => (event, isExpanded) => { + setExpanded(isExpanded ? panel : false); + }; + + if (!courseName) return
Loading course
; + + return ( + <> + {/* COURSE NAME AND BIG RING */} +
+
+ + Lesson Icon Symbol Geometry + + + +
{courseName}
+
+ + + +
+ + + +
+
+
+ + {/* LESSON ACCORDION CARDS */} +
+ {Object.entries(groupedLessons).map(([groupTitle, lessons], index) => { + const groupStatus = calcGroupStatus(lessons, mastery); + const groupProgress = calcGroupProgress(lessons, mastery); + + return ( + + } + aria-controls={`${groupTitle}-content`} + id={`${groupTitle}-header`} + style={{ + paddingLeft: 12 + 16, + paddingRight: 6 + 16, + height: 62, + borderTop: + expanded === groupTitle || index === 0 + ? "1px solid #E5E7EB" + : "none", + borderBottom: + expanded === groupTitle || + index === Object.entries(groupedLessons).length - 1 + ? "1px solid #E5E7EB" + : "none", + margin: 0, + }} + > +
+ +
{groupTitle}
+
+
+ + + {lessons.map((lesson, i) => { + const isSelected = selectedLessonId === lesson.id; + const sublessonMastery = mastery?.[lesson.id] ?? 0; + + return ( + onLessonClick && onLessonClick(lesson)} + style={{ + marginLeft: "24px", + marginRight: isSelected ? "-16px" : "24px", + cursor: "pointer", + backgroundColor: isSelected ? "#E9F4FB" : "#ffffff", + borderLeft: isSelected ? "4px solid #4C7D9F" : "4px solid #EBEFF2", + fontWeight: isSelected ? 600 : 400, + color: isSelected ? "#4C7D9F" : "#4A4E58", + }} + > +
+ +
{lesson.name} {lesson.topics}
+
+
+ ); + })} +
+
+ ); + })} +
+ + ); +}; + +export default TableOfContents; \ No newline at end of file diff --git a/src/content-sources/oatutor b/src/content-sources/oatutor index 270ce04096a..5e86bf3f97c 160000 --- a/src/content-sources/oatutor +++ b/src/content-sources/oatutor @@ -1 +1 @@ -Subproject commit 270ce04096a39b3412a8e08bc626bdce99c0f495 +Subproject commit 5e86bf3f97cfbf68aac03128dc9f14d405996e16 diff --git a/src/pages/LessonComplete.js b/src/pages/LessonComplete.js new file mode 100644 index 00000000000..93160419c36 --- /dev/null +++ b/src/pages/LessonComplete.js @@ -0,0 +1,58 @@ +import React from "react"; +import { AppBar, Box, Toolbar, Button } from "@material-ui/core"; +import Grid from "@material-ui/core/Grid"; +import Divider from "@material-ui/core/Divider"; +import { useHistory, useParams } from "react-router-dom"; +import BrandLogoNav from "@components/BrandLogoNav"; +import Spacer from "@components/Spacer"; + +const LessonComplete = () => { + const history = useHistory(); + const { lessonID } = useParams(); + + return ( + <> +
+ + + + + + + + + +
+ + +
+

Lesson complete

+

You have finished lesson {lessonID}.

+
+ +
+ + + +
+
+
+
+
+ + ); +}; + +export default LessonComplete; diff --git a/src/platform-logic/Platform.js b/src/platform-logic/Platform.js index 35777e3beea..47e69340b47 100644 --- a/src/platform-logic/Platform.js +++ b/src/platform-logic/Platform.js @@ -6,13 +6,13 @@ import LessonSelectionWrapper from "@components/problem-layout/LessonSelectionWr import { withRouter } from "react-router-dom"; import { - coursePlans, - findLessonById, - LESSON_PROGRESS_STORAGE_KEY, - MIDDLEWARE_URL, - SITE_NAME, - ThemeContext, - MASTERY_THRESHOLD, + coursePlans, + findLessonById, + LESSON_PROGRESS_STORAGE_KEY, + MIDDLEWARE_URL, + SITE_NAME, + ThemeContext, + MASTERY_THRESHOLD, } from "../config/config.js"; import to from "await-to-js"; import { toast } from "react-toastify"; @@ -21,518 +21,894 @@ import BrandLogoNav from "@components/BrandLogoNav"; import { cleanArray } from "../util/cleanObject"; import ErrorBoundary from "@components/ErrorBoundary"; import { CONTENT_SOURCE } from "@common/global-config"; -import withTranslation from '../util/withTranslation'; +import withTranslation from "../util/withTranslation"; + +import userIcon from "../assets/UserThumb.svg"; +import IconButton from "@material-ui/core/IconButton"; +import HelpOutlineOutlinedIcon from "@material-ui/icons/HelpOutlineOutlined"; +import FeedbackOutlinedIcon from "@material-ui/icons/FeedbackOutlined"; +import leftArrow from "../assets/chevron-left.svg"; + +import Popup from "../components/Popup/Popup"; +import About from "../pages/Posts/About.js"; + +import { animateScroll as scroll } from "react-scroll"; +import { chooseVariables } from "../platform-logic/renderText.js"; +import TextField from "@material-ui/core/TextField"; +import Spacer from "../components/Spacer"; +import Button from "@material-ui/core/Button"; + +import ToCButton from "../assets/layoutLeft.svg"; + +import { withStyles } from "@material-ui/core/styles"; +import styles from "../components/problem-layout/common-styles.js"; + +import Drawer from "@material-ui/core/Drawer"; +import TableOfContents from "../components/tableOfContents.js"; + +import withWidth from "@material-ui/core/withWidth"; + +import { ProgressTooltip, InfoTooltip } from "@components/Tooltip"; let problemPool = require(`@generated/processed-content-pool/${CONTENT_SOURCE}.json`); let seed = Date.now().toString(); console.log("Generated seed"); +const TOC_DRAWER_OPEN_KEY = "toc:drawer-open:v1"; + class Platform extends React.Component { - static contextType = ThemeContext; - - constructor(props, context) { - super(props); - - this.problemIndex = { - problems: problemPool, - }; - this.completedProbs = new Set(); - this.lesson = null; - - this.user = context.user || {}; - console.debug("USER: ", this.user) - this.isPrivileged = !!this.user.privileged; - this.context = context; - - // Add each Q Matrix skill model attribute to each step - for (const problem of this.problemIndex.problems) { - for ( - let stepIndex = 0; - stepIndex < problem.steps.length; - stepIndex++ - ) { - const step = problem.steps[stepIndex]; - step.knowledgeComponents = cleanArray( - context.skillModel[step.id] || [] - ); - } - } - if (this.props.lessonID == null) { - this.state = { - currProblem: null, - status: "courseSelection", - seed: seed, - }; - } else { - this.state = { - currProblem: null, - status: "courseSelection", - seed: seed, - }; - } + static contextType = ThemeContext; + + constructor(props, context) { + super(props); + + this.problemIndex = { + problems: problemPool, + }; + this.completedProbs = new Set(); + this.lesson = null; + + this.user = context.user || {}; + this.isPrivileged = !!this.user.privileged; + this.context = context; + const saved = typeof window !== "undefined" ? localStorage.getItem(TOC_DRAWER_OPEN_KEY) : null; + const defaultOpenIfNoPref = Boolean(props.lessonID); + const initialDrawerOpen = saved === null ? defaultOpenIfNoPref : saved === "1"; + + this.state = { + showPopup: false, + feedback: "", + feedbackSubmitted: false, + drawerOpen: initialDrawerOpen, + hasAutoClosedDrawer: false, + }; - this.selectLesson = this.selectLesson.bind(this); + this.togglePopup = this.togglePopup.bind(this); + this.toggleFeedback = this.toggleFeedback.bind(this); + + for (const problem of this.problemIndex.problems) { + for (let stepIndex = 0; stepIndex < problem.steps.length; stepIndex++) { + const step = problem.steps[stepIndex]; + step.knowledgeComponents = cleanArray(context.skillModel[step.id] || []); + } + } + if (this.props.lessonID == null) { + this.state = { + currProblem: null, + status: "courseSelection", + seed: seed, + feedback: "", + feedbackSubmitted: false, + drawerOpen: initialDrawerOpen, + }; + } else { + this.state = { + currProblem: null, + status: "courseSelection", + seed: seed, + feedback: "", + feedbackSubmitted: false, + drawerOpen: initialDrawerOpen, + }; } - componentDidMount() { - this._isMounted = true; - if (this.props.lessonID != null) { - console.log("calling selectLesson from componentDidMount...") - const lesson = findLessonById(this.props.lessonID) - console.debug("lesson: ", lesson) - this.selectLesson(lesson).then( - (_) => { - console.debug( - "loaded lesson " + this.props.lessonID, - this.lesson - ); - } - ); - - const { setLanguage } = this.props; - if (lesson.courseName == 'Matematik 4') { - setLanguage('se') - } else { - const defaultLocale = localStorage.getItem('defaultLocale'); - setLanguage(defaultLocale) - } - } else if (this.props.courseNum != null) { - this.selectCourse(coursePlans[parseInt(this.props.courseNum)]); - } - this.onComponentUpdate(null, null, null); + this.selectLesson = this.selectLesson.bind(this); + } + + componentDidMount() { + this._isMounted = true; + if (this.props.lessonID != null) { + const lesson = findLessonById(this.props.lessonID); + this.selectLesson(lesson).then((_) => {}); + const { setLanguage } = this.props; + if (lesson.courseName == "Matematik 4") { + setLanguage("se"); + } else { + const defaultLocale = localStorage.getItem("defaultLocale"); + setLanguage(defaultLocale); + } + } else if (this.props.courseNum != null) { + this.selectCourse(coursePlans[parseInt(this.props.courseNum)]); } + this.onComponentUpdate(null, null, null); + } - componentWillUnmount() { - this._isMounted = false; - this.context.problemID = "n/a"; + componentWillUnmount() { + this._isMounted = false; + this.context.problemID = "n/a"; + } + + componentDidUpdate(prevProps, prevState, snapshot) { + const lessonIdChanged = this.props.lessonID !== prevProps.lessonID && this.props.lessonID != null; + const movedIntoLesson = !Boolean(prevProps.lessonID) && Boolean(this.props.lessonID); + if (lessonIdChanged) { + const lesson = findLessonById(this.props.lessonID); + if (lesson) { + this.selectLesson(lesson).then(() => {}); + } + } + if (movedIntoLesson) { + let saved = null; + try { + saved = localStorage.getItem(TOC_DRAWER_OPEN_KEY); + } catch (e) {} + if (saved === null && !this.state.drawerOpen) { + this.toggleDrawer(true); + } } + this.onComponentUpdate(prevProps, prevState, snapshot); + } - componentDidUpdate(prevProps, prevState, snapshot) { - this.onComponentUpdate(prevProps, prevState, snapshot); + handleLessonClick = (lesson) => { + if (lesson && lesson.id) { + this.props.history.push(`/lessons/${lesson.id}`); } + }; - - onComponentUpdate(prevProps, prevState, snapshot) { - if ( - Boolean(this.state.currProblem?.id) && - this.context.problemID !== this.state.currProblem.id - ) { - this.context.problemID = this.state.currProblem.id; - } - if (this.state.status !== "learning") { - this.context.problemID = "n/a"; - } + onComponentUpdate(prevProps, prevState, snapshot) { + if (Boolean(this.state.currProblem?.id) && this.context.problemID !== this.state.currProblem.id) { + this.context.problemID = this.state.currProblem.id; } - - async selectLesson(lesson, updateServer=true) { - const context = this.context; - console.debug("lesson: ", context) - console.debug("update server: ", updateServer) - console.debug("context: ", context) - if (!this._isMounted) { - console.debug("component not mounted, returning early (1)"); - return; - } - if (this.isPrivileged) { - // from canvas or other LTI Consumers - console.log("valid privilege") - let err, response; - [err, response] = await to( - fetch(`${MIDDLEWARE_URL}/setLesson`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - token: context?.jwt || this.context?.jwt || "", - lesson, - }), - }) - ); - if (err || !response) { - toast.error( - `Error setting lesson for assignment "${this.user.resource_link_title}"` - ); - console.debug(err, response); - return; - } else { - if (response.status !== 200) { - switch (response.status) { - case 400: - const responseText = await response.text(); - let [message, ...addInfo] = responseText.split("|"); - if ( - Array.isArray(addInfo) && - addInfo[0].length > 1 - ) { - addInfo = JSON.parse(addInfo[0]); - } - switch (message) { - case "resource_already_linked": - toast.error( - `${addInfo.from} has already been linked to lesson ${addInfo.to}. Please create a new assignment.`, - { - toastId: - ToastID.set_lesson_duplicate_error.toString(), - } - ); - return; - default: - toast.error(`Error: ${responseText}`, { - toastId: - ToastID.expired_session.toString(), - closeOnClick: true, - }); - return; - } - case 401: - toast.error( - `Your session has either expired or been invalidated, please reload the page to try again.`, - { - toastId: ToastID.expired_session.toString(), - } - ); - this.props.history.push("/session-expired"); - return; - case 403: - toast.error( - `You are not authorized to make this action. (Are you an instructor?)`, - { - toastId: ToastID.not_authorized.toString(), - } - ); - return; - default: - toast.error( - `Error setting lesson for assignment "${this.user.resource_link_title}." If reloading does not work, please contact us.`, - { - toastId: - ToastID.set_lesson_unknown_error.toString(), - } - ); - return; - } - } else { - toast.success( - `Successfully linked assignment "${this.user.resource_link_title}" to lesson ${lesson.id} "${lesson.topics}"`, - { - toastId: ToastID.set_lesson_success.toString(), - } - ); - const responseText = await response.text(); - let [message, ...addInfo] = responseText.split("|"); - this.props.history.push( - `/assignment-already-linked?to=${addInfo.to}` - ); - } - } - } + if (this.state.status !== "learning") { + this.context.problemID = "n/a"; + } + } - this.lesson = lesson; - - const loadLessonProgress = async () => { - const { getByKey } = this.context.browserStorage; - return await getByKey( - LESSON_PROGRESS_STORAGE_KEY(this.lesson.id) - ).catch((err) => {}); - }; - - const [, prevCompletedProbs] = await Promise.all([ - this.props.loadBktProgress(), - loadLessonProgress(), - ]); - if (!this._isMounted) { - console.debug("component not mounted, returning early (2)"); - return; - } - if (prevCompletedProbs) { - console.debug( - "student has already made progress w/ problems in this lesson before", - prevCompletedProbs - ); - this.completedProbs = new Set(prevCompletedProbs); - } - this.setState( - { - currProblem: this._nextProblem( - this.context ? this.context : context - ), - }, - () => { - //console.log(this.state.currProblem); - //console.log(this.lesson); + async selectLesson(lesson, updateServer = true) { + const context = this.context; + if (!this._isMounted) return; + if (this.isPrivileged) { + let err, response; + [err, response] = await to( + fetch(`${MIDDLEWARE_URL}/setLesson`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + token: context?.jwt || this.context?.jwt || "", + lesson, + }), + }) + ); + if (err || !response) { + toast.error(`Error setting lesson for assignment "${this.user.resource_link_title}"`); + return; + } else { + if (response.status !== 200) { + switch (response.status) { + case 400: { + const responseText = await response.text(); + let [message, ...addInfo] = responseText.split("|"); + if (Array.isArray(addInfo) && addInfo[0].length > 1) { + addInfo = JSON.parse(addInfo[0]); + } + switch (message) { + case "resource_already_linked": + toast.error(`${addInfo.from} has already been linked to lesson ${addInfo.to}. Please create a new assignment.`, { + toastId: ToastID.set_lesson_duplicate_error.toString(), + }); + return; + default: + toast.error(`Error: ${responseText}`, { + toastId: ToastID.expired_session.toString(), + closeOnClick: true, + }); + return; + } } - ); + case 401: + toast.error(`Your session has either expired or been invalidated, please reload the page to try again.`, { + toastId: ToastID.expired_session.toString(), + }); + this.props.history.push("/session-expired"); + return; + case 403: + toast.error(`You are not authorized to make this action. (Are you an instructor?)`, { + toastId: ToastID.not_authorized.toString(), + }); + return; + default: + toast.error( + `Error setting lesson for assignment "${this.user.resource_link_title}." If reloading does not work, please contact us.`, + { + toastId: ToastID.set_lesson_unknown_error.toString(), + } + ); + return; + } + } else { + toast.success(`Successfully linked assignment "${this.user.resource_link_title}" to lesson ${lesson.id} "${lesson.topics}"`, { + toastId: ToastID.set_lesson_success.toString(), + }); + const responseText = await response.text(); + let [message, ...addInfo] = responseText.split("|"); + this.props.history.push(`/assignment-already-linked?to=${addInfo.to}`); + } + } } - selectCourse = (course, context) => { - this.course = course; - this.setState({ - status: "lessonSelection", - }); + this.lesson = lesson; + + const loadLessonProgress = async () => { + const { getByKey } = this.context.browserStorage; + return await getByKey(LESSON_PROGRESS_STORAGE_KEY(this.lesson.id)).catch((err) => {}); }; - _nextProblem = (context) => { - seed = Date.now().toString(); - this.setState({ seed: seed }); - this.props.saveProgress(); - const problems = this.problemIndex.problems.filter( - ({ courseName }) => !courseName.toString().startsWith("!!") - ); - let chosenProblem; - - console.debug( - "Platform.js: sample of available problems", - problems.slice(0, 10) - ); - - for (const problem of problems) { - // Calculate the mastery for this problem - let probMastery = 1; - let isRelevant = false; - for (const step of problem.steps) { - if (typeof step.knowledgeComponents === "undefined") { - continue; - } - for (const kc of step.knowledgeComponents) { - if (typeof context.bktParams[kc] === "undefined") { - console.log("BKT Parameter " + kc + " does not exist."); - continue; - } - if (kc in this.lesson.learningObjectives) { - isRelevant = true; - } - // Multiply all the mastery priors - if (!(kc in context.bktParams)) { - console.log("Missing BKT parameter: " + kc); - } - probMastery *= context.bktParams[kc].probMastery; - } - } - if (isRelevant) { - problem.probMastery = probMastery; - } else { - problem.probMastery = null; - } + const [, prevCompletedProbs] = await Promise.all([this.props.loadBktProgress(), loadLessonProgress()]); + if (!this._isMounted) return; + if (prevCompletedProbs) { + this.completedProbs = new Set(prevCompletedProbs); + } + this.setState({ + currProblem: this._nextProblem(this.context ? this.context : context), + }); + } + + selectCourse = (course, context) => { + this.course = course; + this.setState({ + status: "lessonSelection", + selectedCourse: course, + }); + }; + + _nextProblem = (context) => { + seed = Date.now().toString(); + this.setState({ seed: seed }); + this.props.saveProgress(); + const problems = this.problemIndex.problems.filter(({ courseName }) => !courseName.toString().startsWith("!!")); + let chosenProblem; + + for (const problem of problems) { + let probMastery = 1; + let isRelevant = false; + for (const step of problem.steps) { + if (typeof step.knowledgeComponents === "undefined") continue; + for (const kc of step.knowledgeComponents) { + if (typeof context.bktParams[kc] === "undefined") continue; + if (kc in this.lesson.learningObjectives) { + isRelevant = true; + } + if (!(kc in context.bktParams)) continue; + probMastery *= context.bktParams[kc].probMastery; } + } + if (isRelevant) { + problem.probMastery = probMastery; + } else { + problem.probMastery = null; + } + } + + chosenProblem = context.heuristic(problems, this.completedProbs); + + const objectives = Object.keys(this.lesson.learningObjectives); + let score = objectives.reduce((x, y) => { + return x + context.bktParams[y].probMastery; + }, 0); + score /= objectives.length; + this.displayMastery(score); - console.debug( - `Platform.js: available problems ${problems.length}, completed problems ${this.completedProbs.size}` - ); + if (!Object.keys(context.bktParams).some((skill) => context.bktParams[skill].probMastery <= MASTERY_THRESHOLD)) { + this.setState({ status: "graduated" }); + return null; + } else if (chosenProblem == null) { + if (this.lesson && !this.lesson.allowRecycle) { + this.setState({ status: "exhausted" }); + return null; + } else { + this.completedProbs = new Set(); chosenProblem = context.heuristic(problems, this.completedProbs); - console.debug("Platform.js: chosen problem", chosenProblem); - - const objectives = Object.keys(this.lesson.learningObjectives); - console.debug("Platform.js: objectives", objectives); - let score = objectives.reduce((x, y) => { - return x + context.bktParams[y].probMastery; - }, 0); - score /= objectives.length; - this.displayMastery(score); - //console.log(Object.keys(context.bktParams).map((skill) => (context.bktParams[skill].probMastery <= this.lesson.learningObjectives[skill]))); - - // There exists a skill that has not yet been mastered (a True) - // Note (number <= null) returns false - if ( - !Object.keys(context.bktParams).some( - (skill) => - context.bktParams[skill].probMastery <= MASTERY_THRESHOLD - ) - ) { - this.setState({ status: "graduated" }); - console.log("Graduated"); - return null; - } else if (chosenProblem == null) { - console.debug("no problems were chosen"); - // We have finished all the problems - if (this.lesson && !this.lesson.allowRecycle) { - // If we do not allow problem recycle then we have exhausted the pool - this.setState({ status: "exhausted" }); - return null; - } else { - this.completedProbs = new Set(); - chosenProblem = context.heuristic( - problems, - this.completedProbs - ); - } - } + } + } - if (chosenProblem) { - this.setState({ currProblem: chosenProblem, status: "learning" }); - // console.log("Next problem: ", chosenProblem.id); - console.debug("problem information", chosenProblem); - this.context.firebase.startedProblem( - chosenProblem.id, - chosenProblem.courseName, - chosenProblem.lesson, - this.lesson.learningObjectives - ); - return chosenProblem; - } else { - console.debug("still no chosen problem..? must be an error"); + if (chosenProblem) { + this.setState({ currProblem: chosenProblem, status: "learning" }); + this.context.firebase.startedProblem( + chosenProblem.id, + chosenProblem.courseName, + chosenProblem.lesson, + this.lesson.learningObjectives + ); + return chosenProblem; + } + }; + + problemComplete = async (context) => { + this.completedProbs.add(this.state.currProblem.id); + const { setByKey } = this.context.browserStorage; + await setByKey(LESSON_PROGRESS_STORAGE_KEY(this.lesson.id), this.completedProbs).catch((error) => { + this.context.firebase.submitSiteLog( + "site-error", + `componentName: Platform.js`, + { + errorName: error.name || "n/a", + errorCode: error.code || "n/a", + errorMsg: error.message || "n/a", + errorStack: error.stack || "n/a", + }, + this.state.currProblem.id + ); + }); + this._nextProblem(context); + }; + + displayMastery = (mastery) => { + this.setState({ mastery: mastery }); + if (mastery >= MASTERY_THRESHOLD) { + toast.success("You've successfully completed this assignment!", { + toastId: ToastID.successfully_completed_lesson.toString(), + }); + } + }; + + togglePopup() { + this.setState((prevState) => ({ + showPopup: !prevState.showPopup, + })); + } + + submitFeedback = () => { + const problem = this.state.currProblem; + this.context.firebase.submitFeedback( + problem.id, + this.state.feedback, + this.state.problemFinished, + chooseVariables(problem.variabilization, this.props.seed), + problem.courseName, + problem.steps, + problem.lesson + ); + this.setState({ feedback: "", feedbackSubmitted: true }); + }; + + toggleFeedback = () => { + this.setState( + (prevState) => ({ + showFeedback: !prevState.showFeedback, + }), + () => { + if (this.state.showFeedback && !this.state.showpopup) { + scroll.scrollToBottom({ duration: 500, smooth: true }); } - }; + } + ); + }; - problemComplete = async (context) => { - this.completedProbs.add(this.state.currProblem.id); - const { setByKey } = this.context.browserStorage; - await setByKey( - LESSON_PROGRESS_STORAGE_KEY(this.lesson.id), - this.completedProbs - ).catch((error) => { - this.context.firebase.submitSiteLog( - "site-error", - `componentName: Platform.js`, - { - errorName: error.name || "n/a", - errorCode: error.code || "n/a", - errorMsg: error.message || "n/a", - errorStack: error.stack || "n/a", - }, - this.state.currProblem.id - ); - }); - this._nextProblem(context); - }; + toggleDrawer = (open) => { + try { + localStorage.setItem(TOC_DRAWER_OPEN_KEY, open ? "1" : "0"); + } catch (e) {} + this.setState({ drawerOpen: open, hasAutoClosedDrawer: false }); + }; + + getLessonMasteryMap = (courseName) => { + if (!courseName) return {}; + const course = coursePlans.find((c) => c.courseName === courseName); + if (!course) return {}; - displayMastery = (mastery) => { - this.setState({ mastery: mastery }); - if (mastery >= MASTERY_THRESHOLD) { - toast.success("You've successfully completed this assignment!", { - toastId: ToastID.successfully_completed_lesson.toString(), - }); + const map = {}; + for (const lesson of course.lessons) { + const kcs = Object.keys(lesson.learningObjectives || {}); + if (kcs.length === 0) { + map[lesson.id] = 0; + continue; + } + let sum = 0; + let count = 0; + for (const kc of kcs) { + const m = this.context?.bktParams?.[kc]?.probMastery; + if (typeof m === "number" && !Number.isNaN(m)) { + sum += m; + count += 1; } + } + map[lesson.id] = count ? sum / count : 0; + } + return map; + }; + + render() { + const { translate } = this.props; + const { showPopup } = this.state; + const { classes } = this.props; + const drawerWidth = 356; + + this.studentNameDisplay = this.context.studentName ? decodeURIComponent(this.context.studentName) : translate("platform.LoggedIn"); + + const tocCourseName = this.state.selectedCourse?.courseName || findLessonById(this.props.lessonID)?.courseName; + + const lessonMasteryMap = this.getLessonMasteryMap(tocCourseName); + const inLesson = Boolean(this.props.lessonID); + + // Shared, centered max-width container for BOTH progress area and problem area + const CONTAINER_MAX_WIDTH = 1032; + const CONTAINER_STYLE = { + maxWidth: CONTAINER_MAX_WIDTH, + width: "100%", + margin: "0 auto", + padding: "0 16px", + boxSizing: "border-box", }; + const PROGRESS_GAP = 20; // keep the same spacing you had before + const MAX_PROGRESS_BAR_WIDTH = 602; + const MIN_PROGRESS_BAR_WIDTH = 200; - render() { - const { translate } = this.props; - this.studentNameDisplay = this.context.studentName - ? decodeURIComponent(this.context.studentName) + " | " - : translate('platform.LoggedIn') + " | "; - return ( -
- - - + {inLesson && ( + +
+ this.toggleDrawer(false)}> + Table of Contents + + + +
+
+ )} + +
+ + + + + + + + +
+ User Icon +
{this.studentNameDisplay}
+
+
+
+
+
+ +
+ + + + + + {this.state.selectedCourse ? ( +
+ this.props.history.goBack()} aria-label="Back"> + Back Arrow + + +
{this.state.selectedCourse.courseName}
+
+ ) : findLessonById(this.props.lessonID) ? ( +
+ this.props.history.goBack()} aria-label="Back"> + Back Arrow + + +
{findLessonById(this.props.lessonID).courseName}
+
+ ) : ( + "" + )} +
+ + +
+ + + + + {this.state.status === "learning" && ( + + + + )} +
+ + + +
+
+
+
+ +
+ +
+ {this.state.status === "learning" ? ( + + + + {!this.state.drawerOpen && ( + this.toggleDrawer(true)} + disabled={this.state.drawerOpen} + style={{ position: "absolute", left: 24, top: "50%", transform: "translateY(-50%)" }} + > + Table of Contents + + )} + + +
+ {/* One centered row, 3 columns: [label] [bar (min..max)] [info] */} +
- - - - -
+ Mastery Icon + + Lesson Mastery: {Math.round((this.state.mastery || 0) * 100)}% + +
+ + {/* Middle: progress bar (cannot collapse; capped at MAX_PROGRESS_BAR_WIDTH) */} +
+ +
- {Boolean( - findLessonById(this.props.lessonID) - ) - ? findLessonById(this.props.lessonID) - .name + - " " + - findLessonById(this.props.lessonID) - .topics - : ""} + > +
Learning Objectives:
+ {(() => { + const keys = Object.keys(this.lesson?.learningObjectives || {}); + const mastered = keys.filter( + (k) => (this.context.bktParams[k]?.probMastery ?? 0) >= MASTERY_THRESHOLD + ).length; + return ( +
+ +
+ {mastered}/{keys.length} +
+
+ ); + })()} +
+ + {Object.entries(this.lesson?.learningObjectives || {}).map(([kc]) => { + const mastery = this.context.bktParams[kc]?.probMastery ?? 0; + const pct = Math.round(mastery * 100); + const label = kc.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()); + return ( +
+
+
+ {label} +
+
+ {pct}% +
+
+ +
+
+
+
+ ); + })}
- - + } + > + {/* Track fills the minmax column width (never 0, never > MAX) */} +
- {this.state.status !== "courseSelection" && - this.state.status !== "lessonSelection" && - (this.lesson.showStuMastery == null || - this.lesson.showStuMastery) - ? this.studentNameDisplay + - translate('platform.Mastery') + - Math.round(this.state.mastery * 100) + - "%" - : ""} + style={{ + width: `${Math.round((this.state.mastery || 0) * 100)}%`, + height: "100%", + backgroundColor: "#67CDBC", + borderRadius: 18, + transition: "width 0.3s ease", + }} + /> +
+ +
+ + {/* Right: info icon */} + +
+ What is Mastery?
-
- - - - {this.state.status === "courseSelection" ? ( - - ) : ( - "" - )} - {this.state.status === "lessonSelection" ? ( - - ) : ( - "" - )} - {this.state.status === "learning" ? ( - - - - ) : ( - "" - )} - {this.state.status === "exhausted" ? ( -
-

- Thank you for learning with {SITE_NAME}. You have - finished all problems. -

-
- ) : ( - "" - )} - {this.state.status === "graduated" ? ( -
-

- Thank you for learning with {SITE_NAME}. You have - mastered all the skills for this session! -

-
+
+ Mastery estimates your understanding based on lesson objectives completed. +
+
+ } + > + Info + +
+
+
+
+
+
+ ) : ( + "" + )} + + {this.state.status === "courseSelection" ? ( + + ) : ( + "" + )} + {this.state.status === "lessonSelection" ? ( + + ) : ( + "" + )} + {this.state.status === "learning" ? ( + +
+ +
+
+ ) : ( + "" + )} + {this.state.status === "exhausted" ? ( +
+

Thank you for learning with {SITE_NAME}. You have finished all problems.

+
+ ) : ( + "" + )} + {this.state.status === "graduated" ? ( +
+

Thank you for learning with {SITE_NAME}. You have mastered all the skills for this session!

+
+ ) : ( + "" + )} + + {this.state.showFeedback && ( +
+
+

{translate("problem.Feedback")}

+
+
+
+
{this.state.feedbackSubmitted ? translate("problem.Thanks") : translate("problem.Description")}
+
+ {this.state.feedbackSubmitted ? ( + + ) : ( + + + + this.setState({ feedback: event.target.value })} + className={classes.textField} + margin="normal" + variant="outlined" + />{" "} + + + + )} +
+ {this.state.feedbackSubmitted ? ( + "" ) : ( - "" +
+ + + + + + + +
)} -
- ); - } +
+ )} +
+
+ + ); + } } -export default withRouter(withTranslation(Platform)); +export default withWidth()(withStyles(styles)(withRouter(withTranslation(Platform)))); diff --git a/src/theme.js b/src/theme.js new file mode 100644 index 00000000000..4bd77c41b1d --- /dev/null +++ b/src/theme.js @@ -0,0 +1,92 @@ +import {createTheme, responsiveFontSizes} from '@material-ui/core/styles'; + +let theme = createTheme({ + palette: { + type: 'light', + primary: { + main: '#4C7D9F', //dark blue color + contrastText: '#ffffff', + }, + secondary: { + main: '#ecbc5c', //yellow + }, + background: { + default: '#F6F8FA', //light blue-white + }, + text: { + primary: '#1a1a1a', + secondary: '#555', + }, + }, + typography: { + fontFamily: "Titillium Web, Inter, Roboto, sans-serif", + h1: { + fontWeight: 700, + fontSize: '3rem', + }, + body1: { + fontSize: '1rem', + }, + }, + + props: { + MuiButton: { + variant: 'contained', + color: 'primary', + }, + }, + overrides: { + MuiButton: { + root: { + height: 42, + padding: '8px 22px', + fontFamily: 'Inter', + fontSize: '15px', + lineHeight: '26px', + fontWeight: 600, + boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)', + textTransform: 'none', + }, + containedPrimary: { + backgroundColor: '#4C7D9F', + color: '#fff', + '&:hover': { + backgroundColor: '#3F7091', + }, + '&:active': { + backgroundColor: '#4C7D9F', + border: '1px solid #326691', + }, + '&:disabled': { + backgroundColor: '#D1D1D1', + color: '#888', + boxShadow: 'none', + }, + }, + + containedSecondary: { + backgroundColor: '#FFFFFF', + border: '1px solid #81ADCD', + color: '#3F7092', + boxShadow: 'none', + '&:hover': { + backgroundColor: 'rgba(128, 174, 206, 0.10)', + boxShadow: 'none', + }, + '&.active': { + backgroundColor: '#80AECE40', + boxShadow: 'none', + }, + '&:disabled': { + backgroundColor: 'rgba(0, 0, 0, 0.12)', + color: 'rgba(0, 0, 0, 0.38)', + boxShadow: 'none', + }, + } + }, +} + +}); + +theme = responsiveFontSizes(theme); +export {theme}; \ No newline at end of file