From f89858654353d9ab1ca9a2a2a9f758d40f868091 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 5 Nov 2018 15:45:53 -0500 Subject: [PATCH 01/82] configure: bump to 0.9.5 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0382773..66d3649 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([plymouth],[0.9.4],[https://bugs.freedesktop.org/enter_bug.cgi?product=plymouth]) +AC_INIT([plymouth],[0.9.5],[https://bugs.freedesktop.org/enter_bug.cgi?product=plymouth]) AC_CONFIG_SRCDIR(src/main.c) AC_CONFIG_HEADER(config.h) AC_CONFIG_AUX_DIR(build-tools) -- 2.20.1 From 763c023caa5215070047b07c80208b9d99dc8d8b Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 8 Nov 2018 11:05:05 +0000 Subject: [PATCH 02/82] systemd-units: Also add "ConditionVirtualization=!container" in systemd-ask-password-plymouth.path.in This completes the fix for #27 --- systemd-units/systemd-ask-password-plymouth.path.in | 1 + 1 file changed, 1 insertion(+) diff --git a/systemd-units/systemd-ask-password-plymouth.path.in b/systemd-units/systemd-ask-password-plymouth.path.in index c2ee420..826a6b3 100644 --- a/systemd-units/systemd-ask-password-plymouth.path.in +++ b/systemd-units/systemd-ask-password-plymouth.path.in @@ -7,6 +7,7 @@ After=plymouth-start.service Before=basic.target shutdown.target ConditionKernelCommandLine=!plymouth.enable=0 ConditionPathExists=/run/plymouth/pid +ConditionVirtualization=!container [Path] DirectoryNotEmpty=/run/systemd/ask-password -- 2.20.1 From 4de54f598b66cd8d8fc55328f99f3b568cc9d4eb Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 17 Jul 2018 09:46:12 +0200 Subject: [PATCH 03/82] logger: Add a separator between different boot logs Since we concatenate boot logs one after the other in /var/log/boot.log it is hard to tell where the logs from one boot end the next boot starts. This commit makes plymouth write out a separator including a time + date of the date, when the log file gets opened to add new boot messages to it. Note ply_logger_open_file() is only called from ply_terminal_session_open_log() which in turn is only used for /var/log/boot.log, so this only effects /var/log/boot.log. Closes #29 Signed-off-by: Hans de Goede --- src/libply/ply-logger.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/libply/ply-logger.c b/src/libply/ply-logger.c index e9b90de..03dd347 100644 --- a/src/libply/ply-logger.c +++ b/src/libply/ply-logger.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include "ply-utils.h" @@ -312,6 +313,9 @@ bool ply_logger_open_file (ply_logger_t *logger, const char *filename) { + char header[80]; + struct tm* tm; + time_t t; int fd; assert (logger != NULL); @@ -328,6 +332,15 @@ ply_logger_open_file (ply_logger_t *logger, logger->filename = strdup (filename); + time (&t); + tm = localtime (&t); + if (tm) { + /* This uses uname -v date format */ + strftime (header, sizeof(header), + "------------ %a %b %d %T %Z %Y ------------\n", tm); + ply_logger_write (logger, header, strlen(header), true); + } + return true; } -- 2.20.1 From 059390ac569798cbf40a958ea714b15f313b46a3 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sat, 10 Nov 2018 16:04:31 +0100 Subject: [PATCH 04/82] ply-device-manager: Fix race causing undesired creation of non-gfx devs On systems with working drm/kms devices we still sometimes see: "Creating non-graphical devices, since there's no suitable graphics hardware" in the logs (and actually create non-gfx devices). This is caused by a race where the create_devices_from_udev timeout handler runs just after the pivot-root, just at the time when the "udev trigger" from the real root is done. This causes create_devices_for_subsystem() to hit the "it's not initialized" code-path for all drm and fb devices, even though before (from the initrd) drm-devices where already setup successfully. One way of solving this would be to stop the timer as soon as we successfully enumerate the first drm device. But we need the timer to enumerate fb devices so on machines where some outputs only have a fbdev driver (corner case) this would break support for those outputs. Instead this commit moves the found_drm_device and found_fb_device to the global manager state and sets them from create_devices_for_udev_device(). This way they will be set when we check them from the create_devices_from_udev timeout handler even if create_devices_for_subsystem skips over the devices because of the udev trigger race. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 55248ac..d70e709 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -81,6 +81,8 @@ struct _ply_device_manager uint32_t paused : 1; uint32_t device_timeout_elapsed : 1; + uint32_t found_drm_device : 1; + uint32_t found_fb_device : 1; }; static void @@ -254,6 +256,12 @@ create_devices_for_udev_device (ply_device_manager_t *manager, device_path, terminal, renderer_type); + if (created) { + if (renderer_type == PLY_RENDERER_TYPE_DRM) + manager->found_drm_device = 1; + if (renderer_type == PLY_RENDERER_TYPE_FRAME_BUFFER) + manager->found_fb_device = 1; + } } } @@ -818,8 +826,6 @@ create_non_graphical_devices (ply_device_manager_t *manager) static void create_devices_from_udev (ply_device_manager_t *manager) { - bool found_drm_device, found_fb_device; - manager->device_timeout_elapsed = true; if (manager->paused) { @@ -829,10 +835,10 @@ create_devices_from_udev (ply_device_manager_t *manager) ply_trace ("Timeout elapsed, looking for devices from udev"); - found_drm_device = create_devices_for_subsystem (manager, SUBSYSTEM_DRM); - found_fb_device = create_devices_for_subsystem (manager, SUBSYSTEM_FRAME_BUFFER); + create_devices_for_subsystem (manager, SUBSYSTEM_DRM); + create_devices_for_subsystem (manager, SUBSYSTEM_FRAME_BUFFER); - if (found_drm_device || found_fb_device) + if (manager->found_drm_device || manager->found_fb_device) return; ply_trace ("Creating non-graphical devices, since there's no suitable graphics hardware"); -- 2.20.1 From 9639ed895331924b24670ff6f814aaa952ad5b02 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 12 Nov 2018 12:50:33 +0100 Subject: [PATCH 05/82] two-step: Fix animation not starting on later added heads Fix the animation not starting on heads added after show_splash_screen has been called. Since the core calls show_splash_screen after adding the first head / pixel_display in practice this fixes the animation not starting on all monitors other then the first. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 7307e19..924207c 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -1002,10 +1002,12 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, (ply_pixel_display_draw_handler_t) on_draw, view); if (plugin->is_visible) { - if (view_load (view)) + if (view_load (view)) { ply_list_append_data (plugin->views, view); - else + view_start_progress_animation (view); + } else { view_free (view); + } } else { ply_list_append_data (plugin->views, view); } -- 2.20.1 From 75d93c0f30e7455f817c4705af371c743d0b3913 Mon Sep 17 00:00:00 2001 From: Jakub Steiner Date: Wed, 21 Nov 2018 15:44:39 +0100 Subject: [PATCH 06/82] spinner theme: update - update spinner & lock to current visuals Hans de Goede: Add extra throbber-00##.png files to Makefile.am, small tweak to the new lock image. --- themes/spinner/Makefile.am | 20 ++- themes/spinner/animation-0001.png | Bin 1001 -> 1579 bytes themes/spinner/animation-0002.png | Bin 1008 -> 1573 bytes themes/spinner/animation-0003.png | Bin 1004 -> 1591 bytes themes/spinner/animation-0004.png | Bin 1012 -> 1594 bytes themes/spinner/animation-0005.png | Bin 1023 -> 1624 bytes themes/spinner/animation-0006.png | Bin 1037 -> 1646 bytes themes/spinner/animation-0007.png | Bin 1006 -> 1666 bytes themes/spinner/animation-0008.png | Bin 1003 -> 1634 bytes themes/spinner/animation-0009.png | Bin 1007 -> 1640 bytes themes/spinner/animation-0010.png | Bin 982 -> 1613 bytes themes/spinner/animation-0011.png | Bin 988 -> 1621 bytes themes/spinner/animation-0012.png | Bin 995 -> 1619 bytes themes/spinner/animation-0013.png | Bin 968 -> 1617 bytes themes/spinner/animation-0014.png | Bin 980 -> 1618 bytes themes/spinner/animation-0015.png | Bin 973 -> 1615 bytes themes/spinner/animation-0016.png | Bin 948 -> 1605 bytes themes/spinner/animation-0017.png | Bin 950 -> 1581 bytes themes/spinner/animation-0018.png | Bin 948 -> 1582 bytes themes/spinner/animation-0019.png | Bin 911 -> 1578 bytes themes/spinner/animation-0020.png | Bin 911 -> 1558 bytes themes/spinner/animation-0021.png | Bin 879 -> 1545 bytes themes/spinner/animation-0022.png | Bin 841 -> 1541 bytes themes/spinner/animation-0023.png | Bin 825 -> 1481 bytes themes/spinner/animation-0024.png | Bin 806 -> 1492 bytes themes/spinner/animation-0025.png | Bin 784 -> 1455 bytes themes/spinner/animation-0026.png | Bin 749 -> 1427 bytes themes/spinner/animation-0027.png | Bin 752 -> 1407 bytes themes/spinner/animation-0028.png | Bin 685 -> 1385 bytes themes/spinner/animation-0029.png | Bin 668 -> 1348 bytes themes/spinner/animation-0030.png | Bin 621 -> 1316 bytes themes/spinner/animation-0031.png | Bin 560 -> 1245 bytes themes/spinner/animation-0032.png | Bin 541 -> 1185 bytes themes/spinner/animation-0033.png | Bin 443 -> 1111 bytes themes/spinner/animation-0034.png | Bin 349 -> 1061 bytes themes/spinner/animation-0035.png | Bin 299 -> 981 bytes themes/spinner/animation-0036.png | Bin 83 -> 989 bytes themes/spinner/entry.png | Bin 367 -> 1431 bytes themes/spinner/lock.png | Bin 1896 -> 329 bytes themes/spinner/lock.svg | 283 ++++++++++++++++++++++++++++++ themes/spinner/spinner.blend | Bin 0 -> 737108 bytes themes/spinner/throbber-0001.png | Bin 1001 -> 1578 bytes themes/spinner/throbber-0002.png | Bin 1011 -> 1568 bytes themes/spinner/throbber-0003.png | Bin 1016 -> 1561 bytes themes/spinner/throbber-0004.png | Bin 1019 -> 1570 bytes themes/spinner/throbber-0005.png | Bin 1034 -> 1585 bytes themes/spinner/throbber-0006.png | Bin 1028 -> 1597 bytes themes/spinner/throbber-0007.png | Bin 1006 -> 1629 bytes themes/spinner/throbber-0008.png | Bin 1032 -> 1604 bytes themes/spinner/throbber-0009.png | Bin 1015 -> 1605 bytes themes/spinner/throbber-0010.png | Bin 1001 -> 1601 bytes themes/spinner/throbber-0011.png | Bin 1018 -> 1595 bytes themes/spinner/throbber-0012.png | Bin 1004 -> 1602 bytes themes/spinner/throbber-0013.png | Bin 0 -> 1612 bytes themes/spinner/throbber-0014.png | Bin 0 -> 1601 bytes themes/spinner/throbber-0015.png | Bin 0 -> 1588 bytes themes/spinner/throbber-0016.png | Bin 0 -> 1577 bytes themes/spinner/throbber-0017.png | Bin 0 -> 1572 bytes themes/spinner/throbber-0018.png | Bin 0 -> 1601 bytes themes/spinner/throbber-0019.png | Bin 0 -> 1608 bytes themes/spinner/throbber-0020.png | Bin 0 -> 1583 bytes themes/spinner/throbber-0021.png | Bin 0 -> 1602 bytes themes/spinner/throbber-0022.png | Bin 0 -> 1595 bytes themes/spinner/throbber-0023.png | Bin 0 -> 1603 bytes themes/spinner/throbber-0024.png | Bin 0 -> 1605 bytes themes/spinner/throbber-0025.png | Bin 0 -> 1604 bytes themes/spinner/throbber-0026.png | Bin 0 -> 1605 bytes themes/spinner/throbber-0027.png | Bin 0 -> 1615 bytes themes/spinner/throbber-0028.png | Bin 0 -> 1614 bytes themes/spinner/throbber-0029.png | Bin 0 -> 1588 bytes themes/spinner/throbber-0030.png | Bin 0 -> 1580 bytes 71 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 themes/spinner/lock.svg create mode 100644 themes/spinner/spinner.blend create mode 100644 themes/spinner/throbber-0013.png create mode 100644 themes/spinner/throbber-0014.png create mode 100644 themes/spinner/throbber-0015.png create mode 100644 themes/spinner/throbber-0016.png create mode 100644 themes/spinner/throbber-0017.png create mode 100644 themes/spinner/throbber-0018.png create mode 100644 themes/spinner/throbber-0019.png create mode 100644 themes/spinner/throbber-0020.png create mode 100644 themes/spinner/throbber-0021.png create mode 100644 themes/spinner/throbber-0022.png create mode 100644 themes/spinner/throbber-0023.png create mode 100644 themes/spinner/throbber-0024.png create mode 100644 themes/spinner/throbber-0025.png create mode 100644 themes/spinner/throbber-0026.png create mode 100644 themes/spinner/throbber-0027.png create mode 100644 themes/spinner/throbber-0028.png create mode 100644 themes/spinner/throbber-0029.png create mode 100644 themes/spinner/throbber-0030.png diff --git a/themes/spinner/Makefile.am b/themes/spinner/Makefile.am index e3102b4..2a008cb 100644 --- a/themes/spinner/Makefile.am +++ b/themes/spinner/Makefile.am @@ -54,7 +54,25 @@ dist_theme_DATA = \ throbber-0009.png \ throbber-0010.png \ throbber-0011.png \ - throbber-0012.png + throbber-0012.png \ + throbber-0013.png \ + throbber-0014.png \ + throbber-0015.png \ + throbber-0016.png \ + throbber-0017.png \ + throbber-0018.png \ + throbber-0019.png \ + throbber-0020.png \ + throbber-0021.png \ + throbber-0022.png \ + throbber-0023.png \ + throbber-0024.png \ + throbber-0025.png \ + throbber-0026.png \ + throbber-0027.png \ + throbber-0028.png \ + throbber-0029.png \ + throbber-0030.png MAINTAINERCLEANFILES = Makefile.in spinner.plymouth CLEANFILES = spinner.plymouth diff --git a/themes/spinner/animation-0001.png b/themes/spinner/animation-0001.png index 3819624ea4e32708e4964bd9bf052850d51cac44..6bd823976167325046fb5759916e6883936461a2 100644 GIT binary patch delta 1563 zcmYL}c~H`M7{-5?faDD-w51uES?+R3nn}s7VP2UgR+M52VN!r7M6i~>z$?uR?GOv2 z_Gr7-YCBY{1WnQ1#LlV7i=s8`K+-hZv|Zd|cIJKOnR!0XJm2@P?=bwllfn-K5Q3OZ zLI7|?%`5~srosRKKoLdJMXNbnHh|C0;j!`CIXqq_3op!L;kR)_cmY?+%h@T)#*4Dq zJhl)o6ma-_cHV!AV{+O2txS2hy{!r}Q$@`bv4LO$F$_;6;)6-PL}GZz@^Aui0^Iuj zNn6NmCX~YAu>k@h{NEwIX$xqzF^9iz$;+I9#29v0i_LSN@mATayiDL9!4U|gsk>n` z8}yukG!~oB1~T~^UZ#kX!}lc-vIIh3SCiZpK+Ob_Z6~tx!2ch`5kl@V&KYbR`FFdN z#bpb9X_-8MO#xzXSiw#ZtdXp(BcqChpj>-mT<#Qe@z%xGJMM*&}W-jv7_u zg`T$W57g{hP~YcJFl%_1z)zE$<{;OY4YX00Ur7^U>FHF zFe@j^P`iB0P%AV{v-y0!rPE@uxJQwzn<|K?SD+^3gXSUfMs)YOG711Shqg z6^+&^Q_u-UtOP!Va6uist(ImDTb=4Bf6!Y1o##I=m8f;p;=21LpE@^H<4uZ?%3KDM*1aNj z&>oraI}TN&%|o(t_kH(Mf&K!i0srcZd569{cOE=qnK}jCMFC9lW<+?dy52 zht9f3=Pqh%7-5dn`yyDBXG6%Ry&ZuY=rGU+4(o#rh@VZS@+a#QU#LSaoBYIIRzKc) zyx&MXS$BP-`zF#wqCJJGn2!XLB0s|?!UGYP3&FE>MSomfycz2l<1UWu#igc{p{klO zIONTJJjbP(G5(J$Lv;_cRNnaE=ojU0Ve!Zp+WwM0yA`wbiE%jD{jy~0ZcoCL?&W66 zFtRy6b|pA|^TJuX5-~%ci)ysGSi>H^G;5iim>Q*TyZQBJU1$ST*<*Ku<(0(fIi@KB z+q@e~9@Kr}Ogmz@kRJIVV^UXTGDcUhY)VjPSFI6_t+eY)i)FN)n&qS0s1^S5JVC*d z6l2lJI|rrvO#8EbCQr1+av{S-()hI0=%kK;7Mj|$3F@VInZ3v$+wTMYR^1p;>?U+l zEi_9rT$(u$EaRFoJakcW8v7EA3)UsJM{C!4c+w( zC@*YNJJ-oue_{LzrOH3Q>SO%x{XwnRo2mh4RK0ve)*i=X?%(4fv3NaqDb}BBTs!Jn zncc=J&lm)IRs|(k!zFW+OK;zFI2~W`Y{c0Zy{1(yi{jdiHFmgMC=3Cu-n$xijJ0v2nrr8B%{ZTTjwR+7N#MNsfvLJ2I z2A*Ss?5)S*IQ5I|W!<%;ja$$!9@aAw-w#M*xbVXpD#&Elbi2g83Jn>r`sx-m&Ag6& zlIl}<`*p@bvTO9{ZyUi1+VhG{s`*R0401sl#1o(=8KO$yLv1@NsjF)J%X@(dq8Z| KT55e{hWsydn70i8 delta 980 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 Hu0mjfH5k+} delta 987 zcmV<110?*V4Dbh#BYy+8Nkl_ zkP23$e}yYIqTnAOu3Wjan{J95#fo&HOL3)0>jhh}Hw#+Z8RwRalW8-__aZ}kP(B4520FkmlA5E)DSr=9k^xgd2CPczB-_<+ zpaM()&7OOcK&jx~&J76VhvRt+xKU(h!Mk~2HVo_nEBzE?Lk#GK0t3^wt2=-67QD=;r}lKY-hIXwkLx` z`C5xeD1LLvet-VXwoAZV$jp*^x%{&2gSKbl>|G?x3D*T$wr@&WmxS%bV0tOoKMAY@ z^)O%~-dDr(JHVnOCy|*04)hYU+y{v068Lt2j-;mT%RnY+BMMSGWG=^@ zeZaj*D$`3$r6G#L^$_CNZ-=#uz&(FcLmPcKFdk9b1b+^N;!4QMA~Gw$?|F1oAY>xK zHId^R|5qe6c334Rfd`Vi4o)me+8kJjBD8-7&N*(KT~^pOupRPSkx6U0*E{Y7Nh#jm zsrSj<{Q*a7P%0{6X|+$8ZH(GzLhgYANB@y4+qJ+;eGF^^mnF4!seBB0WI(^^09VU_ zRX1UNQGc;2jSzrJct4i(6ng$EIRv#n5CAmy0KqgcohVF|H-P0~0!pJ!J+^0UFW9b( zG!Z4`v$|Uz*nSW=9`b(!z5}inWkb17Kc9&@kVUx4yW~MPWNbx$IRsp?{f(qQ3L_9X zKOe(Hxu<+CNxEhGSUjKaEq znGARecr20Ml5|ee#Z-PaB%Nk}*MWTztxtio1%)N&(wD$jaehDW@~|2*Y$`q$o^*g; zf%hbB4;W$rJ`N5EcocYiF9vKym<61c^i*xZ2Z_>bl5`39BF4H>aAdSkGvG7e)gb8S z1^cCBWKY-WAX*bR$A7VGKWF>A?VoJF!2hvqKWqENVGU={`U_(I%XE4gBIf`A002ov JPDHLkV1lyb#9jaZ diff --git a/themes/spinner/animation-0003.png b/themes/spinner/animation-0003.png index 3f1fdcdbc5a52c2f7e8d2edd783476c233994613..205380b1ca8e000f19adb89243a71cd48bfa579b 100644 GIT binary patch delta 1575 zcmYLJdpOg39RAH_E~Bh=5kt5MA0c^STZaoyVzzb@f%yoQ6!aWQ7093 zG9*bZn_~!x+;hTCgj`$2=z6Ae&T~G`_w&5Z^SCi1TdAM`IWLh*O`s35tS*uJv<=JM7_a#`A5cU$-Cm zBH|`_!{?Egu3h=p!d(2bw>1}KNpsSeg57@7)vQaV^~;NKn7e7kqP)!TbYm~ZIn5_f z9$)|~gvO-$kF&s4HsU02xfSbzd6wMU^KSApeCg%s+UQ>G0ceBtkoVDGNb>aj`F_ZbayEo&Ys2sXx^}?D-)H?{P^Lw&UsJA35k^lYP2KzS5}{?L`*{d ztg*~Km4_~WG$59qvS8_v;XMuv6A-#Ukt=MQMqt`&#co+WKfegP2s>~H!W0BbOInd+ zw{Oe96JC7Xqln=gSm%M5Dc{(5qqiM4l(Ko9FI`^MP-RqAV>Nl}hbj0>rj?&Zd+*Jq zsrM(EW;Yx~_BXT+m$x(>5=2ks!>I)^R(sp$mwde^P9H9}OC)0Qp~Q7|{M=aW^)=a1 z-NZQ4a9zpW(0zp$;u9V|$m@sb62xjKk!>p|86vjMm(He)HfoIp4BLqB?6E!6ggg?f z5Oq4r9}k^#l#hJFi=@1p2IAKEFqFuJ;az}yJV@t!j16|?o5yHxc(y)dMR-s6`8%3W zU3c*5t)OAs!;qC7YvZegdH(Z;PD^ezO92dCoYByx9#cR}+hegM=EYeFZ`v^ofd!{s z=Sn>sMz52K;(o7!=Kx;v%|&pdT^qax8hO(dZ~Wzsbz1s%N<_v!Qi_@Doc(vCW#9rm zSZ{Eth9%p+|H_S~`^qQ0ZqJbSd3=Si<9YlTrZgp>uKzY6?KohJXPEVS9!D|{bIk7DD60rI39qR;KDWhc7BzN( zXJRch?VD;~Aae@bEuej+DNbs$+`<-T^7qn`&kO~4@@`2(cm9eSVLR8Qy^5|#fL3bd zz{hzL&9cC$+^aOgYH%ho<&A`o7=PSXGy?yM8b3sdD+M55Dx@-^EV7+~e}Muc)uM8K z+E&FlJ$+dIvSK>9$!^@dx^GsiPHfGVbR+uB?-}{$@M{5MmpHCc78?}Oa~p&p1cVYe TD_)@b0s;4(UOU9j!AXAu;oZ(L delta 983 zcmV;|11S8r4D1JxBYy+4Nkl3NG6o#)eGmZJ4d^A-QZ7JA-MX<35Mbwp` z3+Yx@T?vY~6S{ZpFVKbJN(9lZNNEGoUr;exm3xUbxcE7@$EM&j3AODX9pqA7bwVFlL zJ`aIfW)z7+sehxBRLj7Lv>ADCyusa1h8o&}zYiHf}EGS5E zv)}9scSn+r#(u3Bh5jAuB}Rh|nttqtI+=X+LZb;RMnvO~&WC`r`^=jraJQ5XtsVhH zwoiEg0DsB_@#L2QhhbcbwCH1^|CTBpYuZ2W?4fp_f8yL<$o&shMx$0H(?l>?4)YJ!^#at;k z9s@oF-c4tZQo-&6Ujsj@uLG+QakEF}r-1ELy?>=t)FEIiWqDj(1D5t^gZiG@P}kK> zbyfXRJ)iF{tGCq~>Y4m)PJJ$)pHV+iKUQBUY|SsIuc{Z-m(_W7rW*wlIXGItRp1NY z$B5Wbp9elHd^b^`YD@hrtGYcu&Z&zLv8vumB%aMF`zX6>PXOO0RBOOOhxC4wb732} z4S)OsT+Yc^2hIUM04oXgG;l$^nout%^v82f)b<1r5f78=PHNr)-c0A)z~?#tqp-A= zBBH5Y2QDR&XMx{<#k9YZ_0<1Pm|VS|g;WN90G-_%-*2VPHNbdEl-14PZXy z`X2CAL^KNlSd`m{0JxDzm6P|=M+so7uuu_y9}%|>6o8076N!XYxn*Cep2f%=0ZEr`3FgS7)y3x2>k#6002ovPDHLk FV1hEx(;ol; diff --git a/themes/spinner/animation-0004.png b/themes/spinner/animation-0004.png index bfd03b445634b8cc5ec7755643ccc6f7e36c226f..6038af8bd429a28118214dd308533e60107d531a 100644 GIT binary patch delta 1578 zcmYL}eKga19LIm!keD!Tq~s)2i)|Lx?m~Ge#Eq3wVly*~G22wj7+Xap6cuJBbVU{= zd1kB2&?S0MqqN9V4|L_}X1Cqx-h1x%e81;?&inN~@6YG2@2qBnPNoG1(4y@PWB`CR zbor?PdHKcw05~(<4>LU|Q6vB!5kn=xk5i~r0uj!j6X9eE6Hbd_QDfqm5pZS%iArL? z88k|CG>QJ7+J;7vqQgSD-C$Lf@p6?Lfk^`F5J)r}iGwl| zmO}?9R1$zdVE(<^^UI$4sMyLMyU+>Ca65YSPK3(SU-n#87M%e6BenNA1)$3Tf7Oa4I_LkPwg^Wj+~Z*tH~7)cB1VxI z<~RbCrcwZDhfcg^3D2M%jpz2*}sa5t1@>3Qvo6#2o1y^SWlV7F3J&F_GZ z8O8RUl@F|zcV);u9EYFQL@R&+pBvgCy*~QxTX*sM%gfr25JisP6FCf_a`v@#?G3ZV zw>ubPzq9x#hOkX_&I$wqbx$Y5z_GZB(_Jq_CyI{FmHWQ;`IQcyIoMa9J=fg-oWIY? zyVtG7f4)1*=Fkmx{w3D9@exAZ2CPnclB-KfE4LaiFzHjgc>SOCwVCO$cF{|HYT z>K-p1SyXk-Csa|@s&pO>uN~B^mGc)# zUI4}0&##l#5rC*5P)xE94V6AVS+@YGveVsoFvk=yodQp*p>oNK%8nMvxt-Opc;1Z8 z5*OR$Fc2xX9M2^GoPk}S${Q4yCQkg+&ph|}TzOr^eva39yil`}mmv0dcD|{k7(z2( ztM!0L3*1r(L$20qK+Nt**8Wzu>r7?(r7818K(W$6L-BCJ?^MAwmnatVp;EOa;|y-C zB#@@h)`%Lef7xuk)2;Z%b%{yg*O+9FwBRN!-TV2Ao#E0|%mDF-JW$T>E1UA0V9Pcb z3Mx5VauWHt%xH}5e1@a>=5ZReI6icL;8@24$#v4yOpt%+wK3iMW-FF1&I`X_5`-_Q z?W{gZg(L!zT~CZ?y3?eN*!)JSur0)OwpUAhljp*~&RO+ejnkh^1dNX)$VTcLt=@q8 z*E+_r^@l9bkZqAi{hi|O`Abw5>ChJ z5}Q^NtS|ovr`g~`jnz6Y#rlhhhZPWJ6k-@Dk8iOyN!uPab<351B*khIJMy&N7j18w z3l#N4^3-7Th>U5*^H40FGMF{Hl`Fk_VnrCHx-16N0xP!$GA39Qs?43%%LT+bN5n$VMt@G6l#k#8Ws4MWd6d&GvQ< zSXIAoQSK4@6+(E(Eg3JoPBmigD!&x0eS`|VAjCtTXFkqB3~o(@+a)VAu-hD(Rbk>wia-yg{tWm!%L$2g`w5`Xovtng}lm_1n7V8hz- z0OpKKZb01e5I|F9gH@k@xnLjiyny-%?d4gbfjCAGpF(=xXE&bvH+0+E7XSbN delta 991 zcmV<510ejm4D<((BYy+CNklXOcO<>Ou9tF96#O+h=W0 zhD6m`2R4dZGk=@?`|5AI37n5jMFaJm?ea*MEO9BRBJEMF6Syr(pC)zMv~MvaDO4Fo+y0n0(XJM3LW(^GLcLt zdiMX2)IOq0P6Ce>WOR76ENS~dAqupA2exymYj;3}-3@ZBT;oMxqsn@qUJyhWRO?fY zCeS(PDk?9(4m?v6&}WjqI7Y)7tJ!W#+LY~=fsaD4Zch-+kna^qzYOU7Brq2ex=-SJ zz7 zFW7!!2K;uXQiR~-E+raa{$wKF+28h2K z4!DwaU?csd(>H)<`MbcYakdj8E&?9|KiYmOf`4+eF7uq($?chr55?wqddgy@4J86E zCG&fEc7e}<4 zd0SpA&8A9sE2@`a{g3mf5G-b^nb(lR%~?3L8VnRp*C=>PhFn{uB5Izz$eL! zLg5;cy0+(m$AaW!p7q$@?>8Mcj?h-$DCUD3$&^AlOOaUu)`CJK<6HAMQ}NTlrE0_i zt{0uny-iILz@OP`7USE{0qlg;2ELYbt61j4L_MWk1y0BQ{?MOhzz@LtVfN2`oHuH8 zem+FIR}yaE03_`IU)F5@20WhMD?R6S!-xOx>o_ERB>n#P!#+Uj*1tb_+%qDUIF$eZ N002ovPDHLkV1kE);u!z{ diff --git a/themes/spinner/animation-0005.png b/themes/spinner/animation-0005.png index 16cbdce0ddb19f52c551b3f852543cef55fb862b..7a967678a0fcc44fc8238e53a5de9a88d0ff5336 100644 GIT binary patch delta 1608 zcmYL}dsNbA9L9ebB9yl>Ov??moNF4OWP+OaOP*HSByW`p;ZJ1>a)fja^Cxt(sT ztu#DSb9uqk#2loel@1lP<|dSlNv7#?tkkJ!4%>G2p7%Y^InU=g&-eS+yKXXOD%cGH zDAu7^HUMm~+ITSFYMBiH0Dhd17)~fX4Fqs0=?oC}DV@Qf(s1ky8ZMd6!Lib^8R@4v zDL76F$Ny_=ht2gwWX zwg@FwRv1E-8=+%#1_%Q*eHnejolTs~FO<2o?etELa zRlXk33QXR_PkH^)uGF77sGT>QpA-s(a1Z7SSN#uB2PbEuyhj>7k92iq_Mk7zri^)noeBsfH z`gHjcSlH1$p3MSe=J5am@|&hu_G=JJupAUtbFVA3I0N%=sE^t_^hLMpl4XtslYf7m zC!IcNG9~vJ+s+kR;g7?x`<XOHEfe%VMerUWvK1wgM2JJW$nW z@WV~jN?D&DN_Ca3fwzntkHC4-5T7_+3;AvLEsPIvv^Dgk7V>GXo*S_J%#Jakp|Q@@ znippalN}EMcCtrtc-mpe!pFG&9PgxY0#77IQ$FT)J=VnO91m68D!RSkOWZU!O(+qe zDlL5qx*aH63RlhX(y1V?gi`5wQa7XNZzy>;F?N42YIvh-b}-3O#K z0sS(szrM^0Qq^r*C%r15y!%c5KK%`NzXTGl0GalBQ`w9I2SZHTNmNcIOx%mCh26oF zl8Y86S<$;@l_ehMm4cqip#JJ7ja1tl6KpSO^#b(eXaUoX8&(T*9$Sh1W?6irU0v7t z+Yb3xl)a@||GPR8IV$_Fl8Ixn^9c7`QC}J7VsCvp3{=Vk-ESfuEZYQkdisXfD1I6Z z??Wwcq2UIvHmAdJd4nvw(a4US=9qSUt%#lW6sGHD7+ijT)M)u4fP=L*)m~r41}@)3vg7uAQ)$ zOKo|$XBULO7n5dPdHS3-Tf(KX$RGw%dT6bB#e}#CQN=b}+Bw(juaAq44*JnQUg7KF zSm&*|E^pg`jypSDH#aV!4^TAo&=%;Sk&8p4G9E7~)P(iv12aN~Jnv=QkG`FS>{K0` zI+Ap2LC|tDL2h)%ER9#9dzp10XRn{;RaDt+lfpA1lDk%T$rTC-gaygmmqE^lZf$AM=jBhl5&$M>MRaw9gFKHh=dt96hd&9)X&319hnf zTXW(v-(>!=Nt$<-ZXNovY>ey|U2Yr0XPstpJ{3sh-@3D>6w-pFI#pYtps`rKH1mmZ zazF?{g5Jr&HNKwhx-ok!OpM5GecZA?R;@|(nixy0&P6z~LR2sruv*vaS_KyrUJpw` zyEd$d7ZcoVS|sSFo|i+R_x6^Yj;zoktqQrdeL zVpN>d`l~G37`wpht24E`SKhT=u~Z2zN}SL-+cq-<^_r;;k*Vhuke>~9aM$>)4)b`E z*pl<#Us%gTnsrC*IdO6517b>U(yP1svTv$Q{UUg^Rs6)fi17fcd|ZnDqYJVrRsZ3U z(#8YbE~QZo{lcfW&nlZ_+s|qd4<=Py=N}Z^E{*e;-N=>J6J(i#;g1BuLyiWE11bE! E0k~D~SpWb4 delta 1002 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 delta 985 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 Q!2kdN07*qoM6N<$f+yhGH~;_u delta 982 zcmV;{11bFC4C@DwBYy+3Nkl)?WJ<9%4v(L(*yfk0I%8N#97iEa~-m<5VVWvVS1yO-b)cS}sh#1S|j> zz-xu~7A2jN^ns+txIL;90KN*G2aW(+z=gv6(4Qzg{{;95SOgA%i*scF==pO1yd~-R zDX7^7&KcN!pglJQz)!$$4z>*JNU9aq6i@%5X{iC1fiLF<5E1u)FMuv^&%Eb+%b$Ni zNIDC=W55DFi+_meG9alY>5Qc33a9)Y_%7jkN7917SAYx{N?HLvHt&xZ_@yL%Rnk#O zk4nl$iSSwAJ#TVD(pM4jOGF^)5^x4s2TlRoz}LWzfn4>oZO7UJK8=XJH*Wx&1{coG zei1-s#bOTMmvjpFHX^P|x&oZFs5%kxgQWAoN<>_h^nbF09s@3T{)oRfl57hYJRl%1 zeg!yf!DUY6A@HM5yag;o#Lp!a@S;z81y}{vEJk^+zCr#K5gMgnB%J_W0G={{Do_VL zkBDEVbjcOqnPg)*b2lR5V5|{E#GjJ(fTs=Qgezb$gTwZ{KC_QBfp&iCaWz~#NzIu! zjEFyG?0*$?^WKYyQt)~GZkV(DStQ_YM#QZ-8`i3oKWcO$qFeQ%lZi?r`C9>2CG{fW z?u?t)fa4|oCV(|b*Q@sHyI!af3kQ>^Dj8XlNtMi3B2n#9NuX{-bmydC*(E({902V} zBFxNTzgRv~im>Jb49AMFBtUAPec)O|^k(pZCx4yh1K=ibdsG=#N4&gb&tFM|S)JnY zQoN{S=DrR*0W>5vi-$<9xB@)pa;z5Y^OntI2^f^oVb1f5$hxh#7^?*|b8kpb)$mJc znr`RzDQO*e92iKt77;y{TIT=jHm!=iV^31cjjiE~WTv%O)(!KFbb-HZ7ILH7Oz6n$ zAAiSzko3EO=aj8UY8lwB0c<*h|LKM)fR@uY0PYm*^OzM)a!1_q`{7b+damy0o04`d zytbq}1~LRX4*>9n`z6)TNT_K>#86Ts{XLwirqv(TQrk3^#-H@Npz73B9JD>*mYdJ# z4!DtCzvj6WFDK39z6Gf((^mA1k=VJp=(R2><{907*qoM6N<$ Ef@@9F@Bjb+ diff --git a/themes/spinner/animation-0009.png b/themes/spinner/animation-0009.png index c39a878f1197acdfa1dd6faa58bf3daed5234d2c..3e79b9bcdd7c337bb0de3db1fa15ea8c05e38917 100644 GIT binary patch delta 1624 zcmV-e2B-P&2j~otBYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;hZ+~s_8UO$Q5OhUYbW~|= zWdJZRIxsLgFfckWIpP?u@Bjb+2y{hQbVhPvZDjy3IYz!gjQ{`u5p+dZbVFfnWpZHv zLt$-Ya$znoFf;tnI8y)s02OpaSaefkWo~5vVQy({VRUJ4ZXh!-W^i*L595LW000wo zMObuFWo~3;a(`55ZDjy3Fgh?WE-*JfQ_JE2000tnMObu0d1Gv4b0AY;ZE$R5a{w_i zIDVEGD*ylm07*naR9FdpmOYDIRTPGEXQIZB7~=;HG8Pe0K`>yaNI(R!62UTsAQo2s z2rC;K(Mlmjen1Mr#-J#%5gQ9dMJEzOBk?1~WE^MA9e@n~J(24ch1c!m; zv=Uq3WAFnoIQLfU1b7PggiOhKc@=yIKGmoG8sD7(1h=E`3eZS0GON3R0h|Z#g9~5- zBY$)5EH!Q$R>8~QMUW?hgd@ zt7)3K28`ax_l2@yv`w#g)|^!Z`}0?enL9(=x=fJcLmVcEhmAq!aXb?IBK2{E#q;qi%WnZm><3;NP=$Y&0!1g&)Q-AWQ zD(Yvzj2$|;mwf*HxNNroN2QNLxky#e@7Ip{v;wO5loj;>C~)`=0f)lNV%cosK;Aod zpEGm^YBHTqeWwNU=f8GP`4a&+qV5KlP+|$T@)i9vw$bSWdOx!P99e9zprr9n!s~O0Fk&(p~hJ24pcLM)x*b=MY2g?tPnM*pf zN(Nh88#+#w{TiL3=(rh0tbf1@ZO|M@Gj;}~!@%U%$=3Mousu37fSLoiL2cup{-|gx&a#eu<>kFs;PP<6waUQk?6)r@ z+n|$F&ySbi3}?eYoE2>t&|oW0BXeH?_>+x?S%)hNQC=&cBU@lFK2afQgAU7iYvEuE zc~NgO>rn;N%7I*3RGt2;*N?9EqBFJ8>(rS)QYx{t+jX3M3{DM9<=MxkT-o$q?EVjP WakOlGyGi)~0000`_PTC{cLyO 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 delta 961 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 D4qxQ2 delta 967 zcmV;&133KE4BQ8hBYy*10r7{z~QGHG5W)3m9nBvxBcK~pNIbfq97 z)r~7ZgYK)}zz@-d-$C$YBZy1IMXe|zb)kmV8l_D_lF7tLnwjI~O!+frUNZ5*C1LLU zKdo&c)AT}j*H*r^V2QUU4-w0|L~T|A!2?~}l3V7oY1 z1)c(?fZrq?j1@qfFUQe3aDT)~z6iXKAOUXob5I!)KnHOC&fA_H=G^vq;OW>Fa4^Wh zumGCCehgKC1=|`D#B)FmI0gI(+#5RpNu89wol4B5Esqk8b0zx=z>~m4Z2u@}f206x zS8UJQt_OVGtA7FP7LLj)sB6RaB(MTZ=l&g7E$r89zij)}a&)Ul0M0% znzru%lad;?C-Q6>xGCxH0Po$fO@9>qJo~ND}ecC|{R|ssk``)O8T>9e;*~SAZ{Ve2la23?V7ec%J&r-JO7{nW6Y5;nV9o@dM9bt0vA(yoR4wx0V^R1aV$2{<;+0B@$MUrBm6 z(sw~JT`t~Tle812dlZ1A2YGj?sKi>g*JJI3#g5QzO(XXp73^K#Dks^B=Zd}^29O@G z!~$&QT^H-y*a373tZa=UNO@L9s)_~yV!;r0> pbL|1={-3Yog83?0T0D-8e*r5zwTU=bFsT3l002ovPDHLkV1mQg+sps} diff --git a/themes/spinner/animation-0012.png b/themes/spinner/animation-0012.png index a0412479f0ba3442324e1cbed1e5e057eeffaeec..cdefdc78205460aac77e50eed3ac35b2f2c15456 100644 GIT binary patch delta 1603 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 diff --git a/themes/spinner/animation-0013.png b/themes/spinner/animation-0013.png index db1f1205099e43dd5ed4fa8b6fb359bb7f57f731..de5aa6ec0cd0e46ab5e254855ce0ae1f01bbe6e8 100644 GIT binary patch delta 1601 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 delta 959 zcmV;w13>)J4AcjZBYy*%Nkl_bp%+=vCy} zK;sm-@g0cqNAr9E*gVb8Q{FucEX6?sdvyjHBODk;fq@0vvty)YHjWq04bS?1lmk7W zpXVm96nM`%i}|*Y?@jGMa<^4NVlKI@i@sgC-#IJ)|8l^#Y%kbuSEB3y-Q-gh6pDA) zZUD=r&f1S$p?|+=d*1e9zCBTdMZp>9+uoAYk%aB-RC+Ui+flv{gS~XcY~%;Pwj`I3 zSuSH1OQlvmQJ5-26ax#1 z)VUwT+wHWX>PRO}G=T$PB}kQn900q(R)LOc+Gsg&mVfX6l++!QCELJb6|U$cE&Vfz zC~zLc`yy|{2^sb{G7aD`ozy9!9(xv~THC;2+~_OmXaN1QT2ZCJGE+md-Dw9+Qc=gA zT}fTpo=d(|~@wMW7w8%V)o!PutgkPk(`J+n-3fZTk^mR?;2YSAc7YepS+S z+qZ!i(~cK{;tQDv>s1FDrBT@fc0v}m{WS1l?iYdipz$$qWc%|(-cGcy+5Sz^U$$3) zCxMr`umb@Nm?)KZ;WWCOTY)o zUlX_vtd_{cl~(>0xB)zrrRHthGw0cguL7?WybXL+Ln=y?06(UN1Uv;ie;x-8O1r>! zl5URtttb5f{1O5y_JQesngKrnpQUYnJ~(Ag)D5cdfxAIsjsN17Ny84L!lY{^O002ovPDHLkV1k(E%A^1Q diff --git a/themes/spinner/animation-0015.png b/themes/spinner/animation-0015.png index 207553e4efe3f2f8af3c0e4a724fa968d2a21a1e..249e1739d36456bdf3dd36c70537c928e25ee8f3 100644 GIT binary patch delta 1599 zcmV-F2Eh5v2hR+UBYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;hZ+~s_8UO$Q5OhUYbW~|= zWdJZRIxsLgFfckXHS)F7ng9R*2y{hQbVhPvZDjy4HC7Wm=Kufz5p+dZbVFfnWpZHv zLt$-Ya$znoFf;tnI8y)s02OpaSaefkWo~5vVQy({VRUJ4ZXh!-W^i*L595LW000wo zMObuFWo~3;a(`55ZDjy3Fgh?WE-*GpRQq%Q000tnMObu0d1Gv4b0AY;ZE$R5a{w_i zIDVEGD*yll=Sf6CR9FdpmfMeHQxwLlO1odij9WsCahV80A~7!$Po8-4SNPw&lJGeC zg@go8MurxeF%g$RkD*)ZF2CQZ{hit8sIro;_TFo+y?-v>Ugw;e&*$^ma=Dx-&Lh!f z-H*MUdTo0@vF+`8o9IiYaTLybL)S|7|8Gyb4V_*^sV8yqA zBcS{Oc7MRv1o>S>UzF>}+5{5Z5m@1U;7M>lxCIzg7WTWf3A(4;0saA(!G~ZMMvmf_ z^+-r=%s>pO`erO21CIiox|V9Gw_2$;3HMCEWKHe>n2b8@J^&ws17a=1hH;d&39u=p z20jf8q@-%+p1v3O*l4RbH}KuSB*KLHPr(J4uz!G&R1+pEcL;7J&wwvr!HcWvhWHxgw<_g9rf|HIx2GLAtqLR71(H2s8jFN%Kid-z^?xjn20uB*Hge= zk$&-8H$Tt(3i#ZZCeg+lJ%B>mo&Y+uS`#sV)Y$_+Ht6^eCv~Sf0x~CSF9I3#sW}8E z+JDF}`x3m#xocse7|4Q6v-W_2JM&lVnb(c}R}D;6fKn6V{n=&XH=h_oi zaSc?0@-8N3BD`N2@Q%In?{IEH!`(UWrGGC3ThDz2eg!h&m70tUKMqc5FDd~ih#6`m z<&IWjP-#8rE6!o`CGPe6&XFr%7kC{8a8zXBGzHJKTQuX^;m2ydFGuP3MYHeywj?W1 z&NzzfVcXA5{tIAXCZJ!h!||lo#W>sQ4r^r98pzCbVAg5E3dXu5Nw`>-gaN41?|*`U z^eOBG6Y~ivsVk5URtDENm1~eDbY9gZ;eK>JO{fms2rLW65+<=|F;_i+LNS=sn~ZZa zwV5i(1n8?x;Ot>LNDJVbFn6Cli`?Vv>I&30x@5rMcCJ|})j&GarVo^Pn9x|A>!y?P z7l30g7WRG44X@&6;bxu$GfW@o#DBewl7up1_y~9&SX3{v>Jw5jG$9%J&6Wi_)hjTl zFCh~tx{`G&ML(@tm4D5A?q3CdOQ!NIil0>Kr|ze7=wqk&@~~nP5F7vRx#xMs1PSiv z_%-mdD$t7sZUc)f`)Pw%xo;~CD=;vpb#M+;^D;)v@_#GvS>6F| z3<+38YeuuHl30&|d!S>>r4>u_bKop^3HU{vR*q`+2Y9QEu1kgltg0p99|!gIKTfOc zW$vh8XRtTGv%sEN7Z`Oh`ZnVwe68+FV`7eIQlYG?Tz#KNqx?K-JKcmg1((tHz&3up z+Tq%q4-ACbj9!NZQ%REOt$)}%-xS#MzS!OY?@oiqPbJV-Hl1_0B>IdfZCIaYn{~t_ zYpdP?(tZ(WJM@o5D*77!5p|A76oru-${Ks7%lGl~G_VIO#+S@4xBxDJy)ZdFpEZ6~ z&F84NG1b+^hCO=0KQd>4<7MC%&`&t7#-Hkboq0t~a1M?VaGgC5WH>#YuS+;KIpdh1 x&LgX`S;fh)(HO}(4wKL(eeB$i?Yh7@|1X?Nlva;RVp{+J002ovPDHLkV1k0&)RF)I delta 952 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 D1S8ND diff --git a/themes/spinner/animation-0018.png b/themes/spinner/animation-0018.png index 902c837ef74e618bdffaaab2f1cc04e86e9e51c2..667cd7d4ad375878eb731326ad70a12f5536d389 100644 GIT binary patch delta 1566 zcmV+(2I2X%2d)f|BYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;hZ+~s_8UO$Q5OhUYbW~|= zWdJZRIxsLgFfckXIE)0ZCjbBd2y{hQbVhPvZDjy4I4Gh(S^xk55p+dZbVFfnWpZHv zLt$-Ya$znoFf;tnI8y)s02OpaSaefkWo~5vVQy({VRUJ4ZXh!-W^i*L595LW000wo zMObuFWo~3;a(`55ZDjy3Fgh?WE-*GpRQq%Q000tnMObu0d1Gv4b0AY;ZE$R5a{w_i zIDVEGD*yll#z{m$R9Fd>)=O_(MGytx*qC?1BM_8C5J5Hw5q2y;^`gIJ7!r>asj;brq;gKy)2eVuqUZ2P6y4hgmvg_gM7K_D$ksn^IpA3H} zxF75Vf39$MdwV;_56+(;AH9P4K%AaR;O(%p!4tumz*-``GxAPwFZe0A72He#k~&fd z9a_cNOn;!k@j#$QgNuOx4Maw&e`E#gyMfL~WH-1T+)PIn^_%qu)zOC1V%7eqBAyPk zS~3DW7N{KP76Cu@*qLZJ7dU?-9sDYMFFp-S#AWq32S-TD1BY8R=YI$6{|dC$z4Io4 zJAr+Hbxdb;i~MqM#k#>Gj{>cOWk!@Jfhh#n%6|s}fjAPt-gAKjBxm1XO6>7~EuD4u zB?H%jFB9+n9COFrph@XYIUNHOZs>jw1mNiB;Mc%C16$W3;pYQMJRQ*A4s_^zAfesF zyPjC%D#YFqn6QEhC4j3$b{q<%103!K?vvw@c)CV+BltdeA<%wZkjNi_gr5ms4HUr7 zIDb1jFja4e1QV14$#9?=UD%xiOB#9a!}gQNZ{h4!dnwRGXC~{aJoq7Cpc?`s*Yr{n<$uIg<)D>P^|ChU$aHJpZSOM0 zp@gXh&HC8#^J$=y5^$Zx#mHya!$^P-@_%UMj8!eDyT8|#MIHxNXDmBEL*I3{LVOkZ zLavuA&gm4qHM%ynKl%~0L+4%vm&C>gq-SuLlbK}aCE&a{P^`|ljx(#dS~_zL*P)d;+jiG^ z_qt|->Y)48S+8`8Gx4s#TP2n%6nUrT)}P`i2if4f29$@_OUun?6DrT{+2C>@5x*s_ z#1NV>ulAtvA!@KW_#AZJpKU7hM1L-FR<&;g&jzZNMBfH)hCeK$FdG{c)+s*IRN1T^ zvc2x-{dUi91+NGE_qRn-I`BoH3nSq%0~Vz^DxdV)=$Fxb-ZG%}V%JPf`nllE;7ZUt zkGPh9iTq9HtQ+{c3$0uNWM8aoUk=_5{1@5_T*ICww7{Wz_QYmAY=oY7%9 zXMPMm3rw{^`!8h5zY9JHzJCrz0dtYjjbuh!n+=0*3?UD?z#H&d@Je9P4c&a_4hmu@ z1@>Ry+ra;b;k3S^8-cCG4GxCTW;e>|&}tq`y!ZTkVA}hmVzT`&EcOIG>|vaz#D*g QhyVZp07*qoM6N<$g8VPa^8f$< delta 927 zcmV;Q17Q5F473N3BYy*XNklMM^{viwG7h zkk}%A0D`~3Ph!g&i4_YZHXs(j3Iq!TB0ORQAr9E{^4L>s>RQJ)bLVA_WO-)pIj5_; ztE>CMIhO4Uwmav!L+3Ew11NYXOMy_pok1;B?;pMF749 ze$MBMz*|d@Zl}0+90%3|AZY}A1oU&!%fKshyx$BTs@0#D|1$t=cWmFYeK%pO)>pvS z$!9B3*sAB>c7H40D}TeJ@btOup6%`IeS(B90q-Pd4{U!T=^IJd{usCm>;kt#&d)=% zD%9P0Z{P$tlvGA$r>LA$VwNfBw9*(&rC z+Z(noMK8Luh*^ek3wRy47qnHa_mhTCQ;Ho)-#2ie6Mv^BA#Ja4QUN#s4kUS|6575A zyawD#R9gA}zNGJ#RLM=?O1!PsFlm|06(UJL+P)9m36K|pdb)zbPUCG0I0g=YQRVg0 zy&%S`5^s3H2QQt&Kry)ayo=?_T{)*V=C(p;_y zFwzo4x}1Fdvjz#7gmAo>%h&(Zy)$l(%}l8U(WrLsOQWw+?a9rN^1XVAt2Kw zhL@&6r4uP0+I~WaRAcS!lw&*Oo5uS+;8$QPb$@*{$MdQgZD)V0#;IYXcv_FZHQ>1% zJ_>+8f!`z@7ENVj`>!;cHqgrFP7(G)N&ng&rmt)k?R+O`8Pox^gYX#m8~8n)&hczF z&j1vWc{-l&*TTMKdl+E*0dO&*bfz1Y0QO>Fl6HHX%ZcYCI@O+DK$B8C$nTW|@7R7E z;(v{79~D|NegZ%Y?lsJKy%=`YN(1cF>-=^Qu*#WHa!ztSSZO9qj&~EXia^5!Q}n3# zerEhyXDZ%G-cIUcR>KfWYJOUzX7fA%rbXxn^%`yfF-erP%zMEiaTyfk8?T_G6(QYl zZaDy9aKGX4I4M&7<)evk|Lfavp?s|-ofuzc{Rb2zuUC^T1Cjs$002ovPDHLkV1m7) BxFi4o diff --git a/themes/spinner/animation-0019.png b/themes/spinner/animation-0019.png index 7ba8e421289fa4731e94a79a57fb21539080032c..760868a01e3f03eed0b521bad6279d4a38bd5965 100644 GIT binary patch delta 1562 zcmV+#2IcvW2dWH^BYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;hZ+~s_8UO$Q5OhUYbW~|= zWdJZRIxsLgFfckXIr{^ju>b%72y{hQbVhPvZDjy4IbWr4%m4rY5p+dZbVFfnWpZHv zLt$-Ya$znoFf;tnI8y)s02OpaSaefkWo~5vVQy({VRUJ4ZXh!-W^i*L595LW000wo zMObuFWo~3;a(`55ZDjy3Fgh?WE-*JfQ_JE2000tnMObu0d1Gv4b0AY;ZE$R5a{w_i zIDVEGD*yll!bwCyR9Fd}*UOJoMHB|`nHJyRGoq1&L1N;<*TT3r{^f2(;=;s;niv#h zAtEU97{?jEU-kW(>Slt8C;8@_I(6Pv_x7Fr{r&yDiC_Vap6CrB0KlInK#M@L6bWdG>^e?CxzvB90- zAh^F;t&V2@|BxR&g4rPf_mWtG7lLPk7X$030);p~@~PlK@MoZyn`yxMkw)myl4rYs zCdUIEK7SiL7wBA~Cj$j2=AS@f`om>?X5oK?Uk`rYok(;W;(Q`4;}^`RoAfBMGr=qD64Ql=xb7Yw7l|-a99DtO1&8~AQA>I+Fk0tLC&u3aJ8K0a$D_gX z!G&PeX9nSeq zIcqd21p|q7>C#EaP;h5^D=>}XbmW(VvjI|gle2j>csn>uzF(4S9EIGGA6~*JjE%GE zO-Dz%Q3!rJ5bz*=Mm`EpXY9Zf-U!|dOpp$VtDxV4OYyxcFIp{CbOH<|XvdQL70~Ni z;(z;+H$ZfIx#h=hdPKHA1rnJS(#R+_-2Hf+ue@knj4rZPmhSOhGL?I-@5OQ4hX$C7 z5JMr+@%t{g8SqtrBSj{3E)yGfZ}<##{w!mZzyuV4TkGn9;NfFZQ^8b&T9id>`CSfh z$sLC&YVNh*G<%@v_{q@cn6uGIoSY9|&3|={evrL+pB(b&{u)?_t0_mIm@^t?H|{_b z=qQy-E-Bt)IEa38=1rFUk#tT>r?`bAc44T5^0Qn?%H<%wivT0lke(pOU@@71nt~<)5 zlTTygESuz`$QObu*}op{2TBue_u0UnV%bZoXtE>mA@k+J!`8H!z&!e83V*%>{Khvq z4`)dK!2-7%(Zfvj!=3+E!PVqhpH~)gZaKC4g?pE)`f;QI*orebxC09KHn^D4`=uO- zakOzE%IR~^9;x_wcRD_#vtq6&|;k;zVzi4yE(G8koR^FNbt8U<^)0o$l z!!sQ>@~ M07*qoM6N<$g0WB70{{R3 delta 889 zcmV-<1BU#n437tpBYy){NklBI1`mdWtQZ3?zLn=?h8YZ22xw0)Ll*qf9O&jU-JZZFI8S zV&D<*H823K0pI5~dgPm21SXyrFz*!spaN=#`GKU5v(3Arb^wf$f12JY0DcGlwxS8} zP*SCw-Ch*$zYIE1zHezXqAl19KVSv!dc?PP$YQqo;XA7x%X_h@tdP}0Dm zEj(HyrpfohDSvGB7m~&~Fw>201CRXuM$(TF@kc};=?QQLxa9xt0Y3v@*^uWpdSLm+ z-lvh7di_7ZObxgIoO$sY@JP}f;8{fcBk39NC2$IyM#OKDz6Hh+(HhW3!70avo=h0{`RBqE3V6>!Ujd|;27Js9>ZNyiG90gDzBJJ$l|@D{L)h`;u% z6)oWEO-C{O^Nl2Ak-c9=#Os~~Ym^{Ar|@M&R3Yg)@R?76vds&h<);xb+jH{^!1WDe z*8p!zqkp`zrRt#AvmGeAPpL0}qD{dSlT6O>0^UW$anBSSWYnBKHBfB>VPQ^KMMTvD zgoSghy~8Bw(9OnyQ}il7!y9CWmTgJt1gN?UDLaJ6ZYahEO6B)H?VA$Z3~Wp#={+Kf zEZkRdc(1#xeYsZ8mGxoR~H86 ziRU?Brb#GQ2G+%7?!Z8+lLB@q>DYP}l9o=P(nh6Bicr(lz1q`JGBt|`Ny=(iNYaS` z7joWg=rpd?U+lmGd7HJ^Ad;>JFx_@9*haC#b#2y~CKh9-Nsi#?JO-q3p6^0L{%4W3 zV7+ff6>yvbXNPBIKyH;Qw|KMZT2&>zW1Y!0o33O3%k4N}zF5ceyFC8_QK+?Yst*bc P00000NkvXXu0mjfSNo+$ diff --git a/themes/spinner/animation-0020.png b/themes/spinner/animation-0020.png index 20c00389fef232ad13c1e327f5023e50b6443431..d228ed84fbddcab44ada03bb79b5c3d842e58a24 100644 GIT binary patch delta 1541 zcmYL}eKga19LIl{X-P_9*X?1h)y2x5ilsa&Caq~I5+=5pwi%lZv6&SKp^kAq>*10L zk?uS{lyZ{CuBnzwb-R?wB9DnXb?&+6d_L!W&inN~@9*cYZ<>~5UAl=7fUsS?IRK!& zX?4|roIEH10CwDiUfe@;1_eL{hcYS15IU0?5QyZ22O?>7E|SfNVunU=gOS`|3X{S? za@cehixU2yTAX1}SV3pvyFjWc=xUX70G9$_P-q+yjYeXyFf`hF?>=i37Ag#BOHqY3 ztcE=4ObUQPS^pRe>edujrebTp-x406f*6#JXYOs4w{g{TQd!{vzz?xNp|DH6IFbtL zuR>BFg+&1ZSafCpmmbQ3VNp~z2d4WjUKQB18aSppkrFQa|4|E+l`X0Bt%~b?Z;uLO zP&hDB0F$j!0FA*3Bv1qZfXeaC4xV0+RGClO@q-&Q$yEE#2}bHh9wrWf4F|@OlWZ5J zWBVRm>?`$%0`@?YV6e5=cZ<=pubz*hjLf}BL&paq#$Ux!X*AmCqgG*SD4vg%@+GJ%XT#NhMz{JEFMLv5aiO+6)aCCGFhG(PAlzUr<% zNWp;k3q^t9bumgeV>8jVo{#ac%Gg4zt_ZZ6+4(KXOxa?ldTN|gF>z3;lAaL1ay*Sm_*B|SNBRM5TUpnoQeglUxDLUnwzD7yr zRbjlS6nEkBKugJskxT5|jZM|@$;pq&+^ezjXV5oQv~NVEvL@uRTMQhM^r8P~YibdG zY@2`ibPQD#1247_O9+Z{?Kp^GcJ^@Kdx_e?*;k|D|1wMsu*JydLo0Oj$551W_5VOyqo+&&3^tzp4gORd0 ze0t<&gMMTwI6q`3i3q`Q(bCNwONsZtxLrZ@osFNa6Ld%t|GB#>KT}#3HaOC$%+s}7 z_h2hVfSuo?>`b%(7q)+X4@dhswF!^imN+w(OdGd17?$SP_0(R=Yt(ZM;zq&A*o_bQ z@!*oFxEQ^>!*R&AP^%1(A@IhpR#$yM&Y$<3G%5!-cMsO?>_uF3(52QoT#2-bG@0L# zbXu36m3LT{UyoTSnEBPa9kyOxp+4kg<|~KR^+|9mrUu)!b}p=x4jO-O6gm?7St||@ z!M@Lrw|HD?+!#kL?tC*0x*ewP^EyJ!&L%~!%>aX%^iWtub(bd*C3S4g^INB0S)a^hZm;g@T@agI-p?(y o371Y3(aa~CY{RNPj#n)CXIMlD7V*axRUaIHKS*#ccO=LE3y4X;+yDRo delta 889 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 WPbGIwK!Oeb84yW~AzTjKUHmVCd$36W delta 819 zcmV-31I+w|49NzNBYy)BNklvC>>5J7fR$Z~vZ!Jsx*Ibob#tHf#^)w}EG}F*dWw zE_OO=oEXppTEN`Qmf`hK&bz=NFbU_{z>(ganb~3|05UMrzJE@15^=7`?1=-bwD>0iJ7b2lx*B2=@EH6TLq*vobHj zRB!;5yHCxmG=DSXu&Z||3zxusQ8WSW0QUs60KTRm-2E7M13Z#X2TpPTrsd*q}VtIYHQHN_1f5(NVp$O~<*T4-OFhLsKC z)Cc|m@6?K;pchw){8Q2tTVbRtBi-!PMV;dnHjaV!S%004fiGru-Y7(7R=WE_00x1x zZJwFvH~@YDpGC`Zt62~`W7Fuv*$2wxxtSG>!$=BOC(Grw&I5?oz|)#QPt9y>;{4Vc zIi8qVwZpXh5L!DIz$x&t6ZF2df@|AjY^RRu)zr`k7+9$MItmthQ1DW%xGJk>z{w^> z*pcvTOMgLIT~+OLBT`mk8*W?&I-3NjQd^c`zSQf0hDzct0&U6IMi@eHZGkD=eU=B2 zOYtz%>?p-kX+kX>irh6d`!%v&0MnF>d>ZyMn}zOz3ysr*Yd=2GfNE(rRN_3PeWqbm zh{kRhc4?p$P1A4@cuNH}i2Ed72a5b6%V^)-3x5H-6o8@V@Yt4}EZUT&ykG|5_Ec&0 z0_bkg|8|Ph-LGUP&6lJJ*&Vbcs!)*h7Z9`v8c~d=nwko+1>a@BC?|bY7{i%PrJ&8onpW xoh$*=6;1%x3!Sm)x&QNZ96H2+qNz5Tp1+RyhMYIb1bzSj002ovPDHLkV1kICk0Ss8 diff --git a/themes/spinner/animation-0023.png b/themes/spinner/animation-0023.png index 27f73d18cee5ba995a375da61b20703a986f5cbc..8e77aa140cd3f80f32987569cc3938742b68961a 100644 GIT binary patch delta 1464 zcmYL}c{tR09LIkcX(GoA+Zc*nSGneD8OoV!Z0ZR)$~DGdn2Q;=F*6<=(@M-zHe`FS zDecffh#@0lbEGAWo3xI|eP->bXP^B(-|zE&p7-nhyg#46zBT*W?`Y@eHWFmkFr%{NA2oi;YCmul<`P1?p6=X+s-M0L%*(UE-mgZ(=R!{8i%28_o z-E56C7kO1zD4%|(Er0G)EKjf8swymFZgE?f6fZe+7K_E1Dq)Lj1190Erm>r0k&$vHbad&^b?+>gb2 zu$K?OLnc7Q(#>&Ajjwues=_}Pdb1HS_9KSvwV>ADO$@OXVAz8?U&`*1lt@Y6rb9hW zBtx)3%xm19Ix4eS0I|?xR8guT?3o7t4L1po<7MS;1hh@)M)kK7 zw3vRP+d!9?o7de@j+0wM`)Nnc2~U(bWP)^y*&4JfT@1lk-DPuBfQ>8|R&X?4FA1ln zI3>0tGfeIpjNKb+IgVQ@T<~41d#rR=E$yz8;#$uGgHUW=ze4|Ni1%XB#*KvpSm{g_ zD|Gx$z14EKe|o8GwJx(;RD4-auxo)j2n*S89W`!VbaF<I66~twxT%k; z7MX|N7Z3fsd7ONs{k(CO*Jl%Oq@TuwYeQ(%cYU=vA^${e=mI0o!d!4!s!|s1(#v}2 znn`zkii%px8aejljLZ0{PBBZ0y)c!al{@M`v$F$frHwU&**0(>-BJZ=vy`jMamS6; zh4;gtk3-k1ba@EKMofRpfXjKGRl^dQo3=(bEFn27BznsZrb!bM#D(eaXdb&LH|%tA z8#=|&A5vsipY_-T0_j22KrS~pPqdPt*esmbF71^mdQRACw;>)(R$vFLn83jms?}TB zhD%tMx|vU(kyJEtp{fs_7d!f4L*%XiImXm delta 803 zcmV+;1Kj+{3%Lf6BYy(`NklOpZT0R& z@F0i?34)Mh;zD#LGrgodSS>|6Jv}qghK7dzYJXMrKDfkVW~rGam(ih181DjGKnM6K zDc?j-+G0e0MnEpf7RYvh9+21Mwt)mVlXS6>13(uT21BzI1Ap5Ct_S_!n+|r`G9A8q zW|po{njx^`Src%v?0lO81yBaO^vtXcOIJPe1eo}{nFC()dB{Z9-=^qCz{vFq_$sMf z34{S~07U>?UNhV`vm!Vpm+t`AJn{ti;cx7k>i?;vq7K3cxYEq#l5$Cy**tVZ;@^d% z-+&AlxP0Pe8-G_pnAt9{4_tBC_rTGzE=Yi(gD#U)npp<)tAHdGW;Ovjl5)>rB|DaM z?tt9)u1Et`iod|)3i=+EYMqcd7COJ7p`rl;12;4ah6gT}xSk{6pqdR@G+y12dUhsF zh8O7A1s(^(0>;26NoPw3k*Buwe|=Z5?vn>xO@Ra8q<=O^+jl|e3|lq&AiLwTKbFZV zv`AB=#k$6W6L)~!5NHheSkj5S=A)KzJZT#!3yg08&m4q{0?&ZgsT;7Ca%{4;d*QX( zUXcT|tAPCUKa}7WaJwO^-+<3;3bZNfF|!+HcF*y(erjE?YQwc~U}krL=iY|Lz&qe@ zk$l=Ph<|#u(Wy0YaN%^V^b+g=_s#6Bq%R9I;5|QZuNRHtS(piB6G`>+Dex3{TsqAfI9BjYISWj< z%HC8`+>{TzoQI9uu%R1<;q27+|1dfrY1VXhV@?=2f9$WSzU;%)#0!m#%Ox$d=T*YO8V$xqovz h4jhxOy0~tn;}@(|cMD0SwJ-nx002ovPDHLkV1k+Nd)xp3 diff --git a/themes/spinner/animation-0024.png b/themes/spinner/animation-0024.png index 88ad349e71b683e0ce9f9cb82ac32795828f66a5..ed52d3d40d594dc4ff4c0f9b796b3d0243a9aa81 100644 GIT binary patch delta 1475 zcmV;!1w8tu2Gk3XBYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;i7=LQQi~s-t5OhUYbW~|= zWdJZRIxsLgFfckYG_Iep&j0`b2y{hQbVhPvZDjy5GzvLivH$=85p+dZbVFfnWpZHv zLt$-Ya$znoFf;tnI8y)s02OpaSaefkWo~5vVQy({VRUJ4ZXh!-W^i*L595LW000wo zMObuFWo~3;a(`55ZDjy3Fgh?WE-*GpRQq%Q000tnMObu0d1Gv4b0AY;ZE$R5a{w_i zIDVEGD*yllY)M2xR9Fdxm)mX=K@5g>)ASI+83Ym+EpWvJ@BbWq0uBNs6me)Np|oie z{?9xAt}|W0l6O3|$G`3IZrZkO+h()bG!U}MI`8wE{eRHoo8#Cw`(+>NLx-~!$k~xS zWP7$rmb%rlX(y9ORA75|YIu(6t&5TkFdP{YsdYLyk*;f5(;!1$uO)9t$N(7sBj3D& ze82&uBU#vBJJ>|%rs6f5LL_oYhuDu5h#njVV;^L2)=Um29Y7cX;XE=N-PF1#o{8s* zu`3RJ9e+>uNKA3JJAk7zu4N8M2dIGwPA32*3G_|`86x2`UCVkbo}I$e4;;swOJc4b zV8Dn02pxe<*mlL(@2}VEsSCpa8IA%!PQ2o9*LB`M|rc488n3-P{~4$YMW z(CEAeGwiLrO(Btwy`%zwp!;_&WD>@cD&D6FJ<h%s$o|7&~(5%(dG53ze9*18AZX>@VcM za?D8%gr@@V>deG_ckqE~aO*1@{Ur&mhRS^n{Z%jv(nmbn5+o%kPsK-K?r1A-7{z^IFz}e1fsqRU?It#i3=yxZrhjZuLU!nO-7_3Zf>E7;@`_w1=QAakL0wE= zY$z0fL7`nWVV_Zr0a!CQd)w;6+H!%D%ZB37*;C1>Z8Qh74c zi5W1WxaG_OvG^MRK<@j8_{sxkQ0W5L$p~xsuwb;oD>|qo!d(N-#PjDBErytIz`2U} z(Bz7x3(7GqZ*>4K8(1NCBRubs#Xc*s`$yHjoWsXtJvz(1trtos^4>D51J(g*z4x54 d?-($4=ntcar~ZL!Kg$3B002ovPDHLkV1mW>hFt&v delta 784 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 o!cI)AN(ZrC&zZllW6yy>-qY)ef<`w;xcuhOV delta 761 zcmV`nGbE?I)9mi2ERf@XaJ-airyT`y5kEC2uwoMFfad-h>20#GrN!DZH6l)HN z@6;p}%vmTR2T%|68=ipeGyg6DEC&`g1u*gNdjM6}i<|IQNPo(Q=%P`W`rcocKn-9O zpq?1sb*Qn$fAa*)T^Xv#`)IQ;qrL3o|33``;mE>CrmAu9L{imqI0Ns=uWs1$rZ9^R z!L1}MN!BDGskAeVTH)Xc?%My)0`Fxi!n&B+P7AYaCcp+YGfA}rtz31gP$X+fi+@b9 z_CS*3RQAd2Q-6dr7=_6e2#ZECGMr@!&^2^?AT7KYD z`xo0!NPiwn+5_+gz<$^f1aM4p-nR{FXPee>7B(UO<*SbXK6`b4b+Tzqzc<`>l8ykp z0PqgLUO?lK2C86aj?YO*a79v*4m`kW00#iR1GqKkGXRH@zL~DMq#Gkq1Gsv0B_k=4 zmH*Ut&1&dFUePN6M*-&7))0Yq`~Gy(WtE=4o3DJICmCQ?00000NkvXXu0mjfT?At@ diff --git a/themes/spinner/animation-0026.png b/themes/spinner/animation-0026.png index 88ca75ebd3bbbc21cbe2d5d57d9ce4a8cabc59ef..1bfd5dcaa6cfebe4fa8fbe8a4c53a2650e039182 100644 GIT binary patch delta 1409 zcmYL}do+}J9LC>q*-WfPE{%f>xvtB+W0ska8DixmRw9zi+Zc>yhMjqt%+O%9re((> zjV#iraVjlEM=5uO6I+rs$~8jkmN3ntZAYCwd(QWJo^zhhbDrP#uiv6-q57};_y98T zP$(M!)U~%40hE-Y0RSMuULo*zG&&W)#w9SQ*mxR)0a37Q76ltigRzP96h=Z49EXMD zs0=C_%TA;*nN-$)YJZAOWk#RM>{C%xp|`6%A(#p{fH)!+hr>GHF*uyF<9=rlkLJg> z=PE*|?a(nAg9?D4^OtdOBIox{DVW;lTUd|+Iyg-e+{zW6*0y(0VX+|Ki`au8e(M=A zPyuzfVIYOdqyi9=#(-d20uzG=V-nezT~nEgfcAFasNzH_i~s+l_8`G6@X2ch-~G8g zg+iyYF@X>xQK10Nfq3>J+6DkrYb_DWWY@Rr4cPGP-f(EuKmTIHhqE0ym{Zf;1*M zPE*rKDd|zmKm?%2F$eTFBE`O~uisoWmZ`Lf=GR{`>ze!yyeqlJp+OmNmt^&;@t=(@ z6>V{d;&N=GlIMcSZ{~dcTHA%@O#%R)o^?v*$(ek+LC8jhIvKpa&~R#jn{djfI2w=}o;BW#K;1@k3d^ig z22CE2a<;NhfPK|=y%y)^wit3NjdRgq za}!KWh%Ik{S>xe0H{#1z2H$f<*sL>EHJ^3qf`cq*IGjhte>G5OP zxN}@drCw)gJCL%jqhZOiJ+Gyw-x*`Qteg=h{UaZN5eSYyemNbxAF;N2ddNG$J?Suc zAA}95GKs<8ZX)s+d^^8U)>Wrvbd_P}H@bvIJJS4VK2;W5uI zSw@yQI2MPvcuQ8tD}x;a0P%%pFDXGab3Duc=!BJOY^nB@c`16c5Uhb4&4o)vv;xAk z*)!ci;-B+5W`Cnqjm;Ql={_>sRKtJtNa-8>ZF^>VSJrdSX8^rnD?Bu+@OkSN=dV7C zxo~-q)DLND&3hwAqFGDVyFcbX<}ZERDB)@YckNJ@>jkDYqXOgh%k4UjKqMV>4u*xt z!_xLwR%tCvPvmtEos|vmxi&MndaJiYi@h0{t?$yKBDO`X%^A9IWu=Z??Oh8mUgy^Y zAjlm?6}9g}-cAI_y^2ZZnYD4_fzl6ZT#L4AGb0TM@bvfU;)tM=ddYd*K#MjH%ad-c z@>FHbO3Xq@&f5Xl9qJZ$Pd7|UB)?!HgsW&(<=_;1ia(9;&TCf My!7K#7=6>i)(L>z)3 z4hbZVm+3AJc_SXp^elGzH16%auBx{f*keeVNvig_quR$ffEqx(j}u|Q2ms6g5I`iU z4(Dlm(#Uh;9k5GkXJ|X}VF&JR0f>)5!6?3M&+M@@5FNAx5PuBbAzEqQ$x}1g0g?dF zWR%PXgz49tKK}pFfD;Z(I39)Q)`FziVVs$!qUYY$t6Z3&Ah;x{AsICA^+Z5> zrthw8iw+By9Dj5ObVD*u%#wLTHM#SlL;1;|&3T)Ysk85GChSh$`%*E+zP^i&zEGrt ztn|`Y;(R0(rF#>}$O2zEoSUgmn5gFi+twlDt2a_64xe~XutSc8YDWq}PY!s9iV-kY zCZx23@ycReli|(M=Oi6SdII3Yer^FQ?YssX5(}Rkx_@1CaA5VKO~)%qOOj0~6~pE2 zJbgAK8%byOlHY}wAGN6#z%hVByDPagyaI4ns)nJIJ|(>c@Dad9(kGI4l4<}mlJ}D4 z0A8D+E0R}|mgdOZMZ~eyl~rFgOtz^l$43C(JKBPzQ=5yDzSx;yPM=7+CApFG6Tnk5 zT<0B9-hV)}kf%&AAM9`ha0}oLz#CVzo&opkPdB4Sa>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;i7=LQQi~s-t5OhUYbW~|= zWdJZRIxsLgFfckYH#e5ybpQYW2y{hQbVhPvZDjy5HO4@a-b&K1F@e{28{#LM@oNi*ZH&5Qqdpq|5v z#JmeXBY!ybJ^V3zohh*=Sv1o1BMDLhXdk{E8;W|QszzfN8in3QeHjKljQ%FPrJ+q@ z&ph-HMPM4*IO>Lhwrr^9a!_})az2fphJ93uKE~I8##~5WESf^qFmjoyT$_j3eE{@3 z1%r^p*J0$EZsV{)oe8`OEf1jQfbZ;P*ygMa@PFC>$|&|E0Zh6k3V#XjZQ7=u*D#(B z)_*e!&{$ANKqYndTQ)F?a`>Epa3>N!hrim?0@?&OV21!lYC#qR^{=obN78oWRD~ z$oQCa{Z{z~u<3f}$gL|VWqH#1+@8Azewi~fvB|qsE41d^l z!K(yv6%aw4`H}jN1`pG0=FxaeO>?H^e+aG(5&-e&O#UZ4DY?go3q3_%s8Y^9O-vFEC zVdl>3)#l#qfrJ>IBBdbv0XCFPAXq667 z!@#u<{{TW0!0-~hcpw?4_{j%?06=CRYm&|6 z(}MsYj`yzjc}U>HK$y)#K+3@MKY3v zq{a1xb9V>=_$@Pl(9| zM42Oz8rjzAe1F%{F(1jc=_~!MJvZ1hMxl|&=xt{{W{o1EwI%j0B7-iv3c}DV_v{d+ zz+D@WBUiD`-Sw^=v2PUFnBUfAG*xKE_@x~xde9JnJxNVKU^d|Q5JvjDNb~!A4z(a{ zMZHD~0K_2@7629ib|g2iM#2sUHvqm_0($^INIsoWd4Dlx4D%M_4*jJUis z3(K5F5I`_}QI{G90N(*D?RgTL9e}?8){+*sM$4X-J+E8yBPVvjG^J`&!yBtSy7xVR z-y}DZmiGNY(od2*Nx6y9!Gd3#T}iSu6)hS>%w3Wva-3cd0R8}YFeRJ=`0PbS(mMd3 z07OZ*4u5U{cq3^~vX-=SQt##Z1c5tqQUO?z^p}n=t}P{its$0MC365PvrQUuCF#+i zuARQfUsQ4@LKT49mcCxwB&4?7nP9!t^&?VGb~bInnN1LkeAQWZLhJF;jq3`)y2oT| zq)j_uKJ?3JXcaF2yiI%Cs@K3JwscZl7z!6(%Tfj4AIa^|LL+%F6hh0*>g-=eYXHBj zcaJSP(X~xChL{ouCM96^fcuWGO91cf|9y+y_SI!p(v|rrrz+-uI69885HhPO00000 LNkvXXu0mjfFm*{f diff --git a/themes/spinner/animation-0028.png b/themes/spinner/animation-0028.png index 6bd4cc9330abe5d547de97dc0deb497bed4adfc5..eda5e3f2f3ab415780c5c7fcfc273bea1920cf57 100644 GIT binary patch delta 1367 zcmV-d1*rP11?dWqBYyx1a7bBm000XU000XU0RWnu7ytkOKXgS{bVg}xWdJW|Z*65S zYH4k4VPh|Ia$_%NX>>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdIXW;i7=LQQi~s-t5OhUYbW~|= zWdJZRIxsLgFfckYIHxK6bK>Lqu_-Tiqa7nLjKONyM zCO>6;)k#UFzdq`erRs@=zmb^#NOVW$Zu3N>S^-@-3g=fPv5;NAXMW z=iqDbzu?P$f4(?lVk=0)#MN5#U47d1>PBXz382cK!4E-r68;|i9DE5DkXV2pGEMAy zdxta<(|>8R`kjx`nG%HlKKMsa9}=>O--7Rg6UPC60J>)@>r)_Cau|*2i~tHVtx3Wb zAm7+M8so~EKhxGaRzzHFW3{uFHHbI=7es3^B zub$%9L@dB0{{%V20%CwcDGEqeo+h@zs9hU?>3<|le@D~;RQfCUCB9YF#_^Nq(Atg< zO)!YfP`C!e-==E=E#Sa`84$LBWK90p$*UkS7RJkj@M(mn0*ReXM7+A@AYq7^A43|r zG(CwPI_XxN1QX^|Ltop9ysf=$aX)Ud8t6%GW4!eCU!#AS6SsfoI!%urzupFoTbPOA z(SH>mANb=9zyxUK()zi2-WH!(VB@u6pM1ovAfebB;&#keH;^|$Kc7QKC||u5+>@1U zn6J9wjvzfgM-c_w$P;TYeVlPi+*n6Z0cIW5=htAOhW++&Em80 zjP0hK9uquB14(f-)t-7?{DV2`uI0NVtABu54Bn#-yZweC zI00wAoZh>S&DY{K7D~)d!5T7@Tn@NxyN+;dz<;wiicImrEjXzYSXjC36yswJ1!;nO z(rSd*>aLjMrSpwf#-{RoLw-yXP80D2#M=ms#^R3{{B43k$oJf|o^4I|Z;bWdE`O9j z0zi10xKDxG6hkhcuv24;62EozHc<`q#w$Lt=f{&IzsB+@XmbQ{8_2vJNRyyX#(QI@ z@B{}yM;za(&lel8k)DnpB>oyA3Bj|0h_w~gIe|u5HF~C2w&|zTAzuMCo${nO-ooEe za1R6$Kr(q^nB1mZZ&U?t3&E!OgnvC{@+wYYVQau6g2s{L55dPE3Ee{20^-bq%|cLZ z>Yt+fx)!&I&|@BtDbCwPcT@a}=9e)CMp6Qt9tr|bZOBZ`ozye&?$+qMb-Y!5HbJB^ zJkCL;q7i--b8z#EiKaxKhQc)PMq$9B@Z?8^22X;Hs}4QTpK*?i2A~W8(og`C@?5X3 z+al2wOj-VH19)kG0yG0m8Gex&Wc$r9{o!X0dGx?BJ4|n)v@Od+XTcxo^~1+v=;UWC Z{C5GqWb>{UMri;5002ovPDHLkV1jT+WpMxi delta 662 zcmV;H0%`r}3atf@BYy&PNkli)M@M%ML(eb|5d&9R-mn6$Bsl! zFUw#bjxs(R3igubNeDHey_LautB8K>T#*s zIh8CkDwf8F34i7%3wMdzT}oZt$67{kp|J2?t@m)WQjs?KD}d+9oFmEOhJsZ)T_h7F z9RU2OOeBB-z)zBw6%hzCQ67Wk~K1a zug-|vxPOcmYF}UAD{JsY$c&gG<<7%mp53%>=4~iAkX(D0?&=8**S&jnv1>}Oa>k@0 z3Y)s(9e_ud%crKOyl-NC`?lHuIZw~E^eg*`xmNt1KckD~e=?FSRnyTmu4%OardsF9 w=fU8)A(yRN^c%P7*IH7p_ru%|NNxNFW}9j5=?@GUrvLx|07*qoM6N<$fHq)$ diff --git a/themes/spinner/animation-0029.png b/themes/spinner/animation-0029.png index 2999ed06001988014fa95f7c497419cb2d7e430e..33f2683016b52bf778779348c8c96cdabceed39d 100644 GIT binary patch delta 1330 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 DqE#_G delta 597 zcmV-b0;>I_3he}tBYy%kNkl4>@%%7fDu} z;F&xmlJ9o+J_B6wNTMWOV}sW?2axRRLQ-4o>gpounzS{4^yByJtzM;ye;kOw3ZYcK1wy3BU`0p8#GF1ho?!th}%Nb+wd z2Z|!8Q4KQC^?yz%>E1w0?wkOAw;Zo@$&;LjYUN7i?VwG`=OZ?)w;$-@-`tL0rJMM)XJQwQJz;GN`rp>tT$c0-e0X|Xd4zHQW(5abTp z`MW{@KpZS5gg`an9G)>$KB$l9s2TjzAK zL3AkhTl?RZR-A$wIj}ysK9I^pD~`&D4YDTy$--4z$4(M6SJ1&2&sG7|-tK>s6mx?| zwJ9B?WosgO0J8_+X1P~NLE_l3B8ZZBk~I5G`3!)?bza$U%YOj)t)?t4rbG%-%Pls# zXeX?&Urwutc%CBAOSj_GTC*BUEE-9-8Gw4rL}!y8?i+akz#J22Z~@`SdwGRT&wyG^ jR^GeKzvD{=PVe~#0SQ-xAG)mK00000NkvXXu0mjf-ZT+= diff --git a/themes/spinner/animation-0031.png b/themes/spinner/animation-0031.png index 9a4974392a82aad3c7c6820ba8f9f982f9b2abfc..f6ed4b2b3cbe1611c2530eed5d67900ef2ae557a 100644 GIT binary patch delta 1226 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 M07*qoM6N<$f_iAeZvX%Q diff --git a/themes/spinner/animation-0034.png b/themes/spinner/animation-0034.png index 3b053defea6d5b6c5cf6408acd8d81598935db6b..2851ef3b109f69058707a6400a094ee5f2d4c16a 100644 GIT binary patch delta 1041 zcmcc1w3K6lay(xpiogF1BB8uFfjge!6FzaDGHJdPEO5BWk}4+%uOuG%+FIW zHb^TdR^Wf!1XLglQV;}mVro%6!csj0bGzWvkAU(*VACs;b5e^Hf)jHKfHZ@lkwx7! z32g=jroEmnjv*18OQ$zZdZobQy7uw^`c1WSPAtsidKEo$C8y%f??PSg@@{Xt`>l4r z;Ro4cbJAyj?wCBg@XXmt%i|SCJj@#A3(qu;so(B)@AJ?4J$K)i-?_X&kGlDIS%vvrup0G+=^Z0X&)qz*?QF05q`CUxb6|=u_<0xQa z=*<1I^zD_kZi{a?vD9VobCxBuRf^8| zxN_y&zP=|*-W`uU7SFlvqt)_l@`mpOZheZIv$pi>8>Nl4J$GlnZVG$gQ@`ufTGK*q zo_(8{oYWTX%f6Dn|54=h&+kN*h%di(*HBWfN zwrg#}%I7aD6Zij25dNw<#YDc<&_GbIxI9r^?a_e~TZ4Vq{@da7L)L@wmgEJUZ+iAD z2M#`#kUilPlT+sQ=u>0TlMU;9U)$m&{Q03Vn=^n38_mAV^gRmU0 z&c>V9`#HPyGCD2A!h4?vPv5ghRQdeZ$L|?Ky_Tq+G~~J@F6MqE>v*2xxhGfBcs6b* u>YFBX;-p%{lUvJoRL*RPSS$Qpp7Yh?GFj7Uz`Vf4z~JfX=d#Wzp$P!7#=SQH delta 323 zcmV-J0lfaD2;BmZBYy!TNkl#RKUOfuY8a@#NU$MB)qiGe!JqT6<_$9L9hFDL zfT7lhG-g~Lopwgnw~irM5RXIW|J{p?XwT0QYg})RVnphnRplwguyX(qQS&7gcsbi{ zDd!f#n+}%%hEaLigzh=a%=?Ks5LQx7yz{1#Iyj0$F(d<6fm*d@uJb7c>aCXQL*r~E zc2lYk71;E2D{tT< V!X$#D9)17-002ovPDHLkV1m`|l&=5) diff --git a/themes/spinner/animation-0035.png b/themes/spinner/animation-0035.png index 6f402ff606f16fa7e385677dcecf3fd5e5e8740a..2bd3b0dcbd17f182023d4d609f1103a8b128c7e3 100644 GIT binary patch delta 959 zcmZ3@bd`OAN`(_kW-nPUs{r(Uy_lUn_8@2T#%WUms$j)^^$T@^HP$U&awcFk^mXyl30?; zU}Ruup>JrYZ)B`sXlP|>X=Py2##bM%4^$)oQWTPzo62BdUkRtBcQLaqCNavWf{ z6eR*BjZITj<5GcQf*>(xpiogF1BB8uFfjge!6FzaDGHJdPEO5BWk}4+%uOuG%+FIW zHb^TdR^Wf!1XLglQV;}mVro%HJ={_~19Q9J(~p4iLSWM?lXFsw6@n9U3xG6(p^-)1 zGzo162But37srqY&b8CHixwLQxbRN>Eq^o4_Tlneex^BGtGb?Fzid0n;NvEp(~rMa z*+%@(D?XMf>@Jt{slzuW>CAVT1mPc?Dru4Ss~fBB=J%J@#}?X8tDR}`eX?iG(N+FF zm#-Fauxj12vC6NnXKl)9Gr9J^x+`TzvX}W{UZ3)dH|I7yiujil%gHTz{nqxnb*%gO zoc2gNh|P}HS-3QRZLPk)fMffFdaDNBdV%wbl1t=UABlXOU3y{d^R$n>CBJ2ymptot zpLp_()dzdIz5_My)atoj{<293Z{^%~!}gH#oqG!ZSGd=`x^&+^!O0~1#i69FUypvi z$8zKF~OrmlC8VgLRjzH6VpWtZoBTBO}?vZ@p>U+%YlgW2b#y+O$= zv3$4QEK`qg*!tkewOL25TwcGU=jd9i$T>f|nzy^(m#TdkF85pL`Uh{jzx7*}AK$FJ z=DXVV^={&xMegP*w)lbF}lF|jo1oXN54nI!Y} zOOJl#FK3R!Vsl#gf>Z>?%k9fU1Ft6q35xJk=g5HNe_%h*d+Y65e zI{j_V&C>4~C-D`z6}aoJ&*5P(bbj*jj-nd-o+5w$19y{IZ`CXhjk)cAfI+dQ?Z7=l zk55n3zW$az$mq7IbN7jv=HJ)0ZZEp*&FA;#hii&sk*l@FyYs(hp8YNMTp{Z7-|r5- zQ6(G}j|>Z?+ny%acHGF`9IoxR`k6(x5T{r|^VZdSEPfrCba}e}Z+`c6bN7BpcgZiB?Qqj|Pc_~9XDnl{A7G24KYGI9>TVcqmaOi6m;Pic6MT1_iY!I4h zG$SYcUUZ&mRDu*�r8T6%e!$%`lX$e55AQv%p8fT*;ZPWPfspvXa4-Y~c_L%oOeP zFp`wOtrUEx2zL#ZKV2_uk-naI=T%aDx)qNEEj0~i2D>58Rxoa@8;qRNjPVgWelI$A zj$8RvykjPKCoIUZAa{AhO2pJE5M>()+l5Fax`uZV!Kl WtQ~;0BIp1B00{s|MNUMnLSTXgsm#qUEy>U?$wVr$A1EdW5_1L$6(ur2C_MuM<3ATHf`O8vAj#n5)Vx%N#JtSh#FEVXJOyKe zw1Q#<{>M!~1;QW&K|m*_7KPNqE!8tHw+lY~2q-TEHoY=AC$(51I5D>XNHZ83S=3FF z&}Lv@D)n@642j_Eoz@tn<;cV0`uBhQvy0{5F16U!MzzB?-_P9p8I!7I_1-tVTJ$-*GJii4JBPsygKXObQ_G0H z^_AxyR#vm;SZ!H-vCdjAhJSkKbouuTtxV3F!Wjt?z#1YW5T>TuN<}K%VobiaQvg4#jTH}cLdIwX3dkb zTK@29`uCgL#ZFf5xo3Y^s_e&p?-#ER*H1Km{nhZzGrsOvm-$iIe?BwmU$rmPeNe#8 z^Iqv`#adVWglmHMvHVU|MiBFROOYp*l$Ufki_{`I=^`l_9F&yOZE za{IIy@N8e+cU*4H;^%A5&A;6I%4xx$g6~Q!+091}|G9i!{gvSByP4-?@3-XzKfdy& z@k^AjgPG~?*dyLo4}7&xblvG4Fn#;HUvu`p+Wp{{+NYB|7ZP$W#P70u_GQt@v%>!w YGgoPHKfXE*l!h5RUHx3vIVCg!06jvn00000 delta 53 zcmcc19y~!sU&_ zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vdk{c@wh2L4lT|!Gj5-f+`s_Y=kzX#0Nu`@F@ z$pp&XSRe`X3Ft6>{+QuE6cXhS)stnj3nk{5xuB7*Te-dIiu<`s=hH{e@<8KsFhqj4 z-2U2;Q-NF`3LcNVKFfo*V<#O$bT_<(=EW;(FpWiSJuwOhXr7qr zj_Y|esldc|-cllNl)A%btkWRTsFE<<9I(dEoe zgg7SfDVRA+mCRXiglV?yA*Y;kDR5d~xN zL@AZ4)L6Az^_ps~r6GMZdteIhDS(6$N3){5a^nt}+9nTxcReb!+``#K>T zJf!+2O!slwO{wCx`&jo$HGD(&Ni}>!_enK;L-$EFd_(t1HGD;viYf&7K=Hi3d(5Oa zWSW@9NmpZC7i4vAmU@Kl5rN@9@=uUoliKY^ok@@KqbGcx&jSk)z@(0e9l;_^b>6 z0|^X|qww2t`Tzg`24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2jUAC4mu9y$&hLQ00EmxL_t(|+U?xUO2a@D#qo0|6R8UYan<*K96|6A)Jjcl ztsv5me2j~vlh}=!bo>7;vkV;W+`};T^!O0w^SN&C?v-V^WCHM?AeH4&t5u=paw&U# zc@F++Cg*dRks@GpmO@Znm9nOk?e_cd{j*b5*OC}WK*CT`?law7&*Z)La?Z)>Mhqli zJd@pqwnK>||4dTYBS@dK1625js&Cx$xJf!6UlW!B1ypb zw&8S&^Rjk4#fe0afN?o8=`?!=I}$+x()OdlM6xzX@pwm)fbm>B+DU!c&{cT=63T|Y z{??!74nRVXVr!@NSmy{5kQk&`HrQF&K#+j(g~PD^CP=^qJ5p@zM38_>f)vM-i5&@; z6r@3G7Z)dT1f-P>r`GQL;wpggbwhu&Gf9CR379J0wF?Sex(E_5DM+UQ#f}6_`R8K#%}PY9EU9b@wnNEd!9QX&RMfDfhYlPPx$DM>^@RCwC$+rdi1Koo`HbH<4ap@InFBPjU(TNi?lU>6~3Q;n$j0#+CoZS75L z)2-nDEefH#fuFfEB)+}5E?1Wqnw*{sz|y>(>25leA0O^Zbu?i`fWWd2^(mK9%FFvl z_yhRgiX_`QJ2_Tf*CI)#4q#n_(m`GYVgdnrk*s3KF$_}(uq}|~Ln07Bah%FA4BMR2 zfwE%_C zX>@2HM@dakSAh-}00027Nkl&+RXA8IVqnqX6v=>l1nbR5JHIG;|dqPa4jg>4yoY)0000< KMNUMnLSTZ!>UDtt delta 1891 zcmV-p2b}oH0_YAdiBL{Q4GJ0x0000DNk~Le0000f0000i2nGNE0QjwuMF0Q*0drDE zLIAGL9O;oE9DfTF000XU0RWnu7ytkO2XskIMF-dg7Z4XH8;4t{000K)NklTY8UYZEXeh#?k8iL_#(l{Zo%*%QryLl_}#u6xTUhn0xXURTOF5_3Xx z;WlFCwAbCkid;Al^?|*hMI=O#2nL5l#`vc#6Py02s((4SyVDo~{$WSc(x#fgKZ6c*ar$;)SP6Ox#@J9d`7#R2~V{C$RzFRJr|LNYg4WOp$y54C&q!Y+=I-LOU zw}%fO{$p}-5)%^>7#|-;e}BJ!PqkV_Hk-xn?k?WFdxsY*^eXlMukpePE4hlepZI0!-rR#sN< z{Q2|mbzT3t)qa&W03UgPwryj7e;0qHH*aEQW(EM3)9JLK>-xX0Y`9aYRN{w)g|d`VT9zd@Ha6ty>Z+WdpU@0hxxKwDS5{W! z+<)BMRw|W>wfH4tb8~ZBD=RB}HA!k4qtw$>ev5L;}%h z6q!s0hGC#oD*n_eU=XxaD*j{`1~QopqJPmS5{U$o$>eukLkb~AhKGl7e0&T5*xTDP zU%%e|rIV!m`t|lNdwY8(03075V|aKNLWq&BA#L0Ks<*e-uOA$|*K}Rq>jYBQ^}U0G z_nKGl?d^qa+h27JsVE8sfKsW{cz{xLb9m2t?Ro8Y1<4pA06+-2Qb?~oul*~5{D0gD z>k^V(*nX#w^gJcHRq{*icLYf(CAC@&08pt^Kq(>JK@w7_Q~&_AS`C!aOWXV60%LJ; z@v%ec^2FE}rlzKRqj#&O5W+8CyLJt)UcJKZ!2z!I^?m>3$&;VkT41QEy7=ciU*pD& zQN-hMjEs!9Daq<;xNEigsruc!cYkr?#&sA*Wf4Gokd|e|rl!6|u~n7>)`>cs3duilbO8#oAt~nWhQOIXLJ3 zdeK`S+O~aqmEw7a5WmhC1-rm*!C@zaz_#u7*OQiIK?s3-J`c`07-OK6qJLJaK?ng= zRiSAbG)?ot2q7SZKnMZO9WdH}c0UEA1PB2o1o@)^Ow$AajE#+T2YLJUZG^*NU$tAe zZuu%Ss~7~;Gz~o=tuf3B17ivpWuS~fVHAIe#=toTAq1a3eL6K-Z9#I*k;~;UFfia> z-{0SdloE=fKvmUq&j8>!9DhP}hm|MmaX9BVIy!=7S&dohdeXB(14jBCan2#7 z^dTuhOP-8Iqn&TWIOn)?=MF-lkPj3NhjDUpa%yG=mGsV`PzaGoq<H zQ=aq`qLhL$=7W3cIgSI<1nLTF$&;g_qunW)OeUeKsy|WU@i;8YI@gnmqWI^Yo}QLH z*|m~y-@ZjpPmh1CRDUY@zc^Rr$?@^=-@hjrW1T}H*+1 zw1)s72q97l05Slo8(Jt7LM#^ZeWqzD%4Gx9Y88Y4rg?&5u>i+$nqJij*Q1|b0w{`t z{{DVY%Ajc~B9RD&hK4|CW83lO%^PT%2KP?_3xMqg0ElKKJr$L$t*sv`mCD~u(?mX> z_xCT}UdF3?Yk$b#o`-V|+qU62jvrpV`TF(i*AWhfVVdTTZr{QUPfg!{XOwJ;kQ>3W z;sy(}ab_#ydW*Zm=m0R?u$s!j@RZ~L1i8SI&7n3$5Rx`cx}f<*6Qtb~&N;yYippS; zY@XdT&^Zg#={faNS;0#LO`y%g7_0~HIWxP-MR~I6d@NZR=Rh_CUslF>d9suDI^+sc dqiiSl{tA1=D}U-QF|+^x002ovPDHLkV1kE4d!qmV diff --git a/themes/spinner/lock.svg b/themes/spinner/lock.svg new file mode 100644 index 0000000..19c3df8 --- /dev/null +++ b/themes/spinner/lock.svg @@ -0,0 +1,283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/spinner/spinner.blend b/themes/spinner/spinner.blend new file mode 100644 index 0000000000000000000000000000000000000000..314aa4b9f885001f452dfb95ad4187ebcb5e029a GIT binary patch literal 737108 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 z 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%0AI)-a@6w= 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 I`|j_501e%aVE_OC literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0001.png b/themes/spinner/throbber-0001.png index 3819624ea4e32708e4964bd9bf052850d51cac44..6a64683c32c8e2258a59d2168e4d56a7b6ca86af 100644 GIT binary patch delta 1562 zcmX|>c~nvf6viJWAi0AIEiR#%6l6K}0f{=;!Z2CI<%u1TSCtI|ScI zFb_G*4kc!CK!8LF{B*L;i&2eI(1UKq7LSp_4lN3-dXP)>`j=9`md5|)3PUiaV_VC zV>R+bY>XZ+Moy#bFo*BR7wB0$zwbMpSFi2x82@1k&k;e66HrLdGco=TT-E`ixhGU44^JZ5ykIL$ZL1Yz8x-YgOc+ zB|7FM0aLB!qrvQh-~E`Yz35+0e0|QaTU(mF5E-&UnTYMA0z=UTRB*Pk`U&|>sncqg z0}KY~EY<|sRBYEIPIoA3yt|(|IY7#twUj>^3Kpz_9bdCY6EI;@+?Kmd@cwnLjy^Mw z&bm)$FKMkGWlqrhLRi#i!|12I?LM372*?eI=tB&Mo=qlkCu?Q%l>t|VJVjqs_3Sv= zuP2|by|Kk{tN$gkC6y*~M?-O;pOGJfeNb2O&qK8Ze_mU<4R0OcC<^T*Bqf$$Dw}Ww z^sR#&>*Z+?UOg3onn&phSK>(ci_&+9X!Hwpe^H;ss=3heaVZBa~S*?uRn(dD^aq4q+LAp;);Go!ES@J{e&?3e+34J7qqh3+^({(i7~5jJq22Ccet-#b-S>Fq+nMlG z@(tuCt7fffA?XUk!F$h57@tkcTP*AlrMIbbk+E8*^YhjsE!f)VL%eWMjqWC)rR_KPqW@rnJ#$57_C2SkQ# Kpw)$@=KT#mVYO%g delta 980 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 delta 990 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 delta 995 zcmV<9104LB4EP6-BYy+GNklCbuS{VlRU2q6#)rp`dmp z=tkX%yRJk*+=+jHOaFszitcn#+=`c4q5cI`tfW)~O`Fo(J4u?!{9O2c@Hv@DCKL3) zFdyf9=Y8MvJkNQ~`QQLet*b)^i4g}#J_eiwwt?RxVzr+*1AluYsQ_a@1z3!T?b7f_ z_E&%!u-Z0n6sUHX*Lwk({A4~K2L5WVvCF(CfT=951uS$+P}!q^RwfacR7ZNCW&{|| zIjy9KehXLu8YQ%*)xC5xmG4HMT%+h_y7NW)}G% z=NttdD{W=kg&Adt^5uyv%p7k54}f{#$UoAEwJsVM%6|eHz~hC#+N6Y~+#*wu&<+K0(=!CPye4!e~wSAq51NlV45dp-+F zR^04$^`*IkMFG2Q#VDz?lgkOL^n1``+~F<@U5<#=Q0vK8rGvLe!Z{le>-$W87&ucB zVSC&raDQhYA6i*JbTO-H9{^NK@uJIkwVP>L2QJ`w^e|yn0SOlV?DsrwfVtGVmVoI&d`i@fa|<&#T^8&JExM zu%zB=7xO?V@i6cS@OCD9ltXjCXTS~hV*32eE`KXO1#G12&83kY0yfj)N7O~&?hbEI z-%&TzRdr2WRIjM#a{Q8dOZ`bboqbd4@qB(#{Yd>#eX(?FKC8Z@UQl09XVi&K6x6cX zZQwiLGVpaoY^l!x@8^4Upr*c(RBfoArmBnc<5_h!A{Nx26N#tNls3!OUM}Fvgl`eJ z-hXDjALLQI3H%D&0xl)24}r75SHS(e4~_%p)o&B(`Go#h8r$-Y0wQ7w_`CzJuK}-S z@=f4!p8u3qQi+JBdJT9hs%r-vHltxRMu6cN6$6ch4X& zqaHcPt@t7^le(A#u0%w$?XZdxiU2o~%3LaN95{850yauF;;Rwy%U+*&5%FgtF_=^| z`~EZoegHnseSN*dQC;bBieAgFsCD2D|3y>Jt6!*Bi+%sUxAgi8d7>1eYOb#!PibZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_ zVuH;C0000ObVXQnL}7Gg05UK!I4?0VFETSAF)=zdH99mo)_(<2E&u=k5OhUYbW~|= zWdJZRIxsLgFfckWG@Pl@O#lD@2y{hQbVhPvZDjy3G&m1EFaQ7m5p+dZbVFfnWpZHv zLt$-Ya$znoFfxnR2*m&Z02FjZSaefkWo~5vbZByKVq#@-ATuy#aC3lC%eepm026dY zSaeclZe(S0RDWr0WdJZRIxsLUFg8h4`*Z*R01|XXSad^qV{Bz}AX8y&aBO9B05LK+ zewG+3000ELNklqgy6S4vR?>qZ1YYp@}tHce|SHA=kkd4J~4JDKn1Hi#a0?>Tek%=tCv zn`Cx&c6Mfee}6_&4n>!B&wD%d+V*~8+uQXv(HEV@Q7HF@uBGfBwWr-^G@64(%01=W zG~Il!R8Fu-*)@(9U?;(8um&Cl2HXbM!8%E7lEm(`pzOB-jZw^b-!8nM2i^R2jl#rxC^u+MD1t z*N}I6tVqKj?_FdLim#zbS*`H9Vhns2MIUc|ihuHDtS$qC>U6ituo7?+eg%93luhCZ z@H}`4_?4JcXaix(I7y)u6)Xa2r0sH_A{xi_Y?TWYIODQXd<0u@P1@H`b5!j7J{TY?6=l#LZ^&)ry zcz@@%-3Lb57JmfZ#r8hDwK5LX>BBYH1=qT@+fzxKzBR|OIt5yl$OaT2^12OzqZ^RH zYavCSwLCPruf8NujT|IjxDp8N5L*4`U_BKfmrCWKI8M;m_QAF7*E!?8$Il4_KN-ou zzXGq|DzL4vajSDiF0$u-FT3t3=hVfn%zuD?#n9P$-*ROW@I7!AHfX==L5q854@;ug zM-JDYWU!F3S7O!5_kh>2R}(B*C-a^w>o^oSde@-DiY~VO5I#Ve`&UkKOa6`5Ne;`U ztjl8Jrv}x(Uz0RPA!CVO&Xz?9VgPjO!0MGfXxmL>jf4H?it1n%Od>F-vX7%*E*qH8N%A)AKBan-n)TKMm!BNoQTsY!E5EV+<=}lpaluvnwA9e%v{N0+=08S zecMeS)$3#xoCAYOr&ZnQ4CYWHxUDXbmEk6m?z!{(q zld&kF?AO(Z^9P@hGEV%T?+uVDOvd-YO6=Gj@ICkrsIyB}XE1|nuik)?XSA`SJH%*@ z8f&k0oIrRTo{Q`~3v|2z93F8KJOZ2zWfL=CuF4?pIZx_+O)W%u3z&d%A%A1G`%t68 zS)dD_u+;D=Ud?_UZNXTW^j{O1>SEuVOI>iN4rg``BIkRyO#$Y=r<<2(XUCw>K)kfM~XdP z)K+c$$fXq0CotY&uL-pi{W`L|Pv9th?6f&5aD4m&1-h>pdZ?-S01E&B07*qoM6N<$ Eg6_DwWB>pF delta 998 zcmVmu)kV|)8^ z@IupYgN)X-kkNf;k2}81`rV$uw^d^TzQ-)gd-uYXBW8CXq-nakz+E0UHaJ>+lyL&BVJ8PJtM}KVigmsl1nH}Ix9-SyqQg^uO zd4B!>dqnI{SS1&Mi;1kviAF?pMiwH6_Alo-&s#QSg*|eZ%RtvBX)pJBs$L*z0noIy zUef6tz^J1b{`f86`5~abiimHH(Xi%+INFSeR!Djc_!Kx*5bBDh39b^V*O` z;8lBm=-(0WHSlpn{3_{9;C*0Q(uWc8r%UdMh`4X#YnE$7#BE8tuBQ2XSa!eZ7Ink< zq+?wJJ^_A+h@PbLz&j4@X`m|UDc}mwlJuonJ?|-KMbb`0bR}&Xz&Y47{os+cb`rnk)c53_S@v9_FXy3UW%*@G5Gk^md&tHJ=BVuFhUGG6E@8#3exO>64o6%3eM`rfV z1-&Bd#9*_z=>~V0PR3IMh=>E=+acS(0Z;h7F(7wjKKy^TW0Ulv+x7am3&^nNA1wRc UOtl}>1poj507*qoM6N<$f^@R!ssI20 diff --git a/themes/spinner/throbber-0005.png b/themes/spinner/throbber-0005.png index b78133eadac9b3caa4e6d809194253b0fff35f47..3a56beb7482ff40b652972de1a4b8abf25a3cf2f 100644 GIT binary patch delta 1569 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 diff --git a/themes/spinner/throbber-0006.png b/themes/spinner/throbber-0006.png index 1a12e8e8c44e790bc9cc6561bad7c3a6cbd12275..949cb23012469efb42c33953b5c79d5352ff77fc 100644 GIT binary patch delta 1581 zcmX|>doK(35{_>VK68sXDbZG!^Op8hr5EO8|0`R zTD3G3N@IWk8tw6Kxw3`zBrVhbc?+Ag1YH$6Q3$QKddb_Xwb&%!A8|yZodmD+A8MiL z5)7e$Oc3D4vlGc=kZt9Rrm{Hv;3xOA9KOVZwHJcyP~QJL9nr4-q4QiVH~AT!Mxlco zs}K@{rBwjqa5j75=`vL&FU&6dz28{?+t&=>h$l?dvP@tc*^|gAq8^CL5gH z?`}zNeR+J_Ek<8<;`B~m*|OY&_15QlAT&Q1+8W`PpqqcY5+f$we4Q@l&B#ZT?o*$d z95ACfcM_%=UUl4mMNr?qT2fNtE|E$zeUdCrAm?w1%9Aq_%I1!=jKPo9e?sJrkBt&K z)4V8NZQh+FSw)?(c>z&j{{4i;B48b*((b3m49zrlG+nXUxpYK5tpnHSH$ zS>30wzF~xu=$Gl0^SAMa4^5}&y_h8q8&7+s8e<`5T~(W&9aa}Gp1U_Gf~-5YrE2{+(_la+>%d3_)C0(7M?rxFeHzyC#VM z)ba(xal@*E_RRx})=7}XkeI=?y%Xg8cZk?B$RYl?tg1WKk{2t!+oGE_^~LP_(EC+- z4y^*i8N@f?LdHAlW=5L%gI*u@In2F2=#S;h9OG7Zmcb~;6bsv^ru5pl=$dKRbjhp>*Q zO*XsLJKLO>t8T^5{m7e)6K15!Z_lkb-CQ-0uCtxL)r@G<;o%!;)IwE_@1MpNIQYC~ ziWt(J8uMm?z(Hr$e$p=YnTw%NcHe3(&3oZ5==oVET4pw zXV(`dMEeI^&9-&xV=A9S?(d8Oc82W8-Xd3qhLMGZb>mo-XME!gB&En9OXYl`cY9#B z4CRp`0UuL~tGgbbri~-MwN zJW8z}MNs?DhL$;N7G~D$ch2`1I-n96>>pZ+adEWh8NtWAan^M6D=w;hR<Xy{2T3Zg=x=FsQ^pbK-HL@psLEg zayR%>uM7F*RJ|aZUCTTvI&cq3*0l_K^_HO3WNc&wc`}9mWxO-if~|y4Adj^))uw$3x`iAkOx^8g9vHBX6JM+&$6UDXH9sa| dm=_}!fn5>3ns=i8I@(VN`1=L=*6fMN`5T{`)Ykw2 delta 1007 zcmVFT4=)-uIm6Js;0`F6`lvv>>Uz7aOq$=Ldlkz!3N&B7Zi^*r`r%QUhKG=76sw zVk5IX4^+Gk0GpX}6<`rafQ^V4mI46034G!AP68k1F&3PA2v{<>5zs7hP?-Rr18f03 z;2lXX?jkkwz#)ShIYpEOa2dGjS~&u|FKK4NnI%UooR&^$01?pvE&^?!51a>Holuwy zzP*6k_sjnd0DqEdlHQPXKG#~`0N?uEeU8F{!y8_blmN?_!fXL|GWM&I4oN!VckhY7 z%fKhVXTT*%7aRqEPk~iO;W^+nI~X{}9e2gNZS{e*h)^ankGgG-yF=~)FqA0QFd4F$5VMZ>0@459Ja1LjH4d5%_ zbKhbnBEBoAfx3IY3mgLuI&Jc0`)WU4NvZyAlyU?qOif6%4(0L~MqnGr&jAvvMF37vTpHabrs7`+>(ZMVP<%0JvGr z5JpNa#;D?B~?V)l4XiK^t5j}%W{JZY`iYfOmNgE!~sXk1A2hEPnJb-;h*avO^KU?jN zEPt~eu{;YPG0Cj><~K6~CxF9}ng({u0FIiJlxg=J0DiIa9`I*G^lcmq(v;(SUdId? zw_3vhYySVJq+90ywxo`y<1pKP)yxpua<22wvJY+8%BrbUTb?wGCaL1X&S=|qUS<`DSlsgiM`u1Ozsdkei*f`s^J1a^ zMArkXk}tS2Uq(&qzU{2S-3602T&TlId|#b#n-TC&!S)@eD5cx%xxu)C`(M9~Gt(|H d&#R1$e*tr8%P;zNj8^~v002ovPDHLkV1mCq+dTjP diff --git a/themes/spinner/throbber-0007.png b/themes/spinner/throbber-0007.png index 315077101e10db2593fad056ed17680dcee09e2e..14d8b45c0084ce927e17130790c7328e8018b91b 100644 GIT binary patch delta 1613 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 Hu0mjfPRP^o diff --git a/themes/spinner/throbber-0008.png b/themes/spinner/throbber-0008.png index 4772a97a9b43fafeab835f36a369012f6b7d3365..beef391370a4183ec221e131e4d06e60e1792919 100644 GIT binary patch delta 1588 zcmX|>dpOg39LIl{&9rm0O(-g{5^6V$G%A;D>EfD|+lGmN&aPVC6Zb<;W1ClQW&m=lOn~_w&48pXdGg{Pis`=tP{h1_3ySa)1W_ z%g{@$16-&y0{~zf-@wm~rL-BkZCn1%Uc$6Q9s zOdgKMiD$E!-2W6CmB3`jLg%8nZfs4xQr#}LTF1e*Luh$&r@r08Nfe+#p8)5dkr3I zq45$7jApW#06&hK7!}3jS~}okIlQcZr)^q}Ug81T3z^&?@c*4yJc$~#z}Irr_wdx{ z1SZcikip_;6(A5@j-55L2LQ+*)oVu(4W4;+M_iTn^5cuS8|_*s8=cNfSYI_pB5lQ` zqkHZeM0iPrvqDS3a*=o1#M_4zs^DqN6|09QtBjjrNH~&fcNJnA;EPz73vP4oiXCn$ z#eu5@GMU32hfmMOTR{_TZOG5hM|-=WLf;*&|JZz|MXr2(yRotGUVoTHPFnbASRq(t zG+;&K4JMGx`R_}{p8if~+0R8i3-x1R1O;EVaFCU-Ll5;-krMr5uvU7KGrZhLIbL&# zEWF*n2Sa+vQ?1~@>p`JUdk!5wmXevTah*eC>|+d^@`QEQO_LRHOq(@+Zq?5Sj3u(P zVcLJOhAz!vyiKymifqrPUo5u3V5g#Wm0uv&UmFfXnsRK~*Wkabtft-bLFvAhb737Y zRiMPP@%$HKxGfK^A{TuMpCID18_G`K?p`llElJCqEe!`P*5=glA6XR_Rt&6M5es$D z$l48evpwwhi>FERk?oM=pEBX6q6tG=RVN~;c3oHAbQtNF+{>C`(H{j{W@E}EtLNZf z4Ka*KTLF?1mRUua**sbQ(J}IY>FhWF#q|eE5M*fSfddB@Ve{|l=rL4`yy~(0t~slT z(IMcu0-Ury-b({Rb$1;pMC%c{Y+8iuqfqHzCoc6k^+dq7R$lAeP&|I98Evj|n?SlG z4fXZ3`?{^QTX@fgA!q-?@D_tBF?E)Y27?9_Uy0sgJ09>9D%;5$@un*T`ny zzL35dMK-lHd&Qu>bGs=dWUaU^#5Rx8nLc6;(krEcwrh>1MOlX2AIrlkg3~n?AT*_3 z(sU%6pV1&zhxm{lw%S>5>G=8~1Nm7dKqw3)Ty&_kCUGGGwd$^oOG)`HJ?f0vdl=pw zx-8vr@#SiwBmtk+Pu^CVwx2zXjXNUl+$&ErP}|R&{Fa>9oI=pByHfd(K?d>S25?4) zi#?ySiNq21`e*Jg$UFh*$tGA=Y#hF-*V0jatn22t`YK(NG;jV~c>T7*!;=@vZ{f}6cV zSVp3BENlWVVXBJ*Ijg=l)mkZ*gEvUxw33032lQ^`Uw4?i>m~!U3iICP-K~!L#q@ctv_G;3O{8UFc5a5 zmX`8LM`5tQT39797dw{toh!KgDVLh3oTh#Q94juGg;b{QL_5Ll6+@4PISKsM9SwYQ z!KUQcHj!GKR1~>82DBwab9P^5l2b|jPvW+t_Y9tLX?5)i_i)aJj8Vo={s(O+&6i^2 z!TT~kpS_3W9D1k5j(d@3WtKhx%F(Gt0VKKGN70CoiXBPsi?TrC%av|5Ee0vpfA-d5 zS3Zu3Iyd4AJ5Iy;9ey^daP>27+fH>>XVi;MQYua8#@3q6(BbMcvX`U?T4}6kq_3*& ge&-95@bt1pKqh}8R@>M=*M5iq)qAg3qX%91H~0#}KL7v# delta 1011 zcmV9Ub9sxpw0udxZNDzWV zMMMEY7RnC@5(NcCegVILl8yqUhlYX*1wsKRLVzMf5fm(>WNZ|B#zSn!o|#3nE;_oN z$MvM(N=I|&-gEYI?X~xX2e>4?Ch0l;k4w@8NjD^2mvnwoIe(=wN~R^fF6m84Gr8Ai zfhk}ScqMnPCh4N2_ax1Y(oq>>;LE^e;1KXA@M-RS-z##@KLS1gYQQdVWugcG+rWMQ zz9H#!fz-STT(n_(Kzrg80KWo%SlBGEEUB8?llT68r=<#f4P2erfQZ-uJ_kCE#EZbW z%vrDhjF9veaDO35%_kADS;zoMRY@;MIw@%?+4G}Umg{#VP5Xb@t8cJ<2s{K#1784N zCGsnh79<^&R2~GvXMlHnzb5IMi1;lckn|<+Ja80v7B~-F1D1g~;Cn~roTG9F_&6f= zth^31Y+T94ujdV@ILvtSvZPbMcMb#zO}IFh`2GN0#4h2YgYQO!6+NBYa{POga#oP zNymXRzzNrX)rMS&h~Epcwi%-ocE;aNZgNzl>_#Q!%OWa?Y7S@5@;V=75yI5sJozk|<4eXurNHo#A5^l2Qv;p^T9Q`tPNY;^^3=0nWhs5$1)9$1&~(`I zp3f|riYp1AyQbo1#to@gbstJgW<8@%NsGW^Ku^-mh}d?im3?1x*h@ZhThfNpIG?oc zV}EAHeciB>w8{?fH?SEIa-%wCFDgLU7&&gwZzT~6;E1Gk8@6HtmJDcF$36^f_+`(? zP3d#Vh|cE3ZQzmQ*{oBvnVx@oSQ)IAzFPgG(cZSX}d6M`y;- zo7jMqIM$1>q4#Vg9MXS~FQZLhB@dheOxiS1d*eP#Dr3Cq4+2hN+>wNC({tSs=Za56 h1-o6@Jg-S){0nJ;#4_dt*)jkC002ovPDHLkV1g}P*?Ry0 diff --git a/themes/spinner/throbber-0009.png b/themes/spinner/throbber-0009.png index 35bc4817c7b488dd8908b59f66c9f0d9241f4e69..b366daa8f009ccc64fa2356234e45d09e544486f 100644 GIT binary patch delta 1589 zcmX|>eKga19LIlbwst)>DMA+O;BvNkETf2tMXfwVMr^H&joocgvi(?Hh4QcpMW}8` zIUXXCJEjNcN|Ce~m6k*#OUf$4o$kZud_U)X&inN_@6YG2uM+-HC*KML5G?-)4ghEy zF1H47q0|@v08g%OICmSJK?AUHNlY3xp3Y>(Qn4I16?>4*#j+Sjm`R7Yaae8~jY;ER zIV^f&B8~l@Vkit+;(m(Y2~-_ryc|V{<ZjU591zY~LVC5Fs%)g1XV{0Nmn z0|7sdCm7HPRXtjPCWv?&L{bX~e`3?R9Mwa;igHE*H{^`qBBEGD{p89o>frNPWYLE|Ac!`E8Qy*4 zIcuE9)pm*9ty*2h+oJ(u*OKR>Ce^il?c(N4n-sDY;^dAIMS5>~)YQX+yezWBTv2Re znQ#`^`G@cNHSrYcBa4XD>{ zxhbB9yqnF{T8eIdM2B-{?Cd5Gao->>A!ga+=-U_2tdD0}dreYcbXRI1=lyKb^z+z+ zfm$;ehN#j?^NDOf0AC$S&*xTn>TjLKd+yn5Rw#^GjD9Ryd#|&Tw9Pw~!S?j4lq!_D z!fdiTrRVugIj0WNrm=_y;oCu!(rr-(KEbK z{_EGrC%uD`$5y)gir+*J3mblamA@-3Rq(@3)>%!g%U!UqV|%XI1Db+?@q4NXmwQee zz0|w=W^%~8MyvJ5!LIAVu_-xO3s%!qH108z^uBG}R$lTW#CnJ?nXV`@w(FvH50&eh z*BKV9j>}nCTc^Dx%gC>Yyrus}nP|WMwJ2PKh5LN9RVUOKhLmJ9QVx362fa|pw~Jd? zp=heTbqg%=3h^4!F#_x!+);X^VfewEwnnweIsc@29pz1wVe4Fz)wEHp%yY-pdt8sgwC-eA}FbnO{=vhzIHc^d9l;~@&Slh+{yW1DVUttV(LfPkM{?ra$vz=r=zgVrztL4vhU6iGkWAL+i!W-kQky#BSF+II% h^ZWy@#8p&uX9<$P>1ebLmM(w60MU0Rp~gE#@Hb`h-Ae!f delta 994 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 TB1x*~00000NkvXXu0mjfApYv= diff --git a/themes/spinner/throbber-0012.png b/themes/spinner/throbber-0012.png index 91fef168da709dee773b833e889c6d2e19d27de0..ca4f0172ae9d1cd41986c14896e8e7717b3e7d0d 100644 GIT binary patch delta 1586 zcmX|>dpOg39LIlSh*55pE^4t{!fs46qSy>cDY-|?FO$vIHkS!Mrcy^Kq_Zx}>2j2W z3JtmKoZ`@lj#Fe=grk_{l8Tfw^_=s0zMtp)Jnz@%d4E2CedQVw?Q^COpvm?K;sOA| zV5woir7K1N0J!idfjsvZ1_)s2EGCFK9K&Qr&@fyM4HF&1!>}2ACM%vt$MEPN6XasJ z?3lPXkn^9SBN<>^RHWcfxH8IUDT*Ay0|7i1N5tT87`!bKha(XPBm%YulJs^chjf>Q z{9>3OfW?x2JRF|!%-uoBmVLj46QP7Sd|TozveMIA^4ydbCj$5(Xe<_=-LveG5*jYS zeKar*1bB1~D>4$~AZ@XS*xdBJ9kohsu*CN&F9bP$(EmHp*sad{I^HO`{`YV`jRA6z z`y!ZZr7AZQ(=HfU0RUX;N#5ZXsCoQCXZD5thON;jc38U&Q^--m_;1--W&<&WB|NO^r! zF_-$Zp|db3R9U@JX~?-@w_Gs1=Wt1=bgg;K^YT8jENU$k8Lrd6^I3rLg8p<2uWwgL z_h$N*aLcrrs5>KTQSLKWJlHA?M4hLCfQ%2?jEtiLn<#Ss#h)j$&K8q&yPoFUFUvp- z7+1nkBb{IB%79=wp5hOxx$}oU{5%?F++c2cCuXg0w(0|6WRvNaUP9u(xIdwL?&Efr-go%>z2CP|?MSgZu%LU_$eqQ(5sU>BT z^NU)H(!BhzS+OB{yo+^rbZAXT`cOheZbkSt*~`#Ilx(AoCh}}^pqb8^ZfdEoBP4iw z*`mKb`Qk$j$A;!r#8YEiTtY%W-I~&TPDkBdXEpPe1BoAyO?o5FYpym++-O{Lzv`#r zfA+BC)TvuutVT^6*Ly(g=m^7eXxRCbjoHb@)o)X$cPGk#e$-G+mPfr4*?*+XrY&S1 zUe%csFCmVvF(G+-7D+0J8Zy;tPpD?1`ys}(I_qYDoF8&*b*tc2mcLVXU(5)hT~=VS zaJoX!J$8tm`Sn+PHuE{*1a$4(wmqQ(Q8 zz`U;JUZYm3X})&^9`%Q9#Wum)9~l_BHw$XQdDSxXgvktlD?c%;SVZfMZC^_jS2J32cF*kh3eN}2ln9fypfp!_!k5 z(uFG(*REU%?$p0P#ErUe<-(miU5KE9V7qeR%8%j)YDx`iscD;LGHIe|CdbXWa2@9> zGw2I1b9wK)&*yp0^IRBV*{<6@Hi`_5pnL{61+;))BsGVTQ-ABDqyo$U72t-XR_XO* z&MUwa&}_Rm9r+t=_Xam0%1`C_2ynUG#xD03fO%jHxCs2wO+lrP0S8fH;JEF{0a7yw z+#cDr$Y59lwt$^dwB~L1!_6FUTOzgv+!)#bNe2mED^aK?x4nQ_2dXjRvZVci46t3X zJ!^Y9AS%{oJbzL4eCd60X4}=|y$X!S^Q$HKW44!UKWO`CClD5ZI{C7Yl(aPaG}2BhNsLA@{CJ(0ZsF6qyn%_v~$#Bv6JR~#3@g@Cy5*<}I1Wq{ zDX4cz0YGzv6s!QJ+oD@Ex1WG7`U$8GJN4LJw*6SYyXw2g^4bILh~X>1GVq!0cYh@P*f9dB`GpJ<1r=8!>^g8I?6@y! zr;F#0hi)$c&jHUwUg7yV@DcEKfvd6sv%tv`N}X0*G^07-t{{3<(yr|zKsC>&fltye z-jwu;?fYZM*^ts+==mi{AGQx9l~O4-kQ9B2W!!v{HJl(z{a$Wx?}511ADfGOTU`=YR*oE$;)*7r=|bXXD&C zNw)@`|1-rrls%L4yKS#zFXZfL+gEKjY+tkeR6qHZKFVwHvPjQnCZTTY1K{IKMPtAV zwx>s#ipvbS7eKnl5DV}Ya4q!y2=K%x22hmefQ@eD*Ji|*zf0?fuC znDo^QoekjA|LWtko+-KtT#~f;zkVH;=Eo|~=!K15>u-W=z3o(9@SFeu002ovPDHLk FV1i^N;yVBU diff --git a/themes/spinner/throbber-0013.png b/themes/spinner/throbber-0013.png new file mode 100644 index 0000000000000000000000000000000000000000..ace8764887795c1dacd9060bbe7d0e1ea932abc5 GIT binary patch literal 1612 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 literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0017.png b/themes/spinner/throbber-0017.png new file mode 100644 index 0000000000000000000000000000000000000000..ce792def5cc6aac0b16a4ac9d029aca472c08595 GIT binary patch literal 1572 zcmYL}eK^x=7{`B_%EqXz!<4reDIMFCXoN+XQ>TRTmd5yDY+kl0v|L6B%S$>5qg7H# zr$XC7VI&=u$ysT#v{s?aTi(LTnYzw(p6j{q?{(du@AZA|zn(15eeQ7BS{MKTa1WxJ zmr6~RN@InpGm?|1R0547`ZEAP6S-7sKuIY|HFRd~@?-9%P(c6_8A}5(Q4|_2BoxD- zhhicqOiUa#i58o{jKnY_K^n-wFybgNF(CavwI)-+m@sl$r@AT%wG`zR!UO>uEY2Q- z!(nW;nBZ`DTU)#>R?sSWs`9K_^7v3_Ab`cHPhQ~2dy`I*qIC6=5sTKt3 z|37Js-R9x5z*J$xkL;vSD#$SL4xz=V6u{Zorxc>B06@Lb!;RqM2R&cd8C`a8Rr|SB zzg5cJi4{ak!p^t@{G;!#)jdC@sb~5fZY}+4oaqoh(%NW}d8zK0c^%@j?`l4g!f*2m z$h>kew50#*Lg$VyE+e+T5I-*69w90%juElres4meB3h8KmlYqYQ;dhMD=dg=~lA90&00gHr+_yJpV&f zusq=|^wvCDvV0ce;iyiXi@zjQ-yk&lYQ)mEetz~%8|Y+~UpnGqP$~ToEn9P!jtqR~ zEn9)DXYk9gm8RQI_@)k%*g7rR^%eu(&&tmrg1c*jR_3uoU2H6#8&!Md4Lao~3?3cE z=NFL&otE>SXT7zZl4sz{bBkN{D*PRCQA4q^lEJdR6i#(Cq9$r&v=&(~d*dPm)BVz{ zvNWlKuC+e(rHRE|n3dq09#_D3X76#aX*E5>cAwrF#|uMOG?yJm5T7)Xio~qnjiqW@ zl}Bb)5P#_p?~t@=3U4}g;l(pvXtG?d1t~PMhf2+$oO#59hfUEN6E{*zT0Wbfoe5~M zm5nsPn%c)KB*V`3xop9&tbWK~>Phn`M~AD_H1UAVothW>i=GAuvPTXoPC`?Je`SJs z_<~dk`WtS1W|)_z5U#Z!4sy|h_8m$)(4MWvaza#}I4VO}dVG0Se%v9?BHUB+h>VPEs-aE!cHjZq{5If`p83rCCe zPiIc9C-5xMPePOt@LG2YE~!Ab{tdln=caR)$AU~>>QC(yMLGE|oBC6yKD_oz1eh3*_o++>4oC^yV_01KX%x}oCo0zPMq$8_njmL&fE&a8T_ZA;%@qE*n z(H~2bnhWE5m>-;q6$!HIy;nBxtG;9s)T0CAT8YL=X#0nCXQF$nM8&=iHNnXS-rd3#Tsuka4)}w6 z0`VS!nka3MP22xeUt8YW48N_dyVAl?3{ssZ*upBA-Z-Xi`K=cMd=od(AXcq8E!{_| z?%QQ{@pZ3K#zUbj9d1Fj33Kpcp;=X% z>y<*2$-+=&9*nDl66COgS<8oozOrNA373?xlu^&cn$E{VgZi(K8fME3l2iN{>2fLV z#`SiV+|Q8oP0rgsJ=PC NW7j^n+dG5P{sq3l&Vm2{ literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0018.png b/themes/spinner/throbber-0018.png new file mode 100644 index 0000000000000000000000000000000000000000..6423b95104fd1fb81420f5cc0cb5b1baebc90726 GIT binary patch literal 1601 zcmYL}dpOg39LIm#*j!?6hZW5wXDsX@oRLCDX@%SpQM)kLjoE%2VHr+QlpIDEN-pI* zY9cA3wo-1V=_W;@nnXgB$&xemoacO>@8|P=p7-nXyuY8nzDIn#Jv7wTr~v?=LEi4} zr%;oXQh_TvHznn>LR8t?gSh~puDenY;B+ZUVY+}@gTQUkOa_3Dif1wKG0`j*Eey}) zgyAEjK|GszfEAwzM&ZFI28+SPbJ@{xaSYCXilZ|bapCmL2TF=4)Jl{)4P*ee1R@Df zB;sv1m=K9h_V!Npgr+;sdlWNTD>DJnECxUzIQ_gtQl3(sg@UR4ScOAVKqASq!ga60 z(_Zm@S6Cbx@KbOEf^BZU$~^_tTY>&zj5r1WMseclbOy&{10jOV<@@zCE4c0o_fss$ z;Qaq2j^IEJkb?@W^CSB}7?Z&@@u#ua3I&L^q=UsMD*#X$AiKK-1gQ#&dvgW5Q5})E z!knN^bIv1jc+Q`}IjU|r@O7YCrpj{mci58p-o_~Hr+2Q|>~(L9F+7=@7i#Heb{FNa zida2f^A^0=JN9ypH{CqFN`Oooo^$R!aPZvREtzEHFyrHUx6ht`Z+1O4_Tv6Q2XAJ` z&1aZJT=r4dF;rtlMbFVW5wCxtDGjWTAH|lrRh&Qu@1wY^IW}LvyyIFhbqIMj(`&{e zS>+ibOI-718F_F_yHQiA)bx{4j~QWH%Q9s9sV$=vIu9O~wVRy_w~p~xH&JyuvW0K{ zhcf0g;-Uymecbkob+sIJ32)_!6lq_9Ol8E5=Mt0*w@62~)|Ee(x>^O3mO3lf%vw>%+4}E;1qK0ZSg@wkMP=EoMQ`i zhwu9OFP*ml^tle2zZko4e!fD_1lHBjIX9=1g0PNQ=b=n7s?DcQ?Rw-9(YI_s_3R>d zo{4-v7A;zLWdYm@_(=p!jNdL*q;xK$M70K-GN=6<=8+=&M>~vjk=g?ex zqKRJGzFwYInCv`|kSRZzqU1PX+Iq+cIHb2FNys!!Y9;GXo=n}hAh$?j_?z=f*Vzjz zWp572NNR#^uxV$xTVUco4y($cKp7iZhw^keZZ>c^tR&6QI^1S613K=Ro3~MX)gagq z3u!Pe zHS&$sPciX@7f}7rFllLLcsG}{S|O7IX01;r(&4pK=dEQ`q-l&S@iH$#i2P{z&E$s4 zS^jM?cV^GM_)7+&s!v0i*WK>EwL=z*pq4Il`}4+n^#-L%C1RLKHISPOzXi+wtls^r zovLA3gJ6knnp#{U(wR}0*`%Zo_w%Q}LP;7D=x`#>ynp8V*)-_4)?GDa{DIE;@++n{ zG$%3Ucr?s|mA$+zX_@%`)iQ36PK5c#qgj=k)NTEq8(<34HQx<}VyPY4)aPCh#PYCw zX?}?3J3BA$SzNu4Go9CJ{*$MX^ zR@eINUptfEjTl)wvekK2%eZ*(vj42#cRe+}o{%A|w=^MtCg1aSkJ~)JA=tE6LQCna!V)P6BwmjP~WQjhU|7f6Slks1M sHyw}tVF8gt-stkA?cnZ`rS_ghWCxsXXObb9R{Vhgd8@a(a0@l_U;abPJOBUy literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0019.png b/themes/spinner/throbber-0019.png new file mode 100644 index 0000000000000000000000000000000000000000..45e935927623eb5ebd3bbd1f5f6aed9207a55c88 GIT binary patch literal 1608 zcmYL}dsNbA7{`Bj<6^8xBxmzB4OgaI3MER>1u5mFDHf)AK}k(+a%twJK(=M6c-f{| zG;0;QwW(QI9z@B~)-bWQ2ptP6J1lKpn&vdM{cLAv?|Gl+d(QXsobUVm^&a0H9gak} zA^-qDG9qZPpn5JB%mM7;{QPN9;KGOmF#tF^Ef)khrE&pHs)Wvx?8xSF09=-U$H5)U z=JC?fabi(AE;Cz#6LJsp1X4*BPLjppal|;WFq_Zki2l<6HkZTCU>D!B1EXA)qiAUo z4nV{c$T$K4N8IE|AW%po3JKrVZPJ4?tCnY&**p$_$5Z~jge`Au>o0>0_HGqX8VCtn zQZ5SnKo7O-Z3it;8t|_K;PJ%LN3b3cqL*P@I)~2zBv~Q>o6Qk$}NLQnw$k$j}a#SZ}No-k-(Ocwm}8g0&n zc=WL^y*BDw8zYi3SRW%$Q>AqD56(=xL=<=9w58<=ntS!~Rc92<4wcZtLiuyiRG3%9 zirjL7L%FMOh~e&{R-8%H6buJh&0@o>b|R{#7Ch0>(KSBLcS{mxJFdqy^E`apwEG24 ziY#L+^k7tmA1&A=;9x40yemzaz8qqp!B_32Ls7#9B>VNENhJMlW+cGz?8W zy4lrjcIkSh!98puRJU&R=?tV9Vw8`S>WZODsjn!{T46WA7-I@YV z(vkp7D&Z~AaBj)a)@lA5v#@LO*#d0vP8D13WLD^sTD5_hXE! zTN_WC1-t9$gV*d$Kb}XnTTA?Pa8~8WXVbYUXTsUs8O#CHo6R#@+LiN#e(%#8er23A z^&4eyWX7a_3;csCIdd*%TX%=*XECDL3ELQj_p73?CJI9A9WwzS?i{f0nMfF_`khr` z9>E6RHWVK$lc>)K5f!pKvfN)8y&|?netq(HQuF46@k~!6Ce?=OYxu=S6T0X?*5z78 z;4=R4#E>bq_qgnmj@DZhnbgy*_1HU2YGyXGFirBiBkdUuCWivDu_!{;2}@_eD2tDw zRG{MK`15L~eAV&qE`3P+c3U8}MKnV?cw@ht%LmC{jw1HNfAwurYL04F)^pPQtc6hV z8iF?_Ga(3GoUKzq?uw^>L~bKwU-5IV(~e%S2<-FAETfKPIZYaQPnkAo=;7XhVz=Ko zn%!9Acgl0+HP5FZ_Z!xos@vHRG=*(+7>@4lE!)~pJ9YpwdU!~EP>Act4Dg;aw@v@MZrgI z#g(=GRNlGk>%Ye0^n(^Ox_?|T3{Pb@4BJn;wCS)PxdxhhBrK(`5stcZC zrwp<3tkFF-hr;HJD4&v_=isYe5=W&%H?C0gXT}%PwbMP16W+Wk#h4zK2aM;|-IW=rU5qjZ0{*I%U z*Dq=1RZc<+yaTad2PN*M_;IR(#uNDugS<6sq_r5Ad}!ZPK%Sz%XehIS!gzy}G7H>0 z9QY*rNX&zySu;g$ef0&-pR_MBP+D#nIoZyjFzCvA`;6~Dcs*wORtt+&7uq{whk>(&9A0>1Ai_m`)Tyz ylZqQ_OI6YL)DWxfZQuDH{K$lL(m@=3_Ajb$XmVakmnIzi3IPT^n%4AjYVkkv|H85W literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0020.png b/themes/spinner/throbber-0020.png new file mode 100644 index 0000000000000000000000000000000000000000..b84b04dd859b199729c63df17ebf7cbffe8f3185 GIT binary patch literal 1583 zcmYL}dpOg39LIl#2}dqtTPc>?ncFTRLwGEglq8f((S~8!W^E&ua#z^| zacx4#I31QHky~=vsZ>TR$3fvZQ_p$M_xXN4@8@~HKF|C6`RjYb!`($mVXp!J07|Y$ z9X%zA*r{D$NoTUzD-w~XAN6AbfFfk4q=27_;S$rH<>bq9CR0cNIy{m}LSG4D;(UYgEE^eO-k?lt43#l6TQP ziKn{b9g$cJBJfR67>rr^*seb$P<;n_1(RqbfECV&3<@GK5C<`#bY_C5pjE;lJKR&U zAc^t+lPHX(otNOX1gm|`jt!=ems(11=f>Q zuqBknf`!l*C3a=ZfwiZFHn8us*QeiG4a80lSasU$ocm2p7P^Ml%LNbLca*TH8@Ps# zAK678(%s)6^DZA5^IYAqecKgtDHNa@g>{NFiz>5dC+}C|b6OWjW4QjVm6wXpuJ-xC z@QOuLi*$;*xf^KI2FVWgiCt5Dj4aiwe^tfP6$15d^f4eP(Lwa~p3tDhK`nh^B-NUH zLCO^+7yY2FI|NF=N7d@LIw^J85{S_I;M$}Jty8ZXryZ<%_aB2rZDz(w;n;020%=1V zh!Ff5ckB!sTny?h6z-G#&P1oeq!KFRCr%xkpd{!;|CTwfGs)C}3S}ml7hb-2kBo7> z5?_^<+%tD(uzKi57;4WXZGYYJKYdNinrU40BG=96(hOcp4xM!1L;zwg^gO@x<}Y4* zdAza2L}k#EgdrtDRqY8{&LpHQY5=4q+jDWIJS*|6u-dBM=ku!Z-6!L(*FatkKiM|t}fQV7E@ zVKZN_L+=jzO1aV?g(3)F@MWUI`~$2uJ-XOq@G+EdV6DFC?r7BcYf^^Y-3zN;boqjD zd~tQd?j+qu3hU2&2tcvrR@xpJS`eqdA<(kLonONq`#CVH<_QYeIt{(B&P{jR5U|RHlM@kVHIW;A*}WI{;F9(7FTY%th+3VBy0p+cf;_ZlwMPU)!zb=EA(T$8QERvz`W%+p>2NZv6X}F7a|Ew`Wc9IeJKNMtOS1;fH$90-1R6P2zRlVYP^wY8WWM^~sv=^_Kh>$_kw)jLp|c-9gC&n%x}{VW7Mn6cfgN}F z6Mk4Olf!sNFRO?jF(zoJU)c5t@KnTn5(qU2vt^heG_o5}!wYnG5!GAF?YUi-{Hkg4 z_`0;O+#AE5Q-N)3S4w5=InS4NMJ9CQu7VX#Z(kYjkX_kU-IPIbjDxTg8re0YBNzK{MGz{e#*6bxuWK&3Mf-O=2gesRjyk* zsMd#45M$=txj5@RWIbbH@C-e?q*~#IXpbI#y<+!io|-nP>315r+b?X%;mi0O>}=Ez c5cH<~U;AcCT{$u^$&UxPI=MU6;t5Ir0u~;_O#lD@ literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0021.png b/themes/spinner/throbber-0021.png new file mode 100644 index 0000000000000000000000000000000000000000..a64932df50150f1ac1e29b1d181b80430f802459 GIT binary patch literal 1602 zcmYL}eKga19LIm#JZ!|pT*|WumDz)bgtRcTYHq1csCn8Qn{BqX)lAq>Nm8g=vh~QV zZc28Ft5n!+6BDj(EfOP%+x@9?&pqe+`M%G2zdq;v`F#KR=4}fn8W~s_003Y_ z3JZw<)nTdNdf?4ZOVfga;D$x<0l*NsR1lz4wj4A!3J8&cPzH+zpy?bo4V}zjv*W2~ zK97n{VhGS&mWa*SFQB6ZbQ+t+NAtOiloT58KlMmp(Nca+$nMYqqn0m4g~SVJ01kuo zMPspOoTmd8>*ww5=Z&dR^tFLKCQCg#8EhJW!T5bYIPBm|2p(kcZ>#X)L5Rbq?WouQ zdZtTWFlh1Of$!ph!Qk?H;YtviFTovDS_%yi(0QDM1RBr56O+j0OCs9tfgHKSBfte| zy#GgfV0=hBzX(8V_AOgPWzqN!JL1_~PysB?H}lN$wE&>gPYT(zGZIm7wu5Wci3LH4ELpv{^qg6-wjl-eokTLt0Qa@}4JopqG`<0{JH57E(^g}NxhHVobL zLD+kuTXARs!-})8*twxg+H;UoY8-HGz2|giKvJhj-5*XSlgIy5sZ?cj;&9vj7wij} z{C>X{_Owbim)|w&d$&KNck?iNSzWI9QmEe8s>*>@XK^~MjZxJfoYNRrDtqYtVZD}B zozz_%3AHwf-U1t`>l-0<2gX6HK5gUUp303v1USap9DulBfp84r$#Mv1q=)D%5ca;}i4#s9EZ2b_{V{Tef z`_(4%yfClN#kIyhZ@r&*IhRM$wZ>1b*<$)y(fH zwMLt*JdC$MTtTJ8D|538d83M=-15&^`#WZg!-m}=LS=3R~^eck{j!*B%owKdnl+{IrTp4rpRt}kSAaANUi2^f> zh16#!Nv6zGEmDawklRvDtnzl$@7+as#B5sN-SF4mRms#vQK)STf6h65#R9;ZFb^<$ zeQ5A{^WL=egDWjeR;#>Lf8b6Hclq6)@i$sf_m&7->&oc$dSe}y;Ik7$f|^Q-t7qx| zxQTk7peB)%1>7~sYP0%s{-Eb{tGx}uT^1@gx@*+4Rm>VGYMQN`Z(#UBn$ZYs>@}|k zFyGDCnUTjwiniA=0&K=7m;d9e_IHqFPkOYEkx!9L4Y#hjfmW7{5-(Iw7`Ky%o$nD_AuAPnDUA4E}l!=h7S_WRGq{QN21!Ad%pGc4KXFALfl1( z?6N+mu9{CuiXHSqy_$PARL9B|%-!({1vTOFdzlT>UGh_dP1Obe-CvSpppT3W3mk{8wA$WXMpW9SLmpji zlzM57#=YSOlH27MVfHZTeWuh;7olw|NQYIek}u9jEmP+XtsSyt?sTt#R%SDYk}lZ* z#D+SD=G>@I6hboy9lWJMW#RN>=Z`#&;aV)f4j}oD|2QUoDs0S{+*17&FV?q^2yY>5{bq3sgh_8zAh!^)9nYex}R?KS6**2oI?Yip%~Nwrj*Y literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0022.png b/themes/spinner/throbber-0022.png new file mode 100644 index 0000000000000000000000000000000000000000..4b57e234270c5b3810796a93de9e85e008f446ce GIT binary patch literal 1595 zcmYL}e>~H99LK-PHRIB1$}-h-N-nmU!;Hd3BZ)>?UGihiuk43yE>ze?8g~+MlpmG4 zx+L>+QuL)&Ty>~hcE@H%NAlx{Z5DE0caMAA=ka;JUysM@`F^}U@4r5xfCJ>!hGvEU z0Ic@$_M||HSuTTBQ0FEm&q4xcdmrHffDv-J^nlAHD9CihN zjBpx`%c0?-Vt6=qToQwoz>CK5qUj7e7sqACFqw4De~OKWqccxL2wv(#QK;o8&u|_c zAmHtYI6FHW!5(90M{;l=Ip7=H<bSiGZ8&^!;q>;B13qQ%jjM74NWJ6KPLer8awaT$Eb4rqAFvCv1xP%ewIzTba8$*KcgnxgfC@8Kz&T(P~4q z;A*kEhh&ecb>H|0-r_r?iUtYdg3>oI94=A6eQ|Fn>OYTOp^& z#F{=I%qUh2i2PEV6-gc; zskvU%FsXfeRL>(g_Mnvcvg)4sXxiRVcfp*boBK^Lax5^|=9e65$%swIq4-Vl#R*wc zNtbV+zsFp8Z`st)c*VymJMw0UEiena$xF@XGM-`Y(VA{ ziFH?ZF_m(SY0-WvR8J|F^}UziyO_f2KXjKGT2e zs?P%~wMWhnT&C@tz+y(1bwxjQ&v&GHvRHziw|V#d!>4!ptW`g-;og=%MI1a1E}Bst zcI(IqLN5FEGgE>2oo|N<2J1i;n1IoRsPx#drZsn`Z~PMAlJ60V&M!I!7bWNU_bJG+ z4;5gm@$ZFDybk^yU>eb=NLLo~4Yjf=kC3Tu( zA6)ed`EUWel{<2)h_SXaosyt6MiF6HK`Q8~GkrFo(&mIxyM%QrBI?s{`bkyxD|pB` z!LOs~RlDG2`dtEhFz2mq_Vk1LdD!fX%0+yMUt!Qlt1-|nwr8Rh@h2vtDCcLypD*;k z0T;oqKdlJnKh~h-7ZXWj1)0@S%@934B&wd2@tt~cJ?qA#sS>1H=@+{CosZ>XMG4X7 pj+6Ucx<}|`XAc`QUQ3;qw$zWv#>e*6g3#{=_;?-gy!UmO;BO1~<);7u literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0023.png b/themes/spinner/throbber-0023.png new file mode 100644 index 0000000000000000000000000000000000000000..b3dbeef0ed06455beaffa218655d8070cf2324d7 GIT binary patch literal 1603 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 literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0025.png b/themes/spinner/throbber-0025.png new file mode 100644 index 0000000000000000000000000000000000000000..3905e00eeb09a3546eab2dec2158fa9bc5f280f4 GIT binary patch literal 1604 zcmYL}dsGs36vsiy0B0%Uqm1bmq`l;kHnoM1K%;zt6bZkrln|nmSLJL?-Hj|I$$3}BFOx}NLPmf`8BIs$)K)NW)~D)tx*E~gJH(?R$$3}7%hOn`vJ-OqTR4)B|7+(ci8SMsz0-Wu@mS z9(E}B#v7oGQ|&_<@yEfg7Na%uiOSB-iwlumO{ClP_4T+Nc>L9ks&n%Cn!~x>oS0|% z^0ib3ox44q;a`)gE|{-aEj%MU`A6e?Z^e~}Ja&V@Z+#j2YvRnK+S*+N+BFCGh?H>r zHS1EhxxBsOO7-VO>e=g8cr@9=hnOEvva5FKEyWiz-{Gtkp5PD1069e|v>cri(#q5;ziiY58p?ksP zu_V29EJ`-(anf+t+sSS{sG&t6V>-p zGmBH4ce!bU!a5OPYtehVrrKx94c-)^bLCsLJb5)z@z+N+7if5>XMY<#uI#pc*SWG@ z0`~~jhcyikE0|glM(K#Z2bbM3jxp!v-`Hk&kZ>#sVW&oos03a5H6to zp`~-BM-`?bt%z&^YZaxH4BgK}wyum%C60$aSwBb^Qq5j^cr9`?^p$m5RBE%7n@*)v znp5+Ni!SVf$&oxWd3lJ|*sRUcw!u9hx5(LnaM%B;L2slYXB{iASK=X`ucL1FRoSvcsM^y_=sOM?v#moSz?Av^`%uIs8f=J zjsm^vhDPnYN?NT&Ef{%= z@ps<PYq;ZF~D4IVE@+G>%VU|P~h%*?N? zTaq|ppr$Qzkn;SuOz}0Km#f(htaP=)D^_3r$axYZ2a0BM`t{<+d&F~XQVR*Bk&Am^7d4XaWsbl~oT7)zZjixz?>dejRqAvxsS|r|qQq ztvL=>_7)aooX>-^7G9L-I&j%Q5|j$SjF wD~E2)ka~oIzC8+u<0Gd@SoVvtpxGs$Ch&UB0pY0y-8Tpz5q$~O9${(!0^C;FL;wH) literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0026.png b/themes/spinner/throbber-0026.png new file mode 100644 index 0000000000000000000000000000000000000000..4c02eb167941a3611d36f1b0cfab5086d77ad0ac GIT binary patch literal 1605 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 literal 0 HcmV?d00001 diff --git a/themes/spinner/throbber-0029.png b/themes/spinner/throbber-0029.png new file mode 100644 index 0000000000000000000000000000000000000000..d9931e1ecbf2708841134a846f9d36d9cdbd20f8 GIT binary patch literal 1588 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 X`%H>)eQ8Yx_}u|GPrOH^dqny_<-gJq literal 0 HcmV?d00001 -- 2.20.1 From 50adbfd30085715940a22f1517c81584d73d767b Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 08:24:20 +0100 Subject: [PATCH 07/82] two-step: Fix crash asking for password with multiple heads Commit 9639ed895331 ("two-step: Fix animation not starting on later added heads") unconditionally calls view_start_progress_animation() when adding secondary heads, to fix the animation not running on secondary heads when not asking for a password. But we should not start the animation when adding a head after we've already entered PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY state, otherwise we end up starting it a second time when the user is done entering his password, causing plymouth to crash and the boot to hang. We already have the is_animating bool to indicate whether animations have been started or not, use this to decide if we should start the animation when adding a new head, fixing the crash. Fixes: 9639ed895331 ("two-step: Fix animation not starting on ... added heads") Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 924207c..0ceda90 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -1004,7 +1004,8 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, if (plugin->is_visible) { if (view_load (view)) { ply_list_append_data (plugin->views, view); - view_start_progress_animation (view); + if (plugin->is_animating) + view_start_progress_animation (view); } else { view_free (view); } -- 2.20.1 From addff821e0a036f7158758e0bf0ac97688d7500e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 5 Nov 2018 15:03:28 +0100 Subject: [PATCH 08/82] ply-image: Do not assume all files are PNGs So far the image loading code has been assuming that all files are PNGs, this commit makes the code check the file-header before assuming the file is a PNG. This is a preparation patch for adding support for also being able to load BMP files. Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-image.c | 45 +++++++++++++++++++------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/src/libply-splash-graphics/ply-image.c b/src/libply-splash-graphics/ply-image.c index 8b46978..fbf42d6 100644 --- a/src/libply-splash-graphics/ply-image.c +++ b/src/libply-splash-graphics/ply-image.c @@ -55,6 +55,8 @@ struct _ply_image ply_pixel_buffer_t *buffer; }; +const uint8_t png_header[8] = { 0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a }; + ply_image_t * ply_image_new (const char *filename) { @@ -112,8 +114,8 @@ transform_to_argb32 (png_struct *png, } } -bool -ply_image_load (ply_image_t *image) +static bool +ply_image_load_png (ply_image_t *image, FILE *fp) { png_struct *png; png_info *info; @@ -121,13 +123,9 @@ ply_image_load (ply_image_t *image) int bits_per_pixel, color_type, interlace_method; png_byte **rows; uint32_t *bytes; - FILE *fp; assert (image != NULL); - - fp = fopen (image->filename, "re"); - if (fp == NULL) - return false; + assert (fp != NULL); png = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); assert (png != NULL); @@ -137,10 +135,8 @@ ply_image_load (ply_image_t *image) png_init_io (png, fp); - if (setjmp (png_jmpbuf (png)) != 0) { - fclose (fp); + if (setjmp (png_jmpbuf (png)) != 0) return false; - } png_read_info (png, info); png_get_IHDR (png, info, @@ -188,12 +184,39 @@ ply_image_load (ply_image_t *image) free (rows); png_read_end (png, info); - fclose (fp); png_destroy_read_struct (&png, &info, NULL); return true; } +bool +ply_image_load (ply_image_t *image) +{ + uint8_t header[16]; + bool ret = false; + FILE *fp; + + assert (image != NULL); + + fp = fopen (image->filename, "re"); + if (fp == NULL) + return false; + + if (fread (header, 1, 16, fp) != 16) + goto out; + + /* Rewind */ + if (fseek (fp, 0, SEEK_SET) != 0) + goto out; + + if (memcmp (header, png_header, sizeof(png_header)) == 0) + ret = ply_image_load_png (image, fp); + +out: + fclose (fp); + return ret; +} + uint32_t * ply_image_get_data (ply_image_t *image) { -- 2.20.1 From f5915187b44dd18dd9d1956d169bb17fbd4078d4 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 6 Nov 2018 09:15:22 +0100 Subject: [PATCH 09/82] ply-image: Add support for loading BMPs Add support for loading BMP files. This is needed to be able to read the the ACPI BGRT graphics (the firmware splash shown at boot by the firmware). Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-image.c | 88 ++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/src/libply-splash-graphics/ply-image.c b/src/libply-splash-graphics/ply-image.c index fbf42d6..204fd2e 100644 --- a/src/libply-splash-graphics/ply-image.c +++ b/src/libply-splash-graphics/ply-image.c @@ -55,6 +55,27 @@ struct _ply_image ply_pixel_buffer_t *buffer; }; +struct bmp_file_header { + uint16_t id; + uint32_t file_size; + uint32_t reserved; + uint32_t bitmap_offset; +} __attribute__((__packed__)); + +struct bmp_dib_header { + uint32_t dib_header_size; + int32_t width; + int32_t height; + uint16_t planes; + uint16_t bpp; + uint32_t compression; + uint32_t bitmap_size; + uint32_t horz_resolution; + uint32_t vert_resolution; + uint32_t colors_used; + uint32_t colors_important; +} __attribute__((__packed__)); + const uint8_t png_header[8] = { 0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a }; ply_image_t * @@ -189,6 +210,69 @@ ply_image_load_png (ply_image_t *image, FILE *fp) return true; } +static bool +ply_image_load_bmp (ply_image_t *image, FILE *fp) +{ + uint32_t x, y, src_y, width, height, bmp_pitch, *dst; + struct bmp_file_header file_header; + struct bmp_dib_header dib_header; + uint8_t r, g, b, *buf, *src; + bool ret = false; + + assert (image != NULL); + assert (fp != NULL); + + if (fread (&file_header, 1, sizeof(struct bmp_file_header), fp) != sizeof(struct bmp_file_header)) + return false; + + if (fread (&dib_header, 1, sizeof(struct bmp_dib_header), fp) != sizeof(struct bmp_dib_header)) + return false; + + if (dib_header.dib_header_size != 40 || dib_header.width < 0 || + dib_header.planes != 1 || dib_header.bpp != 24 || + dib_header.compression != 0) + return false; + + width = dib_header.width; + height = abs (dib_header.height); + bmp_pitch = (3 * width + 3) & ~3; + + buf = malloc (bmp_pitch * height); + assert (buf); + + if (fseek (fp, file_header.bitmap_offset, SEEK_SET) != 0) + goto out; + + if (fread (buf, 1, bmp_pitch * height, fp) != bmp_pitch * height) + goto out; + + image->buffer = ply_pixel_buffer_new (width, height); + dst = ply_pixel_buffer_get_argb32_data (image->buffer); + + for (y = 0; y < height; y++) { + /* Positive header height means upside down row order */ + if (dib_header.height > 0) + src_y = (height - 1) - y; + else + src_y = y; + + src = buf + src_y * bmp_pitch; + + for (x = 0; x < width; x++) { + b = *src++; + g = *src++; + r = *src++; + *dst++ = (0xff << 24) | (r << 16) | (g << 8) | (b << 0); + } + } + + ply_pixel_buffer_set_opaque (image->buffer, true); + ret = true; +out: + free (buf); + return ret; +} + bool ply_image_load (ply_image_t *image) { @@ -212,6 +296,10 @@ ply_image_load (ply_image_t *image) if (memcmp (header, png_header, sizeof(png_header)) == 0) ret = ply_image_load_png (image, fp); + else if (((struct bmp_file_header *)header)->id == 0x4d42 && + ((struct bmp_file_header *)header)->reserved == 0) + ret = ply_image_load_bmp (image, fp); + out: fclose (fp); return ret; -- 2.20.1 From 1723419e6c3ca89a973250ca8ca955baf8724af1 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 7 Nov 2018 12:24:12 +0100 Subject: [PATCH 10/82] ply-renderer: Add ply_renderer_get_panel_properties function For some themes we want to read the firmware-logo to use as background, when the LCD panel of a laptop is mounted non-upright and/or if it is using scaling because of HiDPI then the image which we get from the firmware will be pre-rotated and scaled to match the LCD panel. This new function will allow renderers to let themes know about this so that they can adjust for the logo being pre-rotated and scaled. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-renderer-plugin.h | 5 +++++ src/libply-splash-core/ply-renderer.c | 15 +++++++++++++++ src/libply-splash-core/ply-renderer.h | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/src/libply-splash-core/ply-renderer-plugin.h b/src/libply-splash-core/ply-renderer-plugin.h index f1455d3..db18d19 100644 --- a/src/libply-splash-core/ply-renderer-plugin.h +++ b/src/libply-splash-core/ply-renderer-plugin.h @@ -68,6 +68,11 @@ typedef struct ply_renderer_input_source_t *input_source); const char * (*get_device_name)(ply_renderer_backend_t *backend); + bool (*get_panel_properties)(ply_renderer_backend_t *backend, + int *width, + int *height, + ply_pixel_buffer_rotation_t *rotation, + int *scale); } ply_renderer_plugin_interface_t; #endif /* PLY_RENDERER_PLUGIN_H */ diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c index ecf7082..5e83627 100644 --- a/src/libply-splash-core/ply-renderer.c +++ b/src/libply-splash-core/ply-renderer.c @@ -410,4 +410,19 @@ ply_renderer_close_input_source (ply_renderer_t *renderer, renderer->input_source_is_open = false; } +bool +ply_renderer_get_panel_properties (ply_renderer_t *renderer, + int *width, + int *height, + ply_pixel_buffer_rotation_t *rotation, + int *scale) +{ + if (!renderer->plugin_interface->get_panel_properties) + return false; + + return renderer->plugin_interface->get_panel_properties (renderer->backend, + width, height, + rotation, scale); +} + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h index 59391e1..c0e0ed5 100644 --- a/src/libply-splash-core/ply-renderer.h +++ b/src/libply-splash-core/ply-renderer.h @@ -76,6 +76,12 @@ void ply_renderer_set_handler_for_input_source (ply_renderer_t void ply_renderer_close_input_source (ply_renderer_t *renderer, ply_renderer_input_source_t *input_source); + +bool ply_renderer_get_panel_properties (ply_renderer_t *renderer, + int *width, + int *height, + ply_pixel_buffer_rotation_t *rotation, + int *scale); #endif #endif /* PLY_RENDERER_H */ -- 2.20.1 From ed3aae9d8f79afb546cc9edeb8b051237c3e4752 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 7 Nov 2018 14:26:11 +0100 Subject: [PATCH 11/82] drm: Implement ply_renderer_get_panel_properties Implement the get_panel_properties plugin interface. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 34 +++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 1ff2b29..34b52d7 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -138,6 +138,11 @@ struct _ply_renderer_backend uint32_t is_active : 1; uint32_t requires_explicit_flushing : 1; uint32_t use_preferred_mode : 1; + + int panel_width; + int panel_height; + ply_pixel_buffer_rotation_t panel_rotation; + int panel_scale; }; ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void); @@ -542,6 +547,15 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, ply_pixel_buffer_fill_with_color (head->pixel_buffer, NULL, 0.0, 0.0, 0.0, 1.0); + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS || + connector->connector_type == DRM_MODE_CONNECTOR_eDP || + connector->connector_type == DRM_MODE_CONNECTOR_DSI) { + backend->panel_width = mode->hdisplay; + backend->panel_height = mode->vdisplay; + backend->panel_rotation = rotation; + backend->panel_scale = ply_pixel_buffer_get_device_scale (head->pixel_buffer); + } + return head; } @@ -1488,6 +1502,23 @@ close_input_source (ply_renderer_backend_t *backend, input_source->backend = NULL; } +static bool +get_panel_properties (ply_renderer_backend_t *backend, + int *width, + int *height, + ply_pixel_buffer_rotation_t *rotation, + int *scale) +{ + if (!backend->panel_width) + return false; + + *width = backend->panel_width; + *height = backend->panel_height; + *rotation = backend->panel_rotation; + *scale = backend->panel_scale; + return true; +} + ply_renderer_plugin_interface_t * ply_renderer_backend_get_interface (void) { @@ -1509,7 +1540,8 @@ ply_renderer_backend_get_interface (void) .open_input_source = open_input_source, .set_handler_for_input_source = set_handler_for_input_source, .close_input_source = close_input_source, - .get_device_name = get_device_name + .get_device_name = get_device_name, + .get_panel_properties = get_panel_properties, }; return &plugin_interface; -- 2.20.1 From 986c911e21b41464aa17006fd048dc38d5824325 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 7 Nov 2018 15:49:40 +0100 Subject: [PATCH 12/82] ply-pixel-buffer: Fix fill_with_buffer fastpath when device_scale != 1 After calling ply_pixel_buffer_crop_area_to_clip_area cropped_area.x/y are in device coordinates. So when calculating the x/y offset in the source-buffer due to device-clip areas possible making cropped_area.x/y larger then just the xoffset/yoffset (in the canvas) we must multiply the original xoffset/yoffset by device_scale before subtracting. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c index de3b107..04aa0d6 100644 --- a/src/libply-splash-core/ply-pixel-buffer.c +++ b/src/libply-splash-core/ply-pixel-buffer.c @@ -868,8 +868,8 @@ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (ply_pixel_buffer_t *canv if (cropped_area.width == 0 || cropped_area.height == 0) return; - x = cropped_area.x - x_offset; - y = cropped_area.y - y_offset; + x = cropped_area.x - x_offset * canvas->device_scale; + y = cropped_area.y - y_offset * canvas->device_scale; ply_pixel_buffer_copy_area (canvas, source, x, y, &cropped_area); -- 2.20.1 From e1e9e554d2014d80ce666d85174dbea89b05e038 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 9 Nov 2018 23:05:24 +0100 Subject: [PATCH 13/82] ply-pixel-buffer: Fix marking buffers as opaque when doing a solid fill Instead of comparing fill_area addresses actually compare the contents of the ply_rectangles. This allows us to use the memcpy fastpath in ply_pixel_buffer_with_buffer more often. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c index 04aa0d6..86e8e3f 100644 --- a/src/libply-splash-core/ply-pixel-buffer.c +++ b/src/libply-splash-core/ply-pixel-buffer.c @@ -315,7 +315,7 @@ ply_pixel_buffer_fill_area_with_pixel_value (ply_pixel_buffer_t *buffer, /* If we're filling the entire buffer with a fully opaque color, * then make note of it */ - if (fill_area == &buffer->area && + if (memcmp(fill_area, &buffer->area, sizeof(ply_rectangle_t)) == 0 && (pixel_value >> 24) == 0xff) { buffer->is_opaque = true; } -- 2.20.1 From 385a008c83e41d7958392bc4cf8aacb94965fe30 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 6 Nov 2018 18:55:27 +0100 Subject: [PATCH 14/82] ply-pixel-buffer: Add ply_pixel_buffer_get/set_device_rotation helpers For some themes we want to use the firmware-logo / splash as background, when the LCD panel of a laptop is mounted non-upright then the image which we get from the firmware will be pre-rotated to match the LCD panel mount. This commit adds ply_pixel_buffer_set/get_device_rotation helpers to help deal with this. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-buffer.c | 30 +++++++++++++++++++++++ src/libply-splash-core/ply-pixel-buffer.h | 6 +++++ 2 files changed, 36 insertions(+) diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c index 86e8e3f..1599bcb 100644 --- a/src/libply-splash-core/ply-pixel-buffer.c +++ b/src/libply-splash-core/ply-pixel-buffer.c @@ -1079,4 +1079,34 @@ ply_pixel_buffer_set_device_scale (ply_pixel_buffer_t *buffer, buffer->logical_area.height = buffer->area.height / scale; } +ply_pixel_buffer_rotation_t +ply_pixel_buffer_get_device_rotation (ply_pixel_buffer_t *buffer) +{ + return buffer->device_rotation; +} + +void +ply_pixel_buffer_set_device_rotation (ply_pixel_buffer_t *buffer, + ply_pixel_buffer_rotation_t device_rotation) +{ + if (buffer->device_rotation == device_rotation) + return; + + buffer->device_rotation = device_rotation; + + if (device_rotation == PLY_PIXEL_BUFFER_ROTATE_CLOCKWISE || + device_rotation == PLY_PIXEL_BUFFER_ROTATE_COUNTER_CLOCKWISE) { + unsigned long tmp = buffer->area.width; + buffer->area.width = buffer->area.height; + buffer->area.height = tmp; + + ply_pixel_buffer_set_device_scale (buffer, buffer->device_scale); + } + + while (ply_list_get_length (buffer->clip_areas) > 0) { + ply_pixel_buffer_pop_clip_area (buffer); + } + ply_pixel_buffer_push_clip_area (buffer, &buffer->area); +} + /* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */ diff --git a/src/libply-splash-core/ply-pixel-buffer.h b/src/libply-splash-core/ply-pixel-buffer.h index ea7f833..ddec47d 100644 --- a/src/libply-splash-core/ply-pixel-buffer.h +++ b/src/libply-splash-core/ply-pixel-buffer.h @@ -59,6 +59,12 @@ int ply_pixel_buffer_get_device_scale (ply_pixel_buffer_t *buffer); void ply_pixel_buffer_set_device_scale (ply_pixel_buffer_t *buffer, int scale); +ply_pixel_buffer_rotation_t +ply_pixel_buffer_get_device_rotation (ply_pixel_buffer_t *buffer); +/* Note calling this removes all pushed clip-areas */ +void ply_pixel_buffer_set_device_rotation (ply_pixel_buffer_t *buffer, + ply_pixel_buffer_rotation_t rotation); + unsigned long ply_pixel_buffer_get_width (ply_pixel_buffer_t *buffer); unsigned long ply_pixel_buffer_get_height (ply_pixel_buffer_t *buffer); -- 2.20.1 From 3f71c28e455ea26c23ab924146dae0871b342732 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 8 Nov 2018 14:25:05 +0100 Subject: [PATCH 15/82] ply-pixel-buffer: Add ply_pixel_buffer_rotate_upright helper For some themes we want to use the firmware-logo / splash as background, when the LCD panel of a laptop is mounted non-upright then the image which we get from the firmware will be pre-rotated to match the LCD panel mount. Until now our device-rotation support was limited to using rotated pixel_buffer-s as destination / canvas only. This commit adds a ply_pixel_buffer_rotate_upright helper to rotate a nop-upright source buffer upright so that we can use it as source-buffer to other functions which expect source-buffers to always be upright. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-buffer.c | 25 +++++++++++++++++++++++ src/libply-splash-core/ply-pixel-buffer.h | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c index 1599bcb..3ce6f78 100644 --- a/src/libply-splash-core/ply-pixel-buffer.c +++ b/src/libply-splash-core/ply-pixel-buffer.c @@ -1109,4 +1109,29 @@ ply_pixel_buffer_set_device_rotation (ply_pixel_buffer_t *buffer, ply_pixel_buffer_push_clip_area (buffer, &buffer->area); } +ply_pixel_buffer_t * +ply_pixel_buffer_rotate_upright (ply_pixel_buffer_t *old_buffer) +{ + ply_pixel_buffer_t *buffer; + int x,y, width, height; + uint32_t pixel; + + width = old_buffer->area.width; + height = old_buffer->area.height; + + buffer = ply_pixel_buffer_new (width, height); + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + pixel = ply_pixel_buffer_get_pixel (old_buffer, x, y); + ply_pixel_buffer_set_pixel (buffer, x, y, pixel); + } + } + + ply_pixel_buffer_set_device_scale (buffer, old_buffer->device_scale); + ply_pixel_buffer_set_opaque (buffer, old_buffer->is_opaque); + + return buffer; +} + /* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */ diff --git a/src/libply-splash-core/ply-pixel-buffer.h b/src/libply-splash-core/ply-pixel-buffer.h index ddec47d..7b5da36 100644 --- a/src/libply-splash-core/ply-pixel-buffer.h +++ b/src/libply-splash-core/ply-pixel-buffer.h @@ -159,6 +159,12 @@ ply_pixel_buffer_t *ply_pixel_buffer_tile (ply_pixel_buffer_t *old_buffer, long width, long height); +/* Return the upright version of a buffer which is non upright. + * This is the *only* ply_pixel_buffer function which works correctly with a + * non upright buffer as source. + */ +ply_pixel_buffer_t *ply_pixel_buffer_rotate_upright (ply_pixel_buffer_t *old_buffer); + #endif #endif /* PLY_PIXEL_BUFFER_H */ -- 2.20.1 From ae8a676c096731e6ad0868e80c53e23ba82c0695 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 7 Nov 2018 15:46:06 +0100 Subject: [PATCH 16/82] ply-pixel-display: Add ply_pixel_display_get_device_scale() function Add a function to get the device scale for a ply-pixel-display. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-display.c | 8 ++++++++ src/libply-splash-core/ply-pixel-display.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/libply-splash-core/ply-pixel-display.c b/src/libply-splash-core/ply-pixel-display.c index cb01a2c..dc088bb 100644 --- a/src/libply-splash-core/ply-pixel-display.c +++ b/src/libply-splash-core/ply-pixel-display.c @@ -51,6 +51,7 @@ struct _ply_pixel_display unsigned long width; unsigned long height; + int device_scale; ply_pixel_display_draw_handler_t draw_handler; void *draw_handler_user_data; @@ -77,6 +78,7 @@ ply_pixel_display_new (ply_renderer_t *renderer, display->width = size.width; display->height = size.height; + display->device_scale = ply_pixel_buffer_get_device_scale (pixel_buffer); return display; } @@ -105,6 +107,12 @@ ply_pixel_display_get_height (ply_pixel_display_t *display) return display->height; } +int +ply_pixel_display_get_device_scale (ply_pixel_display_t *display) +{ + return display->device_scale; +} + static void ply_pixel_display_flush (ply_pixel_display_t *display) { diff --git a/src/libply-splash-core/ply-pixel-display.h b/src/libply-splash-core/ply-pixel-display.h index 675c181..a57b9a9 100644 --- a/src/libply-splash-core/ply-pixel-display.h +++ b/src/libply-splash-core/ply-pixel-display.h @@ -51,6 +51,7 @@ ply_renderer_head_t *ply_pixel_display_get_renderer_head (ply_pixel_display_t *d unsigned long ply_pixel_display_get_width (ply_pixel_display_t *display); unsigned long ply_pixel_display_get_height (ply_pixel_display_t *display); +int ply_pixel_display_get_device_scale (ply_pixel_display_t *display); void ply_pixel_display_set_draw_handler (ply_pixel_display_t *display, ply_pixel_display_draw_handler_t draw_handler, -- 2.20.1 From 9f3aff2e7c5ad70b37c779c06509c8d1c74a6e58 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 6 Nov 2018 14:41:38 +0100 Subject: [PATCH 17/82] two-step: Use a pixel-buffer instead of an image for the view's background Use a pixel-buffer instead of an image, this gives us more flexibility. This is a preparation patch for adding support to (optionally) use the firmware splash screen logo (from the ACPI BGRT extension) as background. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 0ceda90..efdcaa9 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -93,7 +93,7 @@ typedef struct ply_label_t *message_label; ply_rectangle_t box_area, lock_area, watermark_area; ply_trigger_t *end_trigger; - ply_image_t *background_image; + ply_pixel_buffer_t *background_buffer; } view_t; struct _ply_boot_splash_plugin @@ -181,8 +181,8 @@ view_free (view_t *view) ply_label_free (view->label); ply_label_free (view->message_label); - if (view->background_image != NULL) - ply_image_free (view->background_image); + if (view->background_buffer != NULL) + ply_pixel_buffer_free (view->background_buffer); free (view); } @@ -255,7 +255,7 @@ view_load (view_t *view) if (plugin->background_tile_image != NULL) { ply_trace ("tiling background to %lux%lu", screen_width, screen_height); - view->background_image = ply_image_tile (plugin->background_tile_image, screen_width, screen_height); + view->background_buffer = ply_pixel_buffer_tile (ply_image_get_buffer (plugin->background_tile_image), screen_width, screen_height); } if (plugin->watermark_image != NULL) { @@ -882,9 +882,9 @@ draw_background (view_t *view, ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, plugin->background_start_color); - if (view->background_image != NULL) { + if (view->background_buffer != NULL) { uint32_t *data; - data = ply_image_get_data (view->background_image); + data = ply_pixel_buffer_get_argb32_data (view->background_buffer); /* We must pass NULL as fill area, because the fill area must be sized as the image we're sourcing from, otherwise -- 2.20.1 From e10ed13fffb59b7a7656227c8f77b93310c160cd Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 7 Nov 2018 20:27:08 +0100 Subject: [PATCH 18/82] two-step: Speed up background-tile drawing on HiDPI screens Before this commit background drawing on HiDPI screens is quite slow and CPU intensive, because we do the interpolating scale, which does a whole bunch of double-precision float operations for *each* pixel for every frame we draw. When using two-step with a background-tile on a Cherry Trail machine with a HiDPI screen this results in the diskcrypt password entry being visible laggy, I can type the password much faster then the bullets show up. This also means we are pegging the CPU during boot, significantly slowing down the boot. This commit fixes this by creating the background_buffer at the screen's device_scale and rotation, only doing the scaling once. This commit further speeds things up by also doing the solid/gradient fill of the background + the alpha blend of the tiled background-image once, creating a solid background which allows us to hit the ply_pixel_buffer_fill_with_buffer memcpy fast-path and avoids the need to re-do the solid/gradient fill + alpha-blend each frame we render. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 40 ++++++++++++++++++---------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index efdcaa9..65586f9 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -245,17 +245,38 @@ view_load_end_animation (view_t *view) static bool view_load (view_t *view) { - unsigned long screen_width, screen_height; + unsigned long screen_width, screen_height, screen_scale; ply_boot_splash_plugin_t *plugin; + ply_pixel_buffer_t *buffer; plugin = view->plugin; screen_width = ply_pixel_display_get_width (view->display); screen_height = ply_pixel_display_get_height (view->display); + buffer = ply_renderer_get_buffer_for_head( + ply_pixel_display_get_renderer (view->display), + ply_pixel_display_get_renderer_head (view->display)); + screen_scale = ply_pixel_buffer_get_device_scale (buffer); + if (plugin->background_tile_image != NULL) { ply_trace ("tiling background to %lux%lu", screen_width, screen_height); - view->background_buffer = ply_pixel_buffer_tile (ply_image_get_buffer (plugin->background_tile_image), screen_width, screen_height); + + /* Create a buffer at screen scale so that we only do the slow interpolating scale once */ + view->background_buffer = ply_pixel_buffer_new (screen_width * screen_scale, screen_height * screen_scale); + ply_pixel_buffer_set_device_scale (view->background_buffer, screen_scale); + + if (plugin->background_start_color != plugin->background_end_color) + ply_pixel_buffer_fill_with_gradient (view->background_buffer, NULL, + plugin->background_start_color, + plugin->background_end_color); + else + ply_pixel_buffer_fill_with_hex_color (view->background_buffer, NULL, + plugin->background_start_color); + + buffer = ply_pixel_buffer_tile (ply_image_get_buffer (plugin->background_tile_image), screen_width, screen_height); + ply_pixel_buffer_fill_with_buffer (view->background_buffer, buffer, 0, 0); + ply_pixel_buffer_free (buffer); } if (plugin->watermark_image != NULL) { @@ -874,7 +895,9 @@ draw_background (view_t *view, area.width = width; area.height = height; - if (plugin->background_start_color != plugin->background_end_color) + if (view->background_buffer != NULL) + ply_pixel_buffer_fill_with_buffer (pixel_buffer, view->background_buffer, 0, 0); + else if (plugin->background_start_color != plugin->background_end_color) ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area, plugin->background_start_color, plugin->background_end_color); @@ -882,17 +905,6 @@ draw_background (view_t *view, ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, plugin->background_start_color); - if (view->background_buffer != NULL) { - uint32_t *data; - data = ply_pixel_buffer_get_argb32_data (view->background_buffer); - - /* We must pass NULL as fill area, because the fill area - must be sized as the image we're sourcing from, otherwise - sampling does not work - */ - ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer, NULL, NULL, data); - } - if (plugin->watermark_image != NULL) { uint32_t *data; -- 2.20.1 From 856297c7a4bc8dff5b3d03951b250d9620468f9a Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 6 Nov 2018 14:55:29 +0100 Subject: [PATCH 19/82] two-step: Add ACPI BGRT extension support Add support to (optionally) use the firmware splash screen logo from the ACPI BGRT extension as background. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 86 +++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 2 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 65586f9..3570182 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -94,6 +94,7 @@ typedef struct ply_rectangle_t box_area, lock_area, watermark_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; + bool background_is_bgrt; } view_t; struct _ply_boot_splash_plugin @@ -105,6 +106,7 @@ struct _ply_boot_splash_plugin ply_image_t *corner_image; ply_image_t *header_image; ply_image_t *background_tile_image; + ply_image_t *background_bgrt_image; ply_image_t *watermark_image; ply_list_t *views; @@ -242,6 +244,62 @@ view_load_end_animation (view_t *view) view->end_animation = NULL; } +/* The Microsoft boot logo spec says that the logo must use a black background + * and have its center at 38.2% from the screen's top (golden ratio). + * We reproduce this exactly here so that we get a background which is an exact + * match of the firmware's boot splash. + * At the time of writing this comment this is documented in a document called + * "Boot screen components" which is available here: + * https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-screen-components + * Note that we normally do not use the firmware reported x and y-offset as + * that is based on the EFI fb resolution which may not be the native + * resolution of the screen (esp. when using multiple heads). + */ +static void +view_set_bgrt_background (view_t *view) +{ + ply_pixel_buffer_rotation_t panel_rotation = PLY_PIXEL_BUFFER_ROTATE_UPRIGHT; + int x_offset, y_offset, sysfs_x_offset, sysfs_y_offset, width, height; + int panel_width = 0, panel_height = 0, panel_scale = 1; + int screen_width, screen_height, screen_scale; + ply_pixel_buffer_t *bgrt_buffer; + + if (!view->plugin->background_bgrt_image) + return; + + screen_width = ply_pixel_display_get_width (view->display); + screen_height = ply_pixel_display_get_height (view->display); + screen_scale = ply_pixel_display_get_device_scale (view->display); + + bgrt_buffer = ply_image_get_buffer (view->plugin->background_bgrt_image); + + if (ply_renderer_get_panel_properties (ply_pixel_display_get_renderer (view->display), + &panel_width, &panel_height, + &panel_rotation, &panel_scale)) { + ply_pixel_buffer_set_device_rotation (bgrt_buffer, panel_rotation); + ply_pixel_buffer_set_device_scale (bgrt_buffer, panel_scale); + } + + width = ply_pixel_buffer_get_width (bgrt_buffer); + height = ply_pixel_buffer_get_height (bgrt_buffer); + + x_offset = (screen_width - width) / 2; + y_offset = screen_height * 382 / 1000 - height / 2; + + ply_trace ("using %dx%d bgrt image centered at %dx%d for %dx%d screen", + width, height, x_offset, y_offset, screen_width, screen_height); + + view->background_buffer = ply_pixel_buffer_new (screen_width * screen_scale, screen_height * screen_scale); + ply_pixel_buffer_set_device_scale (view->background_buffer, screen_scale); + ply_pixel_buffer_fill_with_hex_color (view->background_buffer, NULL, 0x000000); + if (x_offset >= 0 && y_offset >= 0) { + bgrt_buffer = ply_pixel_buffer_rotate_upright (bgrt_buffer); + ply_pixel_buffer_fill_with_buffer (view->background_buffer, bgrt_buffer, x_offset, y_offset); + ply_pixel_buffer_free (bgrt_buffer); + } + view->background_is_bgrt = true; +} + static bool view_load (view_t *view) { @@ -259,7 +317,9 @@ view_load (view_t *view) ply_pixel_display_get_renderer_head (view->display)); screen_scale = ply_pixel_buffer_get_device_scale (buffer); - if (plugin->background_tile_image != NULL) { + view_set_bgrt_background (view); + + if (!view->background_buffer && plugin->background_tile_image != NULL) { ply_trace ("tiling background to %lux%lu", screen_width, screen_height); /* Create a buffer at screen scale so that we only do the slow interpolating scale once */ @@ -670,6 +730,10 @@ create_plugin (ply_key_file_t *key_file) free (color); + /* Boolean option, true if the key is present */ + if (ply_key_file_get_value (key_file, "two-step", "UseBGRT")) + plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image"); + progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction"); if (progress_function != NULL) { @@ -747,6 +811,9 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin->background_tile_image != NULL) ply_image_free (plugin->background_tile_image); + if (plugin->background_bgrt_image != NULL) + ply_image_free (plugin->background_bgrt_image); + if (plugin->watermark_image != NULL) ply_image_free (plugin->watermark_image); @@ -895,7 +962,14 @@ draw_background (view_t *view, area.width = width; area.height = height; - if (view->background_buffer != NULL) + /* When using the firmware logo as background, use solid black as + * background for dialogs. + */ + if ((plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY || + plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) && + view->background_is_bgrt) + ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, 0); + else if (view->background_buffer != NULL) ply_pixel_buffer_fill_with_buffer (pixel_buffer, view->background_buffer, 0, 0); else if (plugin->background_start_color != plugin->background_end_color) ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area, @@ -1097,6 +1171,14 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, } } + if (plugin->background_bgrt_image != NULL) { + ply_trace ("loading background bgrt image"); + if (!ply_image_load (plugin->background_bgrt_image)) { + ply_image_free (plugin->background_bgrt_image); + plugin->background_bgrt_image = NULL; + } + } + if (plugin->watermark_image != NULL) { ply_trace ("loading watermark image"); if (!ply_image_load (plugin->watermark_image)) { -- 2.20.1 From d45c477d44e9d352e9d91686237e26474ab009d7 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 13 Nov 2018 09:03:10 +0100 Subject: [PATCH 20/82] two-step: bgrt: Deal with quirky firmwares On laptops / tablets the LCD panel is typically brought up in its native resolution, so we can trust the x- and y-offset values provided by the firmware to be correct for a screen with the panels resolution. Moreover some laptop / tablet firmwares to do all kind of hacks wrt the y-offset. This happens especially on devices where the panel is mounted 90 degrees rotated, but also on other devices. So on devices with an internal LCD panel, we prefer to use the firmware provided offsets, to make sure we match its quirky behavior. We check that the x-offset matches what we expect for the panel's native resolution to make sure that the values are indeed for the panel's native resolution and then we correct for any difference between the (external) screen's and the panel's resolution. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 79 +++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 3570182..641eb70 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -124,6 +124,7 @@ struct _ply_boot_splash_plugin uint32_t background_start_color; uint32_t background_end_color; + int background_bgrt_raw_width; progress_function_t progress_function; @@ -244,6 +245,41 @@ view_load_end_animation (view_t *view) view->end_animation = NULL; } +static bool +get_bgrt_sysfs_offsets(int *x_offset, int *y_offset) +{ + bool ret = false; + char buf[64]; + FILE *f; + + f = fopen("/sys/firmware/acpi/bgrt/xoffset", "r"); + if (!f) + return false; + + if (!fgets(buf, sizeof(buf), f)) + goto out; + + if (sscanf(buf, "%d", x_offset) != 1) + goto out; + + fclose(f); + + f = fopen("/sys/firmware/acpi/bgrt/yoffset", "r"); + if (!f) + return false; + + if (!fgets(buf, sizeof(buf), f)) + goto out; + + if (sscanf(buf, "%d", y_offset) != 1) + goto out; + + ret = true; +out: + fclose(f); + return ret; +} + /* The Microsoft boot logo spec says that the logo must use a black background * and have its center at 38.2% from the screen's top (golden ratio). * We reproduce this exactly here so that we get a background which is an exact @@ -286,6 +322,45 @@ view_set_bgrt_background (view_t *view) x_offset = (screen_width - width) / 2; y_offset = screen_height * 382 / 1000 - height / 2; + /* + * On laptops / tablets the LCD panel is typically brought up in + * its native resolution, so we can trust the x- and y-offset values + * provided by the firmware to be correct for a screen with the panels + * resolution. + * + * Moreover some laptop / tablet firmwares to do all kind of hacks wrt + * the y offset. This happens especially on devices where the panel is + * mounted 90 degrees rotated, but also on other devices. + * + * So on devices with an internal LCD panel, we prefer to use the + * firmware provided offsets, to make sure we match its quirky behavior. + * + * We check that the x-offset matches what we expect for the panel's + * native resolution to make sure that the values are indeed for the + * panel's native resolution and then we correct for any difference + * between the (external) screen's and the panel's resolution. + */ + if (panel_width != 0 && panel_height != 0 && + get_bgrt_sysfs_offsets(&sysfs_x_offset, &sysfs_y_offset) && + (panel_width - view->plugin->background_bgrt_raw_width) / 2 == sysfs_x_offset) { + if (panel_rotation == PLY_PIXEL_BUFFER_ROTATE_CLOCKWISE || + panel_rotation == PLY_PIXEL_BUFFER_ROTATE_COUNTER_CLOCKWISE) { + /* 90 degrees rotated, swap x and y */ + x_offset = sysfs_y_offset / panel_scale; + y_offset = sysfs_x_offset / panel_scale; + + x_offset += (screen_width - panel_height / panel_scale) / 2; + y_offset += (screen_height - panel_width / panel_scale) * 382 / 1000; + } else { + /* Normal orientation */ + x_offset = sysfs_x_offset / panel_scale; + y_offset = sysfs_y_offset / panel_scale; + + x_offset += (screen_width - panel_width / panel_scale) / 2; + y_offset += (screen_height - panel_height / panel_scale) * 382 / 1000; + } + } + ply_trace ("using %dx%d bgrt image centered at %dx%d for %dx%d screen", width, height, x_offset, y_offset, screen_width, screen_height); @@ -1173,7 +1248,9 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, if (plugin->background_bgrt_image != NULL) { ply_trace ("loading background bgrt image"); - if (!ply_image_load (plugin->background_bgrt_image)) { + if (ply_image_load (plugin->background_bgrt_image)) { + plugin->background_bgrt_raw_width = ply_image_get_width (plugin->background_bgrt_image); + } else { ply_image_free (plugin->background_bgrt_image); plugin->background_bgrt_image = NULL; } -- 2.20.1 From 4925a485c56fec0bd1333ec94d99b9c0e5b769b4 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 13 Nov 2018 09:51:32 +0100 Subject: [PATCH 21/82] themes: Add new BGRT theme, using the firmware boot splash as background Add a new BGRT theme, this is a copy of the spinner theme, using the ACPI BGRT graphics (firmware boot splash) as logo when available. Signed-off-by: Hans de Goede --- configure.ac | 1 + themes/Makefile.am | 2 +- themes/bgrt/Makefile.am | 84 ++++++++++++++++++++++++++++++++ themes/bgrt/animation-0001.png | Bin 0 -> 1579 bytes themes/bgrt/animation-0002.png | Bin 0 -> 1573 bytes themes/bgrt/animation-0003.png | Bin 0 -> 1591 bytes themes/bgrt/animation-0004.png | Bin 0 -> 1594 bytes themes/bgrt/animation-0005.png | Bin 0 -> 1624 bytes themes/bgrt/animation-0006.png | Bin 0 -> 1646 bytes themes/bgrt/animation-0007.png | Bin 0 -> 1666 bytes themes/bgrt/animation-0008.png | Bin 0 -> 1634 bytes themes/bgrt/animation-0009.png | Bin 0 -> 1640 bytes themes/bgrt/animation-0010.png | Bin 0 -> 1613 bytes themes/bgrt/animation-0011.png | Bin 0 -> 1621 bytes themes/bgrt/animation-0012.png | Bin 0 -> 1619 bytes themes/bgrt/animation-0013.png | Bin 0 -> 1617 bytes themes/bgrt/animation-0014.png | Bin 0 -> 1618 bytes themes/bgrt/animation-0015.png | Bin 0 -> 1615 bytes themes/bgrt/animation-0016.png | Bin 0 -> 1605 bytes themes/bgrt/animation-0017.png | Bin 0 -> 1581 bytes themes/bgrt/animation-0018.png | Bin 0 -> 1582 bytes themes/bgrt/animation-0019.png | Bin 0 -> 1578 bytes themes/bgrt/animation-0020.png | Bin 0 -> 1558 bytes themes/bgrt/animation-0021.png | Bin 0 -> 1545 bytes themes/bgrt/animation-0022.png | Bin 0 -> 1541 bytes themes/bgrt/animation-0023.png | Bin 0 -> 1481 bytes themes/bgrt/animation-0024.png | Bin 0 -> 1492 bytes themes/bgrt/animation-0025.png | Bin 0 -> 1455 bytes themes/bgrt/animation-0026.png | Bin 0 -> 1427 bytes themes/bgrt/animation-0027.png | Bin 0 -> 1407 bytes themes/bgrt/animation-0028.png | Bin 0 -> 1385 bytes themes/bgrt/animation-0029.png | Bin 0 -> 1348 bytes themes/bgrt/animation-0030.png | Bin 0 -> 1316 bytes themes/bgrt/animation-0031.png | Bin 0 -> 1245 bytes themes/bgrt/animation-0032.png | Bin 0 -> 1185 bytes themes/bgrt/animation-0033.png | Bin 0 -> 1111 bytes themes/bgrt/animation-0034.png | Bin 0 -> 1061 bytes themes/bgrt/animation-0035.png | Bin 0 -> 981 bytes themes/bgrt/animation-0036.png | Bin 0 -> 989 bytes themes/bgrt/background-tile.png | Bin 0 -> 79464 bytes themes/bgrt/bgrt.plymouth.in | 16 ++++++ themes/bgrt/box.png | Bin 0 -> 870 bytes themes/bgrt/bullet.png | Bin 0 -> 131 bytes themes/bgrt/entry.png | Bin 0 -> 1431 bytes themes/bgrt/lock.png | Bin 0 -> 329 bytes themes/bgrt/throbber-0001.png | Bin 0 -> 1578 bytes themes/bgrt/throbber-0002.png | Bin 0 -> 1568 bytes themes/bgrt/throbber-0003.png | Bin 0 -> 1561 bytes themes/bgrt/throbber-0004.png | Bin 0 -> 1570 bytes themes/bgrt/throbber-0005.png | Bin 0 -> 1585 bytes themes/bgrt/throbber-0006.png | Bin 0 -> 1597 bytes themes/bgrt/throbber-0007.png | Bin 0 -> 1629 bytes themes/bgrt/throbber-0008.png | Bin 0 -> 1604 bytes themes/bgrt/throbber-0009.png | Bin 0 -> 1605 bytes themes/bgrt/throbber-0010.png | Bin 0 -> 1601 bytes themes/bgrt/throbber-0011.png | Bin 0 -> 1595 bytes themes/bgrt/throbber-0012.png | Bin 0 -> 1602 bytes themes/bgrt/throbber-0013.png | Bin 0 -> 1612 bytes themes/bgrt/throbber-0014.png | Bin 0 -> 1601 bytes themes/bgrt/throbber-0015.png | Bin 0 -> 1588 bytes themes/bgrt/throbber-0016.png | Bin 0 -> 1577 bytes themes/bgrt/throbber-0017.png | Bin 0 -> 1572 bytes themes/bgrt/throbber-0018.png | Bin 0 -> 1601 bytes themes/bgrt/throbber-0019.png | Bin 0 -> 1608 bytes themes/bgrt/throbber-0020.png | Bin 0 -> 1583 bytes themes/bgrt/throbber-0021.png | Bin 0 -> 1602 bytes themes/bgrt/throbber-0022.png | Bin 0 -> 1595 bytes themes/bgrt/throbber-0023.png | Bin 0 -> 1603 bytes themes/bgrt/throbber-0024.png | Bin 0 -> 1605 bytes themes/bgrt/throbber-0025.png | Bin 0 -> 1604 bytes themes/bgrt/throbber-0026.png | Bin 0 -> 1605 bytes themes/bgrt/throbber-0027.png | Bin 0 -> 1615 bytes themes/bgrt/throbber-0028.png | Bin 0 -> 1614 bytes themes/bgrt/throbber-0029.png | Bin 0 -> 1588 bytes themes/bgrt/throbber-0030.png | Bin 0 -> 1580 bytes 75 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 themes/bgrt/Makefile.am create mode 100644 themes/bgrt/animation-0001.png create mode 100644 themes/bgrt/animation-0002.png create mode 100644 themes/bgrt/animation-0003.png create mode 100644 themes/bgrt/animation-0004.png create mode 100644 themes/bgrt/animation-0005.png create mode 100644 themes/bgrt/animation-0006.png create mode 100644 themes/bgrt/animation-0007.png create mode 100644 themes/bgrt/animation-0008.png create mode 100644 themes/bgrt/animation-0009.png create mode 100644 themes/bgrt/animation-0010.png create mode 100644 themes/bgrt/animation-0011.png create mode 100644 themes/bgrt/animation-0012.png create mode 100644 themes/bgrt/animation-0013.png create mode 100644 themes/bgrt/animation-0014.png create mode 100644 themes/bgrt/animation-0015.png create mode 100644 themes/bgrt/animation-0016.png create mode 100644 themes/bgrt/animation-0017.png create mode 100644 themes/bgrt/animation-0018.png create mode 100644 themes/bgrt/animation-0019.png create mode 100644 themes/bgrt/animation-0020.png create mode 100644 themes/bgrt/animation-0021.png create mode 100644 themes/bgrt/animation-0022.png create mode 100644 themes/bgrt/animation-0023.png create mode 100644 themes/bgrt/animation-0024.png create mode 100644 themes/bgrt/animation-0025.png create mode 100644 themes/bgrt/animation-0026.png create mode 100644 themes/bgrt/animation-0027.png create mode 100644 themes/bgrt/animation-0028.png create mode 100644 themes/bgrt/animation-0029.png create mode 100644 themes/bgrt/animation-0030.png create mode 100644 themes/bgrt/animation-0031.png create mode 100644 themes/bgrt/animation-0032.png create mode 100644 themes/bgrt/animation-0033.png create mode 100644 themes/bgrt/animation-0034.png create mode 100644 themes/bgrt/animation-0035.png create mode 100644 themes/bgrt/animation-0036.png create mode 100644 themes/bgrt/background-tile.png create mode 100644 themes/bgrt/bgrt.plymouth.in create mode 100644 themes/bgrt/box.png create mode 100644 themes/bgrt/bullet.png create mode 100644 themes/bgrt/entry.png create mode 100644 themes/bgrt/lock.png create mode 100644 themes/bgrt/throbber-0001.png create mode 100644 themes/bgrt/throbber-0002.png create mode 100644 themes/bgrt/throbber-0003.png create mode 100644 themes/bgrt/throbber-0004.png create mode 100644 themes/bgrt/throbber-0005.png create mode 100644 themes/bgrt/throbber-0006.png create mode 100644 themes/bgrt/throbber-0007.png create mode 100644 themes/bgrt/throbber-0008.png create mode 100644 themes/bgrt/throbber-0009.png create mode 100644 themes/bgrt/throbber-0010.png create mode 100644 themes/bgrt/throbber-0011.png create mode 100644 themes/bgrt/throbber-0012.png create mode 100644 themes/bgrt/throbber-0013.png create mode 100644 themes/bgrt/throbber-0014.png create mode 100644 themes/bgrt/throbber-0015.png create mode 100644 themes/bgrt/throbber-0016.png create mode 100644 themes/bgrt/throbber-0017.png create mode 100644 themes/bgrt/throbber-0018.png create mode 100644 themes/bgrt/throbber-0019.png create mode 100644 themes/bgrt/throbber-0020.png create mode 100644 themes/bgrt/throbber-0021.png create mode 100644 themes/bgrt/throbber-0022.png create mode 100644 themes/bgrt/throbber-0023.png create mode 100644 themes/bgrt/throbber-0024.png create mode 100644 themes/bgrt/throbber-0025.png create mode 100644 themes/bgrt/throbber-0026.png create mode 100644 themes/bgrt/throbber-0027.png create mode 100644 themes/bgrt/throbber-0028.png create mode 100644 themes/bgrt/throbber-0029.png create mode 100644 themes/bgrt/throbber-0030.png diff --git a/configure.ac b/configure.ac index 66d3649..78550d0 100644 --- a/configure.ac +++ b/configure.ac @@ -322,6 +322,7 @@ AC_CONFIG_FILES([Makefile themes/glow/Makefile themes/spinner/Makefile themes/script/Makefile + themes/bgrt/Makefile images/Makefile scripts/plymouth-generate-initrd scripts/plymouth-populate-initrd diff --git a/themes/Makefile.am b/themes/Makefile.am index 72e642b..8e4566e 100644 --- a/themes/Makefile.am +++ b/themes/Makefile.am @@ -1,2 +1,2 @@ -SUBDIRS = spinfinity fade-in text details solar glow script spinner tribar +SUBDIRS = spinfinity fade-in text details solar glow script spinner tribar bgrt MAINTAINERCLEANFILES = Makefile.in diff --git a/themes/bgrt/Makefile.am b/themes/bgrt/Makefile.am new file mode 100644 index 0000000..4cb7aba --- /dev/null +++ b/themes/bgrt/Makefile.am @@ -0,0 +1,84 @@ +themedir = $(datadir)/plymouth/themes/bgrt +nodist_theme_DATA = bgrt.plymouth + +dist_theme_DATA = \ + background-tile.png \ + box.png \ + bullet.png \ + entry.png \ + lock.png \ + animation-0001.png \ + animation-0002.png \ + animation-0003.png \ + animation-0004.png \ + animation-0005.png \ + animation-0006.png \ + animation-0007.png \ + animation-0008.png \ + animation-0009.png \ + animation-0010.png \ + animation-0011.png \ + animation-0012.png \ + animation-0013.png \ + animation-0014.png \ + animation-0015.png \ + animation-0016.png \ + animation-0017.png \ + animation-0018.png \ + animation-0019.png \ + animation-0020.png \ + animation-0021.png \ + animation-0022.png \ + animation-0023.png \ + animation-0024.png \ + animation-0025.png \ + animation-0026.png \ + animation-0027.png \ + animation-0028.png \ + animation-0029.png \ + animation-0030.png \ + animation-0031.png \ + animation-0032.png \ + animation-0033.png \ + animation-0034.png \ + animation-0035.png \ + animation-0036.png \ + throbber-0001.png \ + throbber-0002.png \ + throbber-0003.png \ + throbber-0004.png \ + throbber-0005.png \ + throbber-0006.png \ + throbber-0007.png \ + throbber-0008.png \ + throbber-0009.png \ + throbber-0010.png \ + throbber-0011.png \ + throbber-0012.png \ + throbber-0013.png \ + throbber-0014.png \ + throbber-0015.png \ + throbber-0016.png \ + throbber-0017.png \ + throbber-0018.png \ + throbber-0019.png \ + throbber-0020.png \ + throbber-0021.png \ + throbber-0022.png \ + throbber-0023.png \ + throbber-0024.png \ + throbber-0025.png \ + throbber-0026.png \ + throbber-0027.png \ + throbber-0028.png \ + throbber-0029.png \ + throbber-0030.png + +MAINTAINERCLEANFILES = Makefile.in bgrt.plymouth +CLEANFILES = bgrt.plymouth + +bgrt.plymouth: $(srcdir)/bgrt.plymouth.in + sed -e 's,[@]PLYMOUTH_THEME_PATH[@],$(PLYMOUTH_THEME_PATH),g' \ + $(srcdir)/bgrt.plymouth.in > bgrt.plymouth + +EXTRA_DIST = bgrt.plymouth.in diff --git a/themes/bgrt/animation-0001.png b/themes/bgrt/animation-0001.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd823976167325046fb5759916e6883936461a2 GIT binary patch literal 1579 zcmYL}c~lZu7{$Q^#a&RLMI$t|oMDkPlaj_Tw@eZ%N->2nDL@n=$kM{ea)enV3c{#@jVv}3fJsZ|Ffn^s98L-Y z!_Q=3_OJvP9$U;w-!DkR2-27wCLhD+vAA4j=6^)f*-Y+ky0p*IT!omgBBcnJ0Dmkl z2!q36{P9Q}E;wLKFcvqx`-cW|#%Vqi&*CrvSZwgW2luwqyTj~Re_bUrW!}U^Fnin0 zn)AH2!7OE_0R90Qi^b304WgJ$*Ljn|U~-v&6fTRCB4DL+k$7w>kB@ZJOU(h;d?3!e zAv5#;H__ODyR`FKvkm=PE@rTqd?Y1>!!r|r^AE~CiSPpeEIT7f-^EiQ`6pxd?b_;8 zP)82+ZH%haDdJqBR-j2?d2aAI%OPLofn`mD*4Ycj4)8pcaf#Mar9q26uB?WVi*F-V zk^Htkcv^63W^MK7VePp0u?6X=+S)af+FHJLj>+Y6jXg%A(K(Dz)mqwS%+M|#nDn}? znUdXkELYdwHA>1(%s5WqR+qm;z}tm2xuf_4SFQFIviA~F@1b711lgYkmrDi+1VYWd z5pqwU(#vvT_?{$>cZc&6u}cCeqzV;LHv)e3p+EZgl4UWc&!KZ1%iLo+Ks?|f z2v=fN)RhR1rc{+usNMHImm#-SzYUsB&~Z$>(WMPTt?y5iUvu>?686yFY`P->@y>W> z!EXTFRDTuKm{vaVCwH6^Ow`Ka;W0Xt$Z8hi04u*OTdZU7{D16qUALhJIr-CP6i1lj zJQWi3OoaM~NI!y6J=TSr2vj|Yy@j-Ve9?$6^fhH;f~WMsKsIQJ*YIqt%2tK$8=QG+ z-&%#yR|J%0(CC!DwUHy1(3qEKSdA(Z%FH$8S^n&ONlRw1hu@$gF{gTC?5rn+dm>csxL|Xl`!2A$p(()iK7z}!pYsk?G%N62gt4BRho}h zQsMzRsAvhvcjDX0mm9>%4s9$TigryF9O%=Q$h-t**T;5+vg>GKd%5?gLPLylRJ#(w z=aO3Vc-58WzNTiF8>+R7ZRf7JFm;7k>6KOaDf;D*UkB=@eAph=BpsJ@MbYUchh0QQ zx91M|n)5B2CtS%VvkfP z2^jgew?K)8Ez|~*NAB%6$;%0j;S+ysFQq&$-63DPvR5m$Rn>=py!g$+(bW~gfy=I! zY`CGu%42o+19OViw}=rsfmWQ~wycPg1UBB!LQ29!?;j?x4n)ZO#`I6{?%0(M*XX#Y zrTcP~#F@FqiIU(iJEukOPJ3RT{5?r{tPvJKC}sST1uX3I(aI{;z}qf9`r^0@COUPv T@C3yC*#RQMHj|n{lcj$H!ojpL literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0002.png b/themes/bgrt/animation-0002.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8ff54a5ba88688b91eeb3eba6753e9dc28a169 GIT binary patch literal 1573 zcmYLJdpOg39R4+z8J28?quXRSrOcfaV{up)l}pn>4NYctX`96un@gs2LAsGVMQG)6 zN~!bYx;ow5r8OH1549TVDOdokpXdAeywCH#@AG~?e|_@z1qVV6Ee!zxfMSFE zL$rukY6E@kWU$#^wE&?79b^E25qzna0awZ_v?Q7t5W)P7m_z_j2~;uxl}IF$W8zQ@ zdK~H~k%^)urIM-1%mfrOfj}lOPz)N8LLt!qLx+XKZZ#FoE@D! zQBF=MXBUK%lb738FGr`jBR49vo)t@;Fd~@%I68X$`<#)R%1f&G)2`3>B`88SukDoY z!4I?GfT%|Pu}b}?4rkTNJ66gpS9pSb^wC)Y**XzW>g$YCs(o~ZEq9f_OZ3}jSmO@s z;+nMW^$mGmo?|3@b=G>dSTgfFfL)$djE8Q|zo(|cGb`O;VidyAQiM=^*5bQqdXfL zAZnC0HSO{&Nv{hx2^^C5q}&W*tqF47>^p3Z7+t(Sfi=TmZymx4>YpIbO|+;7+VZB3 zU!_VGJt|s@%8o%<$mx@OH0gBcjD0TNG)hNPVbGfPoXQP=531f{*JL)~yff%~vRUC` zId1j}c*Wtl9ka$Fpt>!2`L`#wzs%XHS1RQBgm0X$GCQ#Z{=N3VgDc34lEu3+pV_AQ zN8StDLs`xQtuYH3}@RvuoWXbt zLItOx1y3`GvVSHEI!Dqpz)2aIe<^LBU~MvcUFqF1?Q@{9 zOs|M70@qHrn_TYDgl+MA{aHERzX+P#ig#fA%9;tgy4(IErXSsthfwieBgqA} z?eW%_4S~~~ZQiSC)Z0;Y!4>A+Xid(eBQs;(%Wg-Et-^oF|_au+8)%Lt>T&wrJf=sjvFXJiJp7 z5_vdWiBQNRX=XK%HG*;1d?70#2IH(?;Ma*B-siLtC3hx1MVd<0?|qQn(n_xb@GZPf z8B{icNq@^yY%0Xzm1-O}cQQ}Ge%4vI@WpM;>ew9exzU61<88xjL{Y6^0z=3BHG|ZE z%y~cRCv(&gK`Hu41$qQYOBkqQjy5YTQ{KRW*hcsAedXubuwu)L!(OLii literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0003.png b/themes/bgrt/animation-0003.png new file mode 100644 index 0000000000000000000000000000000000000000..205380b1ca8e000f19adb89243a71cd48bfa579b GIT binary patch literal 1591 zcmYLJdpOg39RAH_u~F8#teZP=lx?jtmvdHBqO1!tSu!kEcCpPAVQi%xMMA1Yom4I- zLz3jOIfhcAa?1%j5prL}=z4xS=RD{8d_SM}dEWPZ-tYU@SF)Gvs*hNS002PWZRfWA zAR5n)4jkOPsHl%1=yG=Y@&Evdo*xKs zV>b|t@py+#_6|7wOmNP1&|@&~@nSIP01oHy?AdI}L}$?f8jHcC@fmEEF#&gk!!usgp8y)r^M?IkLpt~W zH*Im7-Ml{YL3#0y@Do8{be^#%jmZHKz;7VNUc}e{0IbDr+g2}%ZdT@#WH0X}rz@p* zyp&MY5Y11=t05<$u6k#o{peXOF_CYsr)T!&DGZA@X+@b@ zBv8XDB<-<%GhY(Da}mze$90h@V`{ZGnW)XUWYW;ce)sFVOtHCb5SzDeIXDYIj*`i%OiWQuTrVUF< z@Yww15@~K)NQyC;bzbKoQ~<1o6+t7Cd`CFTZDk3bDjQC^d8W$KBR}yeq3qH`U3eFw z7uu*eth$z{^!QQ(*fh9TJ<8A|9q?ZBstWOowvVFDQWh&OVYA*UZkJ zpZjIN4jhKCMShCX78KR>+v1aCq5g5?KsK!HK*YFrWQ^gvm$tO>S-mgqs$-PA-^m3`XK6cFdHyI}BZ;6i5GF4bKM1s!hdk!=2XT-p7K8%D28M$9mmWb{b^r zK8nO_$Bg}Vl$GBcGr*v4(E=;3eb43VO?Na81sxuN?{kG}@ylm1!`L#(!TO$C#N;US zFh^HBV@45cH}8Gd{d}|^J-xb^7c>q_(Lz4x-SqlbRwNKKyg*D)$ZnB@lThef#%qs+ zoT*hX_3?uS_5x|i=ukYmOS>aJWRl&m`~J8KTdDjOeYGuJ_ueA4S%3lZxv{9gF{^8xvNFIV zq_#e4X0y#SdN^HRvR-W3J>JMdWf!_xK)cH%PFmCaqGo66_p;K@EOp$e{L;pbyrtKJ zw_7H^4zG-bR_SKLM+Bo!lz!tmR~W<M{<`dUMl-l%DyyivK6O{a9{eNClI5iavh~W6OKrTeI_8!hSn}(@s?hSI zFKC44=(wX=Vc9=zsb-y-IHG!0Ig!|8H)3AXJ*`_WThEnuAbZRU41KeOb%0AWU!#ol d5A3`Z2SJL6rEpG+2>kc}x9#L@GUtGVzX5+W%Q^r6 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0004.png b/themes/bgrt/animation-0004.png new file mode 100644 index 0000000000000000000000000000000000000000..6038af8bd429a28118214dd308533e60107d531a GIT binary patch literal 1594 zcmYLJdpOg39R6uTVQ%9@7wt)?7Te5a?aZZI3URO!B{nm&7_&_^Mr@TXqM}kW6FNl} zlHA$qFzFB}HA;(e=|V?thn;q&bIx-<&-e3rpXYtw=ly>E`ke9i+Xc~DqXhr}#A~;E zpbBBjy;4IpnMp}ADp*C|9l`_vZRm2V0oU_QRHO^bBben$jU@w!=y)0#ahOV@5lILp zgM^?^SqOS8n--tQibk-a$uu$(!K72;;>e8u&?X|592XhE?E;Y)Ldk7p~|Db?Ac4DkpUzU`|q>MFMZ~#(pLUhg+W{v?J#;yNEK(W z%(-H_q6dRliN?z!oK7AT?7ktP#q4%VGKu_M8E%$UBepVBw00w+-XovUs8hC8o!S63C zZ9hN~Iet%N3Y9ajt!i(WExg^%9Q~cmM>BjE;oGtTv z@B1qQJiV{CK6kdc|2cn;rB9E0OW<5rj`jW*j8<+nK>+K9 z{x*lZRXz`%MUQ`W=Kc|tIn*_@T9WW}Ge$=zl`6Jxze9j>be&fSFBJniMn}6rLFG9eR*qvwUgi} zHS{&gg0iDUa>}V1p3IxpS>ob49R_0L7GoDEKWF3SY4Qfe`SBw^^|MZWIaO9y?(cnu zAk?hjrHDQI&NP)2L+FMawQdl3o_kBel&kd^l5)G#wHHfwoT$h;KM7j^6e}Gx6c5J( zjulLCNn$Y{DpgxD$>!EdLg)q@jo9J(m(5mA?!`B*N=ysC#ix5_hBd9yy`R7EI7+I; z3KEaVL*)G4(#e2vj%Wej`=b6yhJZS4;fTXCuKbIrZO6 zviin@#zs52g=Td_e5LPU57$r|`u`8XSTLX-@B3DLpfRA$yQIU&M(q#&e zZMc_k0*b+;Rh#X8JYZS<$vww8VQ(_Th4HfYAsd9k?tHHoir;o@i9{C+Xi_0f0XAg&g0u|2eU zwb+7?wtcIhZf-47KO7G)^y`ymbIeobzWEo4!wR)hUzA1LKdTwiU!PYhlg)jMcFU`Y z!754elp)ACymEW!{HT>vAISg0*1}^aVa`!Gy11v{chUCuo@!6^n&h!ocH9{g-P>s< z3rg&6`g2YDMDazy$Px?Mcwv`58`5PNX>RI%-G|Mk-}h?Obm0}SIeVA78na3odcZuL z`myn=B7ulhksI`6kbLi6cpRm}!hgFjTa5AgEvbHBTj!2KIU#n=)6 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0005.png b/themes/bgrt/animation-0005.png new file mode 100644 index 0000000000000000000000000000000000000000..7a967678a0fcc44fc8238e53a5de9a88d0ff5336 GIT binary patch literal 1624 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0007.png b/themes/bgrt/animation-0007.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ccac920882325a265fe11365dcf170461cefb7 GIT binary patch literal 1666 zcmYLJc~H~m7X1-IkTqCjNnA*wPpVOVSt=nRC`dpML1cHJX(A*L$R-K3p@1Z*C|i+N zl_Ca$by_V;Ky<1g5*0!AO$1wtkx-FENMwtE(qQ}M&3yMeGv}N+_uhYQc5u)k3sa;i z000*Lev}YBqBd$1O#cf~Qy27L!uLBa001-VjWPf(U$NJd2ZTORLSGh}0e}fS4g*YN zaX9o?P>>u8#QiKVhFoD5g2tWa!#pN=R|A#Io*bHvm2}u`JA7#H0MWG8B z01kt71F={Theu(tq0u41msMap*!8kBh=%n0x^Wu9oNx)*FTp z{e+C<|Mzsk5cY?5jOpc1K8A~8*$e?Hl+NMn5y0ZyGA`Mp0l*09Pw@(iGC6Z8Fn7eq z>g=hO!NoK7*}1SUU?x|c+kC<_=QB~MeNu_B7IoDa%rGdRlA&+|_zsE{)ax-Qm+P|R z=cUNcToS{~vs;Sp%ra$*qQn)#0N#D4QPbqq)UVY=)wAp7FzJK-rKP3+e&&#~XFg+Q z@j}HPbJl-S6+_u+W8Pl!lUr8u9XrlxdsAA6m(t?;<|gnsLbm7rIN|);zJyy3SMpV^ zd?3cSTZ*Syq*(-6o_&-*`oVFn+v&B%FyExL!u(X`A>|ty{Em5yX=U@KH8b;ZGmWb* z6B>k{^`jI&UF(EdO?*#7cx*plX=yM)YPhO}VUC)-vbLo{9gY=N&A2O$oX<5xCCSL9 zI}E>lK$Pz({>lgp2lJk9Z;CJ6W}pxYbjZo0I24Nx?3rc0VQH*-U)uJT+YCe7t6739 zvwl(qD7Bl(7j@-~Uax;LvX;TO)7e}X5H)#w6>BakX2jz@V7;L7avRw{yyyqf1!oCV z`B0`3|4gf!TA$h04wCXs;8y-_Uh@uL_|-MLm_5Ii7|zg!+Fo?4$N&Ho{ zZ}pI}gm#~>pv5!>6RxwZz9Y}Q=Zr~jT6T^RG`1yw7+X)g_2`P*w+*>)OcS6O&_yF6 z2klZaaJ_-b3dXw>F5F&uR&}K8WL}}&-Dipp?A1qxm)JqAL50&SxzF>hYJK?%&#otQ4v-KRxszyOumD zkn)1DZS~kj?qcRvPtrnK$nFB=;hDa>z9BsJ&)szqrf-~+Q*IeYYi7T+$q6))L*81e z;HrJ?kv*9aRi0O{;MDdz`ZWR&NjO45;6D1axU5&Z>E2JJO*YynE-be+vN`myZ#u2< zNLOWG)$iUB3Y=b-)WWw(*Wp$0;;1CLs3(^2GL^i7A6u2&6w*V-h@#O}+1 z4U)>s`J!|VxWzna04^o_l1S!hHt87_50|~1VX?nDivyF&VjwXCH|CSO6aHe7%0%IZ z4}3}hry#YaFAPiiEP5agg-zmu{zV#yi7t4e?!V!6?KExL0}))sS&E21NOVb;oHW|z zU3Fm@v&{Q#Yl9eps0o^W)ckt+AkNK@Y6z3%C@+24Xc#0MT@9=K{1`DAEz}`&o1a8~ zU6v?~GWdNmxVX@LNXw<&Cfl|#M;10CkGAGJmwkt5Eq2D)HPD2#yUSvwB0HYc3-!j2y|4-_p934jVY6ud*F*2w80;^NsE3|oh>?7wW zqdgaWs3o`GJ9ezZ&0Ngey+ztt_cd0ua4Wa^rsg@QK3)H3{q#(AScLwD0{%Whlt F$=_zH?q>i1 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0008.png b/themes/bgrt/animation-0008.png new file mode 100644 index 0000000000000000000000000000000000000000..85849c8f8bf3d6f785f39567b2e58f6af9c03102 GIT binary patch literal 1634 zcmYLJc~p~k7X88pVG+WjRF)v&w3HT=ENmevBy7skQ~^;cNCG4fvnLXOyJ-EYDl!$nkdEqaisbQg34-OLfbj>&hNc@&b{~C-}~#G+)dr- z;^gB50Dw!tpq}t$8w7Tn2!{k^X+fI)4SzsyY0*iio}@ z67k(aUn}Rn#>H7F5gqsoLU6dyH@AuDR?%}!OwVWV7yzBe;?f}&pN9#>F$H3b>xA5D zSifdSvu?-`{r}GpTtrgFGGvuK{tPe8=P<;WbUIgHMF3AAO6$Eg1Ay&PQamMNzhg!H zwojY(ZaDGei;`N8aD0us3&kCu%=tL%LT%;+v#Z|0Nws3PHQ{)eypHC5HEjcZ%k_a+ zoAE&8_wE<(DDe&6K~WPg;m$|=-xvRL-EJDbcJE;MLv;mHXe~OM&8B?enowVn)1nX+ zw=_*=_B5|AJ@X@4CfN&NA4`nh9f3s`j0FVmlKJzaw~XN(^&+$;{RaYibZ7-2I#1aj zk@@xpwj=)q7M>i>L$~`k=2Sg0$jb~VMC0JBR|yi0*lc1dUozSq4})No9aWCq1*4zs zrYt5u)Nugel+$71*n32jb1xZEsoO|u&n+_NQ(&>D1f(9_8!QSxY|yz;w5~@l5APn- z9V_oc-d^-06Uq|2x0pe)CVYBIdC78k{&oVa-W)8u8 zn|l|FQAUuT=6L380QRR%bwkjruoBy|GHr3uKw6`sY8A{zWHQfrXsVs30$*InO(J}* zZFTSf?B|xcTLnQah-{FVXECdhb9xLUbtNL5v!$u;z6f4$zx*`4vf`lvVT&@bY1nob z(o5eD|EN5=>eh(Zha-$>({e3NDDc3%jUeW`Hn(4DR!YHBA0>?zRa@NKZRWtvk?K1s zL46M<6*di%h2@g$9^Iip>alx$Kht)qPwzk};1!yqk^@`%O;}p4%dQ}wr415!YvDBs z&o@iEsYX15TJYN6m#podSvh{~t*!vrr{2O-j);3}Lgcx8s{N$$Q{?38lWIxkRj)4st;)ZN#XEGc-N`nfE(Z`qVOMQ1NzPCW+E+tGu=yGhUz%MTbo&M<%Nm`IVIZWt(+ z>sLND<5hCwded7bliugp>?#6ukJhoth8S98`$tcg+OCpnJ!({!gg~5KGKREmohH-1 z5{&uaz{JJzGtZ4m&Lo$V=x?9O%WBj^wMj$f73>J@X0W7q*Vgnik#jnONsk(Hh7*a zshN{?eT$q(U6AT+xJ#3q4wPyJEt4X}sHk6yX9P)=I;_^szC_hZK zXMU_O*mMQ`kK~ul>AGeq)U&baYHjm~_RZUuJVqX>Cg6Mlhqgr*9g$O4JN@seN|%XY Vb9~PAKI@GHk`k!#t+6!ue*vul*6aWP literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0009.png b/themes/bgrt/animation-0009.png new file mode 100644 index 0000000000000000000000000000000000000000..3e79b9bcdd7c337bb0de3db1fa15ea8c05e38917 GIT binary patch literal 1640 zcmYL}dsNbA9L9eLh=N#J8eUp7yW8R?lp%RfysTy^Y8F_KA+i7ou)JZSmANu=X=aDa zHBHOXRJxF+P^VNhGrO46)FQJ68q*ZaNyA;v&UwG@=bYzx&hvi%dULji2BDFTNB{uP zA;AIRCSvEt!rXKVQ&K*gV95{ODFgu2g1LbJ=cO2v=p!OWivrmkCV-1i;4*PPvbkJF zEKVqh#j)5T9G{cSO-K~Q<3#aHE>nmT^4UBdQ}7?x?d33e`}Sr&hMB4`b5#Kh5fi|J zZbY1$8xBvvy19`yc#uGR0(acel$k%5iC}Y?00@%)Jsxi{)jE@B@%JhM#+>O9*yNXM z(ro6m%_d2}0RF)`5G4HBMWmQayE&5*%j7Wu29M2Uh}a1{ECGz;3$gRmnWn&kxj?vS zL#E*WH`jq1y(#T)O}6dd<;k%erVvYEaQP+zZg^t)S&S)>52=;~5+A8r!vG!3$3s)znr{6Cnr~4w6k4jh7+Bl)eh7N<;1r&*qF7+bBkZ?m5A?>XQe)6mj|zLBaF5Bc#e`mNFt zMG8kh+PBB6PDlmb%PKEkuD=a`){gN~y;cvwl3>n|LmA8I+c!c!Iz~g6WYiPo7E6{7 zd&|HKVi7b~V{p*T2U9<~mr}Cd2l7!MCZsn}w;^efwESCYZF_nE%%j?OVcT!r-iQ(e z2|U-VaMLZ((Z)MgyPs~2wvQRsd-0Li)cdP_LVUXK14LQlO69L~I45J@EN*|+fmdUY z&it9-M-Ny8x$zMF5cF?(}3}#F=^4|?4c1s{lmZ13&Cj|v9MRaO&X)YzRmg#1!R^B`3-s83f z{-Pd6lyZiGZ?l^u!-vf7R5tYiWIxm-y_816XC|U@6FllhDBVwLJ#A)V z-vG#v5%V`kzFN4ex2qp3ziIh^_N$ZqJfe`H&mJyZQ`i`%h@Ve_dPiAH%Y+Be%stn$ z)MO3pL$T()V#bLxxC?5d%_ZW6MJ zZ?J}B-*4aB%X#ZNu<6i6f(Y>={=znKWqt9c#8;|G0wQi~;xPQx=4@T1U35WtV7SES z2@&W$b)!4JJF=x&vQ1EP>;`!Pfru-~rjD4apYJLZuXbo_P)M)zD1#Kq2HQqRlNlLS zr>>ctW|uV`tGG8KT_bK5GAml-i&!40PiA$hP@@g~XpQWr9i`SW-!1gt&k<9niMt@U zzLv;N=gt%Ij+9a&p)&n?=9kvA95k+u7SSAsHM{dwllEDAcmO(vR;fJc=dXKpYc7(&P9M#qz^ih?O zM}}yC<1J(}&}N)PYAdqX+qi{?xAxJUlf_#|vhU5QG$&H%*;&U6mp+ z#`rL}ZFGx%YQ>^AaZGsHA*bW1Z7&U@H@ryeGtNWr_;J;x#>#lt&bm|L;o*BbhQ|5I zn<|A?dmFc`uk=jBlf0rqE7k*FsT~*7MRyH#5$=H)&g5qA%yvbE?RG77q0&L`rR*&0 z_T>F<=&0nd1cD|E{#+%Y?TWZyyw;Oft-nOL`Bd|~*e85VZGB&&RBRQB-a6dda+%iq cdAHU$Pk2Da5jTWPn|?|lgd7@B?N87A3!Dev#Q*>R literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0010.png b/themes/bgrt/animation-0010.png new file mode 100644 index 0000000000000000000000000000000000000000..1f64875a17c6ac9bea646cbfc133dfe5013ea639 GIT binary patch literal 1613 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0012.png b/themes/bgrt/animation-0012.png new file mode 100644 index 0000000000000000000000000000000000000000..cdefdc78205460aac77e50eed3ac35b2f2c15456 GIT binary patch literal 1619 zcmYLJdoCghqC)<+b5c0uM^X(cHsG2}MetYtU0XllZuI3l^E3$5ExE~T5K z%ch%^FG)7jgpbBhs0?4@_F$3m5r|ZXTW}43qxd0`x3j^z5b5$p8xF`Mb~<+WV~@ptkhaDaiy-L}SFMH*g?lxX5h= zsbm818=O%nm$`Oq2q>B^iXlWYgA5QDR62n}Wik*hs00=pVKA5l8jKeWd%z3H$^Y+k zM!EZjv<`r>(XVhWkw#`CLI`vgh~Q>ydYQQs06@nAaGUmq>tvS&GD|~Eaz^xmZ(c6N zX=T~w+l`8_d<_>{hRq@!~^nAwKC=n*M}dA z^L>3bt@t&`@SGT*_sKiL>7i$Chqo=WDTTG)Gc zY}XBo68jWiBm5?9h!;tupOQKqo4J~Onzar z+hlq82QQ*uM-LR+i4EQG!Sy(-E~sjkrqlZRR6l0Hma~Jix@%^7{Ct<#wCDCk_+Rxq zUsQ2wDdT*s79}&+8{+9YYgRvhUL>#|ys%RVMU@xq@ayO`KO-`IbnZ>Jdt?DZ2f;Ix zrO0b;hr-3J36SrpqRnwzw0PEsHofByXJF_Ox1{332DQc$Kk}c+TD8hXP%@7=)0Ai1 z75I$kS^Xmh=^9>1II@-+azP89k=k-~%7KgAF&aIo*Juzqyh4v=1oiRhG0m_HM%^*zkQAhcveAX4zO_|N16-$?2T~ zUDL^hZZg+zlPzZC^tP^P^~3I)Hmvcvs%C}LwdLd|mNw5A zdn?+6FPf^K)=Q|u2lBkSUhP*B>HIQlNggr(aS=roWgV#<>z@71MtI7l*HZQIV)}R$ zX=5>_an_U;UbN{NwB|@#iD``54Yf@EJoC#GwMEguTQYCvWkaDs8suJ=Zr_T%64M>^ z6lxtA2#5`pt%6mW@~>Oz&QohmYtWFE^)?A22~A)BkP$LJSp9xmn0wgRwYvus zMn>O#$@{t;=(6bHwY68Q?#s4#&gLzcoljG~eV}W<>TJd>S(5vY>K&L$$&X6G%m_qm zDX&Jc@_i)(2Qb-01NJ~^c&Ek8vH|Knre4e|XSl=d{M&eV;YCtmu%Z}{MRh{JRv zN38zLrBKSb+C+uU1s6QY_tQj1NK&x$(d5^)(uR`)^ql3(Oy*;fs`BiyUAKkv{>@Px zG2848v?BQrL^QQZ1!vu((^UFv?y4N&vRxe)<6CV1{Cn<11wz*8Tw2p!%!*?2=Y-1L z%6;YgxSA$E2i!W!`8y#pYn#AR{GiS}6kw?pe|Y^{bclU=etoRHVyBV}k~S0+3w)Q>(SlJ>DH z%JXaL4w}+)YEO17!8cuhBFssDdJA$;2*rEc6_`2boN6C;GV3*U2ut_l35<~m5awl< zpV}doYYQT*_-DGDXAj2@9A5e;`uUrh+~RwEUWBp1&pP^SkI;%eM!|v&GZH4rgP8-n zQo?t1F|6;rZS<)r?5W4sqtzG1HO_Mj6!=T?NImR{9z$GD*t_ZC(27ZJo`2h&-D^!M zrCxcSW7qSgN{W@$oq#(ZFeZByYhIuz>epAQqB*76g~HkejW$xXLG30=5L< JZu-S#{R<=3;bi~- literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0013.png b/themes/bgrt/animation-0013.png new file mode 100644 index 0000000000000000000000000000000000000000..de5aa6ec0cd0e46ab5e254855ce0ae1f01bbe6e8 GIT binary patch literal 1617 zcmYLJc~sJA6#cQJ;hI^vFPW($C0mP7(uNs{=7dvJYN3!Dn}C?ODHk!%)#j^J@v=%`2zhY^Mr z3c}Fgks>so9nay#iXzaW2o{GWL<{+mTrNxSA9{qcSzKml+H*Jt|JgJI3DM-HRxHg;0cW6umB8(`14`$HeKQhP+RUiZS228zoUL|Pb&%K{kONDf03$>TcWF-Q19N7I2c&|tn`*aL3J z68!(C2WCAb@S6yfm;MNk4`Z{0jx+{`40<0Q^!oqnlK(v3lK|!nFjJeh{2J_65GOsv| z^Nl1vFQvj-CTgFngg}f>Z0ls|E*HMp8r~9ac8Z-H#^-9jTVJ#t_>Um!{ z5BWT5HmT3A-EtU4G7N#YsG1L#L2Klu)YPg5qx&%JFPhym<=Z+a>)O~*guOo><%KBH z(@*KNhY%I8=~P6m!o(gb9yFLS(Czf8`TO)2qd(s1;8FF)tDVzzCZ|##s8;X|ZQ-Mo zgw$ZUjd<9BkGue}dHA`>(WLXK>wMO6&E6OT`W#N~)arf=CYd!H(f=w(iMMUc!6Lq> z&ncAdbPE3+4%xj5B4xjFhY_PuiAFt9b_esOT&|qNl&Ts{6Sfe?;gwUbd#+3?-KA?b zo+v7CLda*A$pts7JJpH9_C4?q9;usCS}A&>Ks4m$6!(1Y@dR~wgRw`pQt{Be1e4E# zp#pm(=4ZYe-s&NXn0LFC)|i>Kr%I`X4oU{!x&boz)=SQ8FL*4|gljB)yOZP``=L|N zzqnWR@~C7>jZK;wICwv{OPZT%ch7_bIRr&tUhm>Mn|ldzeNXih3bIZ1B}a+0>ATxE zH3v`ZCayua#&l;#o2wq(Ni=9Hli5n+wjUD@#)h`a@CJDo3U`P#Ci1A9Ps72b%WE`4 zN8F^P54*^lVJ@_^vht($$$<%1Di>qSF-PCCplZH0R#D+8dubu4=--!N+cK@R6t7_V zoQ~&Jqv9@)9;I+$mvZv7$U|3){nB?Kx}NsZEPC;)8#mPXa(%ygJxgw_?1NNo&5z?Q zwO?voh7Lp(qFm*L7f0M$5D}r*4fD)8*hWXbNqe=c`YI5}mKe2gFh=l&`ss89_U@l2 zwyvA9B24J6R-xilBy%bd@6Z=JCAZ6Imz;moc1l{V%~Ft<^6eTuj8*^bH*OXYA$cQr znYlSZelLWsTL@#xt8P9ha{9aihf0@BG-fru>lnMbJ*l`aZ)yIs=YMIBa zj(S|gy+iGW2pgYi(oyrQn~K^hWvFk{KvzLZQKHMNbHefL-zV7p@ONT;YKkVANdm^8 z^)GVTXE)KGZcsiy%lMeKyZy;rba;Sier&w)_^PyLK{o>1iYDFZi^L2navDn?+i(Ed zRzVa_AwqHDEpEK*qzKt=_{y^>dtDfS#^M>lirPY~)v8NF zJDMj@P5ineiN)RRR^tTin&Ojwbyh7go(Z$g|2Vc++KrA((&m>n-`AUOb|R2`!UrA9 z`pl{)kO#ZdFE_gl*pk>?Q*A#0)KJ0FENS+IU%}0wN7hpEd$~!AEf_61HReQhT z+u7;s`tLNJA4*U^CAK6ZE~`J4gnZy+LNffU2#KCJ-3|*9Z|u8huI};dvT1F>tzS#e zb+YX2>&J(hOH6seL(3auj4CfR>JNu$>w0cv+8%rR9nvzA(M#`>n1Lq|pm_U}%eNg) F`xj=u(4+tW literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0014.png b/themes/bgrt/animation-0014.png new file mode 100644 index 0000000000000000000000000000000000000000..a0199041fce991f918eac5776b9baf7a1cf10287 GIT binary patch literal 1618 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 N002ovPDHLkV1n9E(TV^7 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0016.png b/themes/bgrt/animation-0016.png new file mode 100644 index 0000000000000000000000000000000000000000..f72a577c023379bf99ea2b7fb77fba843bc9e37c GIT binary patch literal 1605 zcmYL}c~FvD7{)(EL=BTPP0Es7D$`iR%mvd*NVBY@92%E_4krKcWw_!5I4Cv>rWemE~fUFO3fZ&RCoq z28Y8q<54)A$7XjAtTUH0w^ExyEM^WcIUs<=di*{(S5|WxO6wW?yGlGwYvNpcS8~F% z+OkD$hgOQG0l$I9V)5#yZe*=#zG#voz!(sq#V|QEK9d`R!eb+2c_@>2Y1)9Y%|J;s4Yb6wW5oqM~`h35r6d<5des}5W%mT%Azd|Fg?m=oetf1lpp{N%9I@?C)!e+d` z5b9BN^MtI4nrI?BFT1YBpALQ^INSuE!cl!vbkb`w3sMb3^T@5tW*%%GL+vsnIusK4 zaDbio3+fFK2v)6sL3UOITXwKyKD*nal?o$dRn*AXAkFlaw7zgTsnRyUvB)=jjjQTL ze;DksCi9(@lPK>sWCW6|>{4ad%@g{^)b$yvR;mJUDti=pzQcHQJv;2%T!Ry{(xu-~ zhPrvSwHa2YFlr%q(abZ7?Kf;H(32KbYE;k6UUf_2B%afKX7^tPe1~EM)8sV)KT07{ zcUPE;%-X|?TBM&8C-YYLFU9N;C;jN#c;ds==+KCtOR_L#PumU-&ki$QSueRXGkLYF zJ@`Qg*WQ9GNrw*=M(qtN9ymEIdQsKb0MqAZZ#?LEZy+_OYJ#zfBnVpgT+~9JxHI0< zTXP2?8RN1;4o!=&IL*(DGnYrv-7gudTL_UC>d}VcRJUH`xPvN`(fMV9k$L0&sjkui zlW{5QZCQA#^U`f3HVGkr1!REmfCa)Q7>Z%X;E#IMN;{{6cAlh&i%3Ffs94Pe33Kcsz_?HN-C{7Fb0!6aNS&&PAaiQ7M-z;!jza5?;<@SXd{O|@4pYK~y$CG#b1 z#_069k=;EDw)+;0J-ozwhK`q1-#b1T`Cz}Pi8!lH-=vz}IyS6ZAWNFq&zVfeRNou2 zw*}6XkG?+Rmt3HyQ}&GxE1^x5|FlVfQoera-v7c;<3;kG+(81?c2y8Nn&j>orfrZ? z*w=xm!5X#=Da=0Q{47hJbL#VE-KV>V)@D8q<;flP0<&hLKwCO1i`(W%%`uu6I+T82 zqjUKVax;Mlr>;<2Hza=@nA7==n2VdGmDN)wL z!Y#O(09n2j(56|yA4Y7k&-VH#ZIw62oLfe$`Ky9{`!+tx3Rb=97e4{*`f=;udt3Te vvk7-xn%>0@ZOgjY+gP$!e635U2Gu4#kk=Mgf0fpzp2i)U6giQ literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0017.png b/themes/bgrt/animation-0017.png new file mode 100644 index 0000000000000000000000000000000000000000..02926e7137b875d477182dacbf0a3f457bd34ac1 GIT binary patch literal 1581 zcmYLJc~p{l6#Ya&DKXS6k6T1m<_1VANn>ibW@(1Gz&;09bCi)H*;(sX0V$1AQYwKPHO-;8M731}>G!X44XJ z{PaXzG84q{SUGHN2AF~aQy6RpAIIl0IUGj%f9OnSF*y6_1yA*$DD$N#3JqicE_eb7 zMeLtj~|cVZq;(D3DOL{uaZuKM1p&>b!-R3 z8830$Au62)`~YV>o;cr4+5?GZOX8kH28RLAI7~JTWO6weB0h=7$E+ABfDEQfhA?PD zM*9DMI^*2}sb4`zHu)Z&lgMK5F?(oi9)tkFg(N&@?f?LK4+1IP)JWt>MaM6DebMl# zi#la?_SgM*zH+%D%-t_mI=wCP+6K<%-Q~-pXxM;)VO?K;$kh__q+|=s%(rns0>B@MxDx<>XxrTDn7Nt zKw|M*wJMcI&^lX7V%ws)p=Vxw^g`{Cs6r53`Wcn-dKp)w>dPh@9~hN+!N4y#{WAUA zCgY)7ZH=VKuz`=(Wv8C%iuN~@#N=*;aiu+iv>~Z+fZ=q;TCK}vZ6SSwe!KO~i#^DX zHSI#u@K~+t!(BnvV0c={`9b8U?M=(~@A9XDq`6gRlYbh^Hrt7b-euL7bgImt#wkWT zsayE4u81nY^1^X?oq-RZh!ql|=tk*+U-0xQVKU-+!VMoJuiHMjet$!;scdMp`T4uR z(?{>(5HKlh`}hf4P#rc!>l`Wu2GiVr_W2C!QZKlsJwJKSvgMLYHZNbR4=NHhftcc) z>HBs;M~df24(FOvxN-ZP(%9Q8DfX*XsjT*jE3zFK=9e|`dS^m&mOs-8d9kG)?Rlnn z=&Bvu$0|GDs?YOmi^dzJ%$TbRxs^0h?`3=(wg`9IxN+cKz#%cqZJ%uYn~C)Y{)#Zm z8L6mia-YNv6*oJ4D0f)(P0Aa5CAK7@;dG2$m^aZTqRv)=NNljaP?KqFc3^#XPvi5` zs4vGrX3XdX5##tKk2>QctfPjjlhLw>*lm88cZ=fp?#((c-KVnAyC0h# z3A!RG62=#Om9?{E}#uPl)>_a<5BUorNMdkn#Xf$(`U_{Cx3Ha z_Yd7Z$Rxm9Sf!0SL1{PZJ(kJubuE9^3TkWy2K3x{T)kTTdu`P~&W&xTCkk<`=rcwX zIv449u;hLW8_eLyyY#s5T12(SaF7BkIP0T$6KC3=sdSAy?)XT1wJ1+EvvYK|P()s% z#ky4-b&!0WEr{Q{v&dB>`HYHIw)VHJx??)SX{6$X9(Ro=v6*Y&tB2F7kG^)*@wZD- z>WyK)zM0EZS;l{gUci~mkEj+Jl!>0hy|X2NuLB!=PT2SQGi%3f0f*F4b`Tg~ W=68_kkLRFs2L$@=qSW{#6#NVJGszkN literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0018.png b/themes/bgrt/animation-0018.png new file mode 100644 index 0000000000000000000000000000000000000000..667cd7d4ad375878eb731326ad70a12f5536d389 GIT binary patch literal 1582 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 T*Shb6w+?W2baN;_aZ&IujE2>N literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0020.png b/themes/bgrt/animation-0020.png new file mode 100644 index 0000000000000000000000000000000000000000..d228ed84fbddcab44ada03bb79b5c3d842e58a24 GIT binary patch literal 1558 zcmYL}dpOg39LIl{X(UqEak|X0I%;LNVkvhuE3IiN5+=5pwi%lZF=j<_ugB^Xq032# zBAvNkN<7K6W2$l7PKPpCGEue1{f^))Fp z`_J(v>LzYx4*t~##*z|k7p9}To?q(9cZ&e_KoemwZS2Tm$h+#QK1xJJ31VVmtj6oab#V!Vz!J66f!vo(p0YF_hm=T+8YtQ_ z{1@DY{P_p<{RD6eJbb_O=RSfyfwht9Yi%h4H)~`7%V(4vwd?@i$lRa= zQ81ve8p}ZB^DDGjLJaAr?!@A`-^*ipifycwvr0#f+2(4ZQI1y9K-Y3hJi6B5^p^aM zAxp<#kAli)+Dq4Y$&sekkVjmi2&q}3Ri%4tMr!o6OXQhxvfMzB>aKA**{+PkKk7p2 z+--Xk_;eWl=-Tb#Z4zR@d6)Zrx;HNDG#u-QB|9ZVUOt0Qzl%ee<(~FVU!x>{yI7<< z+SdN8F|9W4UgX1GVs*cMr%(OY25E;f1BVv{oIoU&i6TgA7sU2>-S>hWvpzb1d6!<_ z50i?e3eDz8%{eXy>5;IbG=v|K?7G}jfB((kWzO!J+OoK$q!$$4)oA%E=uj#B8%e1w z4@x~81&1Vl=swnvl1mud;#)i&MH5BA^K8TtqT+lL4q|-0?CRTr(X6~&a-*}D7Qxi4 zGQuIHIGW=N+YYS458ionBVxB#HTrBcP|^aS<1&J;1UEkg-hAolR>WO z4g=$G?H_iXqr>0CX14KP--zkyz)}Fc$xyc<(fFRJ%$*ri0X;mqE9ddI{##x-!)vtMIJL^pHHU_#4@B)V zs$$75yu4#)Ty3Jv3!NUkS8W)c56%wSP9{NcJhXIU%TmIVFNd$7y3WN-R|;Ds3I9CY zm7OUq2%YvxzaCfGW8iF&`s4sSWMvP*(nF*n+(wS8eF zzt{AGqa&%Cz2X27?)&^=liTH*^|6$^)}aAVVThquUznPmO|o2v2?o^}M9EEW4Z94F zX(~*P89$kMR&U=noj&28@hNbww_y}g+qD=8g}iaaqGU;~d#|aB!%RsNBk3Q5LB3!+ z@Of|vnsc|a%Ti|#A|4jg4LPjWa;`z%uwajebHkNm?a>2P;z@CixGH;oF_j5oWA145 zllb1mc!@J8^Hr;eF~`V&C@xOxAr4$evLzPz ySzG6V*gSPVFW)9qI+07?IazBPQu=YcWXU(fB0{)GIKHU**8svnqI0n$CGKAn?7oBm literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0021.png b/themes/bgrt/animation-0021.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bd0f5ca29b11e6f3f14f5b14ffbfc53dc2c6f3 GIT binary patch literal 1545 zcmYLJc{tR09G-+I$6#fm%(Q5Vn#-1PlE za%@|Ol2T|R_cc4Dk(FZ_=VbS%o_+TFd_Ldz`M&S_yx-4XpQPjNPO4jVw?ZHgRiZP& z6GX&DD=C6ECp!8I2+AyH3I_t&rnS+VAUE@2AZf#O@ZvfKhXN3E5R(p|LxSmaS^%08 z7Jxn%%tf<8qv*_VZV;Lq1keEvn!^faFo3ZC5ak~VFarJg9r9olY$J+5;{p&I28%~y zv1ptr0*kdcXl{Wqg@rs5fF9_Eha5}?AQ+6r_rhUEr3710Q~EYa7!4G0*l1G4VUW|< z;EsS)7!C3rP#BD<>`y!i6ty=*QUJgJAT&lWoyHAjG7zSivn&omeVh*(v^ET$;DkWf z|9_$|X4a%PB2d=+79JH43UCl48l43q1dGG-a$qJ9i2N-g!H(>uoY2>icESOwFqg|F z%csZ-d@~5!9X)g$bx^LdkKT{Fu7S@MF-%)-?*evwMLNv!eH#EXHm|C9Tv6eEVyR)a zVFWw{B_$=h?5ntyi&mYy$(2s_C(E@C>jF3@-_ovV*T9`=$>}eyvuE*xBSS-a+T5>^ zeUp-!mClsRJilt-NMNC*mDO;v>cj`XD?yf)=s<#q$Aa0X*J z{>iU~7EcIbw4(9dGkpjAZK!7nYEb;iwB%BCIiTl-fG_9avAY&lEhD+K}xoB7#R zC&$3APV;`aigAcY>Uw>fNiM2hyM8;O2}N9*s1lZ?NA{xxYVTi(pqq%TCz~hM3>%f& zwK1nC7R!u1Pz`65i$6SHH$V2muIQJ;ZF!hv!Pt7ehj5_MM{@w*n<71YeXZTcTD<)a9DP z_4?wa*xst7C#_E(lEp9Ht9gZ~gfgGM3v1O)FZ9bFRYM_PUD?4@T&m@|lN$m>)e-bu zQd4R1u~?lQ8T}?vuyIYbj-$Mhz~#Nm`yVu46o$;XvCJaxW*>ivZ`7w!4kZpPn!MJ+ z1yY|qY!mc-K-vxX|C9O$H=qdajGLzT&H&yzW9o+5&&8JU%P5!)xrH(tlcJF{(nZ-X zeqEb>176zWRD4n&j;&OHD;7r0*NoJc39kb?@AM7bAd2+PUpk|DUUG~7Hm)j5=$Uz+ zaQo_-__a@O&DS@=I9pGrpzJLgvk5k-oF~u^iy&36Ei^)yi$5$v_obXOUvJv3YU-yJ-qu7^K7GG#BXV|50 z*SL+RbQAIEH$FnV6X83ACGKgxFLd-zn^+*3|?C{(agAHk!}{#NDB-)^g=-0l--i!u35hHnA12ciJy46=Ow{9_0(P$WN!jMqUW_m l#LTP=R?h|}IX$=}Q}60dsL<_peh02H2+_fvP-*YS{}=dUzTN-; literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0022.png b/themes/bgrt/animation-0022.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7728223e991497f28174a8789626155cb762be GIT binary patch literal 1541 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0024.png b/themes/bgrt/animation-0024.png new file mode 100644 index 0000000000000000000000000000000000000000..ed52d3d40d594dc4ff4c0f9b796b3d0243a9aa81 GIT binary patch literal 1492 zcmYL}dpOg39LIlSN7EQKGMPeHa@eg4BbQ7}LO3U#6WQz+W3$CMk6|s<{;* zHJ2h?i5!=-dJ^VV2?xn7PVIy`Q_p$M^L#(w*YmvJ@8|vf{Ph)id%CKx-?$zC0ClPx z#YaKIwSlQ9Zhl-`P0vwkW%jQH0LUDpnkPY&2d@eI00_6QiD>@5|V9=AFLKRi$wJHit00Klj!5T*( z;D{tc0)f24hKwhn!oD?FaG^4!{2Vd|`zzQJGw2+$&!Y?^?{i7+JLk8=5j8l%aI0BSAZqu3DS z{r{#Fekav$S)j0y-^ycySs>rgm&WEQ2oQ+Y$8*sZ003oCDNcU=swsaAMxdP3Qe(Q8 zG@JFHNL@>A>ko5ZF^NhDB@^w)Q1jwjOw^ZWwqGTrfTnXXcJ*zIGYb&|_3Xi;H~Y71 z)^?ER7B8+oAH6gx+qDdCo_0>Vsngz{y_*qVPtCpCQ_IAjr}_oO$Alfrn!0i7oH`z( zhpdPqTW3qc4|N+l2UeMK+}Z*3*DbH_Cnq#PO12!51=-3dlULvFxU|QFM@^HR(MjKg zSr@#S!R_@xm>D>tAtQD~%<#***aFc+MvVm`(ZK7Yn@8kr+oUTb35cMsD;KJIVgXat zB~PfH@dzp4N!*VG`OV!Lm^Se~x@1#OQ#u4@AlxsDZk5ed^-Wj6TOfK_(EE>op7`lz z*=`u3ywcSCFCdzZyaZo(n1^_p1MN1CEb@No-c=`!Z{+cc2P_sqx~L{*+{8KidRMFP z?fk6!d;Dd~t=CK9#_k)3yeN2QWUn$(Me>|zum4{+-2XZ zkGADab=3{5z;p8Il|wJ1-s8p^d0kY*$ugz+cU_MYW9Efn+-VE_RZ~?-YGQ8w1 z3s<`Vq>1TPuU1$3EZ2NkUnnO3I`z5IN%}i{BnP#cyPB1EGF|;Q-9DoeNHrH|PJ-8p zyPEam=kH-F{?da{$dLn^qCz?g?oC)WSgJIH2lr)HAP<|*nl*0F7-w)rPBDLreGSyK zhLUpGEd?N3&$=-;c6f16n^eR~&uT%pCerZpd17HU9GEfNnW?5#Re6==y(fAydYFXS zmwX^!_#xvkc7kM@=M>;^gtb*W$*DMC2d(hHX^20`I)3n7%K*Q0=tKczh<;U53=pdj zqL)jKJwwL=)IEqtu|CL>cs>E$ZUQ;5+o31YDz*C7beWn5d;gizH&LIldPAa)3$Fnw zq+s3I%B+Ll;i#M(p;K%|t?|RqG@=(UZk zJqLf2-^-7(yjDb?s`gdeT!no*6t^@%Ul{?X8YshF%nQ4q$}4qwy?vA&x8^U&Psuol zri2AF`7WhYkX+AKF`y}d`kG#i z`k9G^4C_J>N2G_p+%VpyR3q019A}r)5Q@e~#nns!j_agT{`50&U3R z{{N>rXzfTHc?HSpU&E6b(JY=WmBxvK5U{}F)6Stx0YKJ`Omy}OM5LbkD~9THL@bj0_q{&Rh;iU}fr-be$aTgzd&1tD{L2vPSb&WD1eyDQo%@{htZRWRzk>^E|qu6=N8@FC*UYxpy zH8XnHm6X}2yzyzz91$Clhg(F1)E*gG09e8R#+|11eO*mJfKug<$D|6vQQ=lDv6<*EXkYU=d7Fv{4MuD?dVsULl3H54SSP z>>9_*$5KsJPWSV7%gkD~1<3YJ%!e=?g3U{jEw27f^!Md{v1Mk$sFZ;lP99odQu=}+_ zH8>S%lPP}6jf(>_Hcz$x`>D%)vSOG-J))tW7N8IhkbLTg_JQPIVa~yDaB` zJv^+8@H2d~{qGK%V>8l2^2^imYOnWSq@~L~1ecQb4ysHY<4i0g1$__|dJ<-@&ouwh zl$f)Cwo3C2u{c*S;m0rLymx5}149pmAjH*hb1i92X<=~joaj?XayTrB9VRrEf15J1v7eB7lhAa6 xe&)U_H6hC)_d#JNHcFv`T(9FOSlo4RF#YNEcwwUpEEGC80GZ@XtaAwy{0oZvaTWjo literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0026.png b/themes/bgrt/animation-0026.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfd5dcaa6cfebe4fa8fbe8a4c53a2650e039182 GIT binary patch literal 1427 zcmYL}do+}39LL{5WspWLjYWoB*Ja)@%S^}&u{enkkzC%!U^FxA%*$kk7OORu9S3P- zkw$SUEk#EucZCyMk~PY;5n3W)nnl}=I(zn<=l6Wh`F_9W`~3cTa*p|W?pFCm1pt8E z-d^qja$>eed8hnlbGd7BAQQbp*#MxbxjhJ=v6#2Bjesj@Ks?;G|SbxcEXz@Mt zzVsT024%oK)vG%ve=)dJyu~4kDzME8?u$mhnd;VCFSc$H0Qk(DLo!dsEGqIo>&!0g zvwUA}_2@9ClhY-fZjkk_He!D0BG?WqXK0O;kEpBljpBcuoPN^H;0=U^Qwv=L67P~| zK&F4ra5DmR8__K&w@4W_dO*tE%03AW)Y|l$<;-s}WEN`i(x+X1@0>rFB&F*~KH>8! zNa^&#;_7;Bf8No(gYKJPYC>#98_b#vx4IEu5v!G_hf?V91jTXl^~0}@MwvV+Sji=x z*2tLiYPr|`gd#pWR(J|EhKzQKu|ZvehcVf6T4CW=cZCXp`B{A56+x?(q-G%-D-=}b z-Yyg#N>%;w-W}ttd+QO#QWU=}>nX2irv!i&l4nqwQLKrdZWN~>!0ILP1=L)_VucTB zXfPF4Ga;vZmmWWnjXTe+uF~l)>jYBPwbaa6);StFy4^9B%ZeFc;y(%y7(V~R@VdFc_T5G1~Spo-) zn$nQz>6HC?scLRCXzh-4`p8FTuFKC^t}h;f)wYmIleb1rV0(W+bfMKlOxTe*ndKKSWw9f+O!LZu7`<5p z*1^rDf~8_wAz{Yknf5U8&xKr*ztKAkO&BKW-csvS{eN^w=^KL``)2!B*7I^Qfc~%* z9vW5jynT!F*MQl4xGYHQi!`?6z2PU(EXC`+p9&r?ecCAHY65p{P?sC|#&zR-!_Lc{ zTJ}IB9drza1t-GN4p!A@EY3{j_l}&Cj_$iQJG^?Uzf^<08JVr?)Tbn}My<{3J8`9D z_C1|Fi!WXm)cGUGT?Uo)A41+v`O7>?NT!+fag%}KkIG!Lj%%}HO$hMJF;!7S&?%kd z{6Mn~H}g|2?Xpxw^(xF_Y3|!0*cIv(_0BX+_ny!*5IU|YDvuJ`)d&lIX9fONxf3&Y zN@>02!(Ak7u8(Oar{zB!lhh=9^bGdPv*X4I4Im#;Bc-nYrRv1hkv)dF@2u#8HiuUn V%1LTM1PC>0whMGv-57~7XZB>`}9B8>!3pwMUp zBAmq}!oQ`k;S6djEs?_}!`WmKjl_bp7!*34#QcwTaa0ohM4WI?Ras@QS%oFANq{{9 z=?q6A;r1vP5_!PUfE0D(C0<=CUq#giPRr}23eCP8W1ql*w< zX(%=F$usI*dY+8jbY~yrK!JZh7d_~5D08rh5$9jf_Y4VEI=|-O0 ze9T=2XY@Va@b9VOIC(T{#mVWj@{77E4g-zp%%o#4=)X-2PBJ7I`FZzwyENmBxHJ=D zT2#SEjJuFiwSuAcy;GFyOuKOFSQ)&#yK?BLWx7%QVLVcHcBHOh?C=}lBo{1e7emCp z+l$8Uf6U;wcJ0Rs`gau^sw~oy7&lu$!UK+%N&cYw={ip4k4eJ)b}G!6hk+D-FN+qa z-_H++^gHVKR6x6XVC5PfC2JhaSEN)`bme!qZuQvfyyUilOfR>-X&LS?y1Z92ScPnQ z-^3`7d*!+>(ZKN33t!$&HMcXLELv--1Bs7am$ZFi4W-Vrr!#-0UY%whNxsc=KU;a4 z7nFSEY1Wqi4BhE5sIBH7$7icf4fk zC#?l3&~NqL3>45}0pV-DrAccm#t{|JXM7Z7IP3@xW6pUW>4eB*u8IW=OI;69n{-S? zs)~*k0fa~(bIvyBik+KX&qT0`v)NJBwGp!i?lo2q5+cf)N>~|-u*HN$9OikKn(LV$ z|L&}XR@05F6mTMWw%dP;YPKm);*d0tOBmNKjN*aBG1r|z!)V=KARAceZO4*9*S(%R zS13JmN+6iqr`9*UC|G#Erz^_k|2WTUS-Lu)nqg#3qAC$lAA zryh9P_a^%myhlZjGU9L~Yj(FWnP1SAbFjPalKN8H309_g$%-PVB=_~zro!fVu4%8{ z!1&w_9h=L;^#bu*yFhV!kF;;Kg#Gd8np)!wSKilPV?|0GU3*?}S1m&vt+Hn^yH8Zz zjj*j`xz7QayUjgj^tVYk9rdbAeQnS3wZiptYS1Utsgaa`KvwM(U*m?BF7S^$;FG1R zb#t$1tD8^st0i6uzW8P_Hjj}UrH>)7<5n+sruPr-u8bGPE_-yg^# z)g{H(R>?;|o!m>eD&&*-C2hi0uvcr5qPie^Xz~hk|H?b$(E3`rs8=YA|(pG1KlMu`+A$PuoQ!-!?ooqj)JPW^iPyT#icU|^zWHt<#g zX4N(}!qDb8=TD&QHDPLK?&;Kv`OIvCiaj;34i_J&ui F@L%rzZB+mO literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0028.png b/themes/bgrt/animation-0028.png new file mode 100644 index 0000000000000000000000000000000000000000..eda5e3f2f3ab415780c5c7fcfc273bea1920cf57 GIT binary patch literal 1385 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHM!~1;QW&K|mL#79s4^GcdOcKK%$NEd(~a zGC3!;SRptuw*W{p7#dmBO_R`OU|?bNba4!c;H;h2={GxEz-?pWG`-A_Dc|c4cm%S> z1|51-lWz0;`;Sv8OA^0*?dvVyefQm~0*e^N4^382J(tT@)uhYSF2DaJFy3lT=mCHC z6o=paIX^Pn=NEXc&$E|(sH2oS5ub0>TKOVaVDq144J>TZ$}?}z4~lQ z>KprGUV*Rof6|?QzoGGhg8N7B56>TDf7t)vbY1;Ei{vD2kHbfUI;M%bA;h&F#N5Q>f*i-4FKwd7(|6_nY1~ z2_I*yXV{gl{W@47yhx(=We)?F@mkMAVhZS(nY7FIGpysHwKp?2hEG%QtXZKkw0X7o7tt|5+@LFeNoOYI1pm&r{oW za7C>wl$>q z{JU{-wSuA8vC}OdGFz52b#KHB`D=k2n&a>6zq%$|iN zSLap5{%N*+z3%C5mDLTAJolD)uw{k&*}PuHmce`>y!KW1irs(P6fGFj_szMtyZ`L< zM`mJPXZ#OJ8BK}d+mXAwuOR0@{bq|UpN|K1EmjIgMC^Pk@;I57HM6PaQdY~2SLn+$2oZKz6zx1nFAn%uB+IAbCAD^tU|JWzZjAE8T=@WZoJti;kKUST*`~wTS zgS*WARp-T}H%y$@C$I8PN{RE}=Ejb#qSq`N-6Bn^mW6G5x%`S^JfrE{PfINB9l9S_ zz|SJ&U{skj>8w*g z?yLEWe(w_7-gzNeu3z)qZP)VPKi$u!8?w6vG0lO z%yEg4%{j+qiv;ULiwiz?cP?|8-*(94gInT(MIWBHx3T#*^{wW!y)eJ9uZL{`55pyf z$)94@ue+^uQPd~$Uk-CcW&@K6vyWumM9GxjXAS;7Oy{foa=_5qCx6iv-P6wL2jyRW iJ$yXr#glZMKjn=3Qa-N}cgqA86%3xPelF{r5}E+GgkxC% literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0029.png b/themes/bgrt/animation-0029.png new file mode 100644 index 0000000000000000000000000000000000000000..33f2683016b52bf778779348c8c96cdabceed39d GIT binary patch literal 1348 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH0f49q-3ewP5Hg}{ba zCg-FUD+DLz7654mLnDj2X%gBD49s^tT^vIqIBTbM2T2?9xOy(QaOwL0`qbsYQEVKZ z?=Sw6NWHm0a(#;DwY{76&VEz2`|j13CA*w9h}NFl{jT!I$+x9v-d5VW*Z=gm)_7NV zrt&fSu8HX~yH8JxzrRmCiF?`I=Q>t${l>>7>OP-7;XJ>1Yu&XZ_x<)wf(5(_1pZDc zoLzXL;*8Z7kyi@qL^12&6&>c{RB)F@m;*d`q*}xr$Q^^&xs#RnX7ewSgqV#p&Xihe6OYH zf17DqP6rYqHgP=o-J@G@AkKK+Tb}l$>x(;6wS(Gs2^i-6lRJLuG`xXPAmo1$LHPt!&tENW5;xOk_=ETwZqE>sL|AS1F^;gzqXf z2KA>b4wOCd^<{cgCUm@PpUd-^!LzGgBo}3czvAmTayH*7NnpnN0`?2jBucj&*L&c! z=L+k*N?F@RqhmAI>{jPH9p24*>Bsq9NAwLgriD*m@>ss8t=P=-(62w)z0=zciM^Nl z&1Ct?a>doRtL}0ZWLgF1h@~)p6JAiRUBJG6RVB|QS%K=VY%4~)^&AKIo^96@Tk}2E zt1Y76`uwe|gcp8oOrk`TUW?yOt1dpRDl?s@U|-R` z{S1{n-`_ROz14W&TyMIr{Y`=8#U`b{^+YZvxlWwG&~si_>ZQvob}k|B7k@IZZ_PN# zxTpNQ)rJ+mi(46Q&J(HsduSuKhy#m@bCSH!geO<$xIXG$-BQITQ)VmtX!d$jPQ{O9 zJ2wRLESP`9Ln2Ah`oX>{>{?Rt(LU|>M6W&4pLCJqTd+ag!N4SamMf2aetLepACR6O zxP9{7L+-9@#YyWDch6M*>dAjjg>~7%QyRxVIe*gUYirfAlVhmtyK%+Ad&&BZcJ*<5 ze{UG+8$NvFY%HX>Vc(R=wMn;Pz1toMJ=zg>?SVzsy|-x<`>_?#6|MW&%Fa1WGJerx&TJHC;dqtv?BbQ5&;4OBP}10@ zazQeG`h_D~`R$GNF^9CUFc<9p<|KDF&tc`#FFVUzw@*sRS#$n&_5OEmYszJX1xnP8 w&iL}?)`A1)tQl)xY`t%3n4QBY?Ea6L{cQB)#qG}?14{u0Pgg&ebxsLQ0Fll~+5i9m literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0030.png b/themes/bgrt/animation-0030.png new file mode 100644 index 0000000000000000000000000000000000000000..c5132bd9cc5ff00f5c8bc7c495d215a48cc85dc2 GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHDi8)K2m-n=wFqISo`Jbt@aacDX(6!T zmB~4&#R|cRxdlL)!O+N}ZkmKP0|WCOPZ!6K2+r1N-9@(?cwCv6`ri8g|BBx)kA{27 z?<2XBSEPw$e%&>xEVsr&hEM#wX%)2{4%zvuVDD&wlR5PUiYeYBx7>6)j(Q>sIM;>$e)VpWWw9<_(zF&|ebj z@2L2s{fQW(x&5*e*VoqCu^yf|`^e1qcQvfoew2sx+WukNP`-?Jx=vDe^J4iwE12XK z{k~f*XnWv2XI0fRW&fDz#rlc5O~)oB)qd*Bb#AqJUcGpE@qyO{y^Y?o5`QhqWlC;+ zvYKa?^sUH%s>mo|6;xYA!u+?d^%j z6PfR*o#lP*q$lhk(X!a@l|j+v*WVVIY&gA`G30a8)wI7acXD5tv5Wcfo;4-B(Mz5x z_TA~)JK5L6WBN@YtFRlnlVwZ#7FkX|C(haFd(ZOI;ztfVS8qt`tJ?2nuu6^Wuu(6V z!@yAbp-x3*%B|prQ%ol3YeEm~Flew|_fq1a%ci}0x@^(gcguU8(A2y>_t5${m&H+W zYo9;N{GL;3`BCuG6dNXWA;03k8^vPce!ddg#u?D!A}IE0mQwJCTba{23-tTDm>7~3 zCv#UmTYAH)NoX2B*SyO7+Wq`K4||mky+5(e@WJGxN2#eU5|nk$#^4Gt#P4xEK#D3YZk-azyJ~)6*Z1m_zmYc$hvfdlaNo z-dJz{j(Hy2>BXyDRG3?2KKMO*>d~?I!uh%!tJfCsJdd4(Tm;wn`7t{zn6wRRdT!_AUsNARX*kAvy#M#1o!=*x z7u3}B{|MS$_TfhNfz2~cyk=X?_ETunpJfsb5h8~D`bMo5MGmVs|yCFK++< literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0031.png b/themes/bgrt/animation-0031.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ed4b2b3cbe1611c2530eed5d67900ef2ae557a GIT binary patch literal 1245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH16H7Al^AwB?(h7Eaj?!Pz>kGf&!($0b`mv+>{m^UpS&K7Mtw zdX%K9Lih0r&RP2Ldecv@|NZwLw`2I1%;)ng{v>SfyKzL-t^PN|YX^S?v!ojF!{vM9 zq|^8G{t42Xp(hQ3j;pO?*%tHt_SazI%)^M`Sj9`h8o>jYA zb!XzY=(XRY=8J5zU`&yH@ys}gS(hG*H}_lr(v#Jl0&n zu%teF?}ROa9rjs{_b$(zAMDBCHrF=yV=a?J>D|uaH|I|%*6F{QGlk_y(hH%bc3F?J z81s|Ed%Fz&ep{wvKl#7Hc88zQlWxp2Th&@}ma-Etz^R)f0QeJ3F5%XRapJiS*T~d!D(z&QN5UM){YmipA3&9l!DL z4BM}dT{Fsfi|4Wks9KgynysI9LumK;Ie7^()ALP>RMP7cXWgA*=B)F0q5q*(ldB#d z{Mw!2b0L4bg8tT4_sMSkuM2+o?Vs0F&8SdfDNy+%ZS6kJ%!}!B2&p2I_MV4>U=3-&(Ror rNw8KVhI_{1_}jDI{OE~3|5yIS2B&Hd%}8rt_GIvM^>bP0l+XkK%<~xE literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0032.png b/themes/bgrt/animation-0032.png new file mode 100644 index 0000000000000000000000000000000000000000..097916423d6c42f03f07781a8ca380ebc91a6e36 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH%kO+W?0AO%4{7p4{=?9?+b^9=c20+bd4 z8(x{5lUl40oS0hxq!|p2Eb697XfrS{TY9=UhD2~Kop!tIwgC@|^6|I-|K|(sl$hbX zKI3Mk#<@hsN1M2twp_}+y{-TD+i#5t+Q05BKWFpjiCW*znbR$Q-FDx^_r@osU!q=I zIsg9m{?kvJDg|C&TKRsKU(U&}*|x5#J)B}&l$8&xlKUp@>k+W8`9*vBjq~9Nlcut2 zy-fe9Vm@b<+P6q&4M3HmfI-TRA%$*<+t;&@9oCKldZocT#LLzLs& z_M-S_stGr4XWVl(nQ8ZFL!`g3f`yyk8xy~C(hr|(-@{a-=smwoc!%M}FaIahA7&S0 z+V&))HdkQ&u^((#UhXVD_Rq`VX7WUJzvBv1XDpax_jWbg-K$J5?%t@^I>(urFsb3- zs%QN788=?_YlvF%+C)RIaZY%Rnm~Pc;Q7FSk}j2F#>@1-&T&v}I`ZTE692eX{gaAp z5}r-Q2DMk#Jhqd2K9BQdcI_e%btFnV%zofFOLU+g7 zGNEj5iw&QumjBIqbFzN3V*{&y?_RSh42kv~$LGJzbJ*bFQ+(RG`9w|UmodSCU$tY}lSMe|I<8^ww$FPL~PJo~U(=;YOj3M(aE z`Mq?vkdtKj`)F~*=gXQEyEX^w+jXdjv)l4JZLVd_y(91X|Cw?1jVGnT>KpfQ`OE3= z-#GnG-idfo-u3Z^ZpMnddTe|)f5&W}365T!>S63YvlBY6_hmi$D11oIz-qf;gO0=Q z{&kB>NX1ryWwJkjhJ>FC%CC#gQ zRn}MUW}L44?$SiFt0_fGQqYQ953J)5uh``_LZ>G)vH372H; i1Fy>eOK;rqpJCrO<8F7=?H7PqjKR~@&t;ucLK6VT(*5NC literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0033.png b/themes/bgrt/animation-0033.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ec0e5e62b10de61c6d8f00e456d2bc8b2fff1e GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHzT zS0?AA7ApiN<`w{H216r@x@i*H3=B-~JzX3_A~@GhFxtU1s)%boxL_q%)PyBeeM1I0y(bpUtgKoKL5@UL-Wr@?)5)Ct~Ji>TqF2+e$tb@ zaqHI~f81Cp`1;by_cQ%+PP)xDb@jcWw%yBjLDSmKxoRp46kP3X?(UOs^b|9S6n1+& zQRKc)MoZK5!z+$I$z-0ixN_DX-H#pq!uRDmcO+l>d!Wiq{r}}@Hv4^TA8lH9_m#zV z@2>gJ%h*@EiRSyb$??-aSB2AyFRWvWVYp%aPyR`1U4r+$jq7_YT79>?oH>ilj`Mjm zOKh>rPl4ZgGoEcp^_JLYxp(9D=nK{<;bG}<+jk!gzZ@C$Q~`TMl%*}?(&u=Ir%VOYcif1_P?%mgS0^F zzIoacA{PtHSTE;UZc#C%n0=Ap!Q4Z4t|+YW2>ZAB-s7gvPCuY0og>AfbXlneV z?;Y*S+obw?FWhX1UHI5(U56V}=kzL-?-HvR#Y2)WyL?|;wn!~%Q!Mk>Qx8umZp{{w zwwPP!`JvQ)r={h$oc1qM%ZfH;s~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkKsgoBtr|c%4zN>-5`mJ&Cc;X2pMhe6ATej4P*EZSgwiuGF#dDFA{Zzs z3X%*?PR&bYNX*O3O)SaG&r>iqNGm8-;D6i%R3Hpe5Cn8#Y7xRtJp*&Q;M0$Q(n4Uv zE0c3lixq+sa|?hpgQ1Z{-82bp1_q|Ro-U3d5u8h>H%@w`z~j31@&EcwwR27^%;b6% zJ#!_e;?D0vUGMU4Z@c@gcE8~V*<*9kXMgUPJiGAB*-Fdf6-PYG8s-bnG>)m??so6< z&pmhFm*2U(L65!Hwn!j;(<|fUEBY6Qy2X`+x3D~an%w;1%beGOSCSlVHVobCxBuRf^8|xN_y&zP=|*-W`uU7SFlvqt)_l@`mpOZheZIv$pi>8>Nl4 zJ$GlnZVG$gv+LAa(?V{ZeVdt_)E4f`zLLKGQRMW`??je}FTZx=PW%p@fWJO#>`$LG zJn-7uKy-ma1M7J)d*;{D>2b+IzWcjkuRN0%ZZO(;;8~XON<;HQF+DFDbj>zKaoz3B z783X#*z@4oxizNzjZs4Rzh6n6Gw?G!x!P9MSIzgtjy4_r^+~UVn35fmV!y?nUu!mP zt?Y8MK7~22?-w;sc*M4AZNtjvFDn!G|4b16syf9)zSYn`P_Vc>QC;oPffHMUeb@fm z;q*h+gYlN+1)Xnt_ACbuK9-O@;S`fo=Jx1QW73li>wI6^>RI^5y9ie7<-UA~`Tt^f zTYe`I{(VynFxv literal 0 HcmV?d00001 diff --git a/themes/bgrt/animation-0035.png b/themes/bgrt/animation-0035.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd3b0dcbd17f182023d4d609f1103a8b128c7e3 GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkRtBcQLaqCNavWf%6eR*BjZITj<5GcQf*>(xpiogF1BB8uFfjge!6Fza zDGHJdPEO5BWk}4+%uOuG%+FIWHb^TdR^Wf!1XLglQV;}mVQLY=PCWy2yWrE0fYL%> z!z+_>Qi~OW6LSlIG=rg$Mcp(BZ3YIWTu&FrkO%^GtTzm@?3tV zIb5r{o?pLgJIUbVCY{rdzgF2s{Lm{tmMQEmm-DH^Hzw)KcbNp?ADk*_k@l+_tL^6Z zm&O*_Pph42@_n*r&Cyl*hTe{HS4zkp-=gnFw6-g<%aijqs@TOWyh zon3li?enycy(Pb8oR>W7cb|CjjnxNxxxNE6@6@~OrmlC8VgLRjzH6VpWtZoBTBO}? zvZ@p>U+%YlgW2b#y+O$=v3$4QEK`qg*!tkewOL25TwcGU=jd9i$T>f|nzy^(m#Tdk zF85pL`Uh{jzgw3d->kgmz)XXtXJ5B|dHnu=dDt_tYTF5(GsNVLrtkYHVya&DO(05o zn(zb{?~Rjs+nzlUc=q<}zGw0Aj4XVO@f;psmohm1iZ1(;l1tcKx)2pSco~ znAg=Yu{7zN$+7F1B=h!5kACGZXO7O3GdJv14*FI6+wK( zpWlMshd=l-;cwduj|V#aZO+Zo?-?iY6}c6->#on?VK8)l^6`$M8vC9ifByq_lUZ-o zEDw#j?SFtlv8L_7JwuOAPt?BtmOjYnwyAUXiJ9i#*S2miy6ny8_vVLdier(hwZ^;i zzh<8OE%sa?>hs_44!%((9FGhOrQ4n+*mm5=-W;y&xB8hywh*USLi5(udn|q(nRI!& b|8IWxb#wQAN#$7xOqL9uu6{1-oD!M~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkRt9FLq_2SVbAX*vln9hGHv6l?e;+6&2oiG!3KbDnW?*0{^>lFziQw#=))=Ja$iw3L_kaAei{;-gwb<51 zw;Ip%Nh{W9-G2M+x5EAR?JWxWXO(WWE7^1QVsyOitM;}?#yDlu`sLrx-1`}ms%7=wH@#Z) zIlMA|KNCBL!3~3K+XPd~h`#le=N?v8v*%cCS$(n2S}%rwdgyfd_YAE}&YQ!Sf0tZ+ zC^P@hntA?y&*oe$PS7u%nKfhGt5CMkSR{dpqwZK+PtP?5FR%M4a%InBo(i?{ z%wM18E|Wjt?z#1YW5T>TuN<}K%Vobi zaQvg4#jTH}cLdIwX3dkbTK@29`uCgL#ZFf5xo3Y^s_e&p?-#ERPc(o1)$q+TzV29; z`BB+_J~QcGwJ+3tP{7XfUg>GYT37vqYn7%O_iknIb#~b4{H=UpmO}9&$wiTCuQTyp z+~M5*^}6%=s-1Svk0vv6`?MMGY+v4YTyDF?Mh-d7KNwNG^2=^ZeA`@COs_P*Nv;FsE`lROs^ maxcX1vU~Pr(aE#I{~0q^X>vclIt`S189ZJ6T-G@yGywpOfw1BL literal 0 HcmV?d00001 diff --git a/themes/bgrt/background-tile.png b/themes/bgrt/background-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..6b70a2d40790fcbec68b2db067f4f6b0d47ec740 GIT binary patch literal 79464 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 MD{I5+6fGkE2SYF}a{vGU literal 0 HcmV?d00001 diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in new file mode 100644 index 0000000..b5cc843 --- /dev/null +++ b/themes/bgrt/bgrt.plymouth.in @@ -0,0 +1,16 @@ +[Plymouth Theme] +Name=BGRT +Description=Jimmac's spinner theme using the ACPI BGRT graphics as background +ModuleName=two-step + +[two-step] +ImageDir=@PLYMOUTH_THEME_PATH@/bgrt +HorizontalAlignment=.5 +VerticalAlignment=.75 +WatermarkHorizontalAlignment=.5 +WatermarkVerticalAlignment=.96 +Transition=none +TransitionDuration=0.0 +BackgroundStartColor=0x202020 +BackgroundEndColor=0x202020 +UseBGRT=true diff --git a/themes/bgrt/box.png b/themes/bgrt/box.png new file mode 100644 index 0000000000000000000000000000000000000000..54876e68097e45b215f6f4c4ab2f1c06c5bd1e4e GIT binary patch literal 870 zcmeAS@N?(olHy`uVBq!ia0y~yU{nIK{W#cwWXpePWgsP4;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk^Z!_&nvq~g|_Tl@W`(W@UmTf#;@V6`wU#Lhm4Z}sF0SlKS+*^aA-R3`>*{yeueW-)S*X4G@YAFJoyCWu z!{O)Wo_xLQ+`LKbFZ(4ABrTh`(q3?m&E9!O)NP+RvD74Xyi)P_S~F#t;;ilfL3MHE z1W&=NWnIR?iwip@ariP_*|lfSpSt|~_sjj3f8KO8Ywhm&2b4~2+9S``ULO}9zu(%z z;>Y5hQ&=)(7Mr-7-7@Rt_uuQw%gS~={Np^M{fA?Nt4VAm@8-(l;>)-1-mMj$9dwNE zs;kh#k7^}_g&z-p`}S>h!9D(Bb*BT<^;|cq{#~Z~{Q2|yM=gBg{-4?NKQi;#zkmOx zZ{4~z@lFfFw9H%si9HeV@&8Td*dJTj{p0k@#gWS|-{d(y@i(hYb7IDsusa>g;+xL4 zYv^}9authLV$_Kgm7aXQU1M*+4*vt;2AAiV*!&CU_z{&>mCVfaPyDrDg8-uwi-HS~ z;t*7DVQ^yMpuf;Xm%BcZ)8tvXD%2`NL!T}&&+K@Wvg%+$fplN)ckT+d)#c^o^`>h* zZwD{A9bmkC`SSeNyZ$ZHoL~R;T$Q`K`}^lgA+5SAv%;3@@F(>|6^2dHd{hy_YQT^U|C$4w;ifVF9Iaeb7Owv@}e9~w#FT2z?jTJ8>EaGR@9qdy5ApbKm dPUG{u`zzfzHqH8W$O>o>gQu&X%Q~loCIIScDqsKr literal 0 HcmV?d00001 diff --git a/themes/bgrt/entry.png b/themes/bgrt/entry.png new file mode 100644 index 0000000000000000000000000000000000000000..65810dea3ff2a03f620f13cdb9f680aa116c033d GIT binary patch literal 1431 zcmV;I1!($-P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vdk{c@wh2L4lT|!Gj5-f+`s_Y=kzX#0Nu`@F@ z$pp&XSRe`X3Ft6>{+QuE6cXhS)stnj3nk{5xuB7*Te-dIiu<`s=hH{e@<8KsFhqj4 z-2U2;Q-NF`3LcNVKFfo*V<#O$bT_<(=EW;(FpWiSJuwOhXr7qr zj_Y|esldc|-cllNl)A%btkWRTsFE<<9I(dEoe zgg7SfDVRA+mCRXiglV?yA*Y;kDR5d~xN zL@AZ4)L6Az^_ps~r6GMZdteIhDS(6$N3){5a^nt}+9nTxcReb!+``#K>T zJf!+2O!slwO{wCx`&jo$HGD(&Ni}>!_enK;L-$EFd_(t1HGD;viYf&7K=Hi3d(5Oa zWSW@9NmpZC7i4vAmU@Kl5rN@9@=uUoliKY^ok@@KqbGcx&jSk)z@(0e9l;_^b>6 z0|^X|qww2t`Tzg`24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2jUAC4mu9y$&hLQ00EmxL_t(|+U?xUO2a@D#qo0|6R8UYan<*K96|6A)Jjcl ztsv5me2j~vlh}=!bo>7;vkV;W+`};T^!O0w^SN&C?v-V^WCHM?AeH4&t5u=paw&U# zc@F++Cg*dRks@GpmO@Znm9nOk?e_cd{j*b5*OC}WK*CT`?law7&*Z)La?Z)>Mhqli zJd@pqwnK>||4dTYBS@dK1625js&Cx$xJf!6UlW!B1ypb zw&8S&^Rjk4#fe0afN?o8=`?!=I}$+x()OdlM6xzX@pwm)fbm>B+DU!c&{cT=63T|Y z{??!74nRVXVr!@NSmy{5kQk&`HrQF&K#+j(g~PD^CP=^qJ5p@zM38_>f)vM-i5&@; z6r@3G7Z)dT1f-P>r`GQL;wpggbwhu&Gf9CR379J0wF?Sex(E_5DM+UQ#f}6_`R8K#%}PY9EU9b@wnNEd!9QX&RMfDfhYlPFdh=h+CY`n04{ZPpg4Kk|nMYCC>S|xv6<249-QVi6yBi z3gww484B*6z5(HleBwYw8$DedLn02poxG9vkb!_}tw#zo*PN9`Y)ZQor!|NikkAZr z`sLor;>TgJ(V^piRQ=u0KhK@xRBZXd;=ne=fptqsW~1!}woOx#_~%s2SKi=rwXo;M zF~%AGQ>XW&n})`*vYI#48_mj{aMyQgd{a}M!ff`NpCy*x6@BvXz?rxhGp+l_-^{-M ztN*D3o48`;tuvn_EH&pFrM=$zc9OT=P64Nm`;WQA_Z8@B T+*m?IpOhs-rjy2H~$XVjnVH|E$>99FaZz_=l5^n-*&oo=$Y}CQ#gss5FZTm zw(C9XWpBIQ;v|Cp5eyFJSu|kWrH3}lFp3Va01z*klS-oj949Ya5}SJ}@_wtHBbIrj z{y>29|C1P;Pe}9vPmkeWvW0X8z;%jBWU}=N!h8B=RH8gUAj8fO(l^l*SZ-y+kpp|I z@@mNe?)9N%YH6fR=z0t(FvkwLWH{_DJGQoQ$T(xg)G@ZREHchGOQum_&dDm^`Haq^jOLtE%RzmH-xurR~vbwbp@z^48)uZJKKJ;H*oN za!&kUK%%JrO)DxnKW{mM-*omZ3fa!D%AWK(cGKu^KI1SU=^^^Hjj#Cy=vmPqfk3Ew zI7;sEk+~SI3_29=@a|;J`fc`BEoSi$X_iz@RF6VmedrH6w`Ohlg$7KfWr=-w2ZRki z0b_}b3cBK;VNvD9QIzh73nfl_D&G2jj8!vr>`BLq!>#YnpS@-4TEOq2z1jId1Yuut zO-J4a+sXebsM2kC=1J~o;LTKvqmkiiw7_T)W`Q_+PrO=9XM29vYrA!OkJIe;3uq=k z(|XR|_k{rc2P*XxRz9E((h(@*5XNrOy6IJ;?(o-9J7S%)9uHDk~AtUs&7lks3AQ3B?eI?=fHuq)8GD(p}gYNjD3Asb3|E~w#LYRlQbIH zO9YLFX<&Y7(yC|pH-$D^?M_jtxJyW#S;+xK^kR>s+O_|=ja8=fP#xiqmYmgFz?IvM zD!k{+^1Cu(xbI&Nswhh~`Nvfo3`wL5H9t{1@}F ztogdqRZ{Qkzeji@AtZjHzblu9pRbefX_xB{oG;Kvm5Gi{=B(9 z25lN_%?}vF#6}k&%GyvE_?^>C(~XJ2E(0Y#iYG}Dd+b!uMBzJV7<@uLoHt~!#Y7nq ziV;03h$Nk`#Vsmc#So|9ZRsIfGw1GHX)ws+Q1*_LjL zE7{&U`x8$$zg-GSz&9CvGHzGu*5IyFtz3`Z26IT|gSqXZu`;1yw}5BYYLcN*RubqP z~-Wh$@phq!Q?`IDPU`GePO zubHp{v}I>%ANgb!D((`4)jX9jw{2|!Gajmal@hX|%*!6P!QvJT zAL@7{TSlB;s-G$H`yBI8@a}?h)9kPD{4@0kZ$dHsr*v?BpPNctx*6Ga_33BJwFp7Y U$^7#${bvUX3EV|$3`ofO8=tzejsO4v literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0002.png b/themes/bgrt/throbber-0002.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9a85d8be80e430f136327c98db0185a36fe7c8 GIT binary patch literal 1568 zcmYL}e>~H99LK-*Ln368NvEA#)g)L z000;hg8U-2YON~+eeKEq_SBaGn;RH}=WB{Zj(aGR( zDxFSD0NJbrFp(na=aoS}Y>)k2qp5xU&j_yIN?jgL@Om3^Kr>u#!k5GRxWtbBxK(j_i|YIa0?X zwF8n_|6l2daUn!$I9iPOnw^$FBeSjd66s8>0$3bAvto?{0Kg;!KcA?W<>lu?PSixN z%oCL4?b|b;>?Qbm`hLx3e z&CbH^uHjSqJ(uI4aSl(1llt2}r0&c;CvJNE95qbi9?z#yq_zX=kDG1FMNe)C&xDSt zApSRFx=@kOSLXxMO^Jr#%V0%v2bI$#at`@i?+e6#d`RXh_bf#BhsQpsfixETu~q() z=#uF#_sBUGwxz}y!uPQNp(r~=zJ1b~m8(LEOIP+N&ctounpMF*sxl@`Q^P-3K(E?R z+eV5RDXU1i_)}|UEK)bjy_v8}d8&kU%;(1I-{j58^(iCWna z`$oj$3&cYXj-dt>o&9nv^FLC+&tSaU$pIVIh8F%pgra%SP;$&ix;10Q0snGS^5NE7 z8XFOO*D?kEF(P61VC=~-?B!(AKu7V$1;474tzLse`vm-+1HtplCdHa|&r@c!a+8>e zvhl=V{+zw$B7;Ek*r=ui4W_v5k7M{w4A6jOSpy$fFyR!#2YRjb}7JbT+n@3&Fhqw(~m4`__ zv%9ToKY?pqgn%>|aWT92!vPWSsl24g<5|91=JjO5H;e{SM99$QcM}QFeua0Wsm5CD zIfvMbztD)j?xI<2=iE7y4*QL4a(CiVqkww4)d6GUA2YaCG-^9y&NuytO6}bAAia(= zzC-q^rxQ`4?7j_I938p`ZBa($-RVtPkQhda%MZhgrkq8v&IXF01zQQLEi@=tFPR;m zrpd+4tQ(iS!Rp~fe*4k>pEWKbQh|ckn+2a|nEd5E$`h1&;~GZV(6h#e^iI6~bkH(vw!UTS%uF=b^r3JUWEh|u zMSFw_f@t|mF0s`|=L6&Ql#*TjZiUavtGNzW9xWab$eac*hj0w5fiOT}G3Ak3_Xv>& zPkz7TE_$$vx#5tJB&{#nRobkM;Nwr2s84I=Y9`|M_hiqTh=AU~qG1Al>OJqve)jG~ zzIZR+^4(ICGtaj+vtH9JQ^=(i-VdWy8A(2Gzqh<0*>utSg)|YuO~4nnKhf{d^Oyv; zW<~V);%3X|JXfbD=F48bvDH23jr;PJ=Plhl@eVaoan5TA+EQ86&n~%oN&CeC1piP! J;qLgHzXAS3zy$yR literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0003.png b/themes/bgrt/throbber-0003.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe95aa2734b499cd3df6e65de24b90aeadd2716 GIT binary patch literal 1561 zcmYL}dpOg39LIlVE^|$b7@^DIDD8rnDVny>#bqw-m||vaVm8}kF3q+sCpnQvTG52) z9!j}YjD|YuQ7PMrX-bL6l%o6j>74VN@ALh9-_P@YeV+IC^L+pK=7t6bm>MCB001xz z3M7y~b(}9leemREX3l^D;{^W30{~tvRG6a zipQm)7>RroCpm+~PUACCd?uYm=b?C<#FP{|_di9(C(~0B;wAT?V3hTI6oJa818!&x z7KOo}+}s^87~GmQI1lfBy)Y!$vtYg_B9TQ0&}iJh+Z}R0;4R1ue~!YX&O`SzN#}|{ z&tl%&09srs@Q)zTXtzA2VJ8R|&BJgSJ%tYNnOt^!Je}+4j^4@PiAX)oAcxO$5;!28 z`~Q_lw3lyq&vOtj{F$9WOQ!Q2!>KF|r~t+dD?Dbs3IL#2g9!KtGE64joFt1}bfAc1 zNb-k8`nz=E4VDOQ<1LoB=onOD!xduetTW%yjG#EBi8&PR?C*?Q$RKU12=zDoMZrv> z^hFN{p1+@XJKKYc%_p{KCR--1D_K+QQ~XqL4Qn)Uc#>JC)vb5qXSY8?IJZ8j{j3;D z#&ws+EO}CW$uDJV+ZewEy0v%}{n^@qDnxNnvg<`S)8?ZqcHk4Ni4RXUJfx~Pcq=0) z?GN?Z?Y^1NRPJ8FgQB`Lt-Sztj&hIG?He-)k;>CGkRajjy&l!}ZoT*7Tg+b5*;H7hP(S$<>ph#50sB&n{qJwP7j z2V2*9hKlMmF-5o%uR$uCL@!cR8Co4{h+~1vXpQDo`$ zcDgjTF|#?HuO^;i&$a_fxvktd(jzi%M%?Z|%vlJAZw8v98tCz=KJB9AN>7!gst!72kR$T*X*`l6`s%Kk_W1J^)X1SWK&o8#kWvhd ziq&CDzR2r)Ee7%5t+I)tbpqp&GU(%|w8_ZyJ@#YaZ4w42v%<$$l+`el;2=fqQEN7E zUv3IQP-apK)3!GY^?a`gg-*S!sPFa@kMnnh_D46qTXA?wRXhGUuq+EcH+l_sT#_Y! z=(GQnd~b5UU)C~)Y1;`}Snbh0H{Cb?)%RAUZ?{dHyR~HM*>o)9>(c{@_ajjLYHqP9A2!old$rgS;iqM$AkB2IR=7+|#Shr%;W1>UO zE;FX|owaMpx&_sXoTskJzBDu`&z!7F<+Uxa*aA1)mC0pT`HfIuV?E{-PW61C&5-&5%SeLCq8>{ zAWmwieRb-1LYRXEJZr}L{7U$1OGStX@A{w~9^8f8-5#km)^7RmP`PX}I`*5VnAq%; zp%@rxqL(drH#|ESF!sv4og&vnu|x0ftFfKi78j=Pnd>X=K3g!@W;rte@fk@PEy$iR zbnSZRwx3P*`jqE*+CBFjD{j5=$?7}hPf4YKP;ch@MRTIBCAzgNTE;T8)^GRO=5XUqnAi#>(N(d zJ=MN@l(Ky&c=T>qODxl-JNGoa+_DRNaXYN8YsVN_B%|z;8TStQ-}I7-*sUL}0+2R- zosJGGkvo^hP!7^CV=L>zQPLKeU2~`E!?zOt;FcN1sS`jc!zi@Yw(^FJ;A72~4KMR> zU!!*^og-)j`+oh3kjnAGmoTgux*;GvB>OtCf5%vC)fI0uODbd<{M&#aVlbh`KTh&D DSwXl> literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0004.png b/themes/bgrt/throbber-0004.png new file mode 100644 index 0000000000000000000000000000000000000000..687aa8bba7e7c470034487c5818c825a6a6e2407 GIT binary patch literal 1570 zcmYL}dpOg39LImdHp`3*5#{oDB4Try5IPRVT$Yff8ymmOVXSTBI&(Q)c$9}sGR@^U zDB0?`6e=qz>Y$D__jV-9rAQ@0=S=6E=X{^<=ktD^_v`b#zn{Op=L3jds#~^i0RTXi z;O!A8SHsOxhRHiKCFPS`5OnWQCIG0QHwyw>;pxcD{VdPJEPQk<2wt}% zz%UsRn5bwLh8~+ti%(!tF)S)b1DO~mJvuH9Wc;UAlvpq>l9Khik~~UhGs=U^0s$MW zwFAc58e?N?Xl?C;!#UYGzJwmMlFz7b&ICu(Kmdz%`uE!L>RYcPCr}4$;u)V<>zEZMg~3*w2-^vTjlm=$ zCqist*ZZc5`BsJeAQ~!6G)3mQ_6?In$#m@og(Cj-q3pk)iJcN@5dCMvql<0_8{NBg zV}JchM{0}aq`r&rmA#+#;xiQbk16DRFy(i-qovXlH;d$DOCh$@qYaCLp!DGe zfW_+lPiPdc)LmQ_totCcc563kq)dvF6r4_N@P25pa6A%~E2t!d-dJp>Ak(&a8pN}6 zm%s)q#q3#DYp+m)j%GvC6fgNtA{L#K5G%!(gQ<$-rw)Xw5;&=|+h#>)OsUnJot>&R zAzPE~!G6&2IB^QehIPQ>IQyhWrRoN=7kZkAgU?tj$U1=hW;@XHF1Phh-`y5xUz_Qd zK^KupTZi)T8@k1fvJKI|XX7MDlB{JMjvv;}P?~tO?Ap<6gA&g?#0^0uZOx-WgtB|M z$2XmzM~a`oG!2&8RI{q}3PdqRp8RHKyE}q=CIR{SCSkWVl;5i#*^q_1Xc?9Gys2~` z4h$`en%_wrU*CP)k5JmL+tYbpK_E33-VmO;&cs{YlCd%E?{~`vA2mMXWIP%ePI<)u z(Tgs0ZF}ndIk&vjC^g?Ii5E)3j}#W%B2mP>UpSJRB=nw8(~nmz<{UH~QzR8#xmGP3 z>aIVOu91ig-*5R60_tf^!&Ay+ElhkrtjNyGDB^rrAJ-E>0a$aLv&AmdQUA#N>B+dF_>!M!V9wSKL{gAZdYTmqy3abO6zw;E@S%IetqHV()dkx<^9+*w{xAaI> zxy)f0MYOC1R6huqvkznyR0gN73Pc)r+AsjSW01#prQQykkKiDT3=h&wX}7r38c8EFUNa|5G><} zbC9tbiN>ePO{P#Y2~w@5UUc=Buqr+8*}b_{vjeFYYcq>zQZT%D;_mT6-(9Z{(XtZO zFYHRMjxSGC(??d8rE?t{PE_fIoTL{WhEBvgkx9r7uXg`ytAX6f_7eDxw|jTBKNk?X zW_JuNdF8r<4TjLxpVVl+FvU)g1&C(!hSRN%15&f}`6fqmdfK`ov`wI!Qdhq!|KtFI MC()zv$MCGb0Sel;hyVZp literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0005.png b/themes/bgrt/throbber-0005.png new file mode 100644 index 0000000000000000000000000000000000000000..3a56beb7482ff40b652972de1a4b8abf25a3cf2f GIT binary patch literal 1585 zcmYL}c~H`67{`B_975!oT4Gw7xJevdk#wgiTViR4Xyrk_RZ@_Eyz;=S%QQQzR8W^u z+tH1*($osEvID!E${4SHi*|VoXeyRyi|y|0JMZ&+XTG0jzVGwbduk`$4})5Y0ssI* z^Y;nTtHXRD;rh-`Ntw`#G1s5L2LQCid>H^GA{)KAQQ#XQ*v5(j0b)!%8zdfPvDuMK zBA>@3MzaJ&Zd@`u{-_{^D2M^sAfL$RvN#-&_n#7?;y})!sI2Ek`Y4MdR*@Q)BkB)7bG$aX!noQJ_okOKmO7+!o-6v%UMC;i6d3xhhE_1t2f2k93C zdH+92AbHVt&j|F`{AYGDGY;fC1V^&DdIiXCl=MqBt^i=9p!sax9bzoL^!)Gv(DL|& ztuFPK9DetAse+$#Nr6cy(xu*}ITDrp)B^P;pSwU?=FZI;L(wXVOIG(T+$6%sQb!A0 zUDZ&Z)A%STFtv<0)5kcbz4ZsW|If*5@w4g%?Ngop^uBoULR5)8P57j!6{oOcMasQ* z4qK$XW?^%Ao)h>FbDYHPfUB>KJ@!Z~TNy36HM{9I>PLzSr$zX)c@;12d z{)&^M3|h0=)*~>QKjUaawRlrG3?)aXvgInA9bV%`I(bUSa)H75o;Xt|u-n3Af{bOqeG+`BDNUtS21YcnQk2)Yb zE=-x<*Hb)wy;6;U=8kB~;%iY4d~1#wU|~J-Yg6A8rD>hXYB80I>wet69a{X}TxBw1 zC8;YZD9dR@?!Pe$g`NvYFiSO(8CVN_*CUr90y7sEZZWf6GR)!{#udL#9nVEBlbgex z!{K{nuo3#~T8(j%NvcWpG<}SAL)*!C5(|NlYv|K$@C!qwdq1PrZj%$`CJ>IhOayBc zzRS$@IL%Le&|na6sKpJgut!`|4u#<&+5-h+b`6V%A-eLLF;?t<+73@@>tWaq-X_m1 zT8AF_&gAlRMI)&R<**ZuHuumv1#OKmFIu?o$eb5#Fvy#Qm^(9x7r#tj^xo_H*uBK( z73jh7E3d8>r%)5k%d_*H{A96Fqfw;~zxy{pmcij@YWQ2z@yYLYlw9|+0g=(?P>Iu5 zd^<<$p)0L?%aLTOalcwW+xJYG>#dD&6u$wO&CUhuI;w|Gu1^Xd?e08L+Us|tZ?Upv zyGBtI3q9#PCY@@=O;rGoN55W{X5k?>3r$+Q_06mg(j|h7H|<_enV0W-u+`wFfxu|z z3dQrIOJh0wqvJeLML#aGX)0*FYhGgxGGWG%f)M%0Lg^~4^Hq*0A?E%e z)yE7JeiP4J(YhEVXsH>!yC3Pvi2u!`^w!~rDb z_*aATNt}xXolBG%QHze$qq?X6N>>$q@cNP=eZ^Hld>*!f>lWZMc#KN>GruMd9w?x=Pl{A?CNp3EiI4Ry$)Ta0&1x%!*& zw2vgKw9Bb5zuJ2`)553$rwRL!GjOk-u>)-ncU9ZG z+%aIbFb#{y%*+u>g_sBn=fqWtHu$&|S=!a4@J#PGh~W;QcXioN6nnTfc!N8)?|2*7 zXZuoCqI;bt47_2(_ScoMv7w3JQ=F$`;6*yDruzpUBW>Wc}V%q4fT7h8EI7+ YfW*HhUqW(Np#Sp#nlIf)x+Nm(Z}Py(ga7~l literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0006.png b/themes/bgrt/throbber-0006.png new file mode 100644 index 0000000000000000000000000000000000000000..949cb23012469efb42c33953b5c79d5352ff77fc GIT binary patch literal 1597 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 YV^$rUwEBC7p#Kpd5km=$I}eHf27_eUh5!Hn literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0008.png b/themes/bgrt/throbber-0008.png new file mode 100644 index 0000000000000000000000000000000000000000..beef391370a4183ec221e131e4d06e60e1792919 GIT binary patch literal 1604 zcmYL}e>~H99LK+y&7`YsLg*4Jq1!KvH2Q&T>4zW5c?v$LDi_C9@oly+wA%FN+-It{>J-2T0;WgBZ^wann#DlF;>bj5Zg zTWCGlisz}dSXAI2L18esGyMjSwa|D421e5uG=LMwN{Wi2v8)_1u}pSWz|#&bN38Gw z?SeGc|4*VYc+%k|juykeWv4|a(%4pkR60|u02b$Z^1PV?0DwkFUb_#Ip_%7*$JKbR zJ++*>)xM3m)%o1C%~fL<%uZA~ap0~&gqK(_FRZyx zpfHyGRghhPuhFL5ogO{0V=bj<{syj8>UhWTi`&B;qYN?@A`0{*G-s!h$~w^`j%X1)sMwVbzdh z5A~FhV*Qhlc1p4fv|^27s_qg&aC`6o691B|T*rhq3Vb?qDA38&%zU-mf>FjH>hM`l zNN%D}eGH$*VX~Xbe!ShgS+YUQ%bYI_ zx7?W1z+|StKa73iRFGhBPQhv&Wo{h$i?oghNB-!^|dEK=} z$K+ntES>Tw$SNCICf=|B{bGou&e(Bb#IVd7;@l52jUSvMADGTh0bulCkl2U-E)5Ae zx(r!-M?p-&V`MdtJ@zeFPfv^j&*d{Vr~1kKP~CkAg$O-tk8PWPaRMy)>-42Q=e`KY zj_PaOTZ*TSwIVE(?$a>WOQ$I)c%!Hx*e;LQojz_ssg`g%t~Hw$ zWf`)*s|c$KN>^L*!KsbnmV{_dMw3Vt?1O*UZf~=_>&yEL*e5C1NNy-*Awnf}NlOuM z^SidLB^9^yNONZIAQ%tus&vEUmm6^6L=10`u(OnRgrPyjC5XBY%6JAUheea$Qj%Iz zv1&$78V58&#a-Mor^7;3=4`_=1^xb+`wKEpgZi?uHdR~4uIjaQ)t>CR`L(e|7cR+L zEDvwoS$KTrLdC5d&8M&19thQkl%6LL8M=6>knFQYH^`%KJgAmy`CbNI?B8_R(d)_% zd-wOya6NU=Ac}jle-uScl1zq8W5hI7aUj$DOG~}AeC-Xqh*vWFAw=(1{&mNhyY5nc zR$<UC)oDkg*z(qCj|@GY9Ad6@tFT)I(&%$M_?Fdl~WYr>P{F|w*p z>57|Nqp#pNmyYm~`bB->LIKxy&h2$y$;sRbTi=0s&%K^ct~-oxM^0t#QGr5fBeR{6 zyU@kRnJy$OSuatC-(9^;YGcm6Tz#FYDzMC>S~o&f+9N`HMQWzgm&vq5r+m zYjb7&E6l8Ez;M`&dUEP39l600eaT#GA#y75D=)bHF_)C5(2%|YPE{Apf~(W^BAlTP z^3g|Q%tTK6?k0`}cUwwqhfpO-E{fbAV~34q?!QbUq~Qmj#O*>H7&+_O?$#5&$0Zvy zNt}fHAGIa6UW$1jW{_(0XMa6v{o|OZ@^N3tDKg6M__GPQo1baNE|QBXqfvNkVvBL3znvVP3FHFMI%a#GD?1@Na>+oFr4FV+ZgI>*hD1yHM>hQpk literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0009.png b/themes/bgrt/throbber-0009.png new file mode 100644 index 0000000000000000000000000000000000000000..b366daa8f009ccc64fa2356234e45d09e544486f GIT binary patch literal 1605 zcmYL}eKZq#7{|wEYcVeqdA%0v(B*9NT1KHJhFZ-_WW?5DZ0v4}k`1e?P+}E|=;fA_ z<2{l)rWfZ*NZO1_BN54xvdVC`?!D*!&hL4?=X^iU`Tm~2emQ$~`@z5#a*Jc7p0ofSI>md7*qfTgZ=lqkDJtdQn58ZS7F7fq5IBupED}Y zK<({NS*%#VKZ3$wobra&JXXPVY8XtRCQ$*Lcvdo*Ol2XQF^8D!Okz)~iW{mqQMDkI z_5YJ7j2k{=iKD{spV>z#bSfJW9Lr#;6yWHzg;!)^4*-Bh@i?E5a45H^KCwJ>UDr8% zoNw;=J$c#s#n#pu#kxs+sqcCN9I4F1Zd@iqjwAW}j4WMU6wx9VYed4~0t@Yk{B=;@ zYegoBItP@?eW?{K3hvSXkTBOeRer3G-M3XfghH#1rIi(W(@deXK|VA}Xlv(|eOu%S z3A5BecktKI0ij^QWdd_m?LquD*1OmX;&maz56=trMgU%=9lpc~km@GA?>q(QKB}&RCH(qfk zkH;hlKl}lNwnHtj9-A-NVmxnji0vC{Ve+@f0!416FD6W@YX>?+E!lRdBpc|dUE}i1 z{>-S^$8p>olGsvSVrQLoGV>{Hd{`a>Nyi<&J|W!+Cz{QFg-iow%T?hM_gAj1xrL~_ zR2gdSy|{ZtPv+g+TPt~A77AHfkeunU_&yoz*nctIU^#9Ku=eqUfcbzs^bqNCB#;?N zR)Ph$Qa%S_xZsx^_~Iwg&It3<+p;Py04tRcq)arNvtizPD`;zQGBiah8KlW4vfeN2 zgx7yuHCF^;-=X~<}_Nh&>(jOtVBRuik zm0}b7Zc5Kc1$r&T1mZ zdDjzP%4GqfR%R%Y;$Yhfj=YY)33rO<8QxWPy>ax>qP9l0(xu>(WgU4e%CK#**=A0> zDuCxLz}a8izRtAeK0jx-qtR4ftY}VH9ccK>>DRcs+?Rb~R*-{qZStz8Xqzf0#R}w2 zH}s~aA>9%?LX5!kc-qGPWM4rHdRj5yXZg$?QWHRMSX!x8oUP@}cVCvKRbUs+3T{ue qMdmaTM6}GRtxJzMVmD#&y;Wc$yR*qQSfc)S0eIitxSH)T{J#My<=QO( literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0010.png b/themes/bgrt/throbber-0010.png new file mode 100644 index 0000000000000000000000000000000000000000..0312f62688976e840bdd3cbd28a0dbab0913913f GIT binary patch literal 1601 zcmYL}dpOg39LIlincE?RNnzDAxox8f-B`rZ1-XT=%`ap(n~F@CTP|JK2}z;LoLWw# zr4BM8_L$MBBT`zq)!A{2J@e(E{T`99yz=lwkI*XMbEKYxAm{Pub4YMW^T0H90s z@eF_zxm=oXsIyO;n1w`(>2r_`06Hs|3kH;wnnLD|B(Kn9z{D|VAm&IsjYgti z*enVrHa-c%q^8gqN0Z_(NpT(Fuvex#96{n_PR<{T-kg{pFd!cp3;`v2H&u4x8~FZ45EZ@2jv#5X50Oq;$kV zp24!W6S7z&;DeTjAii>$2S5vg ztpA^Mz&aBH6-f{_{GOdcp@MAW0TPV~DS&fyIaz3G3jk_wh@KvSp<3C6-35g~M(wdV zIMmJ?a0By*VIzC(uv>kEVz1Sk>8J>`wMz9}f?)gg8RdHgCWcivoxf>@RFvBiHC7QK zQ3TIDfjMUU57)MrDF!E<=2J%h(Bq5^rb-*<72C!J6%9^Xpi?Up;&1k!Z!1b1cr-J+ zrS2V?J&-b9x=_$9PV8f#-FgjAMM_eJrjzwn4>0WI{Ke7mO63Jz#ku~DMGeuqP?gl? zHOXodnFi}7){@iAHcmTur2JWW%^Mpb;oq;Gvv$!NRIhJV@lkn1R=t;A)(rZ5yESe# z;^G|S-a+GDwNOR7=XNbvMc;`6FulS41Se;eD6VB$h=J#vtv)QqUQ9$Tc8a=|;JzZ> zq(=Tl$zwjUf;nx((Rm6aFwc&>9Dc#qM#hP|)9aeAiq0BU>uqXtHQ_Nb0^3q6a*Nwp zdYs)>y&v}^z(>xQf%M;gique~-{t^sJ6OIblyR_^@7ACz$!PL+GPCfm6g{I>f7%kZ z=Zj>&>Si}JyE+2OuQaQP`<{#Q9Zy^X>y+u1GvcI5{p$trVL^Ling+ADzg>pyIQY9g zcq}tq=J;60xi3aymVJb0v#^p053Q_4f{A_j>TtzTdEFN(fE}cGFWUb6e4hYk% zHb~5Vh-qo8BH)M=_$GuVF)d6U6n%eo?L*^k{UXmkel03|O%*_FjJt9HQ9Z!Q7Co{$ zUK;A{QJEiEE>AeJ*Z=$jKBopHYN&adhW>=m4nrP$P3c(2F^_L;Ey~9_Uz~UUfQ{^G zod6F#$vR3YyBai=@X6@`LoPR^X9ySuvEd5sDe{W0Z6QN;mN)J`*FoR8?3YE!o6qp- zc?Z+t#pgQF!(K;exbCj&p{rc7Cv=)KFP(TfDeG?YKQlH~)OEbxa!*y3d_788@@mCB zrNshiCiye|63#`)}lPLQS*h^*lG&;}@!<;aXZ%>6m6a z)PdX@by=A2=am6j(^A4)*OGl?RtXr}*4*^UC78P^pVNjq;P;Pf&YGZ*uQ8ubhP`n# zJ+lSo4~BPl%s8gzS>Y(Q+6%#kos*3hUfuh9 zBf+EaP?NWx4Nth><}vp-KcDyWykDQ^{r&v)J+R)-3uRzx0001rzLv&- z)MC2edQcZ7B#c6W5UkxK0sy4(bm;(vMJA9*6?<$Hdq#3V0MF)gL3~ssmm3<67YW1h zJ0rz-0Vkfzj}f!+Vm8PHMR<`QlE(vu|EXOV2juMtlReUfqD-cvXrW>duqO~Hcp?#R zzrun@baHTTav)s0rG5a-7){RvL~=oZKydnfiNrDWyflcxf2|@6g&>i*L86_4yxG&9 zJ7ft%f!|_BAlM&L!J8q7o`%eDkOu-{wvZnd1_~`!5F!L3DdRyM#Eqvp16mLi{{N&M zfkY3O5JPy*uk8464k)rzOth)6!VE;^Wn-k0lR(}c;M zLwjnu#{TIt)`I?W_+x|Jr_$kmW(TRRlRAb)lqVNt>EUgL2W6PKMJ${1Z1@s1Vok60 z!aZ2|&X+%m2NM%M%E-|l#~M1iH4*X98PICu=nO-Te33GdIyU|_zPD>)%%v^gPh*pp z=%r)~e!DtAKIv!uB%rSJj_uP+quy`P*ayY*QD6|KW>a8tX>uj(T4XP|kg_!ZJwZ4X zQ>bhRA{bf?m|jszcQ)lJzNGb_1?lb~i%4;1Nq;n+Z?Q|_*(gu%MV-68pkUH*cut(b z^=>qyqxh2gj=QTwmnX|out>rqH;OdrRvNOASIM^KFZOY>3)F7<8PUw0#;rW}6G4_i z*3~KSZvBa8g`54WGOH_f4qGM6UxgyMTIC~y_!~~-ILC-F$DT^Zm5MG-n7_M!#nn$` zA8^s%D!6wnKI5Of@?tZ`$_@ZNp;7^mY+Ze~DbT2bC$XOlHs^k&9&i9u?Qf8R+2l##HwEen5 zYr65pMA4kw8RJ|jxe2Q%33tbh7vH>W6syuZNB>|cZ?&rT9iCOi93m&de-f;{sD z@was*F)l;0SyEKifaSq?I9_mM4(wtqn3cafP`k1UMfu0S$F#BH=63nLGmG!sW8Ktu z(ZBnxucooHu`=q+_H576*q13f=I!P^LBosMzpMB4wyp+^Vzf>T^6p^eqLGYCAMk(a z{L!L^3xi>55umC*|Ds!k0`umI)xbwCc1uA;{_RQmen(!_-ukKW_Q7a@d1l{x&Ru$v zVE}J1>w&@i^qbuJnhiZ#1ktm4$ldo`x-Z6!AXS z=Zav|;ey6vM|;1jX?^+k?WNoI;&9v?4b4NQa2_>KNetgaz z>{hn3c+IsA8Snc(g)e_Qs07t#Upn@p_L$9jcj1$FK{BSRzrmn%ZX?pUvBjahHt{XR z|1OfADbJ9@-V8kYhA889j;foUcS%*VM@)sQNv~^AyR7byV)#|WsU*z?Yt_0v(I1U% zUmj@*nW@LoDeZVSBx@d$u27gSQ;owj%Ijypal`QAIXynZM1hUy1uz7N3~3K>HbuJK zKf@I=7g|c4ZwRAqH+JrnYm0tW>V^uW33n2sZjN|t`9nd65h?SlQoE0%;%r;>kmltX zTD-Ol@AP;cw$a0J{}wjEhRu!@pE%2OJ}n{T?3=WoOf@Zey~?)&cRbpcWD}EAvewJg z7#{15+)`;xuJneDIC_`2{_OHhsty_xw_|fyW&)UGGbxw6J}WTMTz=-j5Vyf@ms<16 zb>?eCPHk;=#8#?LL7Z((4f+c%Lo}*s5n=nAaCT>t=( zbWh5DNKvb$tqHySq@=fy=x{v)`2c`0S}hoGsn`TET?Nztfk!k81h7mF8^j)qX0yW? zSU!(|jfxgvxhx@@6DMF|1x%0)^09nwbZjih`%f_uEHE}QLi7h5iZWS^qJ#@TfPll3 zuy{O{V28rv$wVTVh^v^c~rbF!!>r|6JzN7SiZ zHtu6oN~HLtv_=dXvnvltnFW_aG@o|0wjY|x_xrIMC3>~yG|oh(?G^NpK#9!XM4_Su zCZ`gXl2y;&*i8s0Y}X{eIH6ihdDPrf5*PxV0l7T*{Fr+l7}kHRJVb74S^uPJkfMk* zrJ=%*L%SdQn=Kp8MGFS^l=p36ZVj_eosYaVZi@DpFZSfBHItB!ME)6X^;j7vhBr}_ zek(uBWSuJ`>-Rp&y;GTi7&fbcqsMzbHdX>bTCM4F`*+{PiOZ6&mqvx`%x_XNYKCDl z`ZMSoX5q?o^I>L3Oy%T-ZE|3H8{6V`fmBJOVlqSE9CeyXx&n(zFDX%rZ&kDT zYiv;JHPh!2KdY>e93Kv=(Mn*0F$ z?Jv2WneiSzZkrnzsR$AeA=K4l^6)Tu+qJc$_TEW`;)i0@mQO?Shn7CXk~q?4oGi1$u^dztbPcoBMhOlW0^7vxdiu#Vr!i8@};cJF*(w!fr9}$mZ8y zqd4g=+RbKw#L{VR>p{$(MqO{7LBNGsbUEmrmcC|I4zD>=?w_~!{%@rXFta8i$1 zDwN0BH1KLgLzt?05U@(V&2q{f)3Ud}HQqw9jxN8_vWs>7}-o`tla6&r1J zQ0LkLERgH^XcfLrqDPmlhMJNt-qUhwZd*&rp4{ph9P<9=tj-fA`selA=Kpjg3;lD* zFQxfybruO5&Fb&eeqZ+YK8}($d((^4qGRiJ8|auAXVFK;T(WH~PPcsXDrIhOf&v&q zkJe{-HaS!L#yf30gO}j7J-Kl*($u=mWN&(@tcIkeP_LucPxsx!n%8CB@K*|hzx$>` z^gPSYxo{!JaiY8pj!?N*iX(w;ujT zb)4%SX5gGs*Dq_@g`A8f1oU{sX9SvMUwkIio zLidv?x^naYMYV&Zq4#q9f?@A$P{@>oEYJLK*Q`_#K>W5nQzjf@+k_YlsPzDO~WnZ8H%4UW=u*%X?ty! z^+yth1BA9Z5eE4Qvd5O4U%~7`7u2r<8V~qkqaJHhxA_9k5VF1 tk8O410sgeR09(-E(>kyfAxR8e(Re1SE_W!PK7>9&fKK(HRJk1y{R6MZ$w~kK literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0013.png b/themes/bgrt/throbber-0013.png new file mode 100644 index 0000000000000000000000000000000000000000..ace8764887795c1dacd9060bbe7d0e1ea932abc5 GIT binary patch literal 1612 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0017.png b/themes/bgrt/throbber-0017.png new file mode 100644 index 0000000000000000000000000000000000000000..ce792def5cc6aac0b16a4ac9d029aca472c08595 GIT binary patch literal 1572 zcmYL}eK^x=7{`B_%EqXz!<4reDIMFCXoN+XQ>TRTmd5yDY+kl0v|L6B%S$>5qg7H# zr$XC7VI&=u$ysT#v{s?aTi(LTnYzw(p6j{q?{(du@AZA|zn(15eeQ7BS{MKTa1WxJ zmr6~RN@InpGm?|1R0547`ZEAP6S-7sKuIY|HFRd~@?-9%P(c6_8A}5(Q4|_2BoxD- zhhicqOiUa#i58o{jKnY_K^n-wFybgNF(CavwI)-+m@sl$r@AT%wG`zR!UO>uEY2Q- z!(nW;nBZ`DTU)#>R?sSWs`9K_^7v3_Ab`cHPhQ~2dy`I*qIC6=5sTKt3 z|37Js-R9x5z*J$xkL;vSD#$SL4xz=V6u{Zorxc>B06@Lb!;RqM2R&cd8C`a8Rr|SB zzg5cJi4{ak!p^t@{G;!#)jdC@sb~5fZY}+4oaqoh(%NW}d8zK0c^%@j?`l4g!f*2m z$h>kew50#*Lg$VyE+e+T5I-*69w90%juElres4meB3h8KmlYqYQ;dhMD=dg=~lA90&00gHr+_yJpV&f zusq=|^wvCDvV0ce;iyiXi@zjQ-yk&lYQ)mEetz~%8|Y+~UpnGqP$~ToEn9P!jtqR~ zEn9)DXYk9gm8RQI_@)k%*g7rR^%eu(&&tmrg1c*jR_3uoU2H6#8&!Md4Lao~3?3cE z=NFL&otE>SXT7zZl4sz{bBkN{D*PRCQA4q^lEJdR6i#(Cq9$r&v=&(~d*dPm)BVz{ zvNWlKuC+e(rHRE|n3dq09#_D3X76#aX*E5>cAwrF#|uMOG?yJm5T7)Xio~qnjiqW@ zl}Bb)5P#_p?~t@=3U4}g;l(pvXtG?d1t~PMhf2+$oO#59hfUEN6E{*zT0Wbfoe5~M zm5nsPn%c)KB*V`3xop9&tbWK~>Phn`M~AD_H1UAVothW>i=GAuvPTXoPC`?Je`SJs z_<~dk`WtS1W|)_z5U#Z!4sy|h_8m$)(4MWvaza#}I4VO}dVG0Se%v9?BHUB+h>VPEs-aE!cHjZq{5If`p83rCCe zPiIc9C-5xMPePOt@LG2YE~!Ab{tdln=caR)$AU~>>QC(yMLGE|oBC6yKD_oz1eh3*_o++>4oC^yV_01KX%x}oCo0zPMq$8_njmL&fE&a8T_ZA;%@qE*n z(H~2bnhWE5m>-;q6$!HIy;nBxtG;9s)T0CAT8YL=X#0nCXQF$nM8&=iHNnXS-rd3#Tsuka4)}w6 z0`VS!nka3MP22xeUt8YW48N_dyVAl?3{ssZ*upBA-Z-Xi`K=cMd=od(AXcq8E!{_| z?%QQ{@pZ3K#zUbj9d1Fj33Kpcp;=X% z>y<*2$-+=&9*nDl66COgS<8oozOrNA373?xlu^&cn$E{VgZi(K8fME3l2iN{>2fLV z#`SiV+|Q8oP0rgsJ=PC NW7j^n+dG5P{sq3l&Vm2{ literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0018.png b/themes/bgrt/throbber-0018.png new file mode 100644 index 0000000000000000000000000000000000000000..6423b95104fd1fb81420f5cc0cb5b1baebc90726 GIT binary patch literal 1601 zcmYL}dpOg39LIm#*j!?6hZW5wXDsX@oRLCDX@%SpQM)kLjoE%2VHr+QlpIDEN-pI* zY9cA3wo-1V=_W;@nnXgB$&xemoacO>@8|P=p7-nXyuY8nzDIn#Jv7wTr~v?=LEi4} zr%;oXQh_TvHznn>LR8t?gSh~puDenY;B+ZUVY+}@gTQUkOa_3Dif1wKG0`j*Eey}) zgyAEjK|GszfEAwzM&ZFI28+SPbJ@{xaSYCXilZ|bapCmL2TF=4)Jl{)4P*ee1R@Df zB;sv1m=K9h_V!Npgr+;sdlWNTD>DJnECxUzIQ_gtQl3(sg@UR4ScOAVKqASq!ga60 z(_Zm@S6Cbx@KbOEf^BZU$~^_tTY>&zj5r1WMseclbOy&{10jOV<@@zCE4c0o_fss$ z;Qaq2j^IEJkb?@W^CSB}7?Z&@@u#ua3I&L^q=UsMD*#X$AiKK-1gQ#&dvgW5Q5})E z!knN^bIv1jc+Q`}IjU|r@O7YCrpj{mci58p-o_~Hr+2Q|>~(L9F+7=@7i#Heb{FNa zida2f^A^0=JN9ypH{CqFN`Oooo^$R!aPZvREtzEHFyrHUx6ht`Z+1O4_Tv6Q2XAJ` z&1aZJT=r4dF;rtlMbFVW5wCxtDGjWTAH|lrRh&Qu@1wY^IW}LvyyIFhbqIMj(`&{e zS>+ibOI-718F_F_yHQiA)bx{4j~QWH%Q9s9sV$=vIu9O~wVRy_w~p~xH&JyuvW0K{ zhcf0g;-Uymecbkob+sIJ32)_!6lq_9Ol8E5=Mt0*w@62~)|Ee(x>^O3mO3lf%vw>%+4}E;1qK0ZSg@wkMP=EoMQ`i zhwu9OFP*ml^tle2zZko4e!fD_1lHBjIX9=1g0PNQ=b=n7s?DcQ?Rw-9(YI_s_3R>d zo{4-v7A;zLWdYm@_(=p!jNdL*q;xK$M70K-GN=6<=8+=&M>~vjk=g?ex zqKRJGzFwYInCv`|kSRZzqU1PX+Iq+cIHb2FNys!!Y9;GXo=n}hAh$?j_?z=f*Vzjz zWp572NNR#^uxV$xTVUco4y($cKp7iZhw^keZZ>c^tR&6QI^1S613K=Ro3~MX)gagq z3u!Pe zHS&$sPciX@7f}7rFllLLcsG}{S|O7IX01;r(&4pK=dEQ`q-l&S@iH$#i2P{z&E$s4 zS^jM?cV^GM_)7+&s!v0i*WK>EwL=z*pq4Il`}4+n^#-L%C1RLKHISPOzXi+wtls^r zovLA3gJ6knnp#{U(wR}0*`%Zo_w%Q}LP;7D=x`#>ynp8V*)-_4)?GDa{DIE;@++n{ zG$%3Ucr?s|mA$+zX_@%`)iQ36PK5c#qgj=k)NTEq8(<34HQx<}VyPY4)aPCh#PYCw zX?}?3J3BA$SzNu4Go9CJ{*$MX^ zR@eINUptfEjTl)wvekK2%eZ*(vj42#cRe+}o{%A|w=^MtCg1aSkJ~)JA=tE6LQCna!V)P6BwmjP~WQjhU|7f6Slks1M sHyw}tVF8gt-stkA?cnZ`rS_ghWCxsXXObb9R{Vhgd8@a(a0@l_U;abPJOBUy literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0019.png b/themes/bgrt/throbber-0019.png new file mode 100644 index 0000000000000000000000000000000000000000..45e935927623eb5ebd3bbd1f5f6aed9207a55c88 GIT binary patch literal 1608 zcmYL}dsNbA7{`Bj<6^8xBxmzB4OgaI3MER>1u5mFDHf)AK}k(+a%twJK(=M6c-f{| zG;0;QwW(QI9z@B~)-bWQ2ptP6J1lKpn&vdM{cLAv?|Gl+d(QXsobUVm^&a0H9gak} zA^-qDG9qZPpn5JB%mM7;{QPN9;KGOmF#tF^Ef)khrE&pHs)Wvx?8xSF09=-U$H5)U z=JC?fabi(AE;Cz#6LJsp1X4*BPLjppal|;WFq_Zki2l<6HkZTCU>D!B1EXA)qiAUo z4nV{c$T$K4N8IE|AW%po3JKrVZPJ4?tCnY&**p$_$5Z~jge`Au>o0>0_HGqX8VCtn zQZ5SnKo7O-Z3it;8t|_K;PJ%LN3b3cqL*P@I)~2zBv~Q>o6Qk$}NLQnw$k$j}a#SZ}No-k-(Ocwm}8g0&n zc=WL^y*BDw8zYi3SRW%$Q>AqD56(=xL=<=9w58<=ntS!~Rc92<4wcZtLiuyiRG3%9 zirjL7L%FMOh~e&{R-8%H6buJh&0@o>b|R{#7Ch0>(KSBLcS{mxJFdqy^E`apwEG24 ziY#L+^k7tmA1&A=;9x40yemzaz8qqp!B_32Ls7#9B>VNENhJMlW+cGz?8W zy4lrjcIkSh!98puRJU&R=?tV9Vw8`S>WZODsjn!{T46WA7-I@YV z(vkp7D&Z~AaBj)a)@lA5v#@LO*#d0vP8D13WLD^sTD5_hXE! zTN_WC1-t9$gV*d$Kb}XnTTA?Pa8~8WXVbYUXTsUs8O#CHo6R#@+LiN#e(%#8er23A z^&4eyWX7a_3;csCIdd*%TX%=*XECDL3ELQj_p73?CJI9A9WwzS?i{f0nMfF_`khr` z9>E6RHWVK$lc>)K5f!pKvfN)8y&|?netq(HQuF46@k~!6Ce?=OYxu=S6T0X?*5z78 z;4=R4#E>bq_qgnmj@DZhnbgy*_1HU2YGyXGFirBiBkdUuCWivDu_!{;2}@_eD2tDw zRG{MK`15L~eAV&qE`3P+c3U8}MKnV?cw@ht%LmC{jw1HNfAwurYL04F)^pPQtc6hV z8iF?_Ga(3GoUKzq?uw^>L~bKwU-5IV(~e%S2<-FAETfKPIZYaQPnkAo=;7XhVz=Ko zn%!9Acgl0+HP5FZ_Z!xos@vHRG=*(+7>@4lE!)~pJ9YpwdU!~EP>Act4Dg;aw@v@MZrgI z#g(=GRNlGk>%Ye0^n(^Ox_?|T3{Pb@4BJn;wCS)PxdxhhBrK(`5stcZC zrwp<3tkFF-hr;HJD4&v_=isYe5=W&%H?C0gXT}%PwbMP16W+Wk#h4zK2aM;|-IW=rU5qjZ0{*I%U z*Dq=1RZc<+yaTad2PN*M_;IR(#uNDugS<6sq_r5Ad}!ZPK%Sz%XehIS!gzy}G7H>0 z9QY*rNX&zySu;g$ef0&-pR_MBP+D#nIoZyjFzCvA`;6~Dcs*wORtt+&7uq{whk>(&9A0>1Ai_m`)Tyz ylZqQ_OI6YL)DWxfZQuDH{K$lL(m@=3_Ajb$XmVakmnIzi3IPT^n%4AjYVkkv|H85W literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0020.png b/themes/bgrt/throbber-0020.png new file mode 100644 index 0000000000000000000000000000000000000000..b84b04dd859b199729c63df17ebf7cbffe8f3185 GIT binary patch literal 1583 zcmYL}dpOg39LIl#2}dqtTPc>?ncFTRLwGEglq8f((S~8!W^E&ua#z^| zacx4#I31QHky~=vsZ>TR$3fvZQ_p$M_xXN4@8@~HKF|C6`RjYb!`($mVXp!J07|Y$ z9X%zA*r{D$NoTUzD-w~XAN6AbfFfk4q=27_;S$rH<>bq9CR0cNIy{m}LSG4D;(UYgEE^eO-k?lt43#l6TQP ziKn{b9g$cJBJfR67>rr^*seb$P<;n_1(RqbfECV&3<@GK5C<`#bY_C5pjE;lJKR&U zAc^t+lPHX(otNOX1gm|`jt!=ems(11=f>Q zuqBknf`!l*C3a=ZfwiZFHn8us*QeiG4a80lSasU$ocm2p7P^Ml%LNbLca*TH8@Ps# zAK678(%s)6^DZA5^IYAqecKgtDHNa@g>{NFiz>5dC+}C|b6OWjW4QjVm6wXpuJ-xC z@QOuLi*$;*xf^KI2FVWgiCt5Dj4aiwe^tfP6$15d^f4eP(Lwa~p3tDhK`nh^B-NUH zLCO^+7yY2FI|NF=N7d@LIw^J85{S_I;M$}Jty8ZXryZ<%_aB2rZDz(w;n;020%=1V zh!Ff5ckB!sTny?h6z-G#&P1oeq!KFRCr%xkpd{!;|CTwfGs)C}3S}ml7hb-2kBo7> z5?_^<+%tD(uzKi57;4WXZGYYJKYdNinrU40BG=96(hOcp4xM!1L;zwg^gO@x<}Y4* zdAza2L}k#EgdrtDRqY8{&LpHQY5=4q+jDWIJS*|6u-dBM=ku!Z-6!L(*FatkKiM|t}fQV7E@ zVKZN_L+=jzO1aV?g(3)F@MWUI`~$2uJ-XOq@G+EdV6DFC?r7BcYf^^Y-3zN;boqjD zd~tQd?j+qu3hU2&2tcvrR@xpJS`eqdA<(kLonONq`#CVH<_QYeIt{(B&P{jR5U|RHlM@kVHIW;A*}WI{;F9(7FTY%th+3VBy0p+cf;_ZlwMPU)!zb=EA(T$8QERvz`W%+p>2NZv6X}F7a|Ew`Wc9IeJKNMtOS1;fH$90-1R6P2zRlVYP^wY8WWM^~sv=^_Kh>$_kw)jLp|c-9gC&n%x}{VW7Mn6cfgN}F z6Mk4Olf!sNFRO?jF(zoJU)c5t@KnTn5(qU2vt^heG_o5}!wYnG5!GAF?YUi-{Hkg4 z_`0;O+#AE5Q-N)3S4w5=InS4NMJ9CQu7VX#Z(kYjkX_kU-IPIbjDxTg8re0YBNzK{MGz{e#*6bxuWK&3Mf-O=2gesRjyk* zsMd#45M$=txj5@RWIbbH@C-e?q*~#IXpbI#y<+!io|-nP>315r+b?X%;mi0O>}=Ez c5cH<~U;AcCT{$u^$&UxPI=MU6;t5Ir0u~;_O#lD@ literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0021.png b/themes/bgrt/throbber-0021.png new file mode 100644 index 0000000000000000000000000000000000000000..a64932df50150f1ac1e29b1d181b80430f802459 GIT binary patch literal 1602 zcmYL}eKga19LIm#JZ!|pT*|WumDz)bgtRcTYHq1csCn8Qn{BqX)lAq>Nm8g=vh~QV zZc28Ft5n!+6BDj(EfOP%+x@9?&pqe+`M%G2zdq;v`F#KR=4}fn8W~s_003Y_ z3JZw<)nTdNdf?4ZOVfga;D$x<0l*NsR1lz4wj4A!3J8&cPzH+zpy?bo4V}zjv*W2~ zK97n{VhGS&mWa*SFQB6ZbQ+t+NAtOiloT58KlMmp(Nca+$nMYqqn0m4g~SVJ01kuo zMPspOoTmd8>*ww5=Z&dR^tFLKCQCg#8EhJW!T5bYIPBm|2p(kcZ>#X)L5Rbq?WouQ zdZtTWFlh1Of$!ph!Qk?H;YtviFTovDS_%yi(0QDM1RBr56O+j0OCs9tfgHKSBfte| zy#GgfV0=hBzX(8V_AOgPWzqN!JL1_~PysB?H}lN$wE&>gPYT(zGZIm7wu5Wci3LH4ELpv{^qg6-wjl-eokTLt0Qa@}4JopqG`<0{JH57E(^g}NxhHVobL zLD+kuTXARs!-})8*twxg+H;UoY8-HGz2|giKvJhj-5*XSlgIy5sZ?cj;&9vj7wij} z{C>X{_Owbim)|w&d$&KNck?iNSzWI9QmEe8s>*>@XK^~MjZxJfoYNRrDtqYtVZD}B zozz_%3AHwf-U1t`>l-0<2gX6HK5gUUp303v1USap9DulBfp84r$#Mv1q=)D%5ca;}i4#s9EZ2b_{V{Tef z`_(4%yfClN#kIyhZ@r&*IhRM$wZ>1b*<$)y(fH zwMLt*JdC$MTtTJ8D|538d83M=-15&^`#WZg!-m}=LS=3R~^eck{j!*B%owKdnl+{IrTp4rpRt}kSAaANUi2^f> zh16#!Nv6zGEmDawklRvDtnzl$@7+as#B5sN-SF4mRms#vQK)STf6h65#R9;ZFb^<$ zeQ5A{^WL=egDWjeR;#>Lf8b6Hclq6)@i$sf_m&7->&oc$dSe}y;Ik7$f|^Q-t7qx| zxQTk7peB)%1>7~sYP0%s{-Eb{tGx}uT^1@gx@*+4Rm>VGYMQN`Z(#UBn$ZYs>@}|k zFyGDCnUTjwiniA=0&K=7m;d9e_IHqFPkOYEkx!9L4Y#hjfmW7{5-(Iw7`Ky%o$nD_AuAPnDUA4E}l!=h7S_WRGq{QN21!Ad%pGc4KXFALfl1( z?6N+mu9{CuiXHSqy_$PARL9B|%-!({1vTOFdzlT>UGh_dP1Obe-CvSpppT3W3mk{8wA$WXMpW9SLmpji zlzM57#=YSOlH27MVfHZTeWuh;7olw|NQYIek}u9jEmP+XtsSyt?sTt#R%SDYk}lZ* z#D+SD=G>@I6hboy9lWJMW#RN>=Z`#&;aV)f4j}oD|2QUoDs0S{+*17&FV?q^2yY>5{bq3sgh_8zAh!^)9nYex}R?KS6**2oI?Yip%~Nwrj*Y literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0022.png b/themes/bgrt/throbber-0022.png new file mode 100644 index 0000000000000000000000000000000000000000..4b57e234270c5b3810796a93de9e85e008f446ce GIT binary patch literal 1595 zcmYL}e>~H99LK-PHRIB1$}-h-N-nmU!;Hd3BZ)>?UGihiuk43yE>ze?8g~+MlpmG4 zx+L>+QuL)&Ty>~hcE@H%NAlx{Z5DE0caMAA=ka;JUysM@`F^}U@4r5xfCJ>!hGvEU z0Ic@$_M||HSuTTBQ0FEm&q4xcdmrHffDv-J^nlAHD9CihN zjBpx`%c0?-Vt6=qToQwoz>CK5qUj7e7sqACFqw4De~OKWqccxL2wv(#QK;o8&u|_c zAmHtYI6FHW!5(90M{;l=Ip7=H<bSiGZ8&^!;q>;B13qQ%jjM74NWJ6KPLer8awaT$Eb4rqAFvCv1xP%ewIzTba8$*KcgnxgfC@8Kz&T(P~4q z;A*kEhh&ecb>H|0-r_r?iUtYdg3>oI94=A6eQ|Fn>OYTOp^& z#F{=I%qUh2i2PEV6-gc; zskvU%FsXfeRL>(g_Mnvcvg)4sXxiRVcfp*boBK^Lax5^|=9e65$%swIq4-Vl#R*wc zNtbV+zsFp8Z`st)c*VymJMw0UEiena$xF@XGM-`Y(VA{ ziFH?ZF_m(SY0-WvR8J|F^}UziyO_f2KXjKGT2e zs?P%~wMWhnT&C@tz+y(1bwxjQ&v&GHvRHziw|V#d!>4!ptW`g-;og=%MI1a1E}Bst zcI(IqLN5FEGgE>2oo|N<2J1i;n1IoRsPx#drZsn`Z~PMAlJ60V&M!I!7bWNU_bJG+ z4;5gm@$ZFDybk^yU>eb=NLLo~4Yjf=kC3Tu( zA6)ed`EUWel{<2)h_SXaosyt6MiF6HK`Q8~GkrFo(&mIxyM%QrBI?s{`bkyxD|pB` z!LOs~RlDG2`dtEhFz2mq_Vk1LdD!fX%0+yMUt!Qlt1-|nwr8Rh@h2vtDCcLypD*;k z0T;oqKdlJnKh~h-7ZXWj1)0@S%@934B&wd2@tt~cJ?qA#sS>1H=@+{CosZ>XMG4X7 pj+6Ucx<}|`XAc`QUQ3;qw$zWv#>e*6g3#{=_;?-gy!UmO;BO1~<);7u literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0023.png b/themes/bgrt/throbber-0023.png new file mode 100644 index 0000000000000000000000000000000000000000..b3dbeef0ed06455beaffa218655d8070cf2324d7 GIT binary patch literal 1603 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0025.png b/themes/bgrt/throbber-0025.png new file mode 100644 index 0000000000000000000000000000000000000000..3905e00eeb09a3546eab2dec2158fa9bc5f280f4 GIT binary patch literal 1604 zcmYL}dsGs36vsiy0B0%Uqm1bmq`l;kHnoM1K%;zt6bZkrln|nmSLJL?-Hj|I$$3}BFOx}NLPmf`8BIs$)K)NW)~D)tx*E~gJH(?R$$3}7%hOn`vJ-OqTR4)B|7+(ci8SMsz0-Wu@mS z9(E}B#v7oGQ|&_<@yEfg7Na%uiOSB-iwlumO{ClP_4T+Nc>L9ks&n%Cn!~x>oS0|% z^0ib3ox44q;a`)gE|{-aEj%MU`A6e?Z^e~}Ja&V@Z+#j2YvRnK+S*+N+BFCGh?H>r zHS1EhxxBsOO7-VO>e=g8cr@9=hnOEvva5FKEyWiz-{Gtkp5PD1069e|v>cri(#q5;ziiY58p?ksP zu_V29EJ`-(anf+t+sSS{sG&t6V>-p zGmBH4ce!bU!a5OPYtehVrrKx94c-)^bLCsLJb5)z@z+N+7if5>XMY<#uI#pc*SWG@ z0`~~jhcyikE0|glM(K#Z2bbM3jxp!v-`Hk&kZ>#sVW&oos03a5H6to zp`~-BM-`?bt%z&^YZaxH4BgK}wyum%C60$aSwBb^Qq5j^cr9`?^p$m5RBE%7n@*)v znp5+Ni!SVf$&oxWd3lJ|*sRUcw!u9hx5(LnaM%B;L2slYXB{iASK=X`ucL1FRoSvcsM^y_=sOM?v#moSz?Av^`%uIs8f=J zjsm^vhDPnYN?NT&Ef{%= z@ps<PYq;ZF~D4IVE@+G>%VU|P~h%*?N? zTaq|ppr$Qzkn;SuOz}0Km#f(htaP=)D^_3r$axYZ2a0BM`t{<+d&F~XQVR*Bk&Am^7d4XaWsbl~oT7)zZjixz?>dejRqAvxsS|r|qQq ztvL=>_7)aooX>-^7G9L-I&j%Q5|j$SjF wD~E2)ka~oIzC8+u<0Gd@SoVvtpxGs$Ch&UB0pY0y-8Tpz5q$~O9${(!0^C;FL;wH) literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0026.png b/themes/bgrt/throbber-0026.png new file mode 100644 index 0000000000000000000000000000000000000000..4c02eb167941a3611d36f1b0cfab5086d77ad0ac GIT binary patch literal 1605 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 literal 0 HcmV?d00001 diff --git a/themes/bgrt/throbber-0029.png b/themes/bgrt/throbber-0029.png new file mode 100644 index 0000000000000000000000000000000000000000..d9931e1ecbf2708841134a846f9d36d9cdbd20f8 GIT binary patch literal 1588 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 X`%H>)eQ8Yx_}u|GPrOH^dqny_<-gJq literal 0 HcmV?d00001 -- 2.20.1 From 10fddacd1e9a45c8f7345067d61974ef249a1deb Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 3 Dec 2018 16:20:59 +0100 Subject: [PATCH 22/82] two-step: Do not rotate bgrt background image for upside-down panels Upside-down LCD panels are fixed up in HW by the GOP, so the bgrt image is not rotated in this case and we should not rotate it to compensate. While at it also fixup the wrong indentation of the ply_pixel_buffer_set_device_scale() call. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 641eb70..16b8fc8 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -312,8 +312,12 @@ view_set_bgrt_background (view_t *view) if (ply_renderer_get_panel_properties (ply_pixel_display_get_renderer (view->display), &panel_width, &panel_height, &panel_rotation, &panel_scale)) { - ply_pixel_buffer_set_device_rotation (bgrt_buffer, panel_rotation); - ply_pixel_buffer_set_device_scale (bgrt_buffer, panel_scale); + /* Upside-down panels are fixed up in HW by the GOP, so the + * bgrt image is not rotated in this case. + */ + if (panel_rotation != PLY_PIXEL_BUFFER_ROTATE_UPSIDE_DOWN) + ply_pixel_buffer_set_device_rotation (bgrt_buffer, panel_rotation); + ply_pixel_buffer_set_device_scale (bgrt_buffer, panel_scale); } width = ply_pixel_buffer_get_width (bgrt_buffer); -- 2.20.1 From 534aa0cfd591c5f9abc70551c4fc736001e51c5e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 19:21:33 +0100 Subject: [PATCH 23/82] drm: Drop unused encoder_id We cache the encoder-id, but we never use it, so stop caching it. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 34b52d7..9453a87 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -81,7 +81,6 @@ struct _ply_renderer_head int connector0_mode_index; uint32_t controller_id; - uint32_t encoder_id; uint32_t console_buffer_id; uint32_t scan_out_buffer_id; @@ -492,7 +491,6 @@ static ply_renderer_head_t * ply_renderer_head_new (ply_renderer_backend_t *backend, drmModeConnector *connector, int connector_mode_index, - uint32_t encoder_id, uint32_t controller_id, uint32_t console_buffer_id, int gamma_size, @@ -505,7 +503,6 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, head = calloc (1, sizeof(ply_renderer_head_t)); head->backend = backend; - head->encoder_id = encoder_id; head->connector_ids = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_UINT32); head->controller_id = controller_id; head->console_buffer_id = console_buffer_id; @@ -1114,7 +1111,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) for (i = 0; i < backend->resources->count_connectors; i++) { ply_renderer_head_t *head; drmModeEncoder *encoder; - uint32_t encoder_id; drmModeCrtc *controller; uint32_t controller_id; uint32_t console_buffer_id; @@ -1146,7 +1142,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) continue; } - encoder_id = encoder->encoder_id; controller = find_controller_for_encoder (backend, encoder); drmModeFreeEncoder (encoder); @@ -1181,8 +1176,8 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) if (head == NULL) { head = ply_renderer_head_new (backend, connector, connector_mode_index, - encoder_id, controller_id, - console_buffer_id, gamma_size, rotation); + controller_id, console_buffer_id, + gamma_size, rotation); ply_list_append_data (backend->heads, head); -- 2.20.1 From 42bbee8c3883507e51c722f75a80f19757ec5406 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 3 Dec 2018 12:25:25 +0100 Subject: [PATCH 24/82] drm: Directly store the mode instead of the mode_index The only way we use mode_index is to get the mode, so its easier to directly store the mode when we create a head. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 70 +++++++++++++----------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 9453a87..52f948e 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -78,7 +78,7 @@ struct _ply_renderer_head ply_array_t *connector_ids; drmModeConnector *connector0; - int connector0_mode_index; + drmModeModeInfo *connector0_mode; uint32_t controller_id; uint32_t console_buffer_id; @@ -465,12 +465,8 @@ ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *back static bool ply_renderer_head_add_connector (ply_renderer_head_t *head, drmModeConnector *connector, - int connector_mode_index) + drmModeModeInfo *mode) { - drmModeModeInfo *mode; - - mode = &connector->modes[connector_mode_index]; - if (mode->hdisplay != head->area.width || mode->vdisplay != head->area.height) { ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head", (int) mode->hdisplay, (int) mode->vdisplay, @@ -490,14 +486,13 @@ ply_renderer_head_add_connector (ply_renderer_head_t *head, static ply_renderer_head_t * ply_renderer_head_new (ply_renderer_backend_t *backend, drmModeConnector *connector, - int connector_mode_index, + drmModeModeInfo *mode, uint32_t controller_id, uint32_t console_buffer_id, int gamma_size, ply_pixel_buffer_rotation_t rotation) { ply_renderer_head_t *head; - drmModeModeInfo *mode; int i, step; head = calloc (1, sizeof(ply_renderer_head_t)); @@ -507,11 +502,8 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, head->controller_id = controller_id; head->console_buffer_id = console_buffer_id; - assert (connector_mode_index < connector->count_modes); - mode = &connector->modes[connector_mode_index]; - head->connector0 = connector; - head->connector0_mode_index = connector_mode_index; + head->connector0_mode = mode; head->area.x = 0; head->area.y = 0; @@ -530,7 +522,7 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, } } - ply_renderer_head_add_connector (head, connector, connector_mode_index); + ply_renderer_head_add_connector (head, connector, mode); assert (ply_array_get_size (head->connector_ids) > 0); head->pixel_buffer = ply_pixel_buffer_new_with_device_rotation (head->area.width, head->area.height, rotation); @@ -652,15 +644,13 @@ ply_renderer_head_set_scan_out_buffer (ply_renderer_backend_t *backend, ply_renderer_head_t *head, uint32_t buffer_id) { - drmModeModeInfo *mode; + drmModeModeInfo *mode = head->connector0_mode; uint32_t *connector_ids; int number_of_connectors; connector_ids = (uint32_t *) ply_array_get_uint32_elements (head->connector_ids); number_of_connectors = ply_array_get_size (head->connector_ids); - mode = &head->connector0->modes[head->connector0_mode_index]; - ply_trace ("Setting scan out buffer of %ldx%ld head to our buffer", head->area.width, head->area.height); @@ -1048,10 +1038,10 @@ modes_are_equal (drmModeModeInfo *a, a->type == b->type; } -static int -find_index_of_mode (ply_renderer_backend_t *backend, - drmModeConnector *connector, - drmModeModeInfo *mode) +static drmModeModeInfo * +find_matching_connector_mode (ply_renderer_backend_t *backend, + drmModeConnector *connector, + drmModeModeInfo *mode) { int i; @@ -1060,15 +1050,15 @@ find_index_of_mode (ply_renderer_backend_t *backend, ply_trace ("Found connector mode index %d for mode %dx%d", i, mode->hdisplay, mode->vdisplay); - return i; + return &connector->modes[i]; } } - return -1; + return NULL; } -static int -get_index_of_preferred_mode (drmModeConnector *connector) +static drmModeModeInfo * +get_preferred_mode (drmModeConnector *connector) { int i; @@ -1077,26 +1067,26 @@ get_index_of_preferred_mode (drmModeConnector *connector) ply_trace ("Found preferred mode %dx%d at index %d\n", connector->modes[i].hdisplay, connector->modes[i].vdisplay, i); - return i; + return &connector->modes[i]; } - return -1; + return NULL; } -static int -get_index_of_active_mode (ply_renderer_backend_t *backend, - drmModeCrtc *controller, - drmModeConnector *connector) +static drmModeModeInfo * +get_active_mode (ply_renderer_backend_t *backend, + drmModeCrtc *controller, + drmModeConnector *connector) { if (!controller->mode_valid) { ply_trace ("No valid mode currently active on monitor"); - return -1; + return NULL; } ply_trace ("Looking for connector mode index of active mode %dx%d", controller->mode.hdisplay, controller->mode.vdisplay); - return find_index_of_mode (backend, connector, &controller->mode); + return find_matching_connector_mode (backend, connector, &controller->mode); } static bool @@ -1109,12 +1099,12 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) heads_by_controller_id = ply_hashtable_new (NULL, NULL); for (i = 0; i < backend->resources->count_connectors; i++) { + drmModeModeInfo *mode = NULL; ply_renderer_head_t *head; drmModeEncoder *encoder; drmModeCrtc *controller; uint32_t controller_id; uint32_t console_buffer_id; - int connector_mode_index = -1; int gamma_size; ply_pixel_buffer_rotation_t rotation; bool tiled; @@ -1155,16 +1145,16 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) ply_renderer_connector_get_rotation_and_tiled (backend, connector, &rotation, &tiled); if (!tiled && backend->use_preferred_mode) - connector_mode_index = get_index_of_preferred_mode (connector); + mode = get_preferred_mode (connector); - if (connector_mode_index < 0) - connector_mode_index = get_index_of_active_mode (backend, controller, connector); + if (!mode) + mode = get_active_mode (backend, controller, connector); /* If we couldn't find the current active mode, fall back to the first available. */ - if (connector_mode_index < 0) { + if (!mode) { ply_trace ("falling back to first available mode"); - connector_mode_index = 0; + mode = &connector->modes[0]; } console_buffer_id = controller->buffer_id; @@ -1175,7 +1165,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (void *) (intptr_t) controller_id); if (head == NULL) { - head = ply_renderer_head_new (backend, connector, connector_mode_index, + head = ply_renderer_head_new (backend, connector, mode, controller_id, console_buffer_id, gamma_size, rotation); @@ -1185,7 +1175,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (void *) (intptr_t) controller_id, head); } else { - if (!ply_renderer_head_add_connector (head, connector, connector_mode_index)) + if (!ply_renderer_head_add_connector (head, connector, mode)) ply_trace ("couldn't connect monitor to existing head"); drmModeFreeConnector (connector); -- 2.20.1 From bf8a2e893eb99b373f6e6de72954aa171e766d88 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 19:50:33 +0100 Subject: [PATCH 25/82] drm: Refactor create_heads_for_active_connectors Refactor create_heads_for_active_connectors to prepare it for adding a step where we assign controllers to connected outputs which do not have a controller assigned yet. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 99 ++++++++++++++++++++---------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 52f948e..f88d445 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -115,6 +115,13 @@ typedef struct uint32_t added_fb : 1; } ply_renderer_buffer_t; +typedef struct +{ + drmModeConnector *connector; + drmModeModeInfo *mode; + drmModeCrtc *controller; +} ply_output_t; + struct _ply_renderer_backend { ply_event_loop_t *loop; @@ -1092,26 +1099,26 @@ get_active_mode (ply_renderer_backend_t *backend, static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { - int i; - drmModeConnector *connector; ply_hashtable_t *heads_by_controller_id; + ply_output_t *outputs; + int i, found, outputs_len; heads_by_controller_id = ply_hashtable_new (NULL, NULL); + outputs = calloc (backend->resources->count_connectors, sizeof(*outputs)); + + /* Step 1: + * Build a list of connected outputs and get pre-configured controllers. + */ + found = 0; for (i = 0; i < backend->resources->count_connectors; i++) { - drmModeModeInfo *mode = NULL; - ply_renderer_head_t *head; + drmModeConnector *connector; drmModeEncoder *encoder; - drmModeCrtc *controller; - uint32_t controller_id; - uint32_t console_buffer_id; - int gamma_size; ply_pixel_buffer_rotation_t rotation; bool tiled; connector = drmModeGetConnector (backend->device_fd, backend->resources->connectors[i]); - if (connector == NULL) continue; @@ -1125,47 +1132,72 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) continue; } - encoder = find_encoder_for_connector (backend, connector); + outputs[found].connector = connector; - if (encoder == NULL) { - drmModeFreeConnector (connector); - continue; - } - - controller = find_controller_for_encoder (backend, encoder); - drmModeFreeEncoder (encoder); - - if (controller == NULL) { - drmModeFreeConnector (connector); - continue; + encoder = find_encoder_for_connector (backend, connector); + if (encoder) { + outputs[found].controller = + find_controller_for_encoder (backend, encoder); + drmModeFreeEncoder (encoder); } - controller_id = controller->crtc_id; - ply_renderer_connector_get_rotation_and_tiled (backend, connector, &rotation, &tiled); if (!tiled && backend->use_preferred_mode) - mode = get_preferred_mode (connector); + outputs[found].mode = get_preferred_mode (connector); - if (!mode) - mode = get_active_mode (backend, controller, connector); + if (!outputs[found].mode && outputs[found].controller) + outputs[found].mode = get_active_mode (backend, outputs[found].controller, connector); /* If we couldn't find the current active mode, fall back to the first available. */ - if (!mode) { + if (!outputs[found].mode) { ply_trace ("falling back to first available mode"); - mode = &connector->modes[0]; + outputs[found].mode = &connector->modes[0]; + } + + found++; + } + outputs_len = found; /* outputs now contains found valid entries */ + + /* Step 2: TODO + * Drop controllers for clones for which we've picked different modes. + */ + + /* Step 3: TODO + * Assign controllers to outputs without a controller + */ + + /* Step 4: + * Create heads for all valid outputs + */ + for (i = 0; i < outputs_len; i++) { + drmModeConnector *connector = outputs[i].connector; + ply_renderer_head_t *head; + uint32_t controller_id; + uint32_t console_buffer_id; + int gamma_size; + ply_pixel_buffer_rotation_t rotation; + bool tiled; + + /* Skip outputs for which we failed to get a controller */ + if (!outputs[i].controller) { + drmModeFreeConnector (connector); + continue; } - console_buffer_id = controller->buffer_id; - gamma_size = controller->gamma_size; - drmModeFreeCrtc (controller); + ply_renderer_connector_get_rotation_and_tiled (backend, connector, &rotation, &tiled); + + controller_id = outputs[i].controller->crtc_id; + console_buffer_id = outputs[i].controller->buffer_id; + gamma_size = outputs[i].controller->gamma_size; + drmModeFreeCrtc (outputs[i].controller); head = ply_hashtable_lookup (heads_by_controller_id, (void *) (intptr_t) controller_id); if (head == NULL) { - head = ply_renderer_head_new (backend, connector, mode, + head = ply_renderer_head_new (backend, connector, outputs[i].mode, controller_id, console_buffer_id, gamma_size, rotation); @@ -1175,7 +1207,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (void *) (intptr_t) controller_id, head); } else { - if (!ply_renderer_head_add_connector (head, connector, mode)) + if (!ply_renderer_head_add_connector (head, connector, outputs[i].mode)) ply_trace ("couldn't connect monitor to existing head"); drmModeFreeConnector (connector); @@ -1183,6 +1215,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } ply_hashtable_free (heads_by_controller_id); + free (outputs); return ply_list_get_length (backend->heads) > 0; } -- 2.20.1 From 52bf6e3e950729e39b838c119284ced1aecc39a0 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 23:09:27 +0100 Subject: [PATCH 26/82] drm: Store tiled and rotation in ply_output_t This avoids the need to call ply_renderer_connector_get_rotation_and_tiled twice and thus also the need to call drmModeGetProperty twice for all properties. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index f88d445..b68265b 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -120,6 +120,8 @@ typedef struct drmModeConnector *connector; drmModeModeInfo *mode; drmModeCrtc *controller; + ply_pixel_buffer_rotation_t rotation; + bool tiled; } ply_output_t; struct _ply_renderer_backend @@ -442,28 +444,26 @@ connector_orientation_prop_to_rotation (drmModePropertyPtr prop, static void ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *backend, - drmModeConnector *connector, - ply_pixel_buffer_rotation_t *rotation, - bool *tiled) + ply_output_t *output) { drmModePropertyPtr prop; int i; - *rotation = PLY_PIXEL_BUFFER_ROTATE_UPRIGHT; - *tiled = false; + output->rotation = PLY_PIXEL_BUFFER_ROTATE_UPRIGHT; + output->tiled = false; - for (i = 0; i < connector->count_props; i++) { - prop = drmModeGetProperty (backend->device_fd, connector->props[i]); + for (i = 0; i < output->connector->count_props; i++) { + prop = drmModeGetProperty (backend->device_fd, output->connector->props[i]); if (!prop) continue; if ((prop->flags & DRM_MODE_PROP_ENUM) && strcmp (prop->name, "panel orientation") == 0) - *rotation = connector_orientation_prop_to_rotation (prop, connector->prop_values[i]); + output->rotation = connector_orientation_prop_to_rotation (prop, output->connector->prop_values[i]); if ((prop->flags & DRM_MODE_PROP_BLOB) && strcmp (prop->name, "TILE") == 0) - *tiled = true; + output->tiled = true; drmModeFreeProperty (prop); } @@ -1114,8 +1114,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) for (i = 0; i < backend->resources->count_connectors; i++) { drmModeConnector *connector; drmModeEncoder *encoder; - ply_pixel_buffer_rotation_t rotation; - bool tiled; connector = drmModeGetConnector (backend->device_fd, backend->resources->connectors[i]); @@ -1141,9 +1139,9 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) drmModeFreeEncoder (encoder); } - ply_renderer_connector_get_rotation_and_tiled (backend, connector, &rotation, &tiled); + ply_renderer_connector_get_rotation_and_tiled (backend, &outputs[found]); - if (!tiled && backend->use_preferred_mode) + if (!outputs[found].tiled && backend->use_preferred_mode) outputs[found].mode = get_preferred_mode (connector); if (!outputs[found].mode && outputs[found].controller) @@ -1177,8 +1175,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) uint32_t controller_id; uint32_t console_buffer_id; int gamma_size; - ply_pixel_buffer_rotation_t rotation; - bool tiled; /* Skip outputs for which we failed to get a controller */ if (!outputs[i].controller) { @@ -1186,8 +1182,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) continue; } - ply_renderer_connector_get_rotation_and_tiled (backend, connector, &rotation, &tiled); - controller_id = outputs[i].controller->crtc_id; console_buffer_id = outputs[i].controller->buffer_id; gamma_size = outputs[i].controller->gamma_size; @@ -1199,7 +1193,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) if (head == NULL) { head = ply_renderer_head_new (backend, connector, outputs[i].mode, controller_id, console_buffer_id, - gamma_size, rotation); + gamma_size, outputs[i].rotation); ply_list_append_data (backend->heads, head); -- 2.20.1 From ef55ed99e74d15ae7b9a53b89450b6a7b4c297ca Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 23:58:26 +0100 Subject: [PATCH 27/82] drm: More connector enumeration refactoring Some further refactoring to prepare for adding code to picking crtcs for unconfigured connectors. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 94 +++++++++++++----------------- 1 file changed, 42 insertions(+), 52 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index b68265b..586df62 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -119,7 +119,8 @@ typedef struct { drmModeConnector *connector; drmModeModeInfo *mode; - drmModeCrtc *controller; + uint32_t controller_id; + uint32_t possible_controllers; ply_pixel_buffer_rotation_t rotation; bool tiled; } ply_output_t; @@ -978,51 +979,39 @@ close_device (ply_renderer_backend_t *backend) unload_backend (backend); } -static drmModeCrtc * -find_controller_for_encoder (ply_renderer_backend_t *backend, - drmModeEncoder *encoder) -{ - drmModeCrtc *controller; - - controller = NULL; - - /* Monitor is already lit. We'll use the same controller. - */ - if (encoder->crtc_id != 0) { - controller = drmModeGetCrtc (backend->device_fd, encoder->crtc_id); - - if (controller != NULL) { - ply_trace ("Found already lit monitor"); - return controller; - } - } - - return NULL; -} - -static drmModeEncoder * -find_encoder_for_connector (ply_renderer_backend_t *backend, - drmModeConnector *connector) +static void +find_controller_for_output (ply_renderer_backend_t *backend, + ply_output_t *output) { int i; drmModeEncoder *encoder; assert (backend != NULL); - for (i = 0; i < connector->count_encoders; i++) { + output->possible_controllers = 0xffffffff; + + for (i = 0; i < output->connector->count_encoders; i++) { encoder = drmModeGetEncoder (backend->device_fd, - connector->encoders[i]); + output->connector->encoders[i]); if (encoder == NULL) continue; - if (encoder->encoder_id == connector->encoder_id) - return encoder; + if (encoder->encoder_id == output->connector->encoder_id && encoder->crtc_id) { + ply_trace ("Found already lit monitor on connector %u using controller %u", + output->connector->connector_id, encoder->crtc_id); + output->controller_id = encoder->crtc_id; + } + /* Like mutter and xf86-drv-modesetting only select controllers + * which are supported by all the connector's encoders. + */ + output->possible_controllers &= encoder->possible_crtcs; + ply_trace ("connector %u encoder %u possible controllers 0x%08x/0x%08x", + output->connector->connector_id, encoder->encoder_id, + encoder->possible_crtcs, output->possible_controllers); drmModeFreeEncoder (encoder); } - - return NULL; } static bool @@ -1082,10 +1071,13 @@ get_preferred_mode (drmModeConnector *connector) static drmModeModeInfo * get_active_mode (ply_renderer_backend_t *backend, - drmModeCrtc *controller, - drmModeConnector *connector) + ply_output_t *output) { - if (!controller->mode_valid) { + drmModeCrtc *controller; + drmModeModeInfo *mode; + + controller = drmModeGetCrtc (backend->device_fd, output->controller_id); + if (!controller || !controller->mode_valid) { ply_trace ("No valid mode currently active on monitor"); return NULL; } @@ -1093,7 +1085,11 @@ get_active_mode (ply_renderer_backend_t *backend, ply_trace ("Looking for connector mode index of active mode %dx%d", controller->mode.hdisplay, controller->mode.vdisplay); - return find_matching_connector_mode (backend, connector, &controller->mode); + mode = find_matching_connector_mode (backend, output->connector, &controller->mode); + + drmModeFreeCrtc (controller); + + return mode; } static bool @@ -1113,7 +1109,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) found = 0; for (i = 0; i < backend->resources->count_connectors; i++) { drmModeConnector *connector; - drmModeEncoder *encoder; connector = drmModeGetConnector (backend->device_fd, backend->resources->connectors[i]); @@ -1132,20 +1127,14 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) outputs[found].connector = connector; - encoder = find_encoder_for_connector (backend, connector); - if (encoder) { - outputs[found].controller = - find_controller_for_encoder (backend, encoder); - drmModeFreeEncoder (encoder); - } - + find_controller_for_output (backend, &outputs[found]); ply_renderer_connector_get_rotation_and_tiled (backend, &outputs[found]); if (!outputs[found].tiled && backend->use_preferred_mode) outputs[found].mode = get_preferred_mode (connector); - if (!outputs[found].mode && outputs[found].controller) - outputs[found].mode = get_active_mode (backend, outputs[found].controller, connector); + if (!outputs[found].mode && outputs[found].controller_id) + outputs[found].mode = get_active_mode (backend, &outputs[found]); /* If we couldn't find the current active mode, fall back to the first available. */ @@ -1171,21 +1160,22 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) */ for (i = 0; i < outputs_len; i++) { drmModeConnector *connector = outputs[i].connector; + drmModeCrtc *controller; ply_renderer_head_t *head; uint32_t controller_id; uint32_t console_buffer_id; int gamma_size; - /* Skip outputs for which we failed to get a controller */ - if (!outputs[i].controller) { + controller = drmModeGetCrtc (backend->device_fd, outputs[i].controller_id); + if (!controller) { drmModeFreeConnector (connector); continue; } - controller_id = outputs[i].controller->crtc_id; - console_buffer_id = outputs[i].controller->buffer_id; - gamma_size = outputs[i].controller->gamma_size; - drmModeFreeCrtc (outputs[i].controller); + controller_id = controller->crtc_id; + console_buffer_id = controller->buffer_id; + gamma_size = controller->gamma_size; + drmModeFreeCrtc (controller); head = ply_hashtable_lookup (heads_by_controller_id, (void *) (intptr_t) controller_id); -- 2.20.1 From 76b37d50720b6c07c976789943fb2b02069b168d Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 27 Nov 2018 22:51:58 +0100 Subject: [PATCH 28/82] drm: Drop crtcs for clones for which we've picked different modes Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 586df62..87ecbfd 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -1097,7 +1097,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) { ply_hashtable_t *heads_by_controller_id; ply_output_t *outputs; - int i, found, outputs_len; + int i, j, found, outputs_len; heads_by_controller_id = ply_hashtable_new (NULL, NULL); @@ -1147,9 +1147,27 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } outputs_len = found; /* outputs now contains found valid entries */ - /* Step 2: TODO + /* Step 2: * Drop controllers for clones for which we've picked different modes. */ + for (i = 0; i < outputs_len; i++) { + if (!outputs[i].controller_id) + continue; + + for (j = i + 1; j < outputs_len; j++) { + if (!outputs[j].controller_id) + continue; + + if (outputs[i].controller_id == outputs[j].controller_id && + (outputs[i].mode->hdisplay != outputs[j].mode->hdisplay || + outputs[i].mode->vdisplay != outputs[j].mode->vdisplay)) { + ply_trace ("connector %u uses same controller as %u and modes differ, unlinking controller", + outputs[j].connector->connector_id, + outputs[i].connector->connector_id); + outputs[j].controller_id = 0; + } + } + } /* Step 3: TODO * Assign controllers to outputs without a controller -- 2.20.1 From d67e729739f7cc3cb138bcad8182496c818bfd41 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 28 Nov 2018 00:53:46 +0100 Subject: [PATCH 29/82] drm: Pick a controller for unconfigured connectors So far we've been relying on the kernel fbcon code to set up all outputs, now that distros have started using deferred fbcon takeover for flickerfree booting, we can no longer rely on this and in some cases we must pick our own controllers. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 132 ++++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 4 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 87ecbfd..20543ea 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -980,7 +980,7 @@ close_device (ply_renderer_backend_t *backend) } static void -find_controller_for_output (ply_renderer_backend_t *backend, +output_get_controller_info (ply_renderer_backend_t *backend, ply_output_t *output) { int i; @@ -1092,12 +1092,119 @@ get_active_mode (ply_renderer_backend_t *backend, return mode; } +/* Some controllers can only drive some outputs, we want to find a combination + * where all (connected) outputs get a controller. To do this setup_outputs + * picks which output to assign a controller for first (trying all outputs), so + * that that one will get the first (free) controller and then recurses into + * itself to assign the remaining outputs. This tries assigning all remainig + * unassigned outputs first and returns the best result of all possible + * assignment orders for the remaining unassigned outputs. + * This repeats until we find an assignment order which results in a controller + * for all outputs, or we've tried all possible assignment orders. + */ + +static uint32_t +find_controller_for_output (ply_renderer_backend_t *backend, + const ply_output_t *outputs, + int outputs_len, + int output_idx) +{ + uint32_t possible_controllers = outputs[output_idx].possible_controllers; + int i, j; + + for (i = 0; i < backend->resources->count_crtcs; i++) { + uint32_t controller_id = backend->resources->crtcs[i]; + + if (!(possible_controllers & (1 << i))) + continue; /* controller not usable for this connector */ + + for (j = 0; j < outputs_len; j++) { + if (outputs[j].controller_id == controller_id) + break; + } + if (j < outputs_len) + continue; /* controller already in use */ + + return controller_id; + } + + return 0; +} + +static int +count_setup_controllers (const ply_output_t *outputs, + int outputs_len) +{ + int i, count = 0; + + for (i = 0; i < outputs_len; i++) { + if (outputs[i].controller_id) + count++; + } + + return count; +} + +static ply_output_t * +setup_outputs (ply_renderer_backend_t *backend, + const ply_output_t *outputs, + int outputs_len) +{ + const ply_output_t *best_outputs; + ply_output_t *new_outputs; + int i, count, best_count; + uint32_t controller_id; + + best_count = count_setup_controllers (outputs, outputs_len); + best_outputs = outputs; + + for (i = 0; i < outputs_len && best_count < outputs_len; i++) { + /* Already assigned? */ + if (outputs[i].controller_id) + continue; + + /* Assign controller for connector i */ + controller_id = find_controller_for_output (backend, outputs, outputs_len, i); + if (!controller_id) + continue; + + /* Add the new controller to a copy of the passed in connector + * template, we want to try all possible permutations of + * unassigned outputs without modifying the template. + */ + new_outputs = calloc (outputs_len, sizeof(*new_outputs)); + memcpy (new_outputs, outputs, outputs_len * sizeof(ply_output_t)); + new_outputs[i].controller_id = controller_id; + + /* Recurse into ourselves to assign remaining controllers, + * trying all possible assignment orders. + */ + new_outputs = setup_outputs (backend, new_outputs, outputs_len); + + count = count_setup_controllers (new_outputs, outputs_len); + if (count > best_count) { + if (best_outputs != outputs) + free ((void *)best_outputs); + best_outputs = new_outputs; + best_count = count; + } else { + free (new_outputs); + } + } + + if (best_outputs != outputs) + free ((void *)outputs); + + /* Our caller is allowed to modify outputs, cast-away the const */ + return (ply_output_t *)best_outputs; +} + static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { ply_hashtable_t *heads_by_controller_id; ply_output_t *outputs; - int i, j, found, outputs_len; + int i, j, found, number_of_setup_outputs, outputs_len; heads_by_controller_id = ply_hashtable_new (NULL, NULL); @@ -1127,7 +1234,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) outputs[found].connector = connector; - find_controller_for_output (backend, &outputs[found]); + output_get_controller_info (backend, &outputs[found]); ply_renderer_connector_get_rotation_and_tiled (backend, &outputs[found]); if (!outputs[found].tiled && backend->use_preferred_mode) @@ -1169,9 +1276,26 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } } - /* Step 3: TODO + /* Step 3: * Assign controllers to outputs without a controller */ + number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); + if (number_of_setup_outputs != outputs_len) { + /* First try, try to assign controllers to outputs without one */ + ply_trace ("Some outputs don't have controllers, picking controllers"); + outputs = setup_outputs (backend, outputs, outputs_len); + number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); + } + if (number_of_setup_outputs != outputs_len) { + /* Second try, re-assing controller for all outputs */ + ply_trace ("Some outputs still don't have controllers, re-assigning controllers for all outputs"); + for (i = 0; i < outputs_len; i++) + outputs[i].controller_id = 0; + outputs = setup_outputs (backend, outputs, outputs_len); + } + for (i = 0; i < outputs_len; i++) + ply_trace ("Using controller %u for connector %u", + outputs[i].controller_id, outputs[i].connector->connector_id); /* Step 4: * Create heads for all valid outputs -- 2.20.1 From b082f42494e8423f08f40addc833d7e9b0192cb6 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Tue, 4 Dec 2018 14:31:13 -0500 Subject: [PATCH 30/82] keyboard: add helper to get the keyboard's renderer, if applicable Based on an original patch from Gert van de Kraats on Ubuntu's Launchpad: https://bugs.launchpad.net/ubuntu/+source/plymouth/+bug/1794292 Signed-off-by: Mathieu Trudel-Lapierre --- src/libply-splash-core/ply-keyboard.c | 16 ++++++++++++++++ src/libply-splash-core/ply-keyboard.h | 1 + 2 files changed, 17 insertions(+) diff --git a/src/libply-splash-core/ply-keyboard.c b/src/libply-splash-core/ply-keyboard.c index 80f7694..e11c093 100644 --- a/src/libply-splash-core/ply-keyboard.c +++ b/src/libply-splash-core/ply-keyboard.c @@ -587,4 +587,20 @@ ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard, } } +ply_renderer_t * +ply_keyboard_get_renderer (ply_keyboard_t *keyboard) +{ + assert (keyboard != NULL); + + switch (keyboard->provider_type) { + case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER: + return keyboard->provider.if_renderer->renderer; + + default: + break; + } + + return NULL; +} + /* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */ diff --git a/src/libply-splash-core/ply-keyboard.h b/src/libply-splash-core/ply-keyboard.h index 6147cc7..dd428c0 100644 --- a/src/libply-splash-core/ply-keyboard.h +++ b/src/libply-splash-core/ply-keyboard.h @@ -72,6 +72,7 @@ void ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard, bool ply_keyboard_watch_for_input (ply_keyboard_t *keyboard); void ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard); bool ply_keyboard_is_active (ply_keyboard_t *keyboard); +ply_renderer_t *ply_keyboard_get_renderer (ply_keyboard_t *keyboard); #endif -- 2.20.1 From c46f446fe44457f599805b685547c2258bb3fa96 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Tue, 4 Dec 2018 14:41:35 -0500 Subject: [PATCH 31/82] device-manager: free keyboards when deactivating a renderer Based on an original patch by Gert van de Kraats, on Ubuntu Launchpad bug: https://bugs.launchpad.net/ubuntu/+source/plymouth/+bug/1794292 Signed-off-by: Mathieu Trudel-Lapierre --- src/libply-splash-core/ply-device-manager.c | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index d70e709..8ceee10 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -136,6 +136,34 @@ free_displays_for_renderer (ply_device_manager_t *manager, } } +static void +free_keyboards_for_renderer (ply_device_manager_t *manager, + ply_renderer_t *renderer) +{ + ply_list_node_t *node; + + node = ply_list_get_first_node (manager->keyboards); + while (node != NULL) { + ply_list_node_t *next_node; + ply_keyboard_t *keyboard; + ply_renderer_t *keyboard_renderer; + + keyboard = ply_list_node_get_data (node); + next_node = ply_list_get_next_node (manager->keyboards, node); + keyboard_renderer = ply_keyboard_get_renderer (keyboard); + + if (keyboard_renderer == renderer) { + ply_keyboard_free (keyboard); + ply_list_remove_node (manager->keyboards, node); + } + + node = next_node; + } + if (ply_list_get_first_node (manager->keyboards) == NULL) { + manager->local_console_managed = false; + } +} + static void free_devices_from_device_path (ply_device_manager_t *manager, const char *device_path) @@ -152,6 +180,7 @@ free_devices_from_device_path (ply_device_manager_t *manager, return; free_displays_for_renderer (manager, renderer); + free_keyboards_for_renderer (manager, renderer); ply_hashtable_remove (manager->renderers, (void *) device_path); free (key); -- 2.20.1 From bac628cd05783499d5e4dc005fb566c51ace2df8 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sun, 9 Dec 2018 15:22:48 +0100 Subject: [PATCH 32/82] ply-keyboard: Fix compiler warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix: "warning: enumeration value ‘PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL’ not handled in switch [-Wswitch-enum]" compiler warning. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-keyboard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libply-splash-core/ply-keyboard.c b/src/libply-splash-core/ply-keyboard.c index e11c093..27395e0 100644 --- a/src/libply-splash-core/ply-keyboard.c +++ b/src/libply-splash-core/ply-keyboard.c @@ -596,8 +596,8 @@ ply_keyboard_get_renderer (ply_keyboard_t *keyboard) case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER: return keyboard->provider.if_renderer->renderer; - default: - break; + case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL: + return NULL; } return NULL; -- 2.20.1 From 2dc81adb0f1a5469b15c62d3dacf53dfbc37c17a Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 10:43:09 +0100 Subject: [PATCH 33/82] libply: Add ply_strtod helper Add a ply_strtod helper which always uses "." as decimal separator independent of the locale. Using this fixes e.g. HorizontalAlignment in the two-step plugin not working with some locales. Signed-off-by: Hans de Goede --- src/libply/ply-utils.c | 14 ++++++++++++++ src/libply/ply-utils.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c index c17e0c8..4ff7b1b 100644 --- a/src/libply/ply-utils.c +++ b/src/libply/ply-utils.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -1109,4 +1110,17 @@ ply_kernel_command_line_override (const char *command_line) kernel_command_line_is_set = true; } +double ply_strtod(const char *str) +{ + char *old_locale; + double ret; + + /* Ensure strtod uses '.' as decimal separator, as we use this in our cfg files. */ + old_locale = setlocale(LC_NUMERIC, "C"); + ret = strtod(str, NULL); + setlocale(LC_NUMERIC, old_locale); + + return ret; +} + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply/ply-utils.h b/src/libply/ply-utils.h index ae4776e..4dd9c09 100644 --- a/src/libply/ply-utils.h +++ b/src/libply/ply-utils.h @@ -132,6 +132,8 @@ const char *ply_kernel_command_line_get_string_after_prefix (const char *prefix) bool ply_kernel_command_line_has_argument (const char *argument); void ply_kernel_command_line_override (const char *command_line); +double ply_strtod(const char *str); + #endif #endif /* PLY_UTILS_H */ -- 2.20.1 From fb6d4b4983de70296ee84d0029e5e7b91202d526 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 10:45:51 +0100 Subject: [PATCH 34/82] two-step: Use plymouth_strtod Use the locale agnostic plymouth_strtod helper which always uses a "." as decimal seperator. This fixes the various Alignment options not working with some locales. While at it also add a ply_trace to log the size and chosen centering for the watermark image. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 16b8fc8..c1e75a8 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -423,6 +423,10 @@ view_load (view_t *view) view->watermark_area.height = ply_image_get_height (plugin->watermark_image); view->watermark_area.x = screen_width * plugin->watermark_horizontal_alignment - ply_image_get_width (plugin->watermark_image) * plugin->watermark_horizontal_alignment; view->watermark_area.y = screen_height * plugin->watermark_vertical_alignment - ply_image_get_height (plugin->watermark_image) * plugin->watermark_vertical_alignment; + ply_trace ("using %ldx%ld watermark centered at %ldx%ld for %ldx%ld screen", + view->watermark_area.width, view->watermark_area.height, + view->watermark_area.x, view->watermark_area.y, + screen_width, screen_height); } ply_trace ("loading entry"); @@ -746,28 +750,28 @@ create_plugin (ply_key_file_t *key_file) alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment"); if (alignment != NULL) - plugin->animation_horizontal_alignment = strtod (alignment, NULL); + plugin->animation_horizontal_alignment = ply_strtod (alignment); else plugin->animation_horizontal_alignment = .5; free (alignment); alignment = ply_key_file_get_value (key_file, "two-step", "VerticalAlignment"); if (alignment != NULL) - plugin->animation_vertical_alignment = strtod (alignment, NULL); + plugin->animation_vertical_alignment = ply_strtod (alignment); else plugin->animation_vertical_alignment = .5; free (alignment); alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkHorizontalAlignment"); if (alignment != NULL) - plugin->watermark_horizontal_alignment = strtod (alignment, NULL); + plugin->watermark_horizontal_alignment = ply_strtod (alignment); else plugin->watermark_horizontal_alignment = 1.0; free (alignment); alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkVerticalAlignment"); if (alignment != NULL) - plugin->watermark_vertical_alignment = strtod (alignment, NULL); + plugin->watermark_vertical_alignment = ply_strtod (alignment); else plugin->watermark_vertical_alignment = .5; free (alignment); @@ -786,7 +790,7 @@ create_plugin (ply_key_file_t *key_file) transition_duration = ply_key_file_get_value (key_file, "two-step", "TransitionDuration"); if (transition_duration != NULL) - plugin->transition_duration = strtod (transition_duration, NULL); + plugin->transition_duration = ply_strtod (transition_duration); else plugin->transition_duration = 0.0; free (transition_duration); -- 2.20.1 From e111ba8bafaa41fced0824e6fbccc20372917a3d Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 9 Jan 2019 11:31:06 +0100 Subject: [PATCH 35/82] libply: Add ply_key_file_get_bool function Add a function to read a boolean value from a ply-key-file. This function will return true if the key exists and it has a value of "1", "y", "yes" or "true" (case-insensitive). In all other cases it returns false. Signed-off-by: Hans de Goede --- src/libply/ply-key-file.c | 33 +++++++++++++++++++++++++++++++++ src/libply/ply-key-file.h | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/src/libply/ply-key-file.c b/src/libply/ply-key-file.c index 862d6d5..1c05766 100644 --- a/src/libply/ply-key-file.c +++ b/src/libply/ply-key-file.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -356,6 +357,38 @@ ply_key_file_get_value (ply_key_file_t *key_file, return strdup (entry->value); } +bool +ply_key_file_get_bool (ply_key_file_t *key_file, + const char *group_name, + const char *key) +{ + ply_key_file_group_t *group; + ply_key_file_entry_t *entry; + + group = ply_key_file_find_group (key_file, group_name); + + if (group == NULL) { + ply_trace ("key file does not have group '%s'", group_name); + return false; + } + + entry = ply_key_file_find_entry (key_file, group, key); + + if (entry == NULL) { + ply_trace ("key file does not have entry for key '%s'", key); + return false; + } + + /* We treat "1", "y" and "yes" and "true" as true, all else is false */ + if (strcasecmp (entry->value, "1") == 0 || + strcasecmp (entry->value, "y") == 0 || + strcasecmp (entry->value, "yes") == 0 || + strcasecmp (entry->value, "true") == 0) + return true; + + return false; +} + static void ply_key_file_foreach_entry_entries (void *key, void *data, diff --git a/src/libply/ply-key-file.h b/src/libply/ply-key-file.h index e69d14a..ef7124b 100644 --- a/src/libply/ply-key-file.h +++ b/src/libply/ply-key-file.h @@ -42,6 +42,10 @@ bool ply_key_file_has_key (ply_key_file_t *key_file, char *ply_key_file_get_value (ply_key_file_t *key_file, const char *group_name, const char *key); +/* Note this returns false for non existing keys */ +bool ply_key_file_get_bool (ply_key_file_t *key_file, + const char *group_name, + const char *key); void ply_key_file_foreach_entry (ply_key_file_t *key_file, ply_key_file_foreach_func_t func, void *user_data); -- 2.20.1 From 6cf1bb3e37df6b69d3b0e17eee394ad8c6e57e75 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 20 Dec 2018 12:47:39 +0100 Subject: [PATCH 36/82] two-step: Rename UseBGRT to UseFirmwareBackground Rename the UseBGRT theme configfile option to UseFirmwareBackground, to make it clear what this does using language which most users will be able to understand, rather then using the cryptic BGRT ACPI table reference. While at it also switch to using the new ply_key_file_get_bool function, so that users can edit an existing configfile with "UseFirmwareBackground=true" in there and change it to "=false" and actually have that work as expected. The switch to ply_key_file_get_bool also fixes a memleak as ply_key_file_get_value returns a strdup-ed value which we were not free-ing. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 3 +-- themes/bgrt/bgrt.plymouth.in | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index c1e75a8..8f1ad58 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -813,8 +813,7 @@ create_plugin (ply_key_file_t *key_file) free (color); - /* Boolean option, true if the key is present */ - if (ply_key_file_get_value (key_file, "two-step", "UseBGRT")) + if (ply_key_file_get_bool (key_file, "two-step", "UseFirmwareBackground")) plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image"); progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction"); diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index b5cc843..dc5eaf5 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -13,4 +13,4 @@ Transition=none TransitionDuration=0.0 BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 -UseBGRT=true +UseFirmwareBackground=true -- 2.20.1 From 410ba63c81f49b08ab674d359239869b23bdd80e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 11:52:03 +0100 Subject: [PATCH 37/82] two-step: Make the box image surrounding the unlock dialog optional In some themes we want a simple style text entry without a dialog like box around it. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 50 ++++++++++++++++++---------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 8f1ad58..c6e9be4 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -91,7 +91,7 @@ typedef struct ply_throbber_t *throbber; ply_label_t *label; ply_label_t *message_label; - ply_rectangle_t box_area, lock_area, watermark_area; + ply_rectangle_t box_area, lock_area, watermark_area, dialog_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; bool background_is_bgrt; @@ -648,9 +648,8 @@ view_show_prompt (view_t *view, const char *prompt) { ply_boot_splash_plugin_t *plugin; + unsigned long screen_width, screen_height, entry_width, entry_height; int x, y; - int entry_width, entry_height; - unsigned long screen_width, screen_height; assert (view != NULL); @@ -660,17 +659,25 @@ view_show_prompt (view_t *view, screen_height = ply_pixel_display_get_height (view->display); if (ply_entry_is_hidden (view->entry)) { - view->box_area.width = ply_image_get_width (plugin->box_image); - view->box_area.height = ply_image_get_height (plugin->box_image); - view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0; - view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0; - view->lock_area.width = ply_image_get_width (plugin->lock_image); view->lock_area.height = ply_image_get_height (plugin->lock_image); entry_width = ply_entry_get_width (view->entry); entry_height = ply_entry_get_height (view->entry); + if (plugin->box_image) { + view->box_area.width = ply_image_get_width (plugin->box_image); + view->box_area.height = ply_image_get_height (plugin->box_image); + view->box_area.x = (screen_width - view->box_area.width) * 0.5; + view->box_area.y = (screen_height - view->box_area.height) * 0.5; + view->dialog_area = view->box_area; + } else { + view->dialog_area.width = view->lock_area.width + entry_width; + view->dialog_area.height = MAX(view->lock_area.height, entry_height); + view->dialog_area.x = (screen_width - view->dialog_area.width) * 0.5; + view->dialog_area.y = (screen_height - view->dialog_area.height) * 0.5; + } + x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width; y = screen_height / 2.0 - entry_height / 2.0; @@ -689,7 +696,7 @@ view_show_prompt (view_t *view, ply_label_set_width (view->label, label_width); x = (screen_width - label_width) / 2; - y = view->box_area.y + view->box_area.height; + y = view->dialog_area.y + view->dialog_area.height; ply_label_show (view->label, view->display, x, y); } @@ -881,9 +888,11 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) detach_from_event_loop (plugin); } - ply_image_free (plugin->box_image); ply_image_free (plugin->lock_image); + if (plugin->box_image != NULL) + ply_image_free (plugin->box_image); + if (plugin->corner_image != NULL) ply_image_free (plugin->corner_image); @@ -1091,10 +1100,12 @@ on_draw (view_t *view, plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) { uint32_t *box_data, *lock_data; - box_data = ply_image_get_data (plugin->box_image); - ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, - &view->box_area, - box_data); + if (plugin->box_image) { + box_data = ply_image_get_data (plugin->box_image); + ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, + &view->box_area, + box_data); + } ply_entry_draw_area (view->entry, pixel_buffer, @@ -1223,9 +1234,14 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, if (!ply_image_load (plugin->lock_image)) return false; - ply_trace ("loading box image"); - if (!ply_image_load (plugin->box_image)) - return false; + if (plugin->box_image != NULL) { + ply_trace ("loading box image"); + + if (!ply_image_load (plugin->box_image)) { + ply_image_free (plugin->box_image); + plugin->box_image = NULL; + } + } if (plugin->corner_image != NULL) { ply_trace ("loading corner image"); -- 2.20.1 From 27e671bff7df6310e32e640b7db91642ab31e84b Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 13:28:28 +0100 Subject: [PATCH 38/82] two-step: Add support for non center alignment of the (diskcrypt) dialog Add DialogHorizontalAlignment and DialogVerticalAlignment options which allow placing the (diskcrypt) dialog aligned at another place then the center of the screen. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 39 ++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index c6e9be4..0f79795 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -112,6 +112,9 @@ struct _ply_boot_splash_plugin ply_boot_splash_display_type_t state; + double dialog_horizontal_alignment; + double dialog_vertical_alignment; + double watermark_horizontal_alignment; double watermark_vertical_alignment; @@ -668,21 +671,27 @@ view_show_prompt (view_t *view, if (plugin->box_image) { view->box_area.width = ply_image_get_width (plugin->box_image); view->box_area.height = ply_image_get_height (plugin->box_image); - view->box_area.x = (screen_width - view->box_area.width) * 0.5; - view->box_area.y = (screen_height - view->box_area.height) * 0.5; + view->box_area.x = (screen_width - view->box_area.width) * plugin->dialog_horizontal_alignment; + view->box_area.y = (screen_height - view->box_area.height) * plugin->dialog_vertical_alignment; view->dialog_area = view->box_area; } else { view->dialog_area.width = view->lock_area.width + entry_width; view->dialog_area.height = MAX(view->lock_area.height, entry_height); - view->dialog_area.x = (screen_width - view->dialog_area.width) * 0.5; - view->dialog_area.y = (screen_height - view->dialog_area.height) * 0.5; + view->dialog_area.x = (screen_width - view->dialog_area.width) * plugin->dialog_horizontal_alignment; + view->dialog_area.y = (screen_height - view->dialog_area.height) * plugin->dialog_vertical_alignment; } - x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width; - y = screen_height / 2.0 - entry_height / 2.0; + view->lock_area.x = + view->dialog_area.x + + (view->dialog_area.width - + (view->lock_area.width + entry_width)) / 2.0; + view->lock_area.y = + view->dialog_area.y + + (view->dialog_area.height - view->lock_area.height) / 2.0; - view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0; - view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0; + x = view->lock_area.x + view->lock_area.width; + y = view->dialog_area.y + + (view->dialog_area.height - entry_height) / 2.0; ply_entry_show (view->entry, plugin->loop, view->display, x, y); } @@ -783,6 +792,20 @@ create_plugin (ply_key_file_t *key_file) plugin->watermark_vertical_alignment = .5; free (alignment); + alignment = ply_key_file_get_value (key_file, "two-step", "DialogHorizontalAlignment"); + if (alignment != NULL) + plugin->dialog_horizontal_alignment = ply_strtod (alignment); + else + plugin->dialog_horizontal_alignment = .5; + free (alignment); + + alignment = ply_key_file_get_value (key_file, "two-step", "DialogVerticalAlignment"); + if (alignment != NULL) + plugin->dialog_vertical_alignment = ply_strtod (alignment); + else + plugin->dialog_vertical_alignment = .5; + free (alignment); + plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_NONE; transition = ply_key_file_get_value (key_file, "two-step", "Transition"); if (transition != NULL) { -- 2.20.1 From d62be07815fc4830c5630c9b52a5b7ec08c62637 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 13:33:08 +0100 Subject: [PATCH 39/82] two-step: Make clearing the dialog-background when using the firmware background optional Since the ask-for-password or ask-question dialog and the firmware background may intersect so far we've been clearing the screen to black when showing a dialog and using the firmware background. This is not always desirable, this commit adds a new "DialogClearsFirmwareBackground" option to the two-step based theme config file, which enables this behavior when set. The new default is to keep using the initial (firmware) background when showing a dialog, which matches the non firmware-background paths. Also update the bgrt theme to use the "DialogClearsFirmwareBackground" option, keeping the current behavior for that theme. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 10 +++++++--- themes/bgrt/bgrt.plymouth.in | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 0f79795..53f19ee 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009-2019 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * - * Written by: William Jon McCann + * Written by: William Jon McCann, Hans de Goede * */ #include "config.h" @@ -138,6 +138,7 @@ struct _ply_boot_splash_plugin uint32_t is_visible : 1; uint32_t is_animating : 1; uint32_t is_idle : 1; + uint32_t dialog_clears_firmware_background : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -846,6 +847,9 @@ create_plugin (ply_key_file_t *key_file) if (ply_key_file_get_bool (key_file, "two-step", "UseFirmwareBackground")) plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image"); + plugin->dialog_clears_firmware_background = + ply_key_file_get_bool (key_file, "two-step", "DialogClearsFirmwareBackground"); + progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction"); if (progress_function != NULL) { @@ -1081,7 +1085,7 @@ draw_background (view_t *view, */ if ((plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY || plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) && - view->background_is_bgrt) + view->background_is_bgrt && plugin->dialog_clears_firmware_background) ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, 0); else if (view->background_buffer != NULL) ply_pixel_buffer_fill_with_buffer (pixel_buffer, view->background_buffer, 0, 0); diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index dc5eaf5..86c2622 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -14,3 +14,4 @@ TransitionDuration=0.0 BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 UseFirmwareBackground=true +DialogClearsFirmwareBackground=true -- 2.20.1 From 6117fe683ba704041404ee3462faf0f768e2f396 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 9 Jan 2019 14:38:26 +0100 Subject: [PATCH 40/82] plymouth-populate-initrd: Don't assume the ImageDir is the theme-dir Before this commit plymouth-populate-initrd was only recursively copying the /usr/share/plymouth/themes/$PLYMOUTH_THEME_NAME to the initrd, assuming that ImageDir will point there. This makes it impossible for 2 themes to share their ImageDir, which is desirable for example for the spinner and bgrt themes, which use the same images with slightly different settings. This commit also makes plymouth-populate-initrd also copy the ImageDir if it is different from the theme-dir, making it possible for ImageDir to point to a different dir. Signed-off-by: Hans de Goede --- scripts/plymouth-populate-initrd.in | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in index c2f46c0..109b649 100755 --- a/scripts/plymouth-populate-initrd.in +++ b/scripts/plymouth-populate-initrd.in @@ -412,6 +412,8 @@ if [ $THEME_OVERRIDE ]; then fi PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//') +PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}" +PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//') if [ ! -f ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2 @@ -423,8 +425,12 @@ inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR [ -f "${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR -if [ -d ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME} ]; then - inst_recur "${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}" +if [ -d "${PLYMOUTH_THEME_DIR}" ]; then + inst_recur "${PLYMOUTH_THEME_DIR}" +fi + +if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_IMAGE_DIR}" ]; then + inst_recur "${PLYMOUTH_IMAGE_DIR}" fi if [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then -- 2.20.1 From ee2025824af4aaa119046a9f9a9399d36792b016 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 9 Jan 2019 14:42:53 +0100 Subject: [PATCH 41/82] themes: bgrt: Remove duplicate images The bgrt theme is using the exact same images as the spinner theme, remove these and point ImageDir to the spinner theme dir instead. Signed-off-by: Hans de Goede --- themes/bgrt/Makefile.am | 73 -------------------------------- themes/bgrt/animation-0001.png | Bin 1579 -> 0 bytes themes/bgrt/animation-0002.png | Bin 1573 -> 0 bytes themes/bgrt/animation-0003.png | Bin 1591 -> 0 bytes themes/bgrt/animation-0004.png | Bin 1594 -> 0 bytes themes/bgrt/animation-0005.png | Bin 1624 -> 0 bytes themes/bgrt/animation-0006.png | Bin 1646 -> 0 bytes themes/bgrt/animation-0007.png | Bin 1666 -> 0 bytes themes/bgrt/animation-0008.png | Bin 1634 -> 0 bytes themes/bgrt/animation-0009.png | Bin 1640 -> 0 bytes themes/bgrt/animation-0010.png | Bin 1613 -> 0 bytes themes/bgrt/animation-0011.png | Bin 1621 -> 0 bytes themes/bgrt/animation-0012.png | Bin 1619 -> 0 bytes themes/bgrt/animation-0013.png | Bin 1617 -> 0 bytes themes/bgrt/animation-0014.png | Bin 1618 -> 0 bytes themes/bgrt/animation-0015.png | Bin 1615 -> 0 bytes themes/bgrt/animation-0016.png | Bin 1605 -> 0 bytes themes/bgrt/animation-0017.png | Bin 1581 -> 0 bytes themes/bgrt/animation-0018.png | Bin 1582 -> 0 bytes themes/bgrt/animation-0019.png | Bin 1578 -> 0 bytes themes/bgrt/animation-0020.png | Bin 1558 -> 0 bytes themes/bgrt/animation-0021.png | Bin 1545 -> 0 bytes themes/bgrt/animation-0022.png | Bin 1541 -> 0 bytes themes/bgrt/animation-0023.png | Bin 1481 -> 0 bytes themes/bgrt/animation-0024.png | Bin 1492 -> 0 bytes themes/bgrt/animation-0025.png | Bin 1455 -> 0 bytes themes/bgrt/animation-0026.png | Bin 1427 -> 0 bytes themes/bgrt/animation-0027.png | Bin 1407 -> 0 bytes themes/bgrt/animation-0028.png | Bin 1385 -> 0 bytes themes/bgrt/animation-0029.png | Bin 1348 -> 0 bytes themes/bgrt/animation-0030.png | Bin 1316 -> 0 bytes themes/bgrt/animation-0031.png | Bin 1245 -> 0 bytes themes/bgrt/animation-0032.png | Bin 1185 -> 0 bytes themes/bgrt/animation-0033.png | Bin 1111 -> 0 bytes themes/bgrt/animation-0034.png | Bin 1061 -> 0 bytes themes/bgrt/animation-0035.png | Bin 981 -> 0 bytes themes/bgrt/animation-0036.png | Bin 989 -> 0 bytes themes/bgrt/background-tile.png | Bin 79464 -> 0 bytes themes/bgrt/bgrt.plymouth.in | 2 +- themes/bgrt/box.png | Bin 870 -> 0 bytes themes/bgrt/bullet.png | Bin 131 -> 0 bytes themes/bgrt/entry.png | Bin 1431 -> 0 bytes themes/bgrt/lock.png | Bin 329 -> 0 bytes themes/bgrt/throbber-0001.png | Bin 1578 -> 0 bytes themes/bgrt/throbber-0002.png | Bin 1568 -> 0 bytes themes/bgrt/throbber-0003.png | Bin 1561 -> 0 bytes themes/bgrt/throbber-0004.png | Bin 1570 -> 0 bytes themes/bgrt/throbber-0005.png | Bin 1585 -> 0 bytes themes/bgrt/throbber-0006.png | Bin 1597 -> 0 bytes themes/bgrt/throbber-0007.png | Bin 1629 -> 0 bytes themes/bgrt/throbber-0008.png | Bin 1604 -> 0 bytes themes/bgrt/throbber-0009.png | Bin 1605 -> 0 bytes themes/bgrt/throbber-0010.png | Bin 1601 -> 0 bytes themes/bgrt/throbber-0011.png | Bin 1595 -> 0 bytes themes/bgrt/throbber-0012.png | Bin 1602 -> 0 bytes themes/bgrt/throbber-0013.png | Bin 1612 -> 0 bytes themes/bgrt/throbber-0014.png | Bin 1601 -> 0 bytes themes/bgrt/throbber-0015.png | Bin 1588 -> 0 bytes themes/bgrt/throbber-0016.png | Bin 1577 -> 0 bytes themes/bgrt/throbber-0017.png | Bin 1572 -> 0 bytes themes/bgrt/throbber-0018.png | Bin 1601 -> 0 bytes themes/bgrt/throbber-0019.png | Bin 1608 -> 0 bytes themes/bgrt/throbber-0020.png | Bin 1583 -> 0 bytes themes/bgrt/throbber-0021.png | Bin 1602 -> 0 bytes themes/bgrt/throbber-0022.png | Bin 1595 -> 0 bytes themes/bgrt/throbber-0023.png | Bin 1603 -> 0 bytes themes/bgrt/throbber-0024.png | Bin 1605 -> 0 bytes themes/bgrt/throbber-0025.png | Bin 1604 -> 0 bytes themes/bgrt/throbber-0026.png | Bin 1605 -> 0 bytes themes/bgrt/throbber-0027.png | Bin 1615 -> 0 bytes themes/bgrt/throbber-0028.png | Bin 1614 -> 0 bytes themes/bgrt/throbber-0029.png | Bin 1588 -> 0 bytes themes/bgrt/throbber-0030.png | Bin 1580 -> 0 bytes 73 files changed, 1 insertion(+), 74 deletions(-) delete mode 100644 themes/bgrt/animation-0001.png delete mode 100644 themes/bgrt/animation-0002.png delete mode 100644 themes/bgrt/animation-0003.png delete mode 100644 themes/bgrt/animation-0004.png delete mode 100644 themes/bgrt/animation-0005.png delete mode 100644 themes/bgrt/animation-0006.png delete mode 100644 themes/bgrt/animation-0007.png delete mode 100644 themes/bgrt/animation-0008.png delete mode 100644 themes/bgrt/animation-0009.png delete mode 100644 themes/bgrt/animation-0010.png delete mode 100644 themes/bgrt/animation-0011.png delete mode 100644 themes/bgrt/animation-0012.png delete mode 100644 themes/bgrt/animation-0013.png delete mode 100644 themes/bgrt/animation-0014.png delete mode 100644 themes/bgrt/animation-0015.png delete mode 100644 themes/bgrt/animation-0016.png delete mode 100644 themes/bgrt/animation-0017.png delete mode 100644 themes/bgrt/animation-0018.png delete mode 100644 themes/bgrt/animation-0019.png delete mode 100644 themes/bgrt/animation-0020.png delete mode 100644 themes/bgrt/animation-0021.png delete mode 100644 themes/bgrt/animation-0022.png delete mode 100644 themes/bgrt/animation-0023.png delete mode 100644 themes/bgrt/animation-0024.png delete mode 100644 themes/bgrt/animation-0025.png delete mode 100644 themes/bgrt/animation-0026.png delete mode 100644 themes/bgrt/animation-0027.png delete mode 100644 themes/bgrt/animation-0028.png delete mode 100644 themes/bgrt/animation-0029.png delete mode 100644 themes/bgrt/animation-0030.png delete mode 100644 themes/bgrt/animation-0031.png delete mode 100644 themes/bgrt/animation-0032.png delete mode 100644 themes/bgrt/animation-0033.png delete mode 100644 themes/bgrt/animation-0034.png delete mode 100644 themes/bgrt/animation-0035.png delete mode 100644 themes/bgrt/animation-0036.png delete mode 100644 themes/bgrt/background-tile.png delete mode 100644 themes/bgrt/box.png delete mode 100644 themes/bgrt/bullet.png delete mode 100644 themes/bgrt/entry.png delete mode 100644 themes/bgrt/lock.png delete mode 100644 themes/bgrt/throbber-0001.png delete mode 100644 themes/bgrt/throbber-0002.png delete mode 100644 themes/bgrt/throbber-0003.png delete mode 100644 themes/bgrt/throbber-0004.png delete mode 100644 themes/bgrt/throbber-0005.png delete mode 100644 themes/bgrt/throbber-0006.png delete mode 100644 themes/bgrt/throbber-0007.png delete mode 100644 themes/bgrt/throbber-0008.png delete mode 100644 themes/bgrt/throbber-0009.png delete mode 100644 themes/bgrt/throbber-0010.png delete mode 100644 themes/bgrt/throbber-0011.png delete mode 100644 themes/bgrt/throbber-0012.png delete mode 100644 themes/bgrt/throbber-0013.png delete mode 100644 themes/bgrt/throbber-0014.png delete mode 100644 themes/bgrt/throbber-0015.png delete mode 100644 themes/bgrt/throbber-0016.png delete mode 100644 themes/bgrt/throbber-0017.png delete mode 100644 themes/bgrt/throbber-0018.png delete mode 100644 themes/bgrt/throbber-0019.png delete mode 100644 themes/bgrt/throbber-0020.png delete mode 100644 themes/bgrt/throbber-0021.png delete mode 100644 themes/bgrt/throbber-0022.png delete mode 100644 themes/bgrt/throbber-0023.png delete mode 100644 themes/bgrt/throbber-0024.png delete mode 100644 themes/bgrt/throbber-0025.png delete mode 100644 themes/bgrt/throbber-0026.png delete mode 100644 themes/bgrt/throbber-0027.png delete mode 100644 themes/bgrt/throbber-0028.png delete mode 100644 themes/bgrt/throbber-0029.png delete mode 100644 themes/bgrt/throbber-0030.png diff --git a/themes/bgrt/Makefile.am b/themes/bgrt/Makefile.am index 4cb7aba..5fd40dd 100644 --- a/themes/bgrt/Makefile.am +++ b/themes/bgrt/Makefile.am @@ -1,79 +1,6 @@ themedir = $(datadir)/plymouth/themes/bgrt nodist_theme_DATA = bgrt.plymouth -dist_theme_DATA = \ - background-tile.png \ - box.png \ - bullet.png \ - entry.png \ - lock.png \ - animation-0001.png \ - animation-0002.png \ - animation-0003.png \ - animation-0004.png \ - animation-0005.png \ - animation-0006.png \ - animation-0007.png \ - animation-0008.png \ - animation-0009.png \ - animation-0010.png \ - animation-0011.png \ - animation-0012.png \ - animation-0013.png \ - animation-0014.png \ - animation-0015.png \ - animation-0016.png \ - animation-0017.png \ - animation-0018.png \ - animation-0019.png \ - animation-0020.png \ - animation-0021.png \ - animation-0022.png \ - animation-0023.png \ - animation-0024.png \ - animation-0025.png \ - animation-0026.png \ - animation-0027.png \ - animation-0028.png \ - animation-0029.png \ - animation-0030.png \ - animation-0031.png \ - animation-0032.png \ - animation-0033.png \ - animation-0034.png \ - animation-0035.png \ - animation-0036.png \ - throbber-0001.png \ - throbber-0002.png \ - throbber-0003.png \ - throbber-0004.png \ - throbber-0005.png \ - throbber-0006.png \ - throbber-0007.png \ - throbber-0008.png \ - throbber-0009.png \ - throbber-0010.png \ - throbber-0011.png \ - throbber-0012.png \ - throbber-0013.png \ - throbber-0014.png \ - throbber-0015.png \ - throbber-0016.png \ - throbber-0017.png \ - throbber-0018.png \ - throbber-0019.png \ - throbber-0020.png \ - throbber-0021.png \ - throbber-0022.png \ - throbber-0023.png \ - throbber-0024.png \ - throbber-0025.png \ - throbber-0026.png \ - throbber-0027.png \ - throbber-0028.png \ - throbber-0029.png \ - throbber-0030.png - MAINTAINERCLEANFILES = Makefile.in bgrt.plymouth CLEANFILES = bgrt.plymouth diff --git a/themes/bgrt/animation-0001.png b/themes/bgrt/animation-0001.png deleted file mode 100644 index 6bd823976167325046fb5759916e6883936461a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1579 zcmYL}c~lZu7{$Q^#a&RLMI$t|oMDkPlaj_Tw@eZ%N->2nDL@n=$kM{ea)enV3c{#@jVv}3fJsZ|Ffn^s98L-Y z!_Q=3_OJvP9$U;w-!DkR2-27wCLhD+vAA4j=6^)f*-Y+ky0p*IT!omgBBcnJ0Dmkl z2!q36{P9Q}E;wLKFcvqx`-cW|#%Vqi&*CrvSZwgW2luwqyTj~Re_bUrW!}U^Fnin0 zn)AH2!7OE_0R90Qi^b304WgJ$*Ljn|U~-v&6fTRCB4DL+k$7w>kB@ZJOU(h;d?3!e zAv5#;H__ODyR`FKvkm=PE@rTqd?Y1>!!r|r^AE~CiSPpeEIT7f-^EiQ`6pxd?b_;8 zP)82+ZH%haDdJqBR-j2?d2aAI%OPLofn`mD*4Ycj4)8pcaf#Mar9q26uB?WVi*F-V zk^Htkcv^63W^MK7VePp0u?6X=+S)af+FHJLj>+Y6jXg%A(K(Dz)mqwS%+M|#nDn}? znUdXkELYdwHA>1(%s5WqR+qm;z}tm2xuf_4SFQFIviA~F@1b711lgYkmrDi+1VYWd z5pqwU(#vvT_?{$>cZc&6u}cCeqzV;LHv)e3p+EZgl4UWc&!KZ1%iLo+Ks?|f z2v=fN)RhR1rc{+usNMHImm#-SzYUsB&~Z$>(WMPTt?y5iUvu>?686yFY`P->@y>W> z!EXTFRDTuKm{vaVCwH6^Ow`Ka;W0Xt$Z8hi04u*OTdZU7{D16qUALhJIr-CP6i1lj zJQWi3OoaM~NI!y6J=TSr2vj|Yy@j-Ve9?$6^fhH;f~WMsKsIQJ*YIqt%2tK$8=QG+ z-&%#yR|J%0(CC!DwUHy1(3qEKSdA(Z%FH$8S^n&ONlRw1hu@$gF{gTC?5rn+dm>csxL|Xl`!2A$p(()iK7z}!pYsk?G%N62gt4BRho}h zQsMzRsAvhvcjDX0mm9>%4s9$TigryF9O%=Q$h-t**T;5+vg>GKd%5?gLPLylRJ#(w z=aO3Vc-58WzNTiF8>+R7ZRf7JFm;7k>6KOaDf;D*UkB=@eAph=BpsJ@MbYUchh0QQ zx91M|n)5B2CtS%VvkfP z2^jgew?K)8Ez|~*NAB%6$;%0j;S+ysFQq&$-63DPvR5m$Rn>=py!g$+(bW~gfy=I! zY`CGu%42o+19OViw}=rsfmWQ~wycPg1UBB!LQ29!?;j?x4n)ZO#`I6{?%0(M*XX#Y zrTcP~#F@FqiIU(iJEukOPJ3RT{5?r{tPvJKC}sST1uX3I(aI{;z}qf9`r^0@COUPv T@C3yC*#RQMHj|n{lcj$H!ojpL diff --git a/themes/bgrt/animation-0002.png b/themes/bgrt/animation-0002.png deleted file mode 100644 index ef8ff54a5ba88688b91eeb3eba6753e9dc28a169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1573 zcmYLJdpOg39R4+z8J28?quXRSrOcfaV{up)l}pn>4NYctX`96un@gs2LAsGVMQG)6 zN~!bYx;ow5r8OH1549TVDOdokpXdAeywCH#@AG~?e|_@z1qVV6Ee!zxfMSFE zL$rukY6E@kWU$#^wE&?79b^E25qzna0awZ_v?Q7t5W)P7m_z_j2~;uxl}IF$W8zQ@ zdK~H~k%^)urIM-1%mfrOfj}lOPz)N8LLt!qLx+XKZZ#FoE@D! zQBF=MXBUK%lb738FGr`jBR49vo)t@;Fd~@%I68X$`<#)R%1f&G)2`3>B`88SukDoY z!4I?GfT%|Pu}b}?4rkTNJ66gpS9pSb^wC)Y**XzW>g$YCs(o~ZEq9f_OZ3}jSmO@s z;+nMW^$mGmo?|3@b=G>dSTgfFfL)$djE8Q|zo(|cGb`O;VidyAQiM=^*5bQqdXfL zAZnC0HSO{&Nv{hx2^^C5q}&W*tqF47>^p3Z7+t(Sfi=TmZymx4>YpIbO|+;7+VZB3 zU!_VGJt|s@%8o%<$mx@OH0gBcjD0TNG)hNPVbGfPoXQP=531f{*JL)~yff%~vRUC` zId1j}c*Wtl9ka$Fpt>!2`L`#wzs%XHS1RQBgm0X$GCQ#Z{=N3VgDc34lEu3+pV_AQ zN8StDLs`xQtuYH3}@RvuoWXbt zLItOx1y3`GvVSHEI!Dqpz)2aIe<^LBU~MvcUFqF1?Q@{9 zOs|M70@qHrn_TYDgl+MA{aHERzX+P#ig#fA%9;tgy4(IErXSsthfwieBgqA} z?eW%_4S~~~ZQiSC)Z0;Y!4>A+Xid(eBQs;(%Wg-Et-^oF|_au+8)%Lt>T&wrJf=sjvFXJiJp7 z5_vdWiBQNRX=XK%HG*;1d?70#2IH(?;Ma*B-siLtC3hx1MVd<0?|qQn(n_xb@GZPf z8B{icNq@^yY%0Xzm1-O}cQQ}Ge%4vI@WpM;>ew9exzU61<88xjL{Y6^0z=3BHG|ZE z%y~cRCv(&gK`Hu41$qQYOBkqQjy5YTQ{KRW*hcsAedXubuwu)L!(OLii diff --git a/themes/bgrt/animation-0003.png b/themes/bgrt/animation-0003.png deleted file mode 100644 index 205380b1ca8e000f19adb89243a71cd48bfa579b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmYLJdpOg39RAH_u~F8#teZP=lx?jtmvdHBqO1!tSu!kEcCpPAVQi%xMMA1Yom4I- zLz3jOIfhcAa?1%j5prL}=z4xS=RD{8d_SM}dEWPZ-tYU@SF)Gvs*hNS002PWZRfWA zAR5n)4jkOPsHl%1=yG=Y@&Evdo*xKs zV>b|t@py+#_6|7wOmNP1&|@&~@nSIP01oHy?AdI}L}$?f8jHcC@fmEEF#&gk!!usgp8y)r^M?IkLpt~W zH*Im7-Ml{YL3#0y@Do8{be^#%jmZHKz;7VNUc}e{0IbDr+g2}%ZdT@#WH0X}rz@p* zyp&MY5Y11=t05<$u6k#o{peXOF_CYsr)T!&DGZA@X+@b@ zBv8XDB<-<%GhY(Da}mze$90h@V`{ZGnW)XUWYW;ce)sFVOtHCb5SzDeIXDYIj*`i%OiWQuTrVUF< z@Yww15@~K)NQyC;bzbKoQ~<1o6+t7Cd`CFTZDk3bDjQC^d8W$KBR}yeq3qH`U3eFw z7uu*eth$z{^!QQ(*fh9TJ<8A|9q?ZBstWOowvVFDQWh&OVYA*UZkJ zpZjIN4jhKCMShCX78KR>+v1aCq5g5?KsK!HK*YFrWQ^gvm$tO>S-mgqs$-PA-^m3`XK6cFdHyI}BZ;6i5GF4bKM1s!hdk!=2XT-p7K8%D28M$9mmWb{b^r zK8nO_$Bg}Vl$GBcGr*v4(E=;3eb43VO?Na81sxuN?{kG}@ylm1!`L#(!TO$C#N;US zFh^HBV@45cH}8Gd{d}|^J-xb^7c>q_(Lz4x-SqlbRwNKKyg*D)$ZnB@lThef#%qs+ zoT*hX_3?uS_5x|i=ukYmOS>aJWRl&m`~J8KTdDjOeYGuJ_ueA4S%3lZxv{9gF{^8xvNFIV zq_#e4X0y#SdN^HRvR-W3J>JMdWf!_xK)cH%PFmCaqGo66_p;K@EOp$e{L;pbyrtKJ zw_7H^4zG-bR_SKLM+Bo!lz!tmR~W<M{<`dUMl-l%DyyivK6O{a9{eNClI5iavh~W6OKrTeI_8!hSn}(@s?hSI zFKC44=(wX=Vc9=zsb-y-IHG!0Ig!|8H)3AXJ*`_WThEnuAbZRU41KeOb%0AWU!#ol d5A3`Z2SJL6rEpG+2>kc}x9#L@GUtGVzX5+W%Q^r6 diff --git a/themes/bgrt/animation-0004.png b/themes/bgrt/animation-0004.png deleted file mode 100644 index 6038af8bd429a28118214dd308533e60107d531a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1594 zcmYLJdpOg39R6uTVQ%9@7wt)?7Te5a?aZZI3URO!B{nm&7_&_^Mr@TXqM}kW6FNl} zlHA$qFzFB}HA;(e=|V?thn;q&bIx-<&-e3rpXYtw=ly>E`ke9i+Xc~DqXhr}#A~;E zpbBBjy;4IpnMp}ADp*C|9l`_vZRm2V0oU_QRHO^bBben$jU@w!=y)0#ahOV@5lILp zgM^?^SqOS8n--tQibk-a$uu$(!K72;;>e8u&?X|592XhE?E;Y)Ldk7p~|Db?Ac4DkpUzU`|q>MFMZ~#(pLUhg+W{v?J#;yNEK(W z%(-H_q6dRliN?z!oK7AT?7ktP#q4%VGKu_M8E%$UBepVBw00w+-XovUs8hC8o!S63C zZ9hN~Iet%N3Y9ajt!i(WExg^%9Q~cmM>BjE;oGtTv z@B1qQJiV{CK6kdc|2cn;rB9E0OW<5rj`jW*j8<+nK>+K9 z{x*lZRXz`%MUQ`W=Kc|tIn*_@T9WW}Ge$=zl`6Jxze9j>be&fSFBJniMn}6rLFG9eR*qvwUgi} zHS{&gg0iDUa>}V1p3IxpS>ob49R_0L7GoDEKWF3SY4Qfe`SBw^^|MZWIaO9y?(cnu zAk?hjrHDQI&NP)2L+FMawQdl3o_kBel&kd^l5)G#wHHfwoT$h;KM7j^6e}Gx6c5J( zjulLCNn$Y{DpgxD$>!EdLg)q@jo9J(m(5mA?!`B*N=ysC#ix5_hBd9yy`R7EI7+I; z3KEaVL*)G4(#e2vj%Wej`=b6yhJZS4;fTXCuKbIrZO6 zviin@#zs52g=Td_e5LPU57$r|`u`8XSTLX-@B3DLpfRA$yQIU&M(q#&e zZMc_k0*b+;Rh#X8JYZS<$vww8VQ(_Th4HfYAsd9k?tHHoir;o@i9{C+Xi_0f0XAg&g0u|2eU zwb+7?wtcIhZf-47KO7G)^y`ymbIeobzWEo4!wR)hUzA1LKdTwiU!PYhlg)jMcFU`Y z!754elp)ACymEW!{HT>vAISg0*1}^aVa`!Gy11v{chUCuo@!6^n&h!ocH9{g-P>s< z3rg&6`g2YDMDazy$Px?Mcwv`58`5PNX>RI%-G|Mk-}h?Obm0}SIeVA78na3odcZuL z`myn=B7ulhksI`6kbLi6cpRm}!hgFjTa5AgEvbHBTj!2KIU#n=)6 diff --git a/themes/bgrt/animation-0005.png b/themes/bgrt/animation-0005.png deleted file mode 100644 index 7a967678a0fcc44fc8238e53a5de9a88d0ff5336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1624 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 diff --git a/themes/bgrt/animation-0007.png b/themes/bgrt/animation-0007.png deleted file mode 100644 index d2ccac920882325a265fe11365dcf170461cefb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1666 zcmYLJc~H~m7X1-IkTqCjNnA*wPpVOVSt=nRC`dpML1cHJX(A*L$R-K3p@1Z*C|i+N zl_Ca$by_V;Ky<1g5*0!AO$1wtkx-FENMwtE(qQ}M&3yMeGv}N+_uhYQc5u)k3sa;i z000*Lev}YBqBd$1O#cf~Qy27L!uLBa001-VjWPf(U$NJd2ZTORLSGh}0e}fS4g*YN zaX9o?P>>u8#QiKVhFoD5g2tWa!#pN=R|A#Io*bHvm2}u`JA7#H0MWG8B z01kt71F={Theu(tq0u41msMap*!8kBh=%n0x^Wu9oNx)*FTp z{e+C<|Mzsk5cY?5jOpc1K8A~8*$e?Hl+NMn5y0ZyGA`Mp0l*09Pw@(iGC6Z8Fn7eq z>g=hO!NoK7*}1SUU?x|c+kC<_=QB~MeNu_B7IoDa%rGdRlA&+|_zsE{)ax-Qm+P|R z=cUNcToS{~vs;Sp%ra$*qQn)#0N#D4QPbqq)UVY=)wAp7FzJK-rKP3+e&&#~XFg+Q z@j}HPbJl-S6+_u+W8Pl!lUr8u9XrlxdsAA6m(t?;<|gnsLbm7rIN|);zJyy3SMpV^ zd?3cSTZ*Syq*(-6o_&-*`oVFn+v&B%FyExL!u(X`A>|ty{Em5yX=U@KH8b;ZGmWb* z6B>k{^`jI&UF(EdO?*#7cx*plX=yM)YPhO}VUC)-vbLo{9gY=N&A2O$oX<5xCCSL9 zI}E>lK$Pz({>lgp2lJk9Z;CJ6W}pxYbjZo0I24Nx?3rc0VQH*-U)uJT+YCe7t6739 zvwl(qD7Bl(7j@-~Uax;LvX;TO)7e}X5H)#w6>BakX2jz@V7;L7avRw{yyyqf1!oCV z`B0`3|4gf!TA$h04wCXs;8y-_Uh@uL_|-MLm_5Ii7|zg!+Fo?4$N&Ho{ zZ}pI}gm#~>pv5!>6RxwZz9Y}Q=Zr~jT6T^RG`1yw7+X)g_2`P*w+*>)OcS6O&_yF6 z2klZaaJ_-b3dXw>F5F&uR&}K8WL}}&-Dipp?A1qxm)JqAL50&SxzF>hYJK?%&#otQ4v-KRxszyOumD zkn)1DZS~kj?qcRvPtrnK$nFB=;hDa>z9BsJ&)szqrf-~+Q*IeYYi7T+$q6))L*81e z;HrJ?kv*9aRi0O{;MDdz`ZWR&NjO45;6D1axU5&Z>E2JJO*YynE-be+vN`myZ#u2< zNLOWG)$iUB3Y=b-)WWw(*Wp$0;;1CLs3(^2GL^i7A6u2&6w*V-h@#O}+1 z4U)>s`J!|VxWzna04^o_l1S!hHt87_50|~1VX?nDivyF&VjwXCH|CSO6aHe7%0%IZ z4}3}hry#YaFAPiiEP5agg-zmu{zV#yi7t4e?!V!6?KExL0}))sS&E21NOVb;oHW|z zU3Fm@v&{Q#Yl9eps0o^W)ckt+AkNK@Y6z3%C@+24Xc#0MT@9=K{1`DAEz}`&o1a8~ zU6v?~GWdNmxVX@LNXw<&Cfl|#M;10CkGAGJmwkt5Eq2D)HPD2#yUSvwB0HYc3-!j2y|4-_p934jVY6ud*F*2w80;^NsE3|oh>?7wW zqdgaWs3o`GJ9ezZ&0Ngey+ztt_cd0ua4Wa^rsg@QK3)H3{q#(AScLwD0{%Whlt F$=_zH?q>i1 diff --git a/themes/bgrt/animation-0008.png b/themes/bgrt/animation-0008.png deleted file mode 100644 index 85849c8f8bf3d6f785f39567b2e58f6af9c03102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmYLJc~p~k7X88pVG+WjRF)v&w3HT=ENmevBy7skQ~^;cNCG4fvnLXOyJ-EYDl!$nkdEqaisbQg34-OLfbj>&hNc@&b{~C-}~#G+)dr- z;^gB50Dw!tpq}t$8w7Tn2!{k^X+fI)4SzsyY0*iio}@ z67k(aUn}Rn#>H7F5gqsoLU6dyH@AuDR?%}!OwVWV7yzBe;?f}&pN9#>F$H3b>xA5D zSifdSvu?-`{r}GpTtrgFGGvuK{tPe8=P<;WbUIgHMF3AAO6$Eg1Ay&PQamMNzhg!H zwojY(ZaDGei;`N8aD0us3&kCu%=tL%LT%;+v#Z|0Nws3PHQ{)eypHC5HEjcZ%k_a+ zoAE&8_wE<(DDe&6K~WPg;m$|=-xvRL-EJDbcJE;MLv;mHXe~OM&8B?enowVn)1nX+ zw=_*=_B5|AJ@X@4CfN&NA4`nh9f3s`j0FVmlKJzaw~XN(^&+$;{RaYibZ7-2I#1aj zk@@xpwj=)q7M>i>L$~`k=2Sg0$jb~VMC0JBR|yi0*lc1dUozSq4})No9aWCq1*4zs zrYt5u)Nugel+$71*n32jb1xZEsoO|u&n+_NQ(&>D1f(9_8!QSxY|yz;w5~@l5APn- z9V_oc-d^-06Uq|2x0pe)CVYBIdC78k{&oVa-W)8u8 zn|l|FQAUuT=6L380QRR%bwkjruoBy|GHr3uKw6`sY8A{zWHQfrXsVs30$*InO(J}* zZFTSf?B|xcTLnQah-{FVXECdhb9xLUbtNL5v!$u;z6f4$zx*`4vf`lvVT&@bY1nob z(o5eD|EN5=>eh(Zha-$>({e3NDDc3%jUeW`Hn(4DR!YHBA0>?zRa@NKZRWtvk?K1s zL46M<6*di%h2@g$9^Iip>alx$Kht)qPwzk};1!yqk^@`%O;}p4%dQ}wr415!YvDBs z&o@iEsYX15TJYN6m#podSvh{~t*!vrr{2O-j);3}Lgcx8s{N$$Q{?38lWIxkRj)4st;)ZN#XEGc-N`nfE(Z`qVOMQ1NzPCW+E+tGu=yGhUz%MTbo&M<%Nm`IVIZWt(+ z>sLND<5hCwded7bliugp>?#6ukJhoth8S98`$tcg+OCpnJ!({!gg~5KGKREmohH-1 z5{&uaz{JJzGtZ4m&Lo$V=x?9O%WBj^wMj$f73>J@X0W7q*Vgnik#jnONsk(Hh7*a zshN{?eT$q(U6AT+xJ#3q4wPyJEt4X}sHk6yX9P)=I;_^szC_hZK zXMU_O*mMQ`kK~ul>AGeq)U&baYHjm~_RZUuJVqX>Cg6Mlhqgr*9g$O4JN@seN|%XY Vb9~PAKI@GHk`k!#t+6!ue*vul*6aWP diff --git a/themes/bgrt/animation-0009.png b/themes/bgrt/animation-0009.png deleted file mode 100644 index 3e79b9bcdd7c337bb0de3db1fa15ea8c05e38917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1640 zcmYL}dsNbA9L9eLh=N#J8eUp7yW8R?lp%RfysTy^Y8F_KA+i7ou)JZSmANu=X=aDa zHBHOXRJxF+P^VNhGrO46)FQJ68q*ZaNyA;v&UwG@=bYzx&hvi%dULji2BDFTNB{uP zA;AIRCSvEt!rXKVQ&K*gV95{ODFgu2g1LbJ=cO2v=p!OWivrmkCV-1i;4*PPvbkJF zEKVqh#j)5T9G{cSO-K~Q<3#aHE>nmT^4UBdQ}7?x?d33e`}Sr&hMB4`b5#Kh5fi|J zZbY1$8xBvvy19`yc#uGR0(acel$k%5iC}Y?00@%)Jsxi{)jE@B@%JhM#+>O9*yNXM z(ro6m%_d2}0RF)`5G4HBMWmQayE&5*%j7Wu29M2Uh}a1{ECGz;3$gRmnWn&kxj?vS zL#E*WH`jq1y(#T)O}6dd<;k%erVvYEaQP+zZg^t)S&S)>52=;~5+A8r!vG!3$3s)znr{6Cnr~4w6k4jh7+Bl)eh7N<;1r&*qF7+bBkZ?m5A?>XQe)6mj|zLBaF5Bc#e`mNFt zMG8kh+PBB6PDlmb%PKEkuD=a`){gN~y;cvwl3>n|LmA8I+c!c!Iz~g6WYiPo7E6{7 zd&|HKVi7b~V{p*T2U9<~mr}Cd2l7!MCZsn}w;^efwESCYZF_nE%%j?OVcT!r-iQ(e z2|U-VaMLZ((Z)MgyPs~2wvQRsd-0Li)cdP_LVUXK14LQlO69L~I45J@EN*|+fmdUY z&it9-M-Ny8x$zMF5cF?(}3}#F=^4|?4c1s{lmZ13&Cj|v9MRaO&X)YzRmg#1!R^B`3-s83f z{-Pd6lyZiGZ?l^u!-vf7R5tYiWIxm-y_816XC|U@6FllhDBVwLJ#A)V z-vG#v5%V`kzFN4ex2qp3ziIh^_N$ZqJfe`H&mJyZQ`i`%h@Ve_dPiAH%Y+Be%stn$ z)MO3pL$T()V#bLxxC?5d%_ZW6MJ zZ?J}B-*4aB%X#ZNu<6i6f(Y>={=znKWqt9c#8;|G0wQi~;xPQx=4@T1U35WtV7SES z2@&W$b)!4JJF=x&vQ1EP>;`!Pfru-~rjD4apYJLZuXbo_P)M)zD1#Kq2HQqRlNlLS zr>>ctW|uV`tGG8KT_bK5GAml-i&!40PiA$hP@@g~XpQWr9i`SW-!1gt&k<9niMt@U zzLv;N=gt%Ij+9a&p)&n?=9kvA95k+u7SSAsHM{dwllEDAcmO(vR;fJc=dXKpYc7(&P9M#qz^ih?O zM}}yC<1J(}&}N)PYAdqX+qi{?xAxJUlf_#|vhU5QG$&H%*;&U6mp+ z#`rL}ZFGx%YQ>^AaZGsHA*bW1Z7&U@H@ryeGtNWr_;J;x#>#lt&bm|L;o*BbhQ|5I zn<|A?dmFc`uk=jBlf0rqE7k*FsT~*7MRyH#5$=H)&g5qA%yvbE?RG77q0&L`rR*&0 z_T>F<=&0nd1cD|E{#+%Y?TWZyyw;Oft-nOL`Bd|~*e85VZGB&&RBRQB-a6dda+%iq cdAHU$Pk2Da5jTWPn|?|lgd7@B?N87A3!Dev#Q*>R diff --git a/themes/bgrt/animation-0010.png b/themes/bgrt/animation-0010.png deleted file mode 100644 index 1f64875a17c6ac9bea646cbfc133dfe5013ea639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1613 zcmYLKdpOg39R9JHJ1fbxTFG?X)n&+S5lbae%w-K*tah^vEeb2QBbQSysR`9_=|VMK zR%gdlC!;Va*AmH*R90jpIaAMh&gc1lKJW9q@B6&p&wrn+-MhT?bwZaWJ(3vY#$;Q0CbHOTMalXG*yvqJg;EhHX5A@AY)hzD)JzW!H9@Laye1R zXc`a6rt=xBI9?2r7ei%GxkxUX#$-}C{~;ohPGwRe1+8FJl<8uWX9SN5U{Gir5{*V; zurM^*$DnhCQkcsht1+ zM4;>mfpa{Sy!2-{KZ;J}!U7@~Y!w1%4DMKw=|%tmj}SaP0)w^Figsp)dqLBq;TJz! zT`(Fpky#5e%OjUV!n8kyW!*LWp^=K-4999WkVsbB6G}h;mKHazyl9ytJ1G=Pp70!3vp~YH}he`t4 zGQeLudDFMaN6aoNxk^Wc`eDdRZTl280{qPp3!z$5<9gwD$SUg**LvF&Trnue)sUnf zOMk2ce2;40y&rqL&v0!!LZECMy>ms&BX?syAPccUf=XX&@)U+=)O?R=nVxLhQmp55 zX-zjV89bnIZszQ`-?O}WTfkuR?4iN+3h<1sskFfzbC+^;vJ{Rr9en`9-yShiEHCUi ziF&Db**lz4^m!dl&p_RGR#PqycOS)9J-F<1zCSn6tAv886GR2Z?Z+tHL-Js1utakl z-F(>r25euW#2^`PQwtpu_84T?rUpfR*b4s&nK2MPulix$;0V%s`XP>7ma`>*SrQj- zE>v$wVVry_Hi~}l3gJ=au67mtg;&6p2%Di>o}J(fe?`vtcRwg*4k>MVR|*Q99h6zz z9vbc7TOx~If4T(kfUGh4sezO85L`)nPl#@kL2 zqKG60*(|IK^Sct9N6JZT|Hkc>6Uif$Z>4S3_*)G>Y;!b+3<2M|$wPyfnHNWOIqY!P#O<&$6z4y6nJjxPt6Za4`ji&CfFE?AI)h%0Rr3>GrV1Z`=o* z6Us!58rjRIAikk}r?W_{rEz{dpqDkreBRPJ(ENJvLv(+>uMAS94Zj(9LPA`r);HGN zLTZtiKRD1cdcZg--PNj_v)@}or@`79#}5r9xD5q7`zLQnS4Oqhu(UT(vjg_hVqPMx z8%BYgd@5swN1G%In|(IgtuBSYLsPr-VlM6c#(!&OdHhE5vGnNrA?TT+(-+e!z-vr4 z*RxbSD|FD?OU&JE+#F6R6wl$FI61XENvzAy<`Agl%IN`?0Eus!{YVzybX?(?_Uw5) zMLT`+v#8nQFp-wrmmq!0$SOobX`0Rt{igBt32ze5&ELCV3tgQS?edE2C|Nbuw5`tV zR>%1Bdz%zZIsR#t+c?w7U*6Gd?zP;^omVUXU4IBqxH=Cl-Uoo-wac>>PZs>1eYOb#!Pi zbZBL5WpgicaA|ICWpXcbaA|ICWpXZJY-Mg_VuH;C0000ObVXQnL}7Gg05UK!I4?0V zFETSAF)=zdIXW;hZ*B4#0000GbVXQnRB3Hx05C8*FfckWFgh_Y_1G7K00008bVXQn zMsi_oWdJcTQGWRT0000HbVXQnLt$-Ya$x{NVQpn{VJdbW>wx zZe;*rZfR{{bZKvHATuy#aC0CJiliLMUe=XYJNLD%eqvkgs!jIWp2pcw zu7<9q=zq9bUIZ@y*ZaV3unXJ;-k%A61SsqrM^NJ|qysiPC%DDbYe_M}{=w%(v7CEo(sGq{ul-2Vi; zM<;HosAN0a9hJ;%>r3Ey@F4Jz_!pRjL#R{FTDAKoAv|j`lCsIjPk@tjb$2Rf-DoWv zNr2sF!E3+(I+J?^+rWTM{CVKi{|)TceqgtbfhT~8w&LKD-FOFl3qCWZ@#Jd}TmYRN z0SWFwEBFf->>~IQ{0e5AopL6D&aih7ybaz0l8J=u(7V`w$GP9!H1@>63Icitq=J8t zt=fvk7vKzbSHX539C^nk{1P@FfRBI)kICX*HI{LuNfz9X)j!vE=YhR{6Y#z-fOFV- z1w;Eh8;V2r?AC|iQ{eeZ4(*%$3u{TFeHy9U08Y71ynidd48EZ{hiwS1Tq%XPhppA0 z0=P=HLpAoj-KCZYTjxS6X$ZU_4rm#vbj@7?$r)z{5n@y}x{57C8o z{q0ZJufv^o$<~>Sl{j!)38?cPU`Jr=T5@v8*U$v!m+j7+{4_V58<%Yc$i_(*e(zQ< znM6wj<93$`ta2u4H{fooypv_8UrLy4PFCdJ5W#h02@QFt~9AzIaif__fEaTml=?+ z>ny=pH_}0pQdjjoK_~ka;MG>r=e3+^PcaKCyp6(yeCz)J8k(&?v38@q0q~`iio!8E z1df4wkH!4tpRmhw5yw4S*Ct>Gq+E?pv7e`{yb{|~&fY>7To*cy{A5{2yohk!g??Hf z1@9ShYHgXXpK~DhYL1|@1OB_UW3W=S2`U49Y=C;jEZe7f8a}+JV*~$%GN5x1GN5Z) zxt~OK5nwoH&?TMmtGWO()QF9K;P1Iw#Nf!xQF!1A@SfE9E*Sh8@VCN;%Cj zOW+1Nhr5w>;9dezSQ)YhodXBaYf<*Fa9B;`4hd}6pksg0VcRI{@P#YTLPc+(KSEY* zh2Fo3Bq6^HAE==k)Po0jbx-U2jNzkPf=CK4(ug?e74yi&bsk`-H3nn zEqb!4ig diff --git a/themes/bgrt/animation-0012.png b/themes/bgrt/animation-0012.png deleted file mode 100644 index cdefdc78205460aac77e50eed3ac35b2f2c15456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1619 zcmYLJdoCghqC)<+b5c0uM^X(cHsG2}MetYtU0XllZuI3l^E3$5ExE~T5K z%ch%^FG)7jgpbBhs0?4@_F$3m5r|ZXTW}43qxd0`x3j^z5b5$p8xF`Mb~<+WV~@ptkhaDaiy-L}SFMH*g?lxX5h= zsbm818=O%nm$`Oq2q>B^iXlWYgA5QDR62n}Wik*hs00=pVKA5l8jKeWd%z3H$^Y+k zM!EZjv<`r>(XVhWkw#`CLI`vgh~Q>ydYQQs06@nAaGUmq>tvS&GD|~Eaz^xmZ(c6N zX=T~w+l`8_d<_>{hRq@!~^nAwKC=n*M}dA z^L>3bt@t&`@SGT*_sKiL>7i$Chqo=WDTTG)Gc zY}XBo68jWiBm5?9h!;tupOQKqo4J~Onzar z+hlq82QQ*uM-LR+i4EQG!Sy(-E~sjkrqlZRR6l0Hma~Jix@%^7{Ct<#wCDCk_+Rxq zUsQ2wDdT*s79}&+8{+9YYgRvhUL>#|ys%RVMU@xq@ayO`KO-`IbnZ>Jdt?DZ2f;Ix zrO0b;hr-3J36SrpqRnwzw0PEsHofByXJF_Ox1{332DQc$Kk}c+TD8hXP%@7=)0Ai1 z75I$kS^Xmh=^9>1II@-+azP89k=k-~%7KgAF&aIo*Juzqyh4v=1oiRhG0m_HM%^*zkQAhcveAX4zO_|N16-$?2T~ zUDL^hZZg+zlPzZC^tP^P^~3I)Hmvcvs%C}LwdLd|mNw5A zdn?+6FPf^K)=Q|u2lBkSUhP*B>HIQlNggr(aS=roWgV#<>z@71MtI7l*HZQIV)}R$ zX=5>_an_U;UbN{NwB|@#iD``54Yf@EJoC#GwMEguTQYCvWkaDs8suJ=Zr_T%64M>^ z6lxtA2#5`pt%6mW@~>Oz&QohmYtWFE^)?A22~A)BkP$LJSp9xmn0wgRwYvus zMn>O#$@{t;=(6bHwY68Q?#s4#&gLzcoljG~eV}W<>TJd>S(5vY>K&L$$&X6G%m_qm zDX&Jc@_i)(2Qb-01NJ~^c&Ek8vH|Knre4e|XSl=d{M&eV;YCtmu%Z}{MRh{JRv zN38zLrBKSb+C+uU1s6QY_tQj1NK&x$(d5^)(uR`)^ql3(Oy*;fs`BiyUAKkv{>@Px zG2848v?BQrL^QQZ1!vu((^UFv?y4N&vRxe)<6CV1{Cn<11wz*8Tw2p!%!*?2=Y-1L z%6;YgxSA$E2i!W!`8y#pYn#AR{GiS}6kw?pe|Y^{bclU=etoRHVyBV}k~S0+3w)Q>(SlJ>DH z%JXaL4w}+)YEO17!8cuhBFssDdJA$;2*rEc6_`2boN6C;GV3*U2ut_l35<~m5awl< zpV}doYYQT*_-DGDXAj2@9A5e;`uUrh+~RwEUWBp1&pP^SkI;%eM!|v&GZH4rgP8-n zQo?t1F|6;rZS<)r?5W4sqtzG1HO_Mj6!=T?NImR{9z$GD*t_ZC(27ZJo`2h&-D^!M zrCxcSW7qSgN{W@$oq#(ZFeZByYhIuz>epAQqB*76g~HkejW$xXLG30=5L< JZu-S#{R<=3;bi~- diff --git a/themes/bgrt/animation-0013.png b/themes/bgrt/animation-0013.png deleted file mode 100644 index de5aa6ec0cd0e46ab5e254855ce0ae1f01bbe6e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1617 zcmYLJc~sJA6#cQJ;hI^vFPW($C0mP7(uNs{=7dvJYN3!Dn}C?ODHk!%)#j^J@v=%`2zhY^Mr z3c}Fgks>so9nay#iXzaW2o{GWL<{+mTrNxSA9{qcSzKml+H*Jt|JgJI3DM-HRxHg;0cW6umB8(`14`$HeKQhP+RUiZS228zoUL|Pb&%K{kONDf03$>TcWF-Q19N7I2c&|tn`*aL3J z68!(C2WCAb@S6yfm;MNk4`Z{0jx+{`40<0Q^!oqnlK(v3lK|!nFjJeh{2J_65GOsv| z^Nl1vFQvj-CTgFngg}f>Z0ls|E*HMp8r~9ac8Z-H#^-9jTVJ#t_>Um!{ z5BWT5HmT3A-EtU4G7N#YsG1L#L2Klu)YPg5qx&%JFPhym<=Z+a>)O~*guOo><%KBH z(@*KNhY%I8=~P6m!o(gb9yFLS(Czf8`TO)2qd(s1;8FF)tDVzzCZ|##s8;X|ZQ-Mo zgw$ZUjd<9BkGue}dHA`>(WLXK>wMO6&E6OT`W#N~)arf=CYd!H(f=w(iMMUc!6Lq> z&ncAdbPE3+4%xj5B4xjFhY_PuiAFt9b_esOT&|qNl&Ts{6Sfe?;gwUbd#+3?-KA?b zo+v7CLda*A$pts7JJpH9_C4?q9;usCS}A&>Ks4m$6!(1Y@dR~wgRw`pQt{Be1e4E# zp#pm(=4ZYe-s&NXn0LFC)|i>Kr%I`X4oU{!x&boz)=SQ8FL*4|gljB)yOZP``=L|N zzqnWR@~C7>jZK;wICwv{OPZT%ch7_bIRr&tUhm>Mn|ldzeNXih3bIZ1B}a+0>ATxE zH3v`ZCayua#&l;#o2wq(Ni=9Hli5n+wjUD@#)h`a@CJDo3U`P#Ci1A9Ps72b%WE`4 zN8F^P54*^lVJ@_^vht($$$<%1Di>qSF-PCCplZH0R#D+8dubu4=--!N+cK@R6t7_V zoQ~&Jqv9@)9;I+$mvZv7$U|3){nB?Kx}NsZEPC;)8#mPXa(%ygJxgw_?1NNo&5z?Q zwO?voh7Lp(qFm*L7f0M$5D}r*4fD)8*hWXbNqe=c`YI5}mKe2gFh=l&`ss89_U@l2 zwyvA9B24J6R-xilBy%bd@6Z=JCAZ6Imz;moc1l{V%~Ft<^6eTuj8*^bH*OXYA$cQr znYlSZelLWsTL@#xt8P9ha{9aihf0@BG-fru>lnMbJ*l`aZ)yIs=YMIBa zj(S|gy+iGW2pgYi(oyrQn~K^hWvFk{KvzLZQKHMNbHefL-zV7p@ONT;YKkVANdm^8 z^)GVTXE)KGZcsiy%lMeKyZy;rba;Sier&w)_^PyLK{o>1iYDFZi^L2navDn?+i(Ed zRzVa_AwqHDEpEK*qzKt=_{y^>dtDfS#^M>lirPY~)v8NF zJDMj@P5ineiN)RRR^tTin&Ojwbyh7go(Z$g|2Vc++KrA((&m>n-`AUOb|R2`!UrA9 z`pl{)kO#ZdFE_gl*pk>?Q*A#0)KJ0FENS+IU%}0wN7hpEd$~!AEf_61HReQhT z+u7;s`tLNJA4*U^CAK6ZE~`J4gnZy+LNffU2#KCJ-3|*9Z|u8huI};dvT1F>tzS#e zb+YX2>&J(hOH6seL(3auj4CfR>JNu$>w0cv+8%rR9nvzA(M#`>n1Lq|pm_U}%eNg) F`xj=u(4+tW diff --git a/themes/bgrt/animation-0014.png b/themes/bgrt/animation-0014.png deleted file mode 100644 index a0199041fce991f918eac5776b9baf7a1cf10287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1618 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 N002ovPDHLkV1n9E(TV^7 diff --git a/themes/bgrt/animation-0016.png b/themes/bgrt/animation-0016.png deleted file mode 100644 index f72a577c023379bf99ea2b7fb77fba843bc9e37c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 zcmYL}c~FvD7{)(EL=BTPP0Es7D$`iR%mvd*NVBY@92%E_4krKcWw_!5I4Cv>rWemE~fUFO3fZ&RCoq z28Y8q<54)A$7XjAtTUH0w^ExyEM^WcIUs<=di*{(S5|WxO6wW?yGlGwYvNpcS8~F% z+OkD$hgOQG0l$I9V)5#yZe*=#zG#voz!(sq#V|QEK9d`R!eb+2c_@>2Y1)9Y%|J;s4Yb6wW5oqM~`h35r6d<5des}5W%mT%Azd|Fg?m=oetf1lpp{N%9I@?C)!e+d` z5b9BN^MtI4nrI?BFT1YBpALQ^INSuE!cl!vbkb`w3sMb3^T@5tW*%%GL+vsnIusK4 zaDbio3+fFK2v)6sL3UOITXwKyKD*nal?o$dRn*AXAkFlaw7zgTsnRyUvB)=jjjQTL ze;DksCi9(@lPK>sWCW6|>{4ad%@g{^)b$yvR;mJUDti=pzQcHQJv;2%T!Ry{(xu-~ zhPrvSwHa2YFlr%q(abZ7?Kf;H(32KbYE;k6UUf_2B%afKX7^tPe1~EM)8sV)KT07{ zcUPE;%-X|?TBM&8C-YYLFU9N;C;jN#c;ds==+KCtOR_L#PumU-&ki$QSueRXGkLYF zJ@`Qg*WQ9GNrw*=M(qtN9ymEIdQsKb0MqAZZ#?LEZy+_OYJ#zfBnVpgT+~9JxHI0< zTXP2?8RN1;4o!=&IL*(DGnYrv-7gudTL_UC>d}VcRJUH`xPvN`(fMV9k$L0&sjkui zlW{5QZCQA#^U`f3HVGkr1!REmfCa)Q7>Z%X;E#IMN;{{6cAlh&i%3Ffs94Pe33Kcsz_?HN-C{7Fb0!6aNS&&PAaiQ7M-z;!jza5?;<@SXd{O|@4pYK~y$CG#b1 z#_069k=;EDw)+;0J-ozwhK`q1-#b1T`Cz}Pi8!lH-=vz}IyS6ZAWNFq&zVfeRNou2 zw*}6XkG?+Rmt3HyQ}&GxE1^x5|FlVfQoera-v7c;<3;kG+(81?c2y8Nn&j>orfrZ? z*w=xm!5X#=Da=0Q{47hJbL#VE-KV>V)@D8q<;flP0<&hLKwCO1i`(W%%`uu6I+T82 zqjUKVax;Mlr>;<2Hza=@nA7==n2VdGmDN)wL z!Y#O(09n2j(56|yA4Y7k&-VH#ZIw62oLfe$`Ky9{`!+tx3Rb=97e4{*`f=;udt3Te vvk7-xn%>0@ZOgjY+gP$!e635U2Gu4#kk=Mgf0fpzp2i)U6giQ diff --git a/themes/bgrt/animation-0017.png b/themes/bgrt/animation-0017.png deleted file mode 100644 index 02926e7137b875d477182dacbf0a3f457bd34ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1581 zcmYLJc~p{l6#Ya&DKXS6k6T1m<_1VANn>ibW@(1Gz&;09bCi)H*;(sX0V$1AQYwKPHO-;8M731}>G!X44XJ z{PaXzG84q{SUGHN2AF~aQy6RpAIIl0IUGj%f9OnSF*y6_1yA*$DD$N#3JqicE_eb7 zMeLtj~|cVZq;(D3DOL{uaZuKM1p&>b!-R3 z8830$Au62)`~YV>o;cr4+5?GZOX8kH28RLAI7~JTWO6weB0h=7$E+ABfDEQfhA?PD zM*9DMI^*2}sb4`zHu)Z&lgMK5F?(oi9)tkFg(N&@?f?LK4+1IP)JWt>MaM6DebMl# zi#la?_SgM*zH+%D%-t_mI=wCP+6K<%-Q~-pXxM;)VO?K;$kh__q+|=s%(rns0>B@MxDx<>XxrTDn7Nt zKw|M*wJMcI&^lX7V%ws)p=Vxw^g`{Cs6r53`Wcn-dKp)w>dPh@9~hN+!N4y#{WAUA zCgY)7ZH=VKuz`=(Wv8C%iuN~@#N=*;aiu+iv>~Z+fZ=q;TCK}vZ6SSwe!KO~i#^DX zHSI#u@K~+t!(BnvV0c={`9b8U?M=(~@A9XDq`6gRlYbh^Hrt7b-euL7bgImt#wkWT zsayE4u81nY^1^X?oq-RZh!ql|=tk*+U-0xQVKU-+!VMoJuiHMjet$!;scdMp`T4uR z(?{>(5HKlh`}hf4P#rc!>l`Wu2GiVr_W2C!QZKlsJwJKSvgMLYHZNbR4=NHhftcc) z>HBs;M~df24(FOvxN-ZP(%9Q8DfX*XsjT*jE3zFK=9e|`dS^m&mOs-8d9kG)?Rlnn z=&Bvu$0|GDs?YOmi^dzJ%$TbRxs^0h?`3=(wg`9IxN+cKz#%cqZJ%uYn~C)Y{)#Zm z8L6mia-YNv6*oJ4D0f)(P0Aa5CAK7@;dG2$m^aZTqRv)=NNljaP?KqFc3^#XPvi5` zs4vGrX3XdX5##tKk2>QctfPjjlhLw>*lm88cZ=fp?#((c-KVnAyC0h# z3A!RG62=#Om9?{E}#uPl)>_a<5BUorNMdkn#Xf$(`U_{Cx3Ha z_Yd7Z$Rxm9Sf!0SL1{PZJ(kJubuE9^3TkWy2K3x{T)kTTdu`P~&W&xTCkk<`=rcwX zIv449u;hLW8_eLyyY#s5T12(SaF7BkIP0T$6KC3=sdSAy?)XT1wJ1+EvvYK|P()s% z#ky4-b&!0WEr{Q{v&dB>`HYHIw)VHJx??)SX{6$X9(Ro=v6*Y&tB2F7kG^)*@wZD- z>WyK)zM0EZS;l{gUci~mkEj+Jl!>0hy|X2NuLB!=PT2SQGi%3f0f*F4b`Tg~ W=68_kkLRFs2L$@=qSW{#6#NVJGszkN diff --git a/themes/bgrt/animation-0018.png b/themes/bgrt/animation-0018.png deleted file mode 100644 index 667cd7d4ad375878eb731326ad70a12f5536d389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 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 T*Shb6w+?W2baN;_aZ&IujE2>N diff --git a/themes/bgrt/animation-0020.png b/themes/bgrt/animation-0020.png deleted file mode 100644 index d228ed84fbddcab44ada03bb79b5c3d842e58a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1558 zcmYL}dpOg39LIl{X(UqEak|X0I%;LNVkvhuE3IiN5+=5pwi%lZF=j<_ugB^Xq032# zBAvNkN<7K6W2$l7PKPpCGEue1{f^))Fp z`_J(v>LzYx4*t~##*z|k7p9}To?q(9cZ&e_KoemwZS2Tm$h+#QK1xJJ31VVmtj6oab#V!Vz!J66f!vo(p0YF_hm=T+8YtQ_ z{1@DY{P_p<{RD6eJbb_O=RSfyfwht9Yi%h4H)~`7%V(4vwd?@i$lRa= zQ81ve8p}ZB^DDGjLJaAr?!@A`-^*ipifycwvr0#f+2(4ZQI1y9K-Y3hJi6B5^p^aM zAxp<#kAli)+Dq4Y$&sekkVjmi2&q}3Ri%4tMr!o6OXQhxvfMzB>aKA**{+PkKk7p2 z+--Xk_;eWl=-Tb#Z4zR@d6)Zrx;HNDG#u-QB|9ZVUOt0Qzl%ee<(~FVU!x>{yI7<< z+SdN8F|9W4UgX1GVs*cMr%(OY25E;f1BVv{oIoU&i6TgA7sU2>-S>hWvpzb1d6!<_ z50i?e3eDz8%{eXy>5;IbG=v|K?7G}jfB((kWzO!J+OoK$q!$$4)oA%E=uj#B8%e1w z4@x~81&1Vl=swnvl1mud;#)i&MH5BA^K8TtqT+lL4q|-0?CRTr(X6~&a-*}D7Qxi4 zGQuIHIGW=N+YYS458ionBVxB#HTrBcP|^aS<1&J;1UEkg-hAolR>WO z4g=$G?H_iXqr>0CX14KP--zkyz)}Fc$xyc<(fFRJ%$*ri0X;mqE9ddI{##x-!)vtMIJL^pHHU_#4@B)V zs$$75yu4#)Ty3Jv3!NUkS8W)c56%wSP9{NcJhXIU%TmIVFNd$7y3WN-R|;Ds3I9CY zm7OUq2%YvxzaCfGW8iF&`s4sSWMvP*(nF*n+(wS8eF zzt{AGqa&%Cz2X27?)&^=liTH*^|6$^)}aAVVThquUznPmO|o2v2?o^}M9EEW4Z94F zX(~*P89$kMR&U=noj&28@hNbww_y}g+qD=8g}iaaqGU;~d#|aB!%RsNBk3Q5LB3!+ z@Of|vnsc|a%Ti|#A|4jg4LPjWa;`z%uwajebHkNm?a>2P;z@CixGH;oF_j5oWA145 zllb1mc!@J8^Hr;eF~`V&C@xOxAr4$evLzPz ySzG6V*gSPVFW)9qI+07?IazBPQu=YcWXU(fB0{)GIKHU**8svnqI0n$CGKAn?7oBm diff --git a/themes/bgrt/animation-0021.png b/themes/bgrt/animation-0021.png deleted file mode 100644 index e7bd0f5ca29b11e6f3f14f5b14ffbfc53dc2c6f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1545 zcmYLJc{tR09G-+I$6#fm%(Q5Vn#-1PlE za%@|Ol2T|R_cc4Dk(FZ_=VbS%o_+TFd_Ldz`M&S_yx-4XpQPjNPO4jVw?ZHgRiZP& z6GX&DD=C6ECp!8I2+AyH3I_t&rnS+VAUE@2AZf#O@ZvfKhXN3E5R(p|LxSmaS^%08 z7Jxn%%tf<8qv*_VZV;Lq1keEvn!^faFo3ZC5ak~VFarJg9r9olY$J+5;{p&I28%~y zv1ptr0*kdcXl{Wqg@rs5fF9_Eha5}?AQ+6r_rhUEr3710Q~EYa7!4G0*l1G4VUW|< z;EsS)7!C3rP#BD<>`y!i6ty=*QUJgJAT&lWoyHAjG7zSivn&omeVh*(v^ET$;DkWf z|9_$|X4a%PB2d=+79JH43UCl48l43q1dGG-a$qJ9i2N-g!H(>uoY2>icESOwFqg|F z%csZ-d@~5!9X)g$bx^LdkKT{Fu7S@MF-%)-?*evwMLNv!eH#EXHm|C9Tv6eEVyR)a zVFWw{B_$=h?5ntyi&mYy$(2s_C(E@C>jF3@-_ovV*T9`=$>}eyvuE*xBSS-a+T5>^ zeUp-!mClsRJilt-NMNC*mDO;v>cj`XD?yf)=s<#q$Aa0X*J z{>iU~7EcIbw4(9dGkpjAZK!7nYEb;iwB%BCIiTl-fG_9avAY&lEhD+K}xoB7#R zC&$3APV;`aigAcY>Uw>fNiM2hyM8;O2}N9*s1lZ?NA{xxYVTi(pqq%TCz~hM3>%f& zwK1nC7R!u1Pz`65i$6SHH$V2muIQJ;ZF!hv!Pt7ehj5_MM{@w*n<71YeXZTcTD<)a9DP z_4?wa*xst7C#_E(lEp9Ht9gZ~gfgGM3v1O)FZ9bFRYM_PUD?4@T&m@|lN$m>)e-bu zQd4R1u~?lQ8T}?vuyIYbj-$Mhz~#Nm`yVu46o$;XvCJaxW*>ivZ`7w!4kZpPn!MJ+ z1yY|qY!mc-K-vxX|C9O$H=qdajGLzT&H&yzW9o+5&&8JU%P5!)xrH(tlcJF{(nZ-X zeqEb>176zWRD4n&j;&OHD;7r0*NoJc39kb?@AM7bAd2+PUpk|DUUG~7Hm)j5=$Uz+ zaQo_-__a@O&DS@=I9pGrpzJLgvk5k-oF~u^iy&36Ei^)yi$5$v_obXOUvJv3YU-yJ-qu7^K7GG#BXV|50 z*SL+RbQAIEH$FnV6X83ACGKgxFLd-zn^+*3|?C{(agAHk!}{#NDB-)^g=-0l--i!u35hHnA12ciJy46=Ow{9_0(P$WN!jMqUW_m l#LTP=R?h|}IX$=}Q}60dsL<_peh02H2+_fvP-*YS{}=dUzTN-; diff --git a/themes/bgrt/animation-0022.png b/themes/bgrt/animation-0022.png deleted file mode 100644 index 4c7728223e991497f28174a8789626155cb762be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1541 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 diff --git a/themes/bgrt/animation-0024.png b/themes/bgrt/animation-0024.png deleted file mode 100644 index ed52d3d40d594dc4ff4c0f9b796b3d0243a9aa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492 zcmYL}dpOg39LIlSN7EQKGMPeHa@eg4BbQ7}LO3U#6WQz+W3$CMk6|s<{;* zHJ2h?i5!=-dJ^VV2?xn7PVIy`Q_p$M^L#(w*YmvJ@8|vf{Ph)id%CKx-?$zC0ClPx z#YaKIwSlQ9Zhl-`P0vwkW%jQH0LUDpnkPY&2d@eI00_6QiD>@5|V9=AFLKRi$wJHit00Klj!5T*( z;D{tc0)f24hKwhn!oD?FaG^4!{2Vd|`zzQJGw2+$&!Y?^?{i7+JLk8=5j8l%aI0BSAZqu3DS z{r{#Fekav$S)j0y-^ycySs>rgm&WEQ2oQ+Y$8*sZ003oCDNcU=swsaAMxdP3Qe(Q8 zG@JFHNL@>A>ko5ZF^NhDB@^w)Q1jwjOw^ZWwqGTrfTnXXcJ*zIGYb&|_3Xi;H~Y71 z)^?ER7B8+oAH6gx+qDdCo_0>Vsngz{y_*qVPtCpCQ_IAjr}_oO$Alfrn!0i7oH`z( zhpdPqTW3qc4|N+l2UeMK+}Z*3*DbH_Cnq#PO12!51=-3dlULvFxU|QFM@^HR(MjKg zSr@#S!R_@xm>D>tAtQD~%<#***aFc+MvVm`(ZK7Yn@8kr+oUTb35cMsD;KJIVgXat zB~PfH@dzp4N!*VG`OV!Lm^Se~x@1#OQ#u4@AlxsDZk5ed^-Wj6TOfK_(EE>op7`lz z*=`u3ywcSCFCdzZyaZo(n1^_p1MN1CEb@No-c=`!Z{+cc2P_sqx~L{*+{8KidRMFP z?fk6!d;Dd~t=CK9#_k)3yeN2QWUn$(Me>|zum4{+-2XZ zkGADab=3{5z;p8Il|wJ1-s8p^d0kY*$ugz+cU_MYW9Efn+-VE_RZ~?-YGQ8w1 z3s<`Vq>1TPuU1$3EZ2NkUnnO3I`z5IN%}i{BnP#cyPB1EGF|;Q-9DoeNHrH|PJ-8p zyPEam=kH-F{?da{$dLn^qCz?g?oC)WSgJIH2lr)HAP<|*nl*0F7-w)rPBDLreGSyK zhLUpGEd?N3&$=-;c6f16n^eR~&uT%pCerZpd17HU9GEfNnW?5#Re6==y(fAydYFXS zmwX^!_#xvkc7kM@=M>;^gtb*W$*DMC2d(hHX^20`I)3n7%K*Q0=tKczh<;U53=pdj zqL)jKJwwL=)IEqtu|CL>cs>E$ZUQ;5+o31YDz*C7beWn5d;gizH&LIldPAa)3$Fnw zq+s3I%B+Ll;i#M(p;K%|t?|RqG@=(UZk zJqLf2-^-7(yjDb?s`gdeT!no*6t^@%Ul{?X8YshF%nQ4q$}4qwy?vA&x8^U&Psuol zri2AF`7WhYkX+AKF`y}d`kG#i z`k9G^4C_J>N2G_p+%VpyR3q019A}r)5Q@e~#nns!j_agT{`50&U3R z{{N>rXzfTHc?HSpU&E6b(JY=WmBxvK5U{}F)6Stx0YKJ`Omy}OM5LbkD~9THL@bj0_q{&Rh;iU}fr-be$aTgzd&1tD{L2vPSb&WD1eyDQo%@{htZRWRzk>^E|qu6=N8@FC*UYxpy zH8XnHm6X}2yzyzz91$Clhg(F1)E*gG09e8R#+|11eO*mJfKug<$D|6vQQ=lDv6<*EXkYU=d7Fv{4MuD?dVsULl3H54SSP z>>9_*$5KsJPWSV7%gkD~1<3YJ%!e=?g3U{jEw27f^!Md{v1Mk$sFZ;lP99odQu=}+_ zH8>S%lPP}6jf(>_Hcz$x`>D%)vSOG-J))tW7N8IhkbLTg_JQPIVa~yDaB` zJv^+8@H2d~{qGK%V>8l2^2^imYOnWSq@~L~1ecQb4ysHY<4i0g1$__|dJ<-@&ouwh zl$f)Cwo3C2u{c*S;m0rLymx5}149pmAjH*hb1i92X<=~joaj?XayTrB9VRrEf15J1v7eB7lhAa6 xe&)U_H6hC)_d#JNHcFv`T(9FOSlo4RF#YNEcwwUpEEGC80GZ@XtaAwy{0oZvaTWjo diff --git a/themes/bgrt/animation-0026.png b/themes/bgrt/animation-0026.png deleted file mode 100644 index 1bfd5dcaa6cfebe4fa8fbe8a4c53a2650e039182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmYL}do+}39LL{5WspWLjYWoB*Ja)@%S^}&u{enkkzC%!U^FxA%*$kk7OORu9S3P- zkw$SUEk#EucZCyMk~PY;5n3W)nnl}=I(zn<=l6Wh`F_9W`~3cTa*p|W?pFCm1pt8E z-d^qja$>eed8hnlbGd7BAQQbp*#MxbxjhJ=v6#2Bjesj@Ks?;G|SbxcEXz@Mt zzVsT024%oK)vG%ve=)dJyu~4kDzME8?u$mhnd;VCFSc$H0Qk(DLo!dsEGqIo>&!0g zvwUA}_2@9ClhY-fZjkk_He!D0BG?WqXK0O;kEpBljpBcuoPN^H;0=U^Qwv=L67P~| zK&F4ra5DmR8__K&w@4W_dO*tE%03AW)Y|l$<;-s}WEN`i(x+X1@0>rFB&F*~KH>8! zNa^&#;_7;Bf8No(gYKJPYC>#98_b#vx4IEu5v!G_hf?V91jTXl^~0}@MwvV+Sji=x z*2tLiYPr|`gd#pWR(J|EhKzQKu|ZvehcVf6T4CW=cZCXp`B{A56+x?(q-G%-D-=}b z-Yyg#N>%;w-W}ttd+QO#QWU=}>nX2irv!i&l4nqwQLKrdZWN~>!0ILP1=L)_VucTB zXfPF4Ga;vZmmWWnjXTe+uF~l)>jYBPwbaa6);StFy4^9B%ZeFc;y(%y7(V~R@VdFc_T5G1~Spo-) zn$nQz>6HC?scLRCXzh-4`p8FTuFKC^t}h;f)wYmIleb1rV0(W+bfMKlOxTe*ndKKSWw9f+O!LZu7`<5p z*1^rDf~8_wAz{Yknf5U8&xKr*ztKAkO&BKW-csvS{eN^w=^KL``)2!B*7I^Qfc~%* z9vW5jynT!F*MQl4xGYHQi!`?6z2PU(EXC`+p9&r?ecCAHY65p{P?sC|#&zR-!_Lc{ zTJ}IB9drza1t-GN4p!A@EY3{j_l}&Cj_$iQJG^?Uzf^<08JVr?)Tbn}My<{3J8`9D z_C1|Fi!WXm)cGUGT?Uo)A41+v`O7>?NT!+fag%}KkIG!Lj%%}HO$hMJF;!7S&?%kd z{6Mn~H}g|2?Xpxw^(xF_Y3|!0*cIv(_0BX+_ny!*5IU|YDvuJ`)d&lIX9fONxf3&Y zN@>02!(Ak7u8(Oar{zB!lhh=9^bGdPv*X4I4Im#;Bc-nYrRv1hkv)dF@2u#8HiuUn V%1LTM1PC>0whMGv-57~7XZB>`}9B8>!3pwMUp zBAmq}!oQ`k;S6djEs?_}!`WmKjl_bp7!*34#QcwTaa0ohM4WI?Ras@QS%oFANq{{9 z=?q6A;r1vP5_!PUfE0D(C0<=CUq#giPRr}23eCP8W1ql*w< zX(%=F$usI*dY+8jbY~yrK!JZh7d_~5D08rh5$9jf_Y4VEI=|-O0 ze9T=2XY@Va@b9VOIC(T{#mVWj@{77E4g-zp%%o#4=)X-2PBJ7I`FZzwyENmBxHJ=D zT2#SEjJuFiwSuAcy;GFyOuKOFSQ)&#yK?BLWx7%QVLVcHcBHOh?C=}lBo{1e7emCp z+l$8Uf6U;wcJ0Rs`gau^sw~oy7&lu$!UK+%N&cYw={ip4k4eJ)b}G!6hk+D-FN+qa z-_H++^gHVKR6x6XVC5PfC2JhaSEN)`bme!qZuQvfyyUilOfR>-X&LS?y1Z92ScPnQ z-^3`7d*!+>(ZKN33t!$&HMcXLELv--1Bs7am$ZFi4W-Vrr!#-0UY%whNxsc=KU;a4 z7nFSEY1Wqi4BhE5sIBH7$7icf4fk zC#?l3&~NqL3>45}0pV-DrAccm#t{|JXM7Z7IP3@xW6pUW>4eB*u8IW=OI;69n{-S? zs)~*k0fa~(bIvyBik+KX&qT0`v)NJBwGp!i?lo2q5+cf)N>~|-u*HN$9OikKn(LV$ z|L&}XR@05F6mTMWw%dP;YPKm);*d0tOBmNKjN*aBG1r|z!)V=KARAceZO4*9*S(%R zS13JmN+6iqr`9*UC|G#Erz^_k|2WTUS-Lu)nqg#3qAC$lAA zryh9P_a^%myhlZjGU9L~Yj(FWnP1SAbFjPalKN8H309_g$%-PVB=_~zro!fVu4%8{ z!1&w_9h=L;^#bu*yFhV!kF;;Kg#Gd8np)!wSKilPV?|0GU3*?}S1m&vt+Hn^yH8Zz zjj*j`xz7QayUjgj^tVYk9rdbAeQnS3wZiptYS1Utsgaa`KvwM(U*m?BF7S^$;FG1R zb#t$1tD8^st0i6uzW8P_Hjj}UrH>)7<5n+sruPr-u8bGPE_-yg^# z)g{H(R>?;|o!m>eD&&*-C2hi0uvcr5qPie^Xz~hk|H?b$(E3`rs8=YA|(pG1KlMu`+A$PuoQ!-!?ooqj)JPW^iPyT#icU|^zWHt<#g zX4N(}!qDb8=TD&QHDPLK?&;Kv`OIvCiaj;34i_J&ui F@L%rzZB+mO diff --git a/themes/bgrt/animation-0028.png b/themes/bgrt/animation-0028.png deleted file mode 100644 index eda5e3f2f3ab415780c5c7fcfc273bea1920cf57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1385 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHM!~1;QW&K|mL#79s4^GcdOcKK%$NEd(~a zGC3!;SRptuw*W{p7#dmBO_R`OU|?bNba4!c;H;h2={GxEz-?pWG`-A_Dc|c4cm%S> z1|51-lWz0;`;Sv8OA^0*?dvVyefQm~0*e^N4^382J(tT@)uhYSF2DaJFy3lT=mCHC z6o=paIX^Pn=NEXc&$E|(sH2oS5ub0>TKOVaVDq144J>TZ$}?}z4~lQ z>KprGUV*Rof6|?QzoGGhg8N7B56>TDf7t)vbY1;Ei{vD2kHbfUI;M%bA;h&F#N5Q>f*i-4FKwd7(|6_nY1~ z2_I*yXV{gl{W@47yhx(=We)?F@mkMAVhZS(nY7FIGpysHwKp?2hEG%QtXZKkw0X7o7tt|5+@LFeNoOYI1pm&r{oW za7C>wl$>q z{JU{-wSuA8vC}OdGFz52b#KHB`D=k2n&a>6zq%$|iN zSLap5{%N*+z3%C5mDLTAJolD)uw{k&*}PuHmce`>y!KW1irs(P6fGFj_szMtyZ`L< zM`mJPXZ#OJ8BK}d+mXAwuOR0@{bq|UpN|K1EmjIgMC^Pk@;I57HM6PaQdY~2SLn+$2oZKz6zx1nFAn%uB+IAbCAD^tU|JWzZjAE8T=@WZoJti;kKUST*`~wTS zgS*WARp-T}H%y$@C$I8PN{RE}=Ejb#qSq`N-6Bn^mW6G5x%`S^JfrE{PfINB9l9S_ zz|SJ&U{skj>8w*g z?yLEWe(w_7-gzNeu3z)qZP)VPKi$u!8?w6vG0lO z%yEg4%{j+qiv;ULiwiz?cP?|8-*(94gInT(MIWBHx3T#*^{wW!y)eJ9uZL{`55pyf z$)94@ue+^uQPd~$Uk-CcW&@K6vyWumM9GxjXAS;7Oy{foa=_5qCx6iv-P6wL2jyRW iJ$yXr#glZMKjn=3Qa-N}cgqA86%3xPelF{r5}E+GgkxC% diff --git a/themes/bgrt/animation-0029.png b/themes/bgrt/animation-0029.png deleted file mode 100644 index 33f2683016b52bf778779348c8c96cdabceed39d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1348 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH0f49q-3ewP5Hg}{ba zCg-FUD+DLz7654mLnDj2X%gBD49s^tT^vIqIBTbM2T2?9xOy(QaOwL0`qbsYQEVKZ z?=Sw6NWHm0a(#;DwY{76&VEz2`|j13CA*w9h}NFl{jT!I$+x9v-d5VW*Z=gm)_7NV zrt&fSu8HX~yH8JxzrRmCiF?`I=Q>t${l>>7>OP-7;XJ>1Yu&XZ_x<)wf(5(_1pZDc zoLzXL;*8Z7kyi@qL^12&6&>c{RB)F@m;*d`q*}xr$Q^^&xs#RnX7ewSgqV#p&Xihe6OYH zf17DqP6rYqHgP=o-J@G@AkKK+Tb}l$>x(;6wS(Gs2^i-6lRJLuG`xXPAmo1$LHPt!&tENW5;xOk_=ETwZqE>sL|AS1F^;gzqXf z2KA>b4wOCd^<{cgCUm@PpUd-^!LzGgBo}3czvAmTayH*7NnpnN0`?2jBucj&*L&c! z=L+k*N?F@RqhmAI>{jPH9p24*>Bsq9NAwLgriD*m@>ss8t=P=-(62w)z0=zciM^Nl z&1Ct?a>doRtL}0ZWLgF1h@~)p6JAiRUBJG6RVB|QS%K=VY%4~)^&AKIo^96@Tk}2E zt1Y76`uwe|gcp8oOrk`TUW?yOt1dpRDl?s@U|-R` z{S1{n-`_ROz14W&TyMIr{Y`=8#U`b{^+YZvxlWwG&~si_>ZQvob}k|B7k@IZZ_PN# zxTpNQ)rJ+mi(46Q&J(HsduSuKhy#m@bCSH!geO<$xIXG$-BQITQ)VmtX!d$jPQ{O9 zJ2wRLESP`9Ln2Ah`oX>{>{?Rt(LU|>M6W&4pLCJqTd+ag!N4SamMf2aetLepACR6O zxP9{7L+-9@#YyWDch6M*>dAjjg>~7%QyRxVIe*gUYirfAlVhmtyK%+Ad&&BZcJ*<5 ze{UG+8$NvFY%HX>Vc(R=wMn;Pz1toMJ=zg>?SVzsy|-x<`>_?#6|MW&%Fa1WGJerx&TJHC;dqtv?BbQ5&;4OBP}10@ zazQeG`h_D~`R$GNF^9CUFc<9p<|KDF&tc`#FFVUzw@*sRS#$n&_5OEmYszJX1xnP8 w&iL}?)`A1)tQl)xY`t%3n4QBY?Ea6L{cQB)#qG}?14{u0Pgg&ebxsLQ0Fll~+5i9m diff --git a/themes/bgrt/animation-0030.png b/themes/bgrt/animation-0030.png deleted file mode 100644 index c5132bd9cc5ff00f5c8bc7c495d215a48cc85dc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHDi8)K2m-n=wFqISo`Jbt@aacDX(6!T zmB~4&#R|cRxdlL)!O+N}ZkmKP0|WCOPZ!6K2+r1N-9@(?cwCv6`ri8g|BBx)kA{27 z?<2XBSEPw$e%&>xEVsr&hEM#wX%)2{4%zvuVDD&wlR5PUiYeYBx7>6)j(Q>sIM;>$e)VpWWw9<_(zF&|ebj z@2L2s{fQW(x&5*e*VoqCu^yf|`^e1qcQvfoew2sx+WukNP`-?Jx=vDe^J4iwE12XK z{k~f*XnWv2XI0fRW&fDz#rlc5O~)oB)qd*Bb#AqJUcGpE@qyO{y^Y?o5`QhqWlC;+ zvYKa?^sUH%s>mo|6;xYA!u+?d^%j z6PfR*o#lP*q$lhk(X!a@l|j+v*WVVIY&gA`G30a8)wI7acXD5tv5Wcfo;4-B(Mz5x z_TA~)JK5L6WBN@YtFRlnlVwZ#7FkX|C(haFd(ZOI;ztfVS8qt`tJ?2nuu6^Wuu(6V z!@yAbp-x3*%B|prQ%ol3YeEm~Flew|_fq1a%ci}0x@^(gcguU8(A2y>_t5${m&H+W zYo9;N{GL;3`BCuG6dNXWA;03k8^vPce!ddg#u?D!A}IE0mQwJCTba{23-tTDm>7~3 zCv#UmTYAH)NoX2B*SyO7+Wq`K4||mky+5(e@WJGxN2#eU5|nk$#^4Gt#P4xEK#D3YZk-azyJ~)6*Z1m_zmYc$hvfdlaNo z-dJz{j(Hy2>BXyDRG3?2KKMO*>d~?I!uh%!tJfCsJdd4(Tm;wn`7t{zn6wRRdT!_AUsNARX*kAvy#M#1o!=*x z7u3}B{|MS$_TfhNfz2~cyk=X?_ETunpJfsb5h8~D`bMo5MGmVs|yCFK++< diff --git a/themes/bgrt/animation-0031.png b/themes/bgrt/animation-0031.png deleted file mode 100644 index f6ed4b2b3cbe1611c2530eed5d67900ef2ae557a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH16H7Al^AwB?(h7Eaj?!Pz>kGf&!($0b`mv+>{m^UpS&K7Mtw zdX%K9Lih0r&RP2Ldecv@|NZwLw`2I1%;)ng{v>SfyKzL-t^PN|YX^S?v!ojF!{vM9 zq|^8G{t42Xp(hQ3j;pO?*%tHt_SazI%)^M`Sj9`h8o>jYA zb!XzY=(XRY=8J5zU`&yH@ys}gS(hG*H}_lr(v#Jl0&n zu%teF?}ROa9rjs{_b$(zAMDBCHrF=yV=a?J>D|uaH|I|%*6F{QGlk_y(hH%bc3F?J z81s|Ed%Fz&ep{wvKl#7Hc88zQlWxp2Th&@}ma-Etz^R)f0QeJ3F5%XRapJiS*T~d!D(z&QN5UM){YmipA3&9l!DL z4BM}dT{Fsfi|4Wks9KgynysI9LumK;Ie7^()ALP>RMP7cXWgA*=B)F0q5q*(ldB#d z{Mw!2b0L4bg8tT4_sMSkuM2+o?Vs0F&8SdfDNy+%ZS6kJ%!}!B2&p2I_MV4>U=3-&(Ror rNw8KVhI_{1_}jDI{OE~3|5yIS2B&Hd%}8rt_GIvM^>bP0l+XkK%<~xE diff --git a/themes/bgrt/animation-0032.png b/themes/bgrt/animation-0032.png deleted file mode 100644 index 097916423d6c42f03f07781a8ca380ebc91a6e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zH%kO+W?0AO%4{7p4{=?9?+b^9=c20+bd4 z8(x{5lUl40oS0hxq!|p2Eb697XfrS{TY9=UhD2~Kop!tIwgC@|^6|I-|K|(sl$hbX zKI3Mk#<@hsN1M2twp_}+y{-TD+i#5t+Q05BKWFpjiCW*znbR$Q-FDx^_r@osU!q=I zIsg9m{?kvJDg|C&TKRsKU(U&}*|x5#J)B}&l$8&xlKUp@>k+W8`9*vBjq~9Nlcut2 zy-fe9Vm@b<+P6q&4M3HmfI-TRA%$*<+t;&@9oCKldZocT#LLzLs& z_M-S_stGr4XWVl(nQ8ZFL!`g3f`yyk8xy~C(hr|(-@{a-=smwoc!%M}FaIahA7&S0 z+V&))HdkQ&u^((#UhXVD_Rq`VX7WUJzvBv1XDpax_jWbg-K$J5?%t@^I>(urFsb3- zs%QN788=?_YlvF%+C)RIaZY%Rnm~Pc;Q7FSk}j2F#>@1-&T&v}I`ZTE692eX{gaAp z5}r-Q2DMk#Jhqd2K9BQdcI_e%btFnV%zofFOLU+g7 zGNEj5iw&QumjBIqbFzN3V*{&y?_RSh42kv~$LGJzbJ*bFQ+(RG`9w|UmodSCU$tY}lSMe|I<8^ww$FPL~PJo~U(=;YOj3M(aE z`Mq?vkdtKj`)F~*=gXQEyEX^w+jXdjv)l4JZLVd_y(91X|Cw?1jVGnT>KpfQ`OE3= z-#GnG-idfo-u3Z^ZpMnddTe|)f5&W}365T!>S63YvlBY6_hmi$D11oIz-qf;gO0=Q z{&kB>NX1ryWwJkjhJ>FC%CC#gQ zRn}MUW}L44?$SiFt0_fGQqYQ953J)5uh``_LZ>G)vH372H; i1Fy>eOK;rqpJCrO<8F7=?H7PqjKR~@&t;ucLK6VT(*5NC diff --git a/themes/bgrt/animation-0033.png b/themes/bgrt/animation-0033.png deleted file mode 100644 index c9ec0e5e62b10de61c6d8f00e456d2bc8b2fff1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1111 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpq$VUY zHzT zS0?AA7ApiN<`w{H216r@x@i*H3=B-~JzX3_A~@GhFxtU1s)%boxL_q%)PyBeeM1I0y(bpUtgKoKL5@UL-Wr@?)5)Ct~Ji>TqF2+e$tb@ zaqHI~f81Cp`1;by_cQ%+PP)xDb@jcWw%yBjLDSmKxoRp46kP3X?(UOs^b|9S6n1+& zQRKc)MoZK5!z+$I$z-0ixN_DX-H#pq!uRDmcO+l>d!Wiq{r}}@Hv4^TA8lH9_m#zV z@2>gJ%h*@EiRSyb$??-aSB2AyFRWvWVYp%aPyR`1U4r+$jq7_YT79>?oH>ilj`Mjm zOKh>rPl4ZgGoEcp^_JLYxp(9D=nK{<;bG}<+jk!gzZ@C$Q~`TMl%*}?(&u=Ir%VOYcif1_P?%mgS0^F zzIoacA{PtHSTE;UZc#C%n0=Ap!Q4Z4t|+YW2>ZAB-s7gvPCuY0og>AfbXlneV z?;Y*S+obw?FWhX1UHI5(U56V}=kzL-?-HvR#Y2)WyL?|;wn!~%Q!Mk>Qx8umZp{{w zwwPP!`JvQ)r={h$oc1qM%ZfH;s~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkKsgoBtr|c%4zN>-5`mJ&Cc;X2pMhe6ATej4P*EZSgwiuGF#dDFA{Zzs z3X%*?PR&bYNX*O3O)SaG&r>iqNGm8-;D6i%R3Hpe5Cn8#Y7xRtJp*&Q;M0$Q(n4Uv zE0c3lixq+sa|?hpgQ1Z{-82bp1_q|Ro-U3d5u8h>H%@w`z~j31@&EcwwR27^%;b6% zJ#!_e;?D0vUGMU4Z@c@gcE8~V*<*9kXMgUPJiGAB*-Fdf6-PYG8s-bnG>)m??so6< z&pmhFm*2U(L65!Hwn!j;(<|fUEBY6Qy2X`+x3D~an%w;1%beGOSCSlVHVobCxBuRf^8|xN_y&zP=|*-W`uU7SFlvqt)_l@`mpOZheZIv$pi>8>Nl4 zJ$GlnZVG$gv+LAa(?V{ZeVdt_)E4f`zLLKGQRMW`??je}FTZx=PW%p@fWJO#>`$LG zJn-7uKy-ma1M7J)d*;{D>2b+IzWcjkuRN0%ZZO(;;8~XON<;HQF+DFDbj>zKaoz3B z783X#*z@4oxizNzjZs4Rzh6n6Gw?G!x!P9MSIzgtjy4_r^+~UVn35fmV!y?nUu!mP zt?Y8MK7~22?-w;sc*M4AZNtjvFDn!G|4b16syf9)zSYn`P_Vc>QC;oPffHMUeb@fm z;q*h+gYlN+1)Xnt_ACbuK9-O@;S`fo=Jx1QW73li>wI6^>RI^5y9ie7<-UA~`Tt^f zTYe`I{(VynFxv diff --git a/themes/bgrt/animation-0035.png b/themes/bgrt/animation-0035.png deleted file mode 100644 index 2bd3b0dcbd17f182023d4d609f1103a8b128c7e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNC}>~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkRtBcQLaqCNavWf%6eR*BjZITj<5GcQf*>(xpiogF1BB8uFfjge!6Fza zDGHJdPEO5BWk}4+%uOuG%+FIWHb^TdR^Wf!1XLglQV;}mVQLY=PCWy2yWrE0fYL%> z!z+_>Qi~OW6LSlIG=rg$Mcp(BZ3YIWTu&FrkO%^GtTzm@?3tV zIb5r{o?pLgJIUbVCY{rdzgF2s{Lm{tmMQEmm-DH^Hzw)KcbNp?ADk*_k@l+_tL^6Z zm&O*_Pph42@_n*r&Cyl*hTe{HS4zkp-=gnFw6-g<%aijqs@TOWyh zon3li?enycy(Pb8oR>W7cb|CjjnxNxxxNE6@6@~OrmlC8VgLRjzH6VpWtZoBTBO}? zvZ@p>U+%YlgW2b#y+O$=v3$4QEK`qg*!tkewOL25TwcGU=jd9i$T>f|nzy^(m#Tdk zF85pL`Uh{jzgw3d->kgmz)XXtXJ5B|dHnu=dDt_tYTF5(GsNVLrtkYHVya&DO(05o zn(zb{?~Rjs+nzlUc=q<}zGw0Aj4XVO@f;psmohm1iZ1(;l1tcKx)2pSco~ znAg=Yu{7zN$+7F1B=h!5kACGZXO7O3GdJv14*FI6+wK( zpWlMshd=l-;cwduj|V#aZO+Zo?-?iY6}c6->#on?VK8)l^6`$M8vC9ifByq_lUZ-o zEDw#j?SFtlv8L_7JwuOAPt?BtmOjYnwyAUXiJ9i#*S2miy6ny8_vVLdier(hwZ^;i zzh<8OE%sa?>hs_44!%((9FGhOrQ4n+*mm5=-W;y&xB8hywh*USLi5(udn|q(nRI!& b|8IWxb#wQAN#$7xOqL9uu6{1-oD!M~e z8d2hwnUl((pOK%Ns-Kmao12)dUtE-|pPpHwUyxIon_pUzpkRt9FLq_2SVbAX*vln9hGHv6l?e;+6&2oiG!3KbDnW?*0{^>lFziQw#=))=Ja$iw3L_kaAei{;-gwb<51 zw;Ip%Nh{W9-G2M+x5EAR?JWxWXO(WWE7^1QVsyOitM;}?#yDlu`sLrx-1`}ms%7=wH@#Z) zIlMA|KNCBL!3~3K+XPd~h`#le=N?v8v*%cCS$(n2S}%rwdgyfd_YAE}&YQ!Sf0tZ+ zC^P@hntA?y&*oe$PS7u%nKfhGt5CMkSR{dpqwZK+PtP?5FR%M4a%InBo(i?{ z%wM18E|Wjt?z#1YW5T>TuN<}K%Vobi zaQvg4#jTH}cLdIwX3dkbTK@29`uCgL#ZFf5xo3Y^s_e&p?-#ERPc(o1)$q+TzV29; z`BB+_J~QcGwJ+3tP{7XfUg>GYT37vqYn7%O_iknIb#~b4{H=UpmO}9&$wiTCuQTyp z+~M5*^}6%=s-1Svk0vv6`?MMGY+v4YTyDF?Mh-d7KNwNG^2=^ZeA`@COs_P*Nv;FsE`lROs^ maxcX1vU~Pr(aE#I{~0q^X>vclIt`S189ZJ6T-G@yGywpOfw1BL diff --git a/themes/bgrt/background-tile.png b/themes/bgrt/background-tile.png deleted file mode 100644 index 6b70a2d40790fcbec68b2db067f4f6b0d47ec740..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79464 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 MD{I5+6fGkE2SYF}a{vGU diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index 86c2622..3cabbca 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -4,7 +4,7 @@ Description=Jimmac's spinner theme using the ACPI BGRT graphics as background ModuleName=two-step [two-step] -ImageDir=@PLYMOUTH_THEME_PATH@/bgrt +ImageDir=@PLYMOUTH_THEME_PATH@/spinner HorizontalAlignment=.5 VerticalAlignment=.75 WatermarkHorizontalAlignment=.5 diff --git a/themes/bgrt/box.png b/themes/bgrt/box.png deleted file mode 100644 index 54876e68097e45b215f6f4c4ab2f1c06c5bd1e4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmeAS@N?(olHy`uVBq!ia0y~yU{nIK{W#cwWXpePWgsP4;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk^Z!_&nvq~g|_Tl@W`(W@UmTf#;@V6`wU#Lhm4Z}sF0SlKS+*^aA-R3`>*{yeueW-)S*X4G@YAFJoyCWu z!{O)Wo_xLQ+`LKbFZ(4ABrTh`(q3?m&E9!O)NP+RvD74Xyi)P_S~F#t;;ilfL3MHE z1W&=NWnIR?iwip@ariP_*|lfSpSt|~_sjj3f8KO8Ywhm&2b4~2+9S``ULO}9zu(%z z;>Y5hQ&=)(7Mr-7-7@Rt_uuQw%gS~={Np^M{fA?Nt4VAm@8-(l;>)-1-mMj$9dwNE zs;kh#k7^}_g&z-p`}S>h!9D(Bb*BT<^;|cq{#~Z~{Q2|yM=gBg{-4?NKQi;#zkmOx zZ{4~z@lFfFw9H%si9HeV@&8Td*dJTj{p0k@#gWS|-{d(y@i(hYb7IDsusa>g;+xL4 zYv^}9authLV$_Kgm7aXQU1M*+4*vt;2AAiV*!&CU_z{&>mCVfaPyDrDg8-uwi-HS~ z;t*7DVQ^yMpuf;Xm%BcZ)8tvXD%2`NL!T}&&+K@Wvg%+$fplN)ckT+d)#c^o^`>h* zZwD{A9bmkC`SSeNyZ$ZHoL~R;T$Q`K`}^lgA+5SAv%;3@@F(>|6^2dHd{hy_YQT^U|C$4w;ifVF9Iaeb7Owv@}e9~w#FT2z?jTJ8>EaGR@9qdy5ApbKm dPUG{u`zzfzHqH8W$O>o>gQu&X%Q~loCIIScDqsKr diff --git a/themes/bgrt/entry.png b/themes/bgrt/entry.png deleted file mode 100644 index 65810dea3ff2a03f620f13cdb9f680aa116c033d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1431 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 U$^7#${bvUX3EV|$3`ofO8=tzejsO4v diff --git a/themes/bgrt/throbber-0002.png b/themes/bgrt/throbber-0002.png deleted file mode 100644 index 8e9a85d8be80e430f136327c98db0185a36fe7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1568 zcmYL}e>~H99LK-*Ln368NvEA#)g)L z000;hg8U-2YON~+eeKEq_SBaGn;RH}=WB{Zj(aGR( zDxFSD0NJbrFp(na=aoS}Y>)k2qp5xU&j_yIN?jgL@Om3^Kr>u#!k5GRxWtbBxK(j_i|YIa0?X zwF8n_|6l2daUn!$I9iPOnw^$FBeSjd66s8>0$3bAvto?{0Kg;!KcA?W<>lu?PSixN z%oCL4?b|b;>?Qbm`hLx3e z&CbH^uHjSqJ(uI4aSl(1llt2}r0&c;CvJNE95qbi9?z#yq_zX=kDG1FMNe)C&xDSt zApSRFx=@kOSLXxMO^Jr#%V0%v2bI$#at`@i?+e6#d`RXh_bf#BhsQpsfixETu~q() z=#uF#_sBUGwxz}y!uPQNp(r~=zJ1b~m8(LEOIP+N&ctounpMF*sxl@`Q^P-3K(E?R z+eV5RDXU1i_)}|UEK)bjy_v8}d8&kU%;(1I-{j58^(iCWna z`$oj$3&cYXj-dt>o&9nv^FLC+&tSaU$pIVIh8F%pgra%SP;$&ix;10Q0snGS^5NE7 z8XFOO*D?kEF(P61VC=~-?B!(AKu7V$1;474tzLse`vm-+1HtplCdHa|&r@c!a+8>e zvhl=V{+zw$B7;Ek*r=ui4W_v5k7M{w4A6jOSpy$fFyR!#2YRjb}7JbT+n@3&Fhqw(~m4`__ zv%9ToKY?pqgn%>|aWT92!vPWSsl24g<5|91=JjO5H;e{SM99$QcM}QFeua0Wsm5CD zIfvMbztD)j?xI<2=iE7y4*QL4a(CiVqkww4)d6GUA2YaCG-^9y&NuytO6}bAAia(= zzC-q^rxQ`4?7j_I938p`ZBa($-RVtPkQhda%MZhgrkq8v&IXF01zQQLEi@=tFPR;m zrpd+4tQ(iS!Rp~fe*4k>pEWKbQh|ckn+2a|nEd5E$`h1&;~GZV(6h#e^iI6~bkH(vw!UTS%uF=b^r3JUWEh|u zMSFw_f@t|mF0s`|=L6&Ql#*TjZiUavtGNzW9xWab$eac*hj0w5fiOT}G3Ak3_Xv>& zPkz7TE_$$vx#5tJB&{#nRobkM;Nwr2s84I=Y9`|M_hiqTh=AU~qG1Al>OJqve)jG~ zzIZR+^4(ICGtaj+vtH9JQ^=(i-VdWy8A(2Gzqh<0*>utSg)|YuO~4nnKhf{d^Oyv; zW<~V);%3X|JXfbD=F48bvDH23jr;PJ=Plhl@eVaoan5TA+EQ86&n~%oN&CeC1piP! J;qLgHzXAS3zy$yR diff --git a/themes/bgrt/throbber-0003.png b/themes/bgrt/throbber-0003.png deleted file mode 100644 index 9fe95aa2734b499cd3df6e65de24b90aeadd2716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1561 zcmYL}dpOg39LIlVE^|$b7@^DIDD8rnDVny>#bqw-m||vaVm8}kF3q+sCpnQvTG52) z9!j}YjD|YuQ7PMrX-bL6l%o6j>74VN@ALh9-_P@YeV+IC^L+pK=7t6bm>MCB001xz z3M7y~b(}9leemREX3l^D;{^W30{~tvRG6a zipQm)7>RroCpm+~PUACCd?uYm=b?C<#FP{|_di9(C(~0B;wAT?V3hTI6oJa818!&x z7KOo}+}s^87~GmQI1lfBy)Y!$vtYg_B9TQ0&}iJh+Z}R0;4R1ue~!YX&O`SzN#}|{ z&tl%&09srs@Q)zTXtzA2VJ8R|&BJgSJ%tYNnOt^!Je}+4j^4@PiAX)oAcxO$5;!28 z`~Q_lw3lyq&vOtj{F$9WOQ!Q2!>KF|r~t+dD?Dbs3IL#2g9!KtGE64joFt1}bfAc1 zNb-k8`nz=E4VDOQ<1LoB=onOD!xduetTW%yjG#EBi8&PR?C*?Q$RKU12=zDoMZrv> z^hFN{p1+@XJKKYc%_p{KCR--1D_K+QQ~XqL4Qn)Uc#>JC)vb5qXSY8?IJZ8j{j3;D z#&ws+EO}CW$uDJV+ZewEy0v%}{n^@qDnxNnvg<`S)8?ZqcHk4Ni4RXUJfx~Pcq=0) z?GN?Z?Y^1NRPJ8FgQB`Lt-Sztj&hIG?He-)k;>CGkRajjy&l!}ZoT*7Tg+b5*;H7hP(S$<>ph#50sB&n{qJwP7j z2V2*9hKlMmF-5o%uR$uCL@!cR8Co4{h+~1vXpQDo`$ zcDgjTF|#?HuO^;i&$a_fxvktd(jzi%M%?Z|%vlJAZw8v98tCz=KJB9AN>7!gst!72kR$T*X*`l6`s%Kk_W1J^)X1SWK&o8#kWvhd ziq&CDzR2r)Ee7%5t+I)tbpqp&GU(%|w8_ZyJ@#YaZ4w42v%<$$l+`el;2=fqQEN7E zUv3IQP-apK)3!GY^?a`gg-*S!sPFa@kMnnh_D46qTXA?wRXhGUuq+EcH+l_sT#_Y! z=(GQnd~b5UU)C~)Y1;`}Snbh0H{Cb?)%RAUZ?{dHyR~HM*>o)9>(c{@_ajjLYHqP9A2!old$rgS;iqM$AkB2IR=7+|#Shr%;W1>UO zE;FX|owaMpx&_sXoTskJzBDu`&z!7F<+Uxa*aA1)mC0pT`HfIuV?E{-PW61C&5-&5%SeLCq8>{ zAWmwieRb-1LYRXEJZr}L{7U$1OGStX@A{w~9^8f8-5#km)^7RmP`PX}I`*5VnAq%; zp%@rxqL(drH#|ESF!sv4og&vnu|x0ftFfKi78j=Pnd>X=K3g!@W;rte@fk@PEy$iR zbnSZRwx3P*`jqE*+CBFjD{j5=$?7}hPf4YKP;ch@MRTIBCAzgNTE;T8)^GRO=5XUqnAi#>(N(d zJ=MN@l(Ky&c=T>qODxl-JNGoa+_DRNaXYN8YsVN_B%|z;8TStQ-}I7-*sUL}0+2R- zosJGGkvo^hP!7^CV=L>zQPLKeU2~`E!?zOt;FcN1sS`jc!zi@Yw(^FJ;A72~4KMR> zU!!*^og-)j`+oh3kjnAGmoTgux*;GvB>OtCf5%vC)fI0uODbd<{M&#aVlbh`KTh&D DSwXl> diff --git a/themes/bgrt/throbber-0004.png b/themes/bgrt/throbber-0004.png deleted file mode 100644 index 687aa8bba7e7c470034487c5818c825a6a6e2407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1570 zcmYL}dpOg39LImdHp`3*5#{oDB4Try5IPRVT$Yff8ymmOVXSTBI&(Q)c$9}sGR@^U zDB0?`6e=qz>Y$D__jV-9rAQ@0=S=6E=X{^<=ktD^_v`b#zn{Op=L3jds#~^i0RTXi z;O!A8SHsOxhRHiKCFPS`5OnWQCIG0QHwyw>;pxcD{VdPJEPQk<2wt}% zz%UsRn5bwLh8~+ti%(!tF)S)b1DO~mJvuH9Wc;UAlvpq>l9Khik~~UhGs=U^0s$MW zwFAc58e?N?Xl?C;!#UYGzJwmMlFz7b&ICu(Kmdz%`uE!L>RYcPCr}4$;u)V<>zEZMg~3*w2-^vTjlm=$ zCqist*ZZc5`BsJeAQ~!6G)3mQ_6?In$#m@og(Cj-q3pk)iJcN@5dCMvql<0_8{NBg zV}JchM{0}aq`r&rmA#+#;xiQbk16DRFy(i-qovXlH;d$DOCh$@qYaCLp!DGe zfW_+lPiPdc)LmQ_totCcc563kq)dvF6r4_N@P25pa6A%~E2t!d-dJp>Ak(&a8pN}6 zm%s)q#q3#DYp+m)j%GvC6fgNtA{L#K5G%!(gQ<$-rw)Xw5;&=|+h#>)OsUnJot>&R zAzPE~!G6&2IB^QehIPQ>IQyhWrRoN=7kZkAgU?tj$U1=hW;@XHF1Phh-`y5xUz_Qd zK^KupTZi)T8@k1fvJKI|XX7MDlB{JMjvv;}P?~tO?Ap<6gA&g?#0^0uZOx-WgtB|M z$2XmzM~a`oG!2&8RI{q}3PdqRp8RHKyE}q=CIR{SCSkWVl;5i#*^q_1Xc?9Gys2~` z4h$`en%_wrU*CP)k5JmL+tYbpK_E33-VmO;&cs{YlCd%E?{~`vA2mMXWIP%ePI<)u z(Tgs0ZF}ndIk&vjC^g?Ii5E)3j}#W%B2mP>UpSJRB=nw8(~nmz<{UH~QzR8#xmGP3 z>aIVOu91ig-*5R60_tf^!&Ay+ElhkrtjNyGDB^rrAJ-E>0a$aLv&AmdQUA#N>B+dF_>!M!V9wSKL{gAZdYTmqy3abO6zw;E@S%IetqHV()dkx<^9+*w{xAaI> zxy)f0MYOC1R6huqvkznyR0gN73Pc)r+AsjSW01#prQQykkKiDT3=h&wX}7r38c8EFUNa|5G><} zbC9tbiN>ePO{P#Y2~w@5UUc=Buqr+8*}b_{vjeFYYcq>zQZT%D;_mT6-(9Z{(XtZO zFYHRMjxSGC(??d8rE?t{PE_fIoTL{WhEBvgkx9r7uXg`ytAX6f_7eDxw|jTBKNk?X zW_JuNdF8r<4TjLxpVVl+FvU)g1&C(!hSRN%15&f}`6fqmdfK`ov`wI!Qdhq!|KtFI MC()zv$MCGb0Sel;hyVZp diff --git a/themes/bgrt/throbber-0005.png b/themes/bgrt/throbber-0005.png deleted file mode 100644 index 3a56beb7482ff40b652972de1a4b8abf25a3cf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1585 zcmYL}c~H`67{`B_975!oT4Gw7xJevdk#wgiTViR4Xyrk_RZ@_Eyz;=S%QQQzR8W^u z+tH1*($osEvID!E${4SHi*|VoXeyRyi|y|0JMZ&+XTG0jzVGwbduk`$4})5Y0ssI* z^Y;nTtHXRD;rh-`Ntw`#G1s5L2LQCid>H^GA{)KAQQ#XQ*v5(j0b)!%8zdfPvDuMK zBA>@3MzaJ&Zd@`u{-_{^D2M^sAfL$RvN#-&_n#7?;y})!sI2Ek`Y4MdR*@Q)BkB)7bG$aX!noQJ_okOKmO7+!o-6v%UMC;i6d3xhhE_1t2f2k93C zdH+92AbHVt&j|F`{AYGDGY;fC1V^&DdIiXCl=MqBt^i=9p!sax9bzoL^!)Gv(DL|& ztuFPK9DetAse+$#Nr6cy(xu*}ITDrp)B^P;pSwU?=FZI;L(wXVOIG(T+$6%sQb!A0 zUDZ&Z)A%STFtv<0)5kcbz4ZsW|If*5@w4g%?Ngop^uBoULR5)8P57j!6{oOcMasQ* z4qK$XW?^%Ao)h>FbDYHPfUB>KJ@!Z~TNy36HM{9I>PLzSr$zX)c@;12d z{)&^M3|h0=)*~>QKjUaawRlrG3?)aXvgInA9bV%`I(bUSa)H75o;Xt|u-n3Af{bOqeG+`BDNUtS21YcnQk2)Yb zE=-x<*Hb)wy;6;U=8kB~;%iY4d~1#wU|~J-Yg6A8rD>hXYB80I>wet69a{X}TxBw1 zC8;YZD9dR@?!Pe$g`NvYFiSO(8CVN_*CUr90y7sEZZWf6GR)!{#udL#9nVEBlbgex z!{K{nuo3#~T8(j%NvcWpG<}SAL)*!C5(|NlYv|K$@C!qwdq1PrZj%$`CJ>IhOayBc zzRS$@IL%Le&|na6sKpJgut!`|4u#<&+5-h+b`6V%A-eLLF;?t<+73@@>tWaq-X_m1 zT8AF_&gAlRMI)&R<**ZuHuumv1#OKmFIu?o$eb5#Fvy#Qm^(9x7r#tj^xo_H*uBK( z73jh7E3d8>r%)5k%d_*H{A96Fqfw;~zxy{pmcij@YWQ2z@yYLYlw9|+0g=(?P>Iu5 zd^<<$p)0L?%aLTOalcwW+xJYG>#dD&6u$wO&CUhuI;w|Gu1^Xd?e08L+Us|tZ?Upv zyGBtI3q9#PCY@@=O;rGoN55W{X5k?>3r$+Q_06mg(j|h7H|<_enV0W-u+`wFfxu|z z3dQrIOJh0wqvJeLML#aGX)0*FYhGgxGGWG%f)M%0Lg^~4^Hq*0A?E%e z)yE7JeiP4J(YhEVXsH>!yC3Pvi2u!`^w!~rDb z_*aATNt}xXolBG%QHze$qq?X6N>>$q@cNP=eZ^Hld>*!f>lWZMc#KN>GruMd9w?x=Pl{A?CNp3EiI4Ry$)Ta0&1x%!*& zw2vgKw9Bb5zuJ2`)553$rwRL!GjOk-u>)-ncU9ZG z+%aIbFb#{y%*+u>g_sBn=fqWtHu$&|S=!a4@J#PGh~W;QcXioN6nnTfc!N8)?|2*7 zXZuoCqI;bt47_2(_ScoMv7w3JQ=F$`;6*yDruzpUBW>Wc}V%q4fT7h8EI7+ YfW*HhUqW(Np#Sp#nlIf)x+Nm(Z}Py(ga7~l diff --git a/themes/bgrt/throbber-0006.png b/themes/bgrt/throbber-0006.png deleted file mode 100644 index 949cb23012469efb42c33953b5c79d5352ff77fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1597 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 YV^$rUwEBC7p#Kpd5km=$I}eHf27_eUh5!Hn diff --git a/themes/bgrt/throbber-0008.png b/themes/bgrt/throbber-0008.png deleted file mode 100644 index beef391370a4183ec221e131e4d06e60e1792919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1604 zcmYL}e>~H99LK+y&7`YsLg*4Jq1!KvH2Q&T>4zW5c?v$LDi_C9@oly+wA%FN+-It{>J-2T0;WgBZ^wann#DlF;>bj5Zg zTWCGlisz}dSXAI2L18esGyMjSwa|D421e5uG=LMwN{Wi2v8)_1u}pSWz|#&bN38Gw z?SeGc|4*VYc+%k|juykeWv4|a(%4pkR60|u02b$Z^1PV?0DwkFUb_#Ip_%7*$JKbR zJ++*>)xM3m)%o1C%~fL<%uZA~ap0~&gqK(_FRZyx zpfHyGRghhPuhFL5ogO{0V=bj<{syj8>UhWTi`&B;qYN?@A`0{*G-s!h$~w^`j%X1)sMwVbzdh z5A~FhV*Qhlc1p4fv|^27s_qg&aC`6o691B|T*rhq3Vb?qDA38&%zU-mf>FjH>hM`l zNN%D}eGH$*VX~Xbe!ShgS+YUQ%bYI_ zx7?W1z+|StKa73iRFGhBPQhv&Wo{h$i?oghNB-!^|dEK=} z$K+ntES>Tw$SNCICf=|B{bGou&e(Bb#IVd7;@l52jUSvMADGTh0bulCkl2U-E)5Ae zx(r!-M?p-&V`MdtJ@zeFPfv^j&*d{Vr~1kKP~CkAg$O-tk8PWPaRMy)>-42Q=e`KY zj_PaOTZ*TSwIVE(?$a>WOQ$I)c%!Hx*e;LQojz_ssg`g%t~Hw$ zWf`)*s|c$KN>^L*!KsbnmV{_dMw3Vt?1O*UZf~=_>&yEL*e5C1NNy-*Awnf}NlOuM z^SidLB^9^yNONZIAQ%tus&vEUmm6^6L=10`u(OnRgrPyjC5XBY%6JAUheea$Qj%Iz zv1&$78V58&#a-Mor^7;3=4`_=1^xb+`wKEpgZi?uHdR~4uIjaQ)t>CR`L(e|7cR+L zEDvwoS$KTrLdC5d&8M&19thQkl%6LL8M=6>knFQYH^`%KJgAmy`CbNI?B8_R(d)_% zd-wOya6NU=Ac}jle-uScl1zq8W5hI7aUj$DOG~}AeC-Xqh*vWFAw=(1{&mNhyY5nc zR$<UC)oDkg*z(qCj|@GY9Ad6@tFT)I(&%$M_?Fdl~WYr>P{F|w*p z>57|Nqp#pNmyYm~`bB->LIKxy&h2$y$;sRbTi=0s&%K^ct~-oxM^0t#QGr5fBeR{6 zyU@kRnJy$OSuatC-(9^;YGcm6Tz#FYDzMC>S~o&f+9N`HMQWzgm&vq5r+m zYjb7&E6l8Ez;M`&dUEP39l600eaT#GA#y75D=)bHF_)C5(2%|YPE{Apf~(W^BAlTP z^3g|Q%tTK6?k0`}cUwwqhfpO-E{fbAV~34q?!QbUq~Qmj#O*>H7&+_O?$#5&$0Zvy zNt}fHAGIa6UW$1jW{_(0XMa6v{o|OZ@^N3tDKg6M__GPQo1baNE|QBXqfvNkVvBL3znvVP3FHFMI%a#GD?1@Na>+oFr4FV+ZgI>*hD1yHM>hQpk diff --git a/themes/bgrt/throbber-0009.png b/themes/bgrt/throbber-0009.png deleted file mode 100644 index b366daa8f009ccc64fa2356234e45d09e544486f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 zcmYL}eKZq#7{|wEYcVeqdA%0v(B*9NT1KHJhFZ-_WW?5DZ0v4}k`1e?P+}E|=;fA_ z<2{l)rWfZ*NZO1_BN54xvdVC`?!D*!&hL4?=X^iU`Tm~2emQ$~`@z5#a*Jc7p0ofSI>md7*qfTgZ=lqkDJtdQn58ZS7F7fq5IBupED}Y zK<({NS*%#VKZ3$wobra&JXXPVY8XtRCQ$*Lcvdo*Ol2XQF^8D!Okz)~iW{mqQMDkI z_5YJ7j2k{=iKD{spV>z#bSfJW9Lr#;6yWHzg;!)^4*-Bh@i?E5a45H^KCwJ>UDr8% zoNw;=J$c#s#n#pu#kxs+sqcCN9I4F1Zd@iqjwAW}j4WMU6wx9VYed4~0t@Yk{B=;@ zYegoBItP@?eW?{K3hvSXkTBOeRer3G-M3XfghH#1rIi(W(@deXK|VA}Xlv(|eOu%S z3A5BecktKI0ij^QWdd_m?LquD*1OmX;&maz56=trMgU%=9lpc~km@GA?>q(QKB}&RCH(qfk zkH;hlKl}lNwnHtj9-A-NVmxnji0vC{Ve+@f0!416FD6W@YX>?+E!lRdBpc|dUE}i1 z{>-S^$8p>olGsvSVrQLoGV>{Hd{`a>Nyi<&J|W!+Cz{QFg-iow%T?hM_gAj1xrL~_ zR2gdSy|{ZtPv+g+TPt~A77AHfkeunU_&yoz*nctIU^#9Ku=eqUfcbzs^bqNCB#;?N zR)Ph$Qa%S_xZsx^_~Iwg&It3<+p;Py04tRcq)arNvtizPD`;zQGBiah8KlW4vfeN2 zgx7yuHCF^;-=X~<}_Nh&>(jOtVBRuik zm0}b7Zc5Kc1$r&T1mZ zdDjzP%4GqfR%R%Y;$Yhfj=YY)33rO<8QxWPy>ax>qP9l0(xu>(WgU4e%CK#**=A0> zDuCxLz}a8izRtAeK0jx-qtR4ftY}VH9ccK>>DRcs+?Rb~R*-{qZStz8Xqzf0#R}w2 zH}s~aA>9%?LX5!kc-qGPWM4rHdRj5yXZg$?QWHRMSX!x8oUP@}cVCvKRbUs+3T{ue qMdmaTM6}GRtxJzMVmD#&y;Wc$yR*qQSfc)S0eIitxSH)T{J#My<=QO( diff --git a/themes/bgrt/throbber-0010.png b/themes/bgrt/throbber-0010.png deleted file mode 100644 index 0312f62688976e840bdd3cbd28a0dbab0913913f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1601 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 diff --git a/themes/bgrt/throbber-0013.png b/themes/bgrt/throbber-0013.png deleted file mode 100644 index ace8764887795c1dacd9060bbe7d0e1ea932abc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 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 diff --git a/themes/bgrt/throbber-0017.png b/themes/bgrt/throbber-0017.png deleted file mode 100644 index ce792def5cc6aac0b16a4ac9d029aca472c08595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1572 zcmYL}eK^x=7{`B_%EqXz!<4reDIMFCXoN+XQ>TRTmd5yDY+kl0v|L6B%S$>5qg7H# zr$XC7VI&=u$ysT#v{s?aTi(LTnYzw(p6j{q?{(du@AZA|zn(15eeQ7BS{MKTa1WxJ zmr6~RN@InpGm?|1R0547`ZEAP6S-7sKuIY|HFRd~@?-9%P(c6_8A}5(Q4|_2BoxD- zhhicqOiUa#i58o{jKnY_K^n-wFybgNF(CavwI)-+m@sl$r@AT%wG`zR!UO>uEY2Q- z!(nW;nBZ`DTU)#>R?sSWs`9K_^7v3_Ab`cHPhQ~2dy`I*qIC6=5sTKt3 z|37Js-R9x5z*J$xkL;vSD#$SL4xz=V6u{Zorxc>B06@Lb!;RqM2R&cd8C`a8Rr|SB zzg5cJi4{ak!p^t@{G;!#)jdC@sb~5fZY}+4oaqoh(%NW}d8zK0c^%@j?`l4g!f*2m z$h>kew50#*Lg$VyE+e+T5I-*69w90%juElres4meB3h8KmlYqYQ;dhMD=dg=~lA90&00gHr+_yJpV&f zusq=|^wvCDvV0ce;iyiXi@zjQ-yk&lYQ)mEetz~%8|Y+~UpnGqP$~ToEn9P!jtqR~ zEn9)DXYk9gm8RQI_@)k%*g7rR^%eu(&&tmrg1c*jR_3uoU2H6#8&!Md4Lao~3?3cE z=NFL&otE>SXT7zZl4sz{bBkN{D*PRCQA4q^lEJdR6i#(Cq9$r&v=&(~d*dPm)BVz{ zvNWlKuC+e(rHRE|n3dq09#_D3X76#aX*E5>cAwrF#|uMOG?yJm5T7)Xio~qnjiqW@ zl}Bb)5P#_p?~t@=3U4}g;l(pvXtG?d1t~PMhf2+$oO#59hfUEN6E{*zT0Wbfoe5~M zm5nsPn%c)KB*V`3xop9&tbWK~>Phn`M~AD_H1UAVothW>i=GAuvPTXoPC`?Je`SJs z_<~dk`WtS1W|)_z5U#Z!4sy|h_8m$)(4MWvaza#}I4VO}dVG0Se%v9?BHUB+h>VPEs-aE!cHjZq{5If`p83rCCe zPiIc9C-5xMPePOt@LG2YE~!Ab{tdln=caR)$AU~>>QC(yMLGE|oBC6yKD_oz1eh3*_o++>4oC^yV_01KX%x}oCo0zPMq$8_njmL&fE&a8T_ZA;%@qE*n z(H~2bnhWE5m>-;q6$!HIy;nBxtG;9s)T0CAT8YL=X#0nCXQF$nM8&=iHNnXS-rd3#Tsuka4)}w6 z0`VS!nka3MP22xeUt8YW48N_dyVAl?3{ssZ*upBA-Z-Xi`K=cMd=od(AXcq8E!{_| z?%QQ{@pZ3K#zUbj9d1Fj33Kpcp;=X% z>y<*2$-+=&9*nDl66COgS<8oozOrNA373?xlu^&cn$E{VgZi(K8fME3l2iN{>2fLV z#`SiV+|Q8oP0rgsJ=PC NW7j^n+dG5P{sq3l&Vm2{ diff --git a/themes/bgrt/throbber-0018.png b/themes/bgrt/throbber-0018.png deleted file mode 100644 index 6423b95104fd1fb81420f5cc0cb5b1baebc90726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1601 zcmYL}dpOg39LIm#*j!?6hZW5wXDsX@oRLCDX@%SpQM)kLjoE%2VHr+QlpIDEN-pI* zY9cA3wo-1V=_W;@nnXgB$&xemoacO>@8|P=p7-nXyuY8nzDIn#Jv7wTr~v?=LEi4} zr%;oXQh_TvHznn>LR8t?gSh~puDenY;B+ZUVY+}@gTQUkOa_3Dif1wKG0`j*Eey}) zgyAEjK|GszfEAwzM&ZFI28+SPbJ@{xaSYCXilZ|bapCmL2TF=4)Jl{)4P*ee1R@Df zB;sv1m=K9h_V!Npgr+;sdlWNTD>DJnECxUzIQ_gtQl3(sg@UR4ScOAVKqASq!ga60 z(_Zm@S6Cbx@KbOEf^BZU$~^_tTY>&zj5r1WMseclbOy&{10jOV<@@zCE4c0o_fss$ z;Qaq2j^IEJkb?@W^CSB}7?Z&@@u#ua3I&L^q=UsMD*#X$AiKK-1gQ#&dvgW5Q5})E z!knN^bIv1jc+Q`}IjU|r@O7YCrpj{mci58p-o_~Hr+2Q|>~(L9F+7=@7i#Heb{FNa zida2f^A^0=JN9ypH{CqFN`Oooo^$R!aPZvREtzEHFyrHUx6ht`Z+1O4_Tv6Q2XAJ` z&1aZJT=r4dF;rtlMbFVW5wCxtDGjWTAH|lrRh&Qu@1wY^IW}LvyyIFhbqIMj(`&{e zS>+ibOI-718F_F_yHQiA)bx{4j~QWH%Q9s9sV$=vIu9O~wVRy_w~p~xH&JyuvW0K{ zhcf0g;-Uymecbkob+sIJ32)_!6lq_9Ol8E5=Mt0*w@62~)|Ee(x>^O3mO3lf%vw>%+4}E;1qK0ZSg@wkMP=EoMQ`i zhwu9OFP*ml^tle2zZko4e!fD_1lHBjIX9=1g0PNQ=b=n7s?DcQ?Rw-9(YI_s_3R>d zo{4-v7A;zLWdYm@_(=p!jNdL*q;xK$M70K-GN=6<=8+=&M>~vjk=g?ex zqKRJGzFwYInCv`|kSRZzqU1PX+Iq+cIHb2FNys!!Y9;GXo=n}hAh$?j_?z=f*Vzjz zWp572NNR#^uxV$xTVUco4y($cKp7iZhw^keZZ>c^tR&6QI^1S613K=Ro3~MX)gagq z3u!Pe zHS&$sPciX@7f}7rFllLLcsG}{S|O7IX01;r(&4pK=dEQ`q-l&S@iH$#i2P{z&E$s4 zS^jM?cV^GM_)7+&s!v0i*WK>EwL=z*pq4Il`}4+n^#-L%C1RLKHISPOzXi+wtls^r zovLA3gJ6knnp#{U(wR}0*`%Zo_w%Q}LP;7D=x`#>ynp8V*)-_4)?GDa{DIE;@++n{ zG$%3Ucr?s|mA$+zX_@%`)iQ36PK5c#qgj=k)NTEq8(<34HQx<}VyPY4)aPCh#PYCw zX?}?3J3BA$SzNu4Go9CJ{*$MX^ zR@eINUptfEjTl)wvekK2%eZ*(vj42#cRe+}o{%A|w=^MtCg1aSkJ~)JA=tE6LQCna!V)P6BwmjP~WQjhU|7f6Slks1M sHyw}tVF8gt-stkA?cnZ`rS_ghWCxsXXObb9R{Vhgd8@a(a0@l_U;abPJOBUy diff --git a/themes/bgrt/throbber-0019.png b/themes/bgrt/throbber-0019.png deleted file mode 100644 index 45e935927623eb5ebd3bbd1f5f6aed9207a55c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcmYL}dsNbA7{`Bj<6^8xBxmzB4OgaI3MER>1u5mFDHf)AK}k(+a%twJK(=M6c-f{| zG;0;QwW(QI9z@B~)-bWQ2ptP6J1lKpn&vdM{cLAv?|Gl+d(QXsobUVm^&a0H9gak} zA^-qDG9qZPpn5JB%mM7;{QPN9;KGOmF#tF^Ef)khrE&pHs)Wvx?8xSF09=-U$H5)U z=JC?fabi(AE;Cz#6LJsp1X4*BPLjppal|;WFq_Zki2l<6HkZTCU>D!B1EXA)qiAUo z4nV{c$T$K4N8IE|AW%po3JKrVZPJ4?tCnY&**p$_$5Z~jge`Au>o0>0_HGqX8VCtn zQZ5SnKo7O-Z3it;8t|_K;PJ%LN3b3cqL*P@I)~2zBv~Q>o6Qk$}NLQnw$k$j}a#SZ}No-k-(Ocwm}8g0&n zc=WL^y*BDw8zYi3SRW%$Q>AqD56(=xL=<=9w58<=ntS!~Rc92<4wcZtLiuyiRG3%9 zirjL7L%FMOh~e&{R-8%H6buJh&0@o>b|R{#7Ch0>(KSBLcS{mxJFdqy^E`apwEG24 ziY#L+^k7tmA1&A=;9x40yemzaz8qqp!B_32Ls7#9B>VNENhJMlW+cGz?8W zy4lrjcIkSh!98puRJU&R=?tV9Vw8`S>WZODsjn!{T46WA7-I@YV z(vkp7D&Z~AaBj)a)@lA5v#@LO*#d0vP8D13WLD^sTD5_hXE! zTN_WC1-t9$gV*d$Kb}XnTTA?Pa8~8WXVbYUXTsUs8O#CHo6R#@+LiN#e(%#8er23A z^&4eyWX7a_3;csCIdd*%TX%=*XECDL3ELQj_p73?CJI9A9WwzS?i{f0nMfF_`khr` z9>E6RHWVK$lc>)K5f!pKvfN)8y&|?netq(HQuF46@k~!6Ce?=OYxu=S6T0X?*5z78 z;4=R4#E>bq_qgnmj@DZhnbgy*_1HU2YGyXGFirBiBkdUuCWivDu_!{;2}@_eD2tDw zRG{MK`15L~eAV&qE`3P+c3U8}MKnV?cw@ht%LmC{jw1HNfAwurYL04F)^pPQtc6hV z8iF?_Ga(3GoUKzq?uw^>L~bKwU-5IV(~e%S2<-FAETfKPIZYaQPnkAo=;7XhVz=Ko zn%!9Acgl0+HP5FZ_Z!xos@vHRG=*(+7>@4lE!)~pJ9YpwdU!~EP>Act4Dg;aw@v@MZrgI z#g(=GRNlGk>%Ye0^n(^Ox_?|T3{Pb@4BJn;wCS)PxdxhhBrK(`5stcZC zrwp<3tkFF-hr;HJD4&v_=isYe5=W&%H?C0gXT}%PwbMP16W+Wk#h4zK2aM;|-IW=rU5qjZ0{*I%U z*Dq=1RZc<+yaTad2PN*M_;IR(#uNDugS<6sq_r5Ad}!ZPK%Sz%XehIS!gzy}G7H>0 z9QY*rNX&zySu;g$ef0&-pR_MBP+D#nIoZyjFzCvA`;6~Dcs*wORtt+&7uq{whk>(&9A0>1Ai_m`)Tyz ylZqQ_OI6YL)DWxfZQuDH{K$lL(m@=3_Ajb$XmVakmnIzi3IPT^n%4AjYVkkv|H85W diff --git a/themes/bgrt/throbber-0020.png b/themes/bgrt/throbber-0020.png deleted file mode 100644 index b84b04dd859b199729c63df17ebf7cbffe8f3185..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1583 zcmYL}dpOg39LIl#2}dqtTPc>?ncFTRLwGEglq8f((S~8!W^E&ua#z^| zacx4#I31QHky~=vsZ>TR$3fvZQ_p$M_xXN4@8@~HKF|C6`RjYb!`($mVXp!J07|Y$ z9X%zA*r{D$NoTUzD-w~XAN6AbfFfk4q=27_;S$rH<>bq9CR0cNIy{m}LSG4D;(UYgEE^eO-k?lt43#l6TQP ziKn{b9g$cJBJfR67>rr^*seb$P<;n_1(RqbfECV&3<@GK5C<`#bY_C5pjE;lJKR&U zAc^t+lPHX(otNOX1gm|`jt!=ems(11=f>Q zuqBknf`!l*C3a=ZfwiZFHn8us*QeiG4a80lSasU$ocm2p7P^Ml%LNbLca*TH8@Ps# zAK678(%s)6^DZA5^IYAqecKgtDHNa@g>{NFiz>5dC+}C|b6OWjW4QjVm6wXpuJ-xC z@QOuLi*$;*xf^KI2FVWgiCt5Dj4aiwe^tfP6$15d^f4eP(Lwa~p3tDhK`nh^B-NUH zLCO^+7yY2FI|NF=N7d@LIw^J85{S_I;M$}Jty8ZXryZ<%_aB2rZDz(w;n;020%=1V zh!Ff5ckB!sTny?h6z-G#&P1oeq!KFRCr%xkpd{!;|CTwfGs)C}3S}ml7hb-2kBo7> z5?_^<+%tD(uzKi57;4WXZGYYJKYdNinrU40BG=96(hOcp4xM!1L;zwg^gO@x<}Y4* zdAza2L}k#EgdrtDRqY8{&LpHQY5=4q+jDWIJS*|6u-dBM=ku!Z-6!L(*FatkKiM|t}fQV7E@ zVKZN_L+=jzO1aV?g(3)F@MWUI`~$2uJ-XOq@G+EdV6DFC?r7BcYf^^Y-3zN;boqjD zd~tQd?j+qu3hU2&2tcvrR@xpJS`eqdA<(kLonONq`#CVH<_QYeIt{(B&P{jR5U|RHlM@kVHIW;A*}WI{;F9(7FTY%th+3VBy0p+cf;_ZlwMPU)!zb=EA(T$8QERvz`W%+p>2NZv6X}F7a|Ew`Wc9IeJKNMtOS1;fH$90-1R6P2zRlVYP^wY8WWM^~sv=^_Kh>$_kw)jLp|c-9gC&n%x}{VW7Mn6cfgN}F z6Mk4Olf!sNFRO?jF(zoJU)c5t@KnTn5(qU2vt^heG_o5}!wYnG5!GAF?YUi-{Hkg4 z_`0;O+#AE5Q-N)3S4w5=InS4NMJ9CQu7VX#Z(kYjkX_kU-IPIbjDxTg8re0YBNzK{MGz{e#*6bxuWK&3Mf-O=2gesRjyk* zsMd#45M$=txj5@RWIbbH@C-e?q*~#IXpbI#y<+!io|-nP>315r+b?X%;mi0O>}=Ez c5cH<~U;AcCT{$u^$&UxPI=MU6;t5Ir0u~;_O#lD@ diff --git a/themes/bgrt/throbber-0021.png b/themes/bgrt/throbber-0021.png deleted file mode 100644 index a64932df50150f1ac1e29b1d181b80430f802459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1602 zcmYL}eKga19LIm#JZ!|pT*|WumDz)bgtRcTYHq1csCn8Qn{BqX)lAq>Nm8g=vh~QV zZc28Ft5n!+6BDj(EfOP%+x@9?&pqe+`M%G2zdq;v`F#KR=4}fn8W~s_003Y_ z3JZw<)nTdNdf?4ZOVfga;D$x<0l*NsR1lz4wj4A!3J8&cPzH+zpy?bo4V}zjv*W2~ zK97n{VhGS&mWa*SFQB6ZbQ+t+NAtOiloT58KlMmp(Nca+$nMYqqn0m4g~SVJ01kuo zMPspOoTmd8>*ww5=Z&dR^tFLKCQCg#8EhJW!T5bYIPBm|2p(kcZ>#X)L5Rbq?WouQ zdZtTWFlh1Of$!ph!Qk?H;YtviFTovDS_%yi(0QDM1RBr56O+j0OCs9tfgHKSBfte| zy#GgfV0=hBzX(8V_AOgPWzqN!JL1_~PysB?H}lN$wE&>gPYT(zGZIm7wu5Wci3LH4ELpv{^qg6-wjl-eokTLt0Qa@}4JopqG`<0{JH57E(^g}NxhHVobL zLD+kuTXARs!-})8*twxg+H;UoY8-HGz2|giKvJhj-5*XSlgIy5sZ?cj;&9vj7wij} z{C>X{_Owbim)|w&d$&KNck?iNSzWI9QmEe8s>*>@XK^~MjZxJfoYNRrDtqYtVZD}B zozz_%3AHwf-U1t`>l-0<2gX6HK5gUUp303v1USap9DulBfp84r$#Mv1q=)D%5ca;}i4#s9EZ2b_{V{Tef z`_(4%yfClN#kIyhZ@r&*IhRM$wZ>1b*<$)y(fH zwMLt*JdC$MTtTJ8D|538d83M=-15&^`#WZg!-m}=LS=3R~^eck{j!*B%owKdnl+{IrTp4rpRt}kSAaANUi2^f> zh16#!Nv6zGEmDawklRvDtnzl$@7+as#B5sN-SF4mRms#vQK)STf6h65#R9;ZFb^<$ zeQ5A{^WL=egDWjeR;#>Lf8b6Hclq6)@i$sf_m&7->&oc$dSe}y;Ik7$f|^Q-t7qx| zxQTk7peB)%1>7~sYP0%s{-Eb{tGx}uT^1@gx@*+4Rm>VGYMQN`Z(#UBn$ZYs>@}|k zFyGDCnUTjwiniA=0&K=7m;d9e_IHqFPkOYEkx!9L4Y#hjfmW7{5-(Iw7`Ky%o$nD_AuAPnDUA4E}l!=h7S_WRGq{QN21!Ad%pGc4KXFALfl1( z?6N+mu9{CuiXHSqy_$PARL9B|%-!({1vTOFdzlT>UGh_dP1Obe-CvSpppT3W3mk{8wA$WXMpW9SLmpji zlzM57#=YSOlH27MVfHZTeWuh;7olw|NQYIek}u9jEmP+XtsSyt?sTt#R%SDYk}lZ* z#D+SD=G>@I6hboy9lWJMW#RN>=Z`#&;aV)f4j}oD|2QUoDs0S{+*17&FV?q^2yY>5{bq3sgh_8zAh!^)9nYex}R?KS6**2oI?Yip%~Nwrj*Y diff --git a/themes/bgrt/throbber-0022.png b/themes/bgrt/throbber-0022.png deleted file mode 100644 index 4b57e234270c5b3810796a93de9e85e008f446ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1595 zcmYL}e>~H99LK-PHRIB1$}-h-N-nmU!;Hd3BZ)>?UGihiuk43yE>ze?8g~+MlpmG4 zx+L>+QuL)&Ty>~hcE@H%NAlx{Z5DE0caMAA=ka;JUysM@`F^}U@4r5xfCJ>!hGvEU z0Ic@$_M||HSuTTBQ0FEm&q4xcdmrHffDv-J^nlAHD9CihN zjBpx`%c0?-Vt6=qToQwoz>CK5qUj7e7sqACFqw4De~OKWqccxL2wv(#QK;o8&u|_c zAmHtYI6FHW!5(90M{;l=Ip7=H<bSiGZ8&^!;q>;B13qQ%jjM74NWJ6KPLer8awaT$Eb4rqAFvCv1xP%ewIzTba8$*KcgnxgfC@8Kz&T(P~4q z;A*kEhh&ecb>H|0-r_r?iUtYdg3>oI94=A6eQ|Fn>OYTOp^& z#F{=I%qUh2i2PEV6-gc; zskvU%FsXfeRL>(g_Mnvcvg)4sXxiRVcfp*boBK^Lax5^|=9e65$%swIq4-Vl#R*wc zNtbV+zsFp8Z`st)c*VymJMw0UEiena$xF@XGM-`Y(VA{ ziFH?ZF_m(SY0-WvR8J|F^}UziyO_f2KXjKGT2e zs?P%~wMWhnT&C@tz+y(1bwxjQ&v&GHvRHziw|V#d!>4!ptW`g-;og=%MI1a1E}Bst zcI(IqLN5FEGgE>2oo|N<2J1i;n1IoRsPx#drZsn`Z~PMAlJ60V&M!I!7bWNU_bJG+ z4;5gm@$ZFDybk^yU>eb=NLLo~4Yjf=kC3Tu( zA6)ed`EUWel{<2)h_SXaosyt6MiF6HK`Q8~GkrFo(&mIxyM%QrBI?s{`bkyxD|pB` z!LOs~RlDG2`dtEhFz2mq_Vk1LdD!fX%0+yMUt!Qlt1-|nwr8Rh@h2vtDCcLypD*;k z0T;oqKdlJnKh~h-7ZXWj1)0@S%@934B&wd2@tt~cJ?qA#sS>1H=@+{CosZ>XMG4X7 pj+6Ucx<}|`XAc`QUQ3;qw$zWv#>e*6g3#{=_;?-gy!UmO;BO1~<);7u diff --git a/themes/bgrt/throbber-0023.png b/themes/bgrt/throbber-0023.png deleted file mode 100644 index b3dbeef0ed06455beaffa218655d8070cf2324d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1603 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 diff --git a/themes/bgrt/throbber-0025.png b/themes/bgrt/throbber-0025.png deleted file mode 100644 index 3905e00eeb09a3546eab2dec2158fa9bc5f280f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1604 zcmYL}dsGs36vsiy0B0%Uqm1bmq`l;kHnoM1K%;zt6bZkrln|nmSLJL?-Hj|I$$3}BFOx}NLPmf`8BIs$)K)NW)~D)tx*E~gJH(?R$$3}7%hOn`vJ-OqTR4)B|7+(ci8SMsz0-Wu@mS z9(E}B#v7oGQ|&_<@yEfg7Na%uiOSB-iwlumO{ClP_4T+Nc>L9ks&n%Cn!~x>oS0|% z^0ib3ox44q;a`)gE|{-aEj%MU`A6e?Z^e~}Ja&V@Z+#j2YvRnK+S*+N+BFCGh?H>r zHS1EhxxBsOO7-VO>e=g8cr@9=hnOEvva5FKEyWiz-{Gtkp5PD1069e|v>cri(#q5;ziiY58p?ksP zu_V29EJ`-(anf+t+sSS{sG&t6V>-p zGmBH4ce!bU!a5OPYtehVrrKx94c-)^bLCsLJb5)z@z+N+7if5>XMY<#uI#pc*SWG@ z0`~~jhcyikE0|glM(K#Z2bbM3jxp!v-`Hk&kZ>#sVW&oos03a5H6to zp`~-BM-`?bt%z&^YZaxH4BgK}wyum%C60$aSwBb^Qq5j^cr9`?^p$m5RBE%7n@*)v znp5+Ni!SVf$&oxWd3lJ|*sRUcw!u9hx5(LnaM%B;L2slYXB{iASK=X`ucL1FRoSvcsM^y_=sOM?v#moSz?Av^`%uIs8f=J zjsm^vhDPnYN?NT&Ef{%= z@ps<PYq;ZF~D4IVE@+G>%VU|P~h%*?N? zTaq|ppr$Qzkn;SuOz}0Km#f(htaP=)D^_3r$axYZ2a0BM`t{<+d&F~XQVR*Bk&Am^7d4XaWsbl~oT7)zZjixz?>dejRqAvxsS|r|qQq ztvL=>_7)aooX>-^7G9L-I&j%Q5|j$SjF wD~E2)ka~oIzC8+u<0Gd@SoVvtpxGs$Ch&UB0pY0y-8Tpz5q$~O9${(!0^C;FL;wH) diff --git a/themes/bgrt/throbber-0026.png b/themes/bgrt/throbber-0026.png deleted file mode 100644 index 4c02eb167941a3611d36f1b0cfab5086d77ad0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 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 diff --git a/themes/bgrt/throbber-0029.png b/themes/bgrt/throbber-0029.png deleted file mode 100644 index d9931e1ecbf2708841134a846f9d36d9cdbd20f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 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 X`%H>)eQ8Yx_}u|GPrOH^dqny_<-gJq -- 2.20.1 From a7ab82171f3a83cf709b91542d1299362c47474f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 9 Jan 2019 14:52:33 +0100 Subject: [PATCH 42/82] themes: spinner: Add watermark alignment settings Add watermark alignment settings, so that distros can simply drop a watermark.png into the theme dir from another package and then have it show up in the right place. Signed-off-by: Hans de Goede --- themes/spinner/spinner.plymouth.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index bbd42dc..6ba3f42 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -7,6 +7,8 @@ ModuleName=two-step ImageDir=@PLYMOUTH_THEME_PATH@/spinner HorizontalAlignment=.5 VerticalAlignment=.75 +WatermarkHorizontalAlignment=.5 +WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 BackgroundStartColor=0x202020 -- 2.20.1 From 203fe586bb698a21a90adc271f8fd2ed17905cf9 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 19 Dec 2018 09:37:16 +0100 Subject: [PATCH 43/82] themes: Update spinner and bgrt diskcrypt dialog Update the spinner and bgrt themses diskcrypt dialog to match the dialog from the "Disk decrypt" mockup from: https://wiki.gnome.org/Design/OS/BootProgress Signed-off-by: Hans de Goede --- themes/spinner/Makefile.am | 1 - themes/spinner/box.png | Bin 870 -> 0 bytes themes/spinner/bullet.png | Bin 131 -> 1016 bytes themes/spinner/entry.png | Bin 1431 -> 407 bytes themes/spinner/lock.png | Bin 329 -> 619 bytes 5 files changed, 1 deletion(-) delete mode 100644 themes/spinner/box.png diff --git a/themes/spinner/Makefile.am b/themes/spinner/Makefile.am index 2a008cb..6c3807f 100644 --- a/themes/spinner/Makefile.am +++ b/themes/spinner/Makefile.am @@ -3,7 +3,6 @@ nodist_theme_DATA = spinner.plymouth dist_theme_DATA = \ background-tile.png \ - box.png \ bullet.png \ entry.png \ lock.png \ diff --git a/themes/spinner/box.png b/themes/spinner/box.png deleted file mode 100644 index 54876e68097e45b215f6f4c4ab2f1c06c5bd1e4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmeAS@N?(olHy`uVBq!ia0y~yU{nIK{W#cwWXpePWgsP4;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk^Z!_&nvq~g|_Tl@W`(W@UmTf#;@V6`wU#Lhm4Z}sF0SlKS+*^aA-R3`>*{yeueW-)S*X4G@YAFJoyCWu z!{O)Wo_xLQ+`LKbFZ(4ABrTh`(q3?m&E9!O)NP+RvD74Xyi)P_S~F#t;;ilfL3MHE z1W&=NWnIR?iwip@ariP_*|lfSpSt|~_sjj3f8KO8Ywhm&2b4~2+9S``ULO}9zu(%z z;>Y5hQ&=)(7Mr-7-7@Rt_uuQw%gS~={Np^M{fA?Nt4VAm@8-(l;>)-1-mMj$9dwNE zs;kh#k7^}_g&z-p`}S>h!9D(Bb*BT<^;|cq{#~Z~{Q2|yM=gBg{-4?NKQi;#zkmOx zZ{4~z@lFfFw9H%si9HeV@&8Td*dJTj{p0k@#gWS|-{d(y@i(hYb7IDsusa>g;+xL4 zYv^}9authLV$_Kgm7aXQU1M*+4*vt;2AAiV*!&CU_z{&>mCVfaPyDrDg8-uwi-HS~ z;t*7DVQ^yMpuf;Xm%BcZ)8tvXD%2`NL!T}&&+K@Wvg%+$fplN)ckT+d)#c^o^`>h* zZwD{A9bmkC`SSeNyZ$ZHoL~R;T$Q`K`}^lgA+5SAv%;3@@F(>|6^2dHd{hy_YaB^>EX>4U6ba`-PAZ2)IW&i+q+TE9Ja^yG& zhX3mna|8oIpyS9Ns@fau@%NRi*xj9;WIFC2TVqu$8Dqda2zSEv?>{yC!a+Hu5Y;?k zG2w_gW-eIxv>*FSQ|#wkS-ZZIhvNoAB$#EtOxw^ekn8z?#eX56@8!XkVaJD|56{D( zG|!C1(DPwPc$d?-4tYFR;!Wt|uP)qg>%8B3ypD!stO|R=fj1$UaQ5a!5P`T9oVlMf zH_3$c)a4@nJa^$(J|yp0J>+gGLoWBJ2vZsg=^;l$PWn7|Jwvw<(dqf_Mz+Jn=iJrR zYu)y@D={HcDSwQY`goPTf+Erxr9YN1no-5t`p6iLS6o1B1x`rk2di zEn9K%=zr?T&E2z?%vsRFG^cDKd(OEOI4v+;@N|JjDKpP9$64nz+w60m%YyP*;-X7h zZ1E*8W#v^?Z2vW_7FJ*LS~l8HN?Y7?OPg)J<*iiIT9q2B)>N%}&9xlV2Gx6N^g!-w zYBZ=dVzKMlNeyDN4-?edi8f{+#*skW8UYkEH-Bc6Q;gimHD*(0Yzk#iBW-Y2YQ#V= zZp2#YV0V)Hl3URD5;y)GxzNzPgIs9n2D#7No={s$|Ds3-)OKOZ=_D164GNnV_R_vd zKc2%?1OGEabw08Z-Vn@lL)Bl2?92?!>7r z1B3g2Gemdm4(CTfv8V@mPx#JxN4CR2b8(&M^*vAQS}AC*IFO3hpl< zCLRK8)L8tIDJQeZGLsDl8ulot=omO(nSQ~FCGa2lSzajfp5LiP2(p^?!a4u|002ov JPDHLkV1lW|C*J@7 diff --git a/themes/spinner/entry.png b/themes/spinner/entry.png index 65810dea3ff2a03f620f13cdb9f680aa116c033d..e86c21594d0bd49dc0273f37200d7e3b9185d26a 100644 GIT binary patch delta 391 zcmbQvJ)K#xGr-TCmrII^fq{Y7)59eQNM8eDc@8!pIh(~eX!0s%nR?#qKbCYGe8D3oWGWGJ|M`UZqI z@`(c#{r7Zn45_&F_WDMz!vPX)5C6BMZMwAUs^Sgb!gY@pRFuc{FDQSg#47$aNoJ|< z!dNZOl2^~Bl~m93uK)4islEE$yZ8UGUGTiTWn=1FF z{*z7r-8^-j7nh%u2&MiMZGN<716xV$uhdAMcK3~U^OFBr?U$S~e`)A~#oKZhuUfUe hbZgy;*T0_f|0uQj`b1v+J}@vCJYD@<);T3K0RU@qq@(}< delta 1422 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 Date: Tue, 15 Jan 2019 09:48:30 +0100 Subject: [PATCH 44/82] ply-array: Add ply_array_contains_uint32_element function Add a new ply_array_contains_uint32_element which checks if the queried ply-array contains an element with the passed in uint32_t value. Signed-off-by: Hans de Goede --- src/libply/ply-array.c | 18 ++++++++++++++++++ src/libply/ply-array.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/libply/ply-array.c b/src/libply/ply-array.c index 7d23953..26532cf 100644 --- a/src/libply/ply-array.c +++ b/src/libply/ply-array.c @@ -169,4 +169,22 @@ ply_array_steal_uint32_elements (ply_array_t *array) return data; } +bool +ply_array_contains_uint32_element (ply_array_t *array, const uint32_t element) +{ + uint32_t const *elements; + int i, size; + + assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32); + + elements = (uint32_t const *) ply_buffer_get_bytes (array->buffer); + size = (ply_buffer_get_size (array->buffer) / sizeof(const uint32_t)) - 1; + + for (i = 0; i < size; i++) + if (elements[i] == element) + return true; + + return false; +} + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply/ply-array.h b/src/libply/ply-array.h index 777485c..3d8e9c4 100644 --- a/src/libply/ply-array.h +++ b/src/libply/ply-array.h @@ -23,6 +23,7 @@ #define PLY_ARRAY_H #include +#include typedef struct _ply_array ply_array_t; typedef enum _ply_array_element_type ply_array_element_type_t; @@ -46,6 +47,8 @@ uint32_t const *ply_array_get_uint32_elements (ply_array_t *array); void **ply_array_steal_pointer_elements (ply_array_t *array); uint32_t *ply_array_steal_uint32_elements (ply_array_t *array); +bool ply_array_contains_uint32_element (ply_array_t *array, + const uint32_t element); #endif #endif /* PLY_ARRAY_H */ -- 2.20.1 From 88f1b1dc0e7c51d7065403783ab1057b0f3ec31d Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 Jan 2019 09:21:59 +0100 Subject: [PATCH 45/82] ply-renderer: Add ply_renderer_handle_change_event function This function can be called to notify the renderer of udev change-events. This is a preparation patch for adding support for hotplugging monitors while plymouth is running. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-renderer-plugin.h | 1 + src/libply-splash-core/ply-renderer.c | 9 +++++++++ src/libply-splash-core/ply-renderer.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/libply-splash-core/ply-renderer-plugin.h b/src/libply-splash-core/ply-renderer-plugin.h index db18d19..6b6ff25 100644 --- a/src/libply-splash-core/ply-renderer-plugin.h +++ b/src/libply-splash-core/ply-renderer-plugin.h @@ -43,6 +43,7 @@ typedef struct bool (*open_device)(ply_renderer_backend_t *backend); void (*close_device)(ply_renderer_backend_t *backend); bool (*query_device)(ply_renderer_backend_t *backend); + bool (*handle_change_event)(ply_renderer_backend_t *backend); bool (*map_to_device)(ply_renderer_backend_t *backend); void (*unmap_from_device)(ply_renderer_backend_t *backend); void (*activate)(ply_renderer_backend_t *backend); diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c index 5e83627..e0a0784 100644 --- a/src/libply-splash-core/ply-renderer.c +++ b/src/libply-splash-core/ply-renderer.c @@ -297,6 +297,15 @@ ply_renderer_close (ply_renderer_t *renderer) renderer->is_active = false; } +bool +ply_renderer_handle_change_event (ply_renderer_t *renderer) +{ + if (renderer->plugin_interface->handle_change_event) + return renderer->plugin_interface->handle_change_event (renderer->backend); + + return false; +} + void ply_renderer_activate (ply_renderer_t *renderer) { diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h index c0e0ed5..820cdb6 100644 --- a/src/libply-splash-core/ply-renderer.h +++ b/src/libply-splash-core/ply-renderer.h @@ -55,6 +55,8 @@ ply_renderer_t *ply_renderer_new (ply_renderer_type_t renderer_type, void ply_renderer_free (ply_renderer_t *renderer); bool ply_renderer_open (ply_renderer_t *renderer); void ply_renderer_close (ply_renderer_t *renderer); +/* Returns true when the heads have changed as a result of the change event */ +bool ply_renderer_handle_change_event (ply_renderer_t *renderer); void ply_renderer_activate (ply_renderer_t *renderer); void ply_renderer_deactivate (ply_renderer_t *renderer); bool ply_renderer_is_active (ply_renderer_t *renderer); -- 2.20.1 From 80acc33ab37b73feb6092d477f5198e4f57dd649 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 14 Jan 2019 17:36:22 +0100 Subject: [PATCH 46/82] drm: Refactor ply_renderer_head_add_connector and ply_renderer_head_new Both these function take a bunch of info coming from the ply_output_t struct and with upcoming changes they are going to be using even more ply_output_t fields. Instead of passing all these fields one by one, simply directly pass a pointer to ply_output_t. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 56 ++++++++++++++---------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 20543ea..afc8d65 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -472,33 +472,29 @@ ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *back static bool ply_renderer_head_add_connector (ply_renderer_head_t *head, - drmModeConnector *connector, - drmModeModeInfo *mode) + ply_output_t *output) { - if (mode->hdisplay != head->area.width || mode->vdisplay != head->area.height) { + if (output->mode->hdisplay != head->area.width || output->mode->vdisplay != head->area.height) { ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head", - (int) mode->hdisplay, (int) mode->vdisplay, + (int) output->mode->hdisplay, (int) output->mode->vdisplay, (int) head->area.width, (int) head->area.height); return false; } else { ply_trace ("Adding connector with id %d to %dx%d head", - (int) connector->connector_id, + (int) output->connector->connector_id, (int) head->area.width, (int) head->area.height); } - ply_array_add_uint32_element (head->connector_ids, connector->connector_id); + ply_array_add_uint32_element (head->connector_ids, output->connector->connector_id); return true; } static ply_renderer_head_t * ply_renderer_head_new (ply_renderer_backend_t *backend, - drmModeConnector *connector, - drmModeModeInfo *mode, - uint32_t controller_id, + ply_output_t *output, uint32_t console_buffer_id, - int gamma_size, - ply_pixel_buffer_rotation_t rotation) + int gamma_size) { ply_renderer_head_t *head; int i, step; @@ -507,16 +503,16 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, head->backend = backend; head->connector_ids = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_UINT32); - head->controller_id = controller_id; + head->controller_id = output->controller_id; head->console_buffer_id = console_buffer_id; - head->connector0 = connector; - head->connector0_mode = mode; + head->connector0 = output->connector; + head->connector0_mode = output->mode; head->area.x = 0; head->area.y = 0; - head->area.width = mode->hdisplay; - head->area.height = mode->vdisplay; + head->area.width = output->mode->hdisplay; + head->area.height = output->mode->vdisplay; if (gamma_size) { head->gamma_size = gamma_size; @@ -530,26 +526,26 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, } } - ply_renderer_head_add_connector (head, connector, mode); + ply_renderer_head_add_connector (head, output); assert (ply_array_get_size (head->connector_ids) > 0); - head->pixel_buffer = ply_pixel_buffer_new_with_device_rotation (head->area.width, head->area.height, rotation); + head->pixel_buffer = ply_pixel_buffer_new_with_device_rotation (head->area.width, head->area.height, output->rotation); ply_pixel_buffer_set_device_scale (head->pixel_buffer, ply_get_device_scale (head->area.width, head->area.height, - connector->mmWidth, - connector->mmHeight)); + output->connector->mmWidth, + output->connector->mmHeight)); ply_trace ("Creating %ldx%ld renderer head", head->area.width, head->area.height); ply_pixel_buffer_fill_with_color (head->pixel_buffer, NULL, 0.0, 0.0, 0.0, 1.0); - if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS || - connector->connector_type == DRM_MODE_CONNECTOR_eDP || - connector->connector_type == DRM_MODE_CONNECTOR_DSI) { - backend->panel_width = mode->hdisplay; - backend->panel_height = mode->vdisplay; - backend->panel_rotation = rotation; + if (output->connector->connector_type == DRM_MODE_CONNECTOR_LVDS || + output->connector->connector_type == DRM_MODE_CONNECTOR_eDP || + output->connector->connector_type == DRM_MODE_CONNECTOR_DSI) { + backend->panel_width = output->mode->hdisplay; + backend->panel_height = output->mode->vdisplay; + backend->panel_rotation = output->rotation; backend->panel_scale = ply_pixel_buffer_get_device_scale (head->pixel_buffer); } @@ -1323,9 +1319,9 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (void *) (intptr_t) controller_id); if (head == NULL) { - head = ply_renderer_head_new (backend, connector, outputs[i].mode, - controller_id, console_buffer_id, - gamma_size, outputs[i].rotation); + head = ply_renderer_head_new (backend, &outputs[i], + console_buffer_id, + gamma_size); ply_list_append_data (backend->heads, head); @@ -1333,7 +1329,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (void *) (intptr_t) controller_id, head); } else { - if (!ply_renderer_head_add_connector (head, connector, outputs[i].mode)) + if (!ply_renderer_head_add_connector (head, &outputs[i])) ply_trace ("couldn't connect monitor to existing head"); drmModeFreeConnector (connector); -- 2.20.1 From 9b5d4df9f92909aa4c53d98f02c9343eb4ce97c7 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 07:31:32 +0100 Subject: [PATCH 47/82] drm: Stop keeing a drmModeConnector instance around Before this commit we were storing a pointer to the drmModeConnector in struct _ply_renderer_head, solely so that we can free it when destroying the head. This was necessary because we also stored a pointer to the mode we picked, which comes from insided the drmModeConnector. The drmModeModeInfo struct has no pointers, so we can simply store a copy of it instead of a pointer, which removes the need to keep the drmModeConnector around after probing the connectors. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 41 ++++++++++++++---------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index afc8d65..348f880 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -77,8 +77,7 @@ struct _ply_renderer_head unsigned long row_stride; ply_array_t *connector_ids; - drmModeConnector *connector0; - drmModeModeInfo *connector0_mode; + drmModeModeInfo connector0_mode; uint32_t controller_id; uint32_t console_buffer_id; @@ -118,7 +117,7 @@ typedef struct typedef struct { drmModeConnector *connector; - drmModeModeInfo *mode; + drmModeModeInfo mode; uint32_t controller_id; uint32_t possible_controllers; ply_pixel_buffer_rotation_t rotation; @@ -474,9 +473,9 @@ static bool ply_renderer_head_add_connector (ply_renderer_head_t *head, ply_output_t *output) { - if (output->mode->hdisplay != head->area.width || output->mode->vdisplay != head->area.height) { + if (output->mode.hdisplay != head->area.width || output->mode.vdisplay != head->area.height) { ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head", - (int) output->mode->hdisplay, (int) output->mode->vdisplay, + (int) output->mode.hdisplay, (int) output->mode.vdisplay, (int) head->area.width, (int) head->area.height); return false; } else { @@ -505,14 +504,12 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, head->connector_ids = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_UINT32); head->controller_id = output->controller_id; head->console_buffer_id = console_buffer_id; - - head->connector0 = output->connector; head->connector0_mode = output->mode; head->area.x = 0; head->area.y = 0; - head->area.width = output->mode->hdisplay; - head->area.height = output->mode->vdisplay; + head->area.width = output->mode.hdisplay; + head->area.height = output->mode.vdisplay; if (gamma_size) { head->gamma_size = gamma_size; @@ -543,8 +540,8 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, if (output->connector->connector_type == DRM_MODE_CONNECTOR_LVDS || output->connector->connector_type == DRM_MODE_CONNECTOR_eDP || output->connector->connector_type == DRM_MODE_CONNECTOR_DSI) { - backend->panel_width = output->mode->hdisplay; - backend->panel_height = output->mode->vdisplay; + backend->panel_width = output->mode.hdisplay; + backend->panel_height = output->mode.vdisplay; backend->panel_rotation = output->rotation; backend->panel_scale = ply_pixel_buffer_get_device_scale (head->pixel_buffer); } @@ -558,7 +555,6 @@ ply_renderer_head_free (ply_renderer_head_t *head) ply_trace ("freeing %ldx%ld renderer head", head->area.width, head->area.height); ply_pixel_buffer_free (head->pixel_buffer); - drmModeFreeConnector (head->connector0); ply_array_free (head->connector_ids); free (head->gamma); free (head); @@ -648,7 +644,7 @@ ply_renderer_head_set_scan_out_buffer (ply_renderer_backend_t *backend, ply_renderer_head_t *head, uint32_t buffer_id) { - drmModeModeInfo *mode = head->connector0_mode; + drmModeModeInfo *mode = &head->connector0_mode; uint32_t *connector_ids; int number_of_connectors; @@ -1211,6 +1207,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) */ found = 0; for (i = 0; i < backend->resources->count_connectors; i++) { + drmModeModeInfo *mode = NULL; drmModeConnector *connector; connector = drmModeGetConnector (backend->device_fd, @@ -1234,17 +1231,18 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) ply_renderer_connector_get_rotation_and_tiled (backend, &outputs[found]); if (!outputs[found].tiled && backend->use_preferred_mode) - outputs[found].mode = get_preferred_mode (connector); + mode = get_preferred_mode (connector); - if (!outputs[found].mode && outputs[found].controller_id) - outputs[found].mode = get_active_mode (backend, &outputs[found]); + if (!mode && outputs[found].controller_id) + mode = get_active_mode (backend, &outputs[found]); /* If we couldn't find the current active mode, fall back to the first available. */ - if (!outputs[found].mode) { + if (!mode) { ply_trace ("falling back to first available mode"); - outputs[found].mode = &connector->modes[0]; + mode = &connector->modes[0]; } + outputs[found].mode = *mode; found++; } @@ -1262,8 +1260,8 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) continue; if (outputs[i].controller_id == outputs[j].controller_id && - (outputs[i].mode->hdisplay != outputs[j].mode->hdisplay || - outputs[i].mode->vdisplay != outputs[j].mode->vdisplay)) { + (outputs[i].mode.hdisplay != outputs[j].mode.hdisplay || + outputs[i].mode.vdisplay != outputs[j].mode.vdisplay)) { ply_trace ("connector %u uses same controller as %u and modes differ, unlinking controller", outputs[j].connector->connector_id, outputs[i].connector->connector_id); @@ -1331,9 +1329,8 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } else { if (!ply_renderer_head_add_connector (head, &outputs[i])) ply_trace ("couldn't connect monitor to existing head"); - - drmModeFreeConnector (connector); } + drmModeFreeConnector (connector); } ply_hashtable_free (heads_by_controller_id); -- 2.20.1 From b3f1c7683d70b653ebde1d41342f6b549d5c2f1f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 08:31:20 +0100 Subject: [PATCH 48/82] drm: Stop storing a pointer to drmModeConnector in ply_output_t This is a preparation patch for hotplug support, for hotplug support we want to keep the ply_output_t for connectors around, this change decouples the lifetime of the drmModeConnector from the ply_output_t lifetime. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 66 +++++++++++++++--------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 348f880..07de083 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -116,10 +116,12 @@ typedef struct typedef struct { - drmModeConnector *connector; drmModeModeInfo mode; + uint32_t connector_id; + uint32_t connector_type; uint32_t controller_id; uint32_t possible_controllers; + int device_scale; ply_pixel_buffer_rotation_t rotation; bool tiled; } ply_output_t; @@ -444,6 +446,7 @@ connector_orientation_prop_to_rotation (drmModePropertyPtr prop, static void ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *backend, + drmModeConnector *connector, ply_output_t *output) { drmModePropertyPtr prop; @@ -452,14 +455,14 @@ ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *back output->rotation = PLY_PIXEL_BUFFER_ROTATE_UPRIGHT; output->tiled = false; - for (i = 0; i < output->connector->count_props; i++) { - prop = drmModeGetProperty (backend->device_fd, output->connector->props[i]); + for (i = 0; i < connector->count_props; i++) { + prop = drmModeGetProperty (backend->device_fd, connector->props[i]); if (!prop) continue; if ((prop->flags & DRM_MODE_PROP_ENUM) && strcmp (prop->name, "panel orientation") == 0) - output->rotation = connector_orientation_prop_to_rotation (prop, output->connector->prop_values[i]); + output->rotation = connector_orientation_prop_to_rotation (prop, connector->prop_values[i]); if ((prop->flags & DRM_MODE_PROP_BLOB) && strcmp (prop->name, "TILE") == 0) @@ -480,11 +483,11 @@ ply_renderer_head_add_connector (ply_renderer_head_t *head, return false; } else { ply_trace ("Adding connector with id %d to %dx%d head", - (int) output->connector->connector_id, + (int) output->connector_id, (int) head->area.width, (int) head->area.height); } - ply_array_add_uint32_element (head->connector_ids, output->connector->connector_id); + ply_array_add_uint32_element (head->connector_ids, output->connector_id); return true; } @@ -527,23 +530,19 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, assert (ply_array_get_size (head->connector_ids) > 0); head->pixel_buffer = ply_pixel_buffer_new_with_device_rotation (head->area.width, head->area.height, output->rotation); - ply_pixel_buffer_set_device_scale (head->pixel_buffer, - ply_get_device_scale (head->area.width, - head->area.height, - output->connector->mmWidth, - output->connector->mmHeight)); + ply_pixel_buffer_set_device_scale (head->pixel_buffer, output->device_scale); ply_trace ("Creating %ldx%ld renderer head", head->area.width, head->area.height); ply_pixel_buffer_fill_with_color (head->pixel_buffer, NULL, 0.0, 0.0, 0.0, 1.0); - if (output->connector->connector_type == DRM_MODE_CONNECTOR_LVDS || - output->connector->connector_type == DRM_MODE_CONNECTOR_eDP || - output->connector->connector_type == DRM_MODE_CONNECTOR_DSI) { + if (output->connector_type == DRM_MODE_CONNECTOR_LVDS || + output->connector_type == DRM_MODE_CONNECTOR_eDP || + output->connector_type == DRM_MODE_CONNECTOR_DSI) { backend->panel_width = output->mode.hdisplay; backend->panel_height = output->mode.vdisplay; backend->panel_rotation = output->rotation; - backend->panel_scale = ply_pixel_buffer_get_device_scale (head->pixel_buffer); + backend->panel_scale = output->device_scale; } return head; @@ -973,6 +972,7 @@ close_device (ply_renderer_backend_t *backend) static void output_get_controller_info (ply_renderer_backend_t *backend, + drmModeConnector *connector, ply_output_t *output) { int i; @@ -982,16 +982,16 @@ output_get_controller_info (ply_renderer_backend_t *backend, output->possible_controllers = 0xffffffff; - for (i = 0; i < output->connector->count_encoders; i++) { + for (i = 0; i < connector->count_encoders; i++) { encoder = drmModeGetEncoder (backend->device_fd, - output->connector->encoders[i]); + connector->encoders[i]); if (encoder == NULL) continue; - if (encoder->encoder_id == output->connector->encoder_id && encoder->crtc_id) { + if (encoder->encoder_id == connector->encoder_id && encoder->crtc_id) { ply_trace ("Found already lit monitor on connector %u using controller %u", - output->connector->connector_id, encoder->crtc_id); + connector->connector_id, encoder->crtc_id); output->controller_id = encoder->crtc_id; } @@ -1000,7 +1000,7 @@ output_get_controller_info (ply_renderer_backend_t *backend, */ output->possible_controllers &= encoder->possible_crtcs; ply_trace ("connector %u encoder %u possible controllers 0x%08x/0x%08x", - output->connector->connector_id, encoder->encoder_id, + connector->connector_id, encoder->encoder_id, encoder->possible_crtcs, output->possible_controllers); drmModeFreeEncoder (encoder); } @@ -1063,6 +1063,7 @@ get_preferred_mode (drmModeConnector *connector) static drmModeModeInfo * get_active_mode (ply_renderer_backend_t *backend, + drmModeConnector *connector, ply_output_t *output) { drmModeCrtc *controller; @@ -1077,7 +1078,7 @@ get_active_mode (ply_renderer_backend_t *backend, ply_trace ("Looking for connector mode index of active mode %dx%d", controller->mode.hdisplay, controller->mode.vdisplay); - mode = find_matching_connector_mode (backend, output->connector, &controller->mode); + mode = find_matching_connector_mode (backend, connector, &controller->mode); drmModeFreeCrtc (controller); @@ -1225,16 +1226,14 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) continue; } - outputs[found].connector = connector; - - output_get_controller_info (backend, &outputs[found]); - ply_renderer_connector_get_rotation_and_tiled (backend, &outputs[found]); + output_get_controller_info (backend, connector, &outputs[found]); + ply_renderer_connector_get_rotation_and_tiled (backend, connector, &outputs[found]); if (!outputs[found].tiled && backend->use_preferred_mode) mode = get_preferred_mode (connector); if (!mode && outputs[found].controller_id) - mode = get_active_mode (backend, &outputs[found]); + mode = get_active_mode (backend, connector, &outputs[found]); /* If we couldn't find the current active mode, fall back to the first available. */ @@ -1243,6 +1242,10 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) mode = &connector->modes[0]; } outputs[found].mode = *mode; + outputs[found].device_scale = ply_get_device_scale (mode->hdisplay, mode->vdisplay, + connector->mmWidth, connector->mmHeight); + outputs[found].connector_type = connector->connector_type; + drmModeFreeConnector (connector); found++; } @@ -1263,8 +1266,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) (outputs[i].mode.hdisplay != outputs[j].mode.hdisplay || outputs[i].mode.vdisplay != outputs[j].mode.vdisplay)) { ply_trace ("connector %u uses same controller as %u and modes differ, unlinking controller", - outputs[j].connector->connector_id, - outputs[i].connector->connector_id); + outputs[j].connector_id, outputs[i].connector_id); outputs[j].controller_id = 0; } } @@ -1289,13 +1291,12 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } for (i = 0; i < outputs_len; i++) ply_trace ("Using controller %u for connector %u", - outputs[i].controller_id, outputs[i].connector->connector_id); + outputs[i].controller_id, outputs[i].connector_id); /* Step 4: * Create heads for all valid outputs */ for (i = 0; i < outputs_len; i++) { - drmModeConnector *connector = outputs[i].connector; drmModeCrtc *controller; ply_renderer_head_t *head; uint32_t controller_id; @@ -1303,10 +1304,8 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) int gamma_size; controller = drmModeGetCrtc (backend->device_fd, outputs[i].controller_id); - if (!controller) { - drmModeFreeConnector (connector); + if (!controller) continue; - } controller_id = controller->crtc_id; console_buffer_id = controller->buffer_id; @@ -1330,7 +1329,6 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) if (!ply_renderer_head_add_connector (head, &outputs[i])) ply_trace ("couldn't connect monitor to existing head"); } - drmModeFreeConnector (connector); } ply_hashtable_free (heads_by_controller_id); -- 2.20.1 From 4ba6d4f4a238b506dc65e4e6516384a504a414af Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 08:34:58 +0100 Subject: [PATCH 49/82] drm: Add get_output_info helper function Add a new get_output_info helper function, which fill a ply_output_t with all info related to the connecter based on a connector-id. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 86 ++++++++++++++++-------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 07de083..da56fe4 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -124,6 +124,7 @@ typedef struct int device_scale; ply_pixel_buffer_rotation_t rotation; bool tiled; + bool connected; } ply_output_t; struct _ply_renderer_backend @@ -1085,6 +1086,48 @@ get_active_mode (ply_renderer_backend_t *backend, return mode; } +static void +get_output_info (ply_renderer_backend_t *backend, + uint32_t connector_id, + ply_output_t *output) +{ + drmModeModeInfo *mode = NULL; + drmModeConnector *connector; + + memset (output, 0, sizeof(*output)); + output->connector_id = connector_id; + + connector = drmModeGetConnector (backend->device_fd, connector_id); + if (connector == NULL) + return; + + if (connector->connection != DRM_MODE_CONNECTED || + connector->count_modes <= 0) + goto out; + + output_get_controller_info (backend, connector, output); + ply_renderer_connector_get_rotation_and_tiled (backend, connector, output); + + if (!output->tiled && backend->use_preferred_mode) + mode = get_preferred_mode (connector); + + if (!mode && output->controller_id) + mode = get_active_mode (backend, connector, output); + + /* If we couldn't find the current active mode, fall back to the first available. */ + if (!mode) { + ply_trace ("falling back to first available mode"); + mode = &connector->modes[0]; + } + output->mode = *mode; + output->device_scale = ply_get_device_scale (mode->hdisplay, mode->vdisplay, + connector->mmWidth, connector->mmHeight); + output->connector_type = connector->connector_type; + output->connected = true; +out: + drmModeFreeConnector (connector); +} + /* Some controllers can only drive some outputs, we want to find a combination * where all (connected) outputs get a controller. To do this setup_outputs * picks which output to assign a controller for first (trying all outputs), so @@ -1208,46 +1251,9 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) */ found = 0; for (i = 0; i < backend->resources->count_connectors; i++) { - drmModeModeInfo *mode = NULL; - drmModeConnector *connector; - - connector = drmModeGetConnector (backend->device_fd, - backend->resources->connectors[i]); - if (connector == NULL) - continue; - - if (connector->connection != DRM_MODE_CONNECTED) { - drmModeFreeConnector (connector); - continue; - } - - if (connector->count_modes <= 0) { - drmModeFreeConnector (connector); - continue; - } - - output_get_controller_info (backend, connector, &outputs[found]); - ply_renderer_connector_get_rotation_and_tiled (backend, connector, &outputs[found]); - - if (!outputs[found].tiled && backend->use_preferred_mode) - mode = get_preferred_mode (connector); - - if (!mode && outputs[found].controller_id) - mode = get_active_mode (backend, connector, &outputs[found]); - - /* If we couldn't find the current active mode, fall back to the first available. - */ - if (!mode) { - ply_trace ("falling back to first available mode"); - mode = &connector->modes[0]; - } - outputs[found].mode = *mode; - outputs[found].device_scale = ply_get_device_scale (mode->hdisplay, mode->vdisplay, - connector->mmWidth, connector->mmHeight); - outputs[found].connector_type = connector->connector_type; - drmModeFreeConnector (connector); - - found++; + get_output_info (backend, backend->resources->connectors[i], &outputs[found]); + if (outputs[found].connected) + found++; } outputs_len = found; /* outputs now contains found valid entries */ -- 2.20.1 From d68fd78ae17c2574976b78b5f31afd58b965abe5 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 08:58:45 +0100 Subject: [PATCH 50/82] drm: Store and keep all the outputs in the backend Put all outputs in the outputs array instead of just the connected ones and store the outputs array and the controller_id-to-head hashtable in the backend object instead of temporarily allocating them during enumeration. Also add new heads to the heads list and to the controller_id-to-head hashtable in ply_renderer_head_new where this really belongs. This allows nicely balancing these 2 with removing the head from the list and hash_table in the ply_renderer_head_remove function which is added in a follow-up commit. This is a preparation patch for adding support for hotplugging monitors while plymouth is running. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 55 ++++++++++++++++-------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index da56fe4..a66cd67 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -138,10 +138,14 @@ struct _ply_renderer_backend ply_renderer_input_source_t input_source; ply_list_t *heads; - ply_hashtable_t *heads_by_connector_id; + ply_hashtable_t *heads_by_controller_id; ply_hashtable_t *output_buffers; + ply_output_t *outputs; + int outputs_len; + int connected_count; + int32_t dither_red; int32_t dither_green; int32_t dither_blue; @@ -546,6 +550,10 @@ ply_renderer_head_new (ply_renderer_backend_t *backend, backend->panel_scale = output->device_scale; } + ply_list_append_data (backend->heads, head); + ply_hashtable_insert (backend->heads_by_controller_id, + (void *) (intptr_t) output->controller_id, + head); return head; } @@ -808,6 +816,7 @@ create_backend (const char *device_name, backend->requires_explicit_flushing = true; backend->output_buffers = ply_hashtable_new (ply_hashtable_direct_hash, ply_hashtable_direct_compare); + backend->heads_by_controller_id = ply_hashtable_new (NULL, NULL); backend->use_preferred_mode = should_use_preferred_mode (); return backend; @@ -827,9 +836,11 @@ destroy_backend (ply_renderer_backend_t *backend) free (backend->device_name); ply_hashtable_free (backend->output_buffers); + ply_hashtable_free (backend->heads_by_controller_id); drmModeFreeResources (backend->resources); + free (backend->outputs); free (backend); } @@ -1194,9 +1205,9 @@ setup_outputs (ply_renderer_backend_t *backend, best_count = count_setup_controllers (outputs, outputs_len); best_outputs = outputs; - for (i = 0; i < outputs_len && best_count < outputs_len; i++) { - /* Already assigned? */ - if (outputs[i].controller_id) + for (i = 0; i < outputs_len && best_count < backend->connected_count; i++) { + /* Not connected or already assigned? */ + if (!outputs[i].connected || outputs[i].controller_id) continue; /* Assign controller for connector i */ @@ -1238,24 +1249,21 @@ setup_outputs (ply_renderer_backend_t *backend, static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { - ply_hashtable_t *heads_by_controller_id; + int i, j, number_of_setup_outputs, outputs_len; ply_output_t *outputs; - int i, j, found, number_of_setup_outputs, outputs_len; - - heads_by_controller_id = ply_hashtable_new (NULL, NULL); outputs = calloc (backend->resources->count_connectors, sizeof(*outputs)); + outputs_len = backend->resources->count_connectors; /* Step 1: * Build a list of connected outputs and get pre-configured controllers. */ - found = 0; - for (i = 0; i < backend->resources->count_connectors; i++) { - get_output_info (backend, backend->resources->connectors[i], &outputs[found]); - if (outputs[found].connected) - found++; + backend->connected_count = 0; + for (i = 0; i < outputs_len; i++) { + get_output_info (backend, backend->resources->connectors[i], &outputs[i]); + if (outputs[i].connected) + backend->connected_count++; } - outputs_len = found; /* outputs now contains found valid entries */ /* Step 2: * Drop controllers for clones for which we've picked different modes. @@ -1282,13 +1290,13 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) * Assign controllers to outputs without a controller */ number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); - if (number_of_setup_outputs != outputs_len) { + if (number_of_setup_outputs != backend->connected_count) { /* First try, try to assign controllers to outputs without one */ ply_trace ("Some outputs don't have controllers, picking controllers"); outputs = setup_outputs (backend, outputs, outputs_len); number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); } - if (number_of_setup_outputs != outputs_len) { + if (number_of_setup_outputs != backend->connected_count) { /* Second try, re-assing controller for all outputs */ ply_trace ("Some outputs still don't have controllers, re-assigning controllers for all outputs"); for (i = 0; i < outputs_len; i++) @@ -1309,6 +1317,9 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) uint32_t console_buffer_id; int gamma_size; + if (!outputs[i].controller_id) + continue; + controller = drmModeGetCrtc (backend->device_fd, outputs[i].controller_id); if (!controller) continue; @@ -1318,27 +1329,21 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) gamma_size = controller->gamma_size; drmModeFreeCrtc (controller); - head = ply_hashtable_lookup (heads_by_controller_id, + head = ply_hashtable_lookup (backend->heads_by_controller_id, (void *) (intptr_t) controller_id); if (head == NULL) { head = ply_renderer_head_new (backend, &outputs[i], console_buffer_id, gamma_size); - - ply_list_append_data (backend->heads, head); - - ply_hashtable_insert (heads_by_controller_id, - (void *) (intptr_t) controller_id, - head); } else { if (!ply_renderer_head_add_connector (head, &outputs[i])) ply_trace ("couldn't connect monitor to existing head"); } } - ply_hashtable_free (heads_by_controller_id); - free (outputs); + backend->outputs_len = outputs_len; + backend->outputs = outputs; return ply_list_get_length (backend->heads) > 0; } -- 2.20.1 From 7cb2eb14892a3468a2e249709e3f09b7b852d36e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 09:21:05 +0100 Subject: [PATCH 51/82] drm: Limit backend->resources lifetime to within query_device We do not need / use backend->resources anywhere outside of the query_device function and with the upcoming hotplug support we need to get a fresh set of resources on change events, so limit the resources lifetime to query_device. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index a66cd67..4e3c41a 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -838,8 +838,6 @@ destroy_backend (ply_renderer_backend_t *backend) ply_hashtable_free (backend->output_buffers); ply_hashtable_free (backend->heads_by_controller_id); - drmModeFreeResources (backend->resources); - free (backend->outputs); free (backend); } @@ -1385,6 +1383,8 @@ has_32bpp_support (ply_renderer_backend_t *backend) static bool query_device (ply_renderer_backend_t *backend) { + bool ret = true; + assert (backend != NULL); assert (backend->device_fd >= 0); @@ -1397,15 +1397,16 @@ query_device (ply_renderer_backend_t *backend) if (!create_heads_for_active_connectors (backend)) { ply_trace ("Could not initialize heads"); - return false; - } - - if (!has_32bpp_support (backend)) { + ret = false; + } else if (!has_32bpp_support (backend)) { ply_trace ("Device doesn't support 32bpp framebuffer"); - return false; + ret = false; } - return true; + drmModeFreeResources (backend->resources); + backend->resources = NULL; + + return ret; } static bool -- 2.20.1 From cd0479675e0c853896a860913917300818b8f69d Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 09:54:09 +0100 Subject: [PATCH 52/82] drm: Allow calling ply_renderer_head_add_connector with existing connector_id Allow calling ply_renderer_head_add_connector with an existing connector_id and ignore this call. This allows calling create_heads_for_active_connectors multiple times, only creating/adding heads for new connectors. This is a preparation patch for adding support for hotplugging monitors while plymouth is running. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 4e3c41a..9998459 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -486,12 +486,15 @@ ply_renderer_head_add_connector (ply_renderer_head_t *head, (int) output->mode.hdisplay, (int) output->mode.vdisplay, (int) head->area.width, (int) head->area.height); return false; - } else { - ply_trace ("Adding connector with id %d to %dx%d head", - (int) output->connector_id, - (int) head->area.width, (int) head->area.height); } + if (ply_array_contains_uint32_element (head->connector_ids, output->connector_id)) { + ply_trace ("Head already contains connector with id %d", output->connector_id); + return false; + } + + ply_trace ("Adding connector with id %d to %dx%d head", + (int) output->connector_id, (int) head->area.width, (int) head->area.height); ply_array_add_uint32_element (head->connector_ids, output->connector_id); return true; -- 2.20.1 From 7774bd5e5132ace8060f9edd91395eaa42535246 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 15 Jan 2019 10:43:45 +0100 Subject: [PATCH 53/82] drm: Allow calling create_heads_for_active_connectors multiple times To support hotplugging monitors while plymouth is running, we must rebuild our outputs list and create and/or remove heads as necessary on every change event. This commit adds support for removing single outputs (rather then tearing down the whole backend) and adds a new first step to create_heads_for_active_connectors which goes over our view of the outputs before the change and removes any changed outputs from the heads they belong to, destroying the head if the last output/connector is removed. On the first call backend->output_len is 0, so this new first step is a no-op. On subsequent calls we can simply build the list as we do on the first call, changed outputs will already be removed by the new first step and for unchanged outputs we end up in ply_renderer_head_add_connector which will ignore the already added connector. Note this drops the "couldn't connect monitor to existing head" message, this is confusing when create_heads_for_active_connectors is called more then once and is unnecessary as ply_renderer_head_add_connector already logs a message on both failure exit paths. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 111 ++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 10 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 9998459..bb6ab77 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -734,6 +734,47 @@ ply_renderer_head_unmap (ply_renderer_backend_t *backend, head->scan_out_buffer_id = 0; } +static void +ply_renderer_head_remove (ply_renderer_backend_t *backend, + ply_renderer_head_t *head) +{ + if (head->scan_out_buffer_id) + ply_renderer_head_unmap (backend, head); + + ply_hashtable_remove (backend->heads_by_controller_id, + (void *) (intptr_t) head->controller_id); + ply_list_remove_data (backend->heads, head); + ply_renderer_head_free (head); +} + +static void +ply_renderer_head_remove_connector (ply_renderer_backend_t *backend, + ply_renderer_head_t *head, + uint32_t connector_id) +{ + int i, size = ply_array_get_size (head->connector_ids); + uint32_t *connector_ids; + + if (!ply_array_contains_uint32_element (head->connector_ids, connector_id)) { + ply_trace ("Head does not contain connector %u, cannot remove", connector_id); + return; + } + + if (size == 1) { + ply_renderer_head_remove (backend, head); + return; + } + + /* Empty the array and re-add all connectors except the one being removed */ + connector_ids = ply_array_steal_uint32_elements (head->connector_ids); + for (i = 0; i < size; i++) { + if (connector_ids[i] != connector_id) + ply_array_add_uint32_element (head->connector_ids, + connector_ids[i]); + } + free (connector_ids); +} + static void flush_area (const char *src, unsigned long src_row_stride, @@ -1247,18 +1288,65 @@ setup_outputs (ply_renderer_backend_t *backend, return (ply_output_t *)best_outputs; } +static void +remove_output (ply_renderer_backend_t *backend, ply_output_t *output) +{ + ply_renderer_head_t *head; + + head = ply_hashtable_lookup (backend->heads_by_controller_id, + (void *) (intptr_t) output->controller_id); + if (head == NULL) { + ply_trace ("Could not find head for connector %u, controller %u, cannot remove", + output->connector_id, output->controller_id); + return; + } + + ply_renderer_head_remove_connector (backend, head, output->connector_id); +} + +/* Update our outputs array to match the hardware state and + * create and/or remove heads as necessary. + * Returns true if any heads were modified. + */ static bool create_heads_for_active_connectors (ply_renderer_backend_t *backend) { int i, j, number_of_setup_outputs, outputs_len; - ply_output_t *outputs; + ply_output_t output, *outputs; + bool changed = false; + + /* Step 1: + * Remove existing outputs from heads if they have changed. + */ + ply_trace ("Checking currently connected outputs for changes"); + for (i = 0; i < backend->outputs_len; i++) { + if (!backend->outputs[i].controller_id) + continue; + + get_output_info (backend, backend->outputs[i].connector_id, &output); + + if (memcmp(&backend->outputs[i], &output, sizeof(ply_output_t))) { + ply_trace ("Output for connector %u changed, removing", + backend->outputs[i].connector_id); + remove_output (backend, &backend->outputs[i]); + changed = true; + } + } + + /* Step 2: + * Now that we've removed changed connectors from the heads, we can + * simply rebuild the outputs array from scratch. For any unchanged + * outputs for which we already have a head, we will end up in + * ply_renderer_head_add_connector which will ignore the already + * added connector. + */ + ply_trace ("(Re)enumerating all outputs"); + free (backend->outputs); + backend->outputs = NULL; outputs = calloc (backend->resources->count_connectors, sizeof(*outputs)); outputs_len = backend->resources->count_connectors; - /* Step 1: - * Build a list of connected outputs and get pre-configured controllers. - */ backend->connected_count = 0; for (i = 0; i < outputs_len; i++) { get_output_info (backend, backend->resources->connectors[i], &outputs[i]); @@ -1266,7 +1354,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) backend->connected_count++; } - /* Step 2: + /* Step 3: * Drop controllers for clones for which we've picked different modes. */ for (i = 0; i < outputs_len; i++) { @@ -1287,7 +1375,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) } } - /* Step 3: + /* Step 4: * Assign controllers to outputs without a controller */ number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); @@ -1308,7 +1396,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) ply_trace ("Using controller %u for connector %u", outputs[i].controller_id, outputs[i].connector_id); - /* Step 4: + /* Step 5: * Create heads for all valid outputs */ for (i = 0; i < outputs_len; i++) { @@ -1337,16 +1425,19 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) head = ply_renderer_head_new (backend, &outputs[i], console_buffer_id, gamma_size); + changed = true; } else { - if (!ply_renderer_head_add_connector (head, &outputs[i])) - ply_trace ("couldn't connect monitor to existing head"); + if (ply_renderer_head_add_connector (head, &outputs[i])) + changed = true; } } backend->outputs_len = outputs_len; backend->outputs = outputs; - return ply_list_get_length (backend->heads) > 0; + ply_trace ("outputs %schanged\n", changed ? "" : "un"); + + return changed; } static bool -- 2.20.1 From 475a51d0576d0a488023f870c92f39eb8b0a21c1 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 Jan 2019 14:50:34 +0100 Subject: [PATCH 54/82] drm: Ensure heads are mapped before flushing them The drm plugin's map_to_device function will return true if mapping of any of the heads has succeeded, potentially leaving some heads unmapped. This causes the "assert (buffer != NULL)" in begin_flush to trigger when flushing the heads as head->scan_out_buffer_id is 0. It seems that even though this is a pre-existing problem we sofar have not hit this, likely because ply_renderer_head_map in pratice never fails. However with the new monitor hotplug support, a head may be added after map_to_device is called, triggering the assert. This commit fixes both the theoretical pre-existing problem and the actual problem triggered by hotplug support by ensuring that the head is mapped before flushing it. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index bb6ab77..0963a84 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -715,11 +715,6 @@ ply_renderer_head_map (ply_renderer_backend_t *backend, return false; } - /* FIXME: Maybe we should blit the fbcon contents instead of the (blank) - * shadow buffer? - */ - ply_renderer_head_redraw (backend, head); - return true; } @@ -1518,8 +1513,13 @@ map_to_device (ply_renderer_backend_t *backend) head = (ply_renderer_head_t *) ply_list_node_get_data (node); next_node = ply_list_get_next_node (backend->heads, node); - if (ply_renderer_head_map (backend, head)) + if (ply_renderer_head_map (backend, head)) { + /* FIXME: Maybe we should blit the fbcon contents instead of the (blank) + * shadow buffer? + */ + ply_renderer_head_redraw (backend, head); head_mapped = true; + } node = next_node; } @@ -1605,6 +1605,12 @@ flush_head (ply_renderer_backend_t *backend, updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer); areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region); + /* A hotplugged head may not be mapped yet, map it now. */ + if (!head->scan_out_buffer_id) { + if (!ply_renderer_head_map (backend, head)) + return; + } + map_address = begin_flush (backend, head->scan_out_buffer_id); node = ply_list_get_first_node (areas_to_flush); -- 2.20.1 From 15ebdd6d5b0e98d7511815e2dfbe82d2ec86f493 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 Jan 2019 09:41:42 +0100 Subject: [PATCH 55/82] drm: Implement handle_change_event Now that we can call create_heads_for_active_connectors multiple times we can implement handle_change_event. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 32 ++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 0963a84..b190737 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -1304,7 +1304,7 @@ remove_output (ply_renderer_backend_t *backend, ply_output_t *output) * Returns true if any heads were modified. */ static bool -create_heads_for_active_connectors (ply_renderer_backend_t *backend) +create_heads_for_active_connectors (ply_renderer_backend_t *backend, bool change) { int i, j, number_of_setup_outputs, outputs_len; ply_output_t output, *outputs; @@ -1380,8 +1380,12 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend) outputs = setup_outputs (backend, outputs, outputs_len); number_of_setup_outputs = count_setup_controllers (outputs, outputs_len); } - if (number_of_setup_outputs != backend->connected_count) { - /* Second try, re-assing controller for all outputs */ + /* Try again if necessary, re-assing controllers for all outputs. + * Note this is skipped when processing change events, as we don't + * want to mess with the controller assignment of already lit monitors + * in that case. + */ + if (!change && number_of_setup_outputs != backend->connected_count) { ply_trace ("Some outputs still don't have controllers, re-assigning controllers for all outputs"); for (i = 0; i < outputs_len; i++) outputs[i].controller_id = 0; @@ -1484,7 +1488,7 @@ query_device (ply_renderer_backend_t *backend) return false; } - if (!create_heads_for_active_connectors (backend)) { + if (!create_heads_for_active_connectors (backend, false)) { ply_trace ("Could not initialize heads"); ret = false; } else if (!has_32bpp_support (backend)) { @@ -1498,6 +1502,25 @@ query_device (ply_renderer_backend_t *backend) return ret; } +static bool +handle_change_event (ply_renderer_backend_t *backend) +{ + bool ret = true; + + backend->resources = drmModeGetResources (backend->device_fd); + if (backend->resources == NULL) { + ply_trace ("Could not get card resources for change event"); + return false; + } + + ret = create_heads_for_active_connectors (backend, true); + + drmModeFreeResources (backend->resources); + backend->resources = NULL; + + return ret; +} + static bool map_to_device (ply_renderer_backend_t *backend) { @@ -1776,6 +1799,7 @@ ply_renderer_backend_get_interface (void) .open_device = open_device, .close_device = close_device, .query_device = query_device, + .handle_change_event = handle_change_event, .map_to_device = map_to_device, .unmap_from_device = unmap_from_device, .activate = activate, -- 2.20.1 From c54870fc6663b010b2a3eb4a44df5dd41dd7011c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 17 Jan 2019 11:41:46 +0100 Subject: [PATCH 56/82] drm: Reset mode on display-port connected outputs with a bad link-status With Display-Port links, esp. with DP MST links we may need to reset the mode if the kernel decides to retrain the link. If the kernel has retrained the link, the list of available modes may have changed. If it changed and the mode we picked is no longer available because of this, we treat this as an unplug + replug. Since we may want to set another mode, the kernel does not automatically restore the previous mode. So in case the mode did not change we need to do an explicit mode-set. This commits adds support for this, by: 1) Adding a scan_out_buffer_needs_reset member to ply_renderer_head 2) Storing the link-status when going over the connector properties 3) Checking the link-status when adding a connector to a head and setting the scan_out_buffer_needs_reset flag when the link-status is bad This commit also makes ply_renderer_head_map set scan_out_buffer_needs_reset, avoiding an unnecessary round-trip to the kernel in the first reset_scan_out_buffer_if_needed call. Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index b190737..cb228f6 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -82,6 +82,7 @@ struct _ply_renderer_head uint32_t controller_id; uint32_t console_buffer_id; uint32_t scan_out_buffer_id; + bool scan_out_buffer_needs_reset; int gamma_size; uint16_t *gamma; @@ -122,6 +123,7 @@ typedef struct uint32_t controller_id; uint32_t possible_controllers; int device_scale; + int link_status; ply_pixel_buffer_rotation_t rotation; bool tiled; bool connected; @@ -473,6 +475,12 @@ ply_renderer_connector_get_rotation_and_tiled (ply_renderer_backend_t *back strcmp (prop->name, "TILE") == 0) output->tiled = true; + if ((prop->flags & DRM_MODE_PROP_ENUM) && + strcmp (prop->name, "link-status") == 0) { + output->link_status = connector->prop_values[i]; + ply_trace ("link-status %d", output->link_status); + } + drmModeFreeProperty (prop); } } @@ -481,6 +489,9 @@ static bool ply_renderer_head_add_connector (ply_renderer_head_t *head, ply_output_t *output) { + if (output->link_status == DRM_MODE_LINK_STATUS_BAD) + head->scan_out_buffer_needs_reset = true; + if (output->mode.hdisplay != head->area.width || output->mode.vdisplay != head->area.height) { ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head", (int) output->mode.hdisplay, (int) output->mode.vdisplay, @@ -715,6 +726,7 @@ ply_renderer_head_map (ply_renderer_backend_t *backend, return false; } + head->scan_out_buffer_needs_reset = true; return true; } @@ -1589,6 +1601,13 @@ reset_scan_out_buffer_if_needed (ply_renderer_backend_t *backend, if (!ply_terminal_is_active (backend->terminal)) return false; + if (head->scan_out_buffer_needs_reset) { + ply_renderer_head_set_scan_out_buffer (backend, head, + head->scan_out_buffer_id); + head->scan_out_buffer_needs_reset = false; + return true; + } + controller = drmModeGetCrtc (backend->device_fd, head->controller_id); if (controller == NULL) -- 2.20.1 From ccdb1d1fe1f99523d570b4e37cc14401c3891b9a Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 21 Jan 2019 15:41:37 +0100 Subject: [PATCH 57/82] drm: Stop limiting preferred-mode picking to UEFI systems When the code to pick the preferred-mode for outputs was first added, it was limited to UEFI systems, since it was necessary there. It was not enabled everywhere right away because there were some worries it might cause regressions. We've been shipping this for a while now and no regressions have been reported, moreover with the new hotplug support we really want to pick the preferred-mode rather then falling back to the first mode in the list. Therefor this commits removes the check for UEFI systems from should_use_preferred_mode(). Signed-off-by: Hans de Goede --- src/plugins/renderers/drm/plugin.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index cb228f6..0151f47 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -172,19 +172,9 @@ static bool reset_scan_out_buffer_if_needed (ply_renderer_backend_t *backend, static void flush_head (ply_renderer_backend_t *backend, ply_renderer_head_t *head); -static bool efi_enabled (void) -{ - return ply_directory_exists ("/sys/firmware/efi/efivars"); -} - /* A small helper to determine if we should try to keep the current mode - * or pick the best mode ourselves, we keep the current mode if: - * 1. The user specified a specific mode using video= on the commandline - * 2. The code to pick the best mode was added because with flicker-free boot - * we can no longer rely on the kernel's fbcon code setting things up. - * We should be able to do a better job then fbcon regardless, but for - * now lets only use the new code on flicker-free systems until it is - * more mature, this means only using it on UEFI systems. + * or pick the best mode ourselves, we keep the current mode only if the + * user specified a specific mode using video= on the commandline. */ static bool should_use_preferred_mode (void) @@ -194,9 +184,6 @@ should_use_preferred_mode (void) if (ply_kernel_command_line_get_string_after_prefix ("video=")) use_preferred_mode = false; - if (!efi_enabled ()) - use_preferred_mode = false; - ply_trace ("should_use_preferred_mode: %d", use_preferred_mode); return use_preferred_mode; -- 2.20.1 From f9e376797a91ad5fbc1f8e8e4aea778f4f22397c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 17 Jan 2019 14:52:41 +0100 Subject: [PATCH 58/82] ply-device-manager: Consume all events in one go Drm devices generate a bunch of add and change events when the kms driver loads, consume these all in one go. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 8ceee10..028bf4a 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -371,7 +371,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager, return found_device; } -static void +static bool on_udev_event (ply_device_manager_t *manager) { struct udev_device *device; @@ -379,14 +379,14 @@ on_udev_event (ply_device_manager_t *manager) device = udev_monitor_receive_device (manager->udev_monitor); if (device == NULL) - return; + return false; action = udev_device_get_action (device); ply_trace ("got %s event for device %s", action, udev_device_get_sysname (device)); if (action == NULL) - return; + return false; if (strcmp (action, "add") == 0) { const char *subsystem; @@ -406,6 +406,14 @@ on_udev_event (ply_device_manager_t *manager) } udev_device_unref (device); + return true; +} + +static void +on_udev_event_loop (ply_device_manager_t *manager) +{ + /* Call on_udev_event until all events are consumed */ + while (on_udev_event (manager)) {} } static void @@ -435,7 +443,7 @@ watch_for_udev_events (ply_device_manager_t *manager) fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, (ply_event_handler_t) - on_udev_event, + on_udev_event_loop, NULL, manager); } -- 2.20.1 From e54f6a47318d82b4e4df024855bd76d888b89675 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 14 Jan 2019 11:47:21 +0100 Subject: [PATCH 59/82] ply-device-manager: Handle change events for monitor hotplugging Not only handle add but also change events for drm-subsys devices, change events are generated when the hardware detect a new monitor has been plugged in. This is esp. important with modern DisplayPort MST docking stations where discovery / enumeration can take so long that the connected displays are not enumerated by the kernel yet when the drm plugin first calls drmModeGetResources(). Causing the monitors on these docks to sometimes not show plymouth during boot (based on various timing parameters). Note that if during the add event drm-renderer could not be bound, this commit tries to re-bind the DRM renderer on change events in case a monitor got plugged into a GPU which did not have anything connected before. This often happens with the second GPU in a laptop with a hybrid GPU setup. BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1652279 Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 40 +++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 028bf4a..e2a9eae 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -51,6 +51,9 @@ static bool create_devices_for_terminal_and_renderer_type (ply_device_manager_t const char *device_path, ply_terminal_t *terminal, ply_renderer_type_t renderer_type); +static void create_pixel_displays_for_renderer (ply_device_manager_t *manager, + ply_renderer_t *renderer); + struct _ply_device_manager { ply_device_manager_flags_t flags; @@ -371,6 +374,39 @@ create_devices_for_subsystem (ply_device_manager_t *manager, return found_device; } +static void +on_drm_udev_add_or_change (ply_device_manager_t *manager, + const char *action, + struct udev_device *device) +{ + const char *device_path = udev_device_get_devnode (device); + ply_renderer_t *renderer; + bool changed; + + if (device_path == NULL) + return; + + renderer = ply_hashtable_lookup (manager->renderers, (void *) device_path); + if (renderer == NULL) { + /* We also try to create the renderer again on change events, + * renderer creation fails when no outputs are connected and + * this may have changed. + */ + create_devices_for_udev_device (manager, device); + return; + } + + /* Renderer exists, bail if this is not a change event */ + if (strcmp (action, "change")) + return; + + changed = ply_renderer_handle_change_event (renderer); + if (changed) { + free_displays_for_renderer (manager, renderer); + create_pixel_displays_for_renderer (manager, renderer); + } +} + static bool on_udev_event (ply_device_manager_t *manager) { @@ -388,7 +424,7 @@ on_udev_event (ply_device_manager_t *manager) if (action == NULL) return false; - if (strcmp (action, "add") == 0) { + if (strcmp (action, "add") == 0 || strcmp (action, "change") == 0) { const char *subsystem; subsystem = udev_device_get_subsystem (device); @@ -397,7 +433,7 @@ on_udev_event (ply_device_manager_t *manager) if (manager->local_console_managed && manager->local_console_is_text) ply_trace ("ignoring since we're already using text splash for local console"); else - create_devices_for_udev_device (manager, device); + on_drm_udev_add_or_change (manager, action, device); } else { ply_trace ("ignoring since we only handle subsystem %s devices after timeout", subsystem); } -- 2.20.1 From f7d82041981884bbf9d6ba0fdab2a920cdf04255 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 18 Feb 2019 10:22:21 -0500 Subject: [PATCH 60/82] boot-server: fix type confusion when allocating connection object Right now we allocate enough room for a whole ply_boot_server_t object for every connection object. This commit mops up the over-allocation --- src/ply-boot-server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ply-boot-server.c b/src/ply-boot-server.c index ff0e6fd..5519550 100644 --- a/src/ply-boot-server.c +++ b/src/ply-boot-server.c @@ -161,7 +161,7 @@ ply_boot_connection_new (ply_boot_server_t *server, { ply_boot_connection_t *connection; - connection = calloc (1, sizeof(ply_boot_server_t)); + connection = calloc (1, sizeof(ply_boot_connection_t)); connection->fd = fd; connection->server = server; connection->watch = NULL; -- 2.20.1 From dfa1dcc6218af13eb3cf328b6ac6ccb86f1a961c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 6 Feb 2019 11:48:55 +0100 Subject: [PATCH 61/82] ply-label: Make sure get_width_of_control / get_height_of_control return correct values Users of ply_label may want to know the height / width of the text before calling ply_label_show, so that they can e.g. vertically align it. This commit adds a size_needs_update bool to the label plugin and uses this to check if executing size_control is necessary before returning the width / height and also modifies the ply-label code to load the plugin from its get_width / get_height methods. As an added advantage this will also skip unnecessary size_control calls when calling ply_label_show on an already visible label. Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-label.c | 6 ++-- src/plugins/controls/label/plugin.c | 47 +++++++++++++++----------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/libply-splash-graphics/ply-label.c b/src/libply-splash-graphics/ply-label.c index cfc8098..42d9dfb 100644 --- a/src/libply-splash-graphics/ply-label.c +++ b/src/libply-splash-graphics/ply-label.c @@ -299,7 +299,8 @@ long ply_label_get_width (ply_label_t *label) { if (label->plugin_interface == NULL) - return 0; + if (!ply_label_load_plugin (label)) + return 0; return label->plugin_interface->get_width_of_control (label->control); } @@ -308,7 +309,8 @@ long ply_label_get_height (ply_label_t *label) { if (label->plugin_interface == NULL) - return 0; + if (!ply_label_load_plugin (label)) + return 0; return label->plugin_interface->get_height_of_control (label->control); } diff --git a/src/plugins/controls/label/plugin.c b/src/plugins/controls/label/plugin.c index acba52b..b552981 100644 --- a/src/plugins/controls/label/plugin.c +++ b/src/plugins/controls/label/plugin.c @@ -66,6 +66,7 @@ struct _ply_label_plugin_control float alpha; uint32_t is_hidden : 1; + uint32_t needs_size_update : 1; }; ply_label_plugin_interface_t *ply_label_plugin_get_interface (void); @@ -93,18 +94,6 @@ destroy_control (ply_label_plugin_control_t *label) free (label); } -static long -get_width_of_control (ply_label_plugin_control_t *label) -{ - return label->area.width; -} - -static long -get_height_of_control (ply_label_plugin_control_t *label) -{ - return label->area.height; -} - static cairo_t * get_cairo_context_for_pixel_buffer (ply_label_plugin_control_t *label, ply_pixel_buffer_t *pixel_buffer) @@ -175,15 +164,20 @@ init_pango_text_layout (cairo_t *cairo_context, } static void -size_control (ply_label_plugin_control_t *label) +size_control (ply_label_plugin_control_t *label, bool force) { cairo_t *cairo_context; PangoLayout *pango_layout; int text_width; int text_height; - if (label->is_hidden) + if (force && !label->needs_size_update) + return; /* Size already is up to date */ + + if (!force && label->is_hidden) { + label->needs_size_update = true; return; + } cairo_context = get_cairo_context_for_sizing (label); @@ -195,6 +189,7 @@ size_control (ply_label_plugin_control_t *label) g_object_unref (pango_layout); cairo_destroy (cairo_context); + label->needs_size_update = false; } static void @@ -261,7 +256,7 @@ set_alignment_for_control (ply_label_plugin_control_t *label, if (label->alignment != pango_alignment) { dirty_area = label->area; label->alignment = pango_alignment; - size_control (label); + size_control (label, false); if (!label->is_hidden && label->display != NULL) ply_pixel_display_draw_area (label->display, dirty_area.x, dirty_area.y, @@ -278,7 +273,7 @@ set_width_for_control (ply_label_plugin_control_t *label, if (label->width != width) { dirty_area = label->area; label->width = width; - size_control (label); + size_control (label, false); if (!label->is_hidden && label->display != NULL) ply_pixel_display_draw_area (label->display, dirty_area.x, dirty_area.y, @@ -296,7 +291,7 @@ set_text_for_control (ply_label_plugin_control_t *label, dirty_area = label->area; free (label->text); label->text = strdup (text); - size_control (label); + size_control (label, false); if (!label->is_hidden && label->display != NULL) ply_pixel_display_draw_area (label->display, dirty_area.x, dirty_area.y, @@ -317,7 +312,7 @@ set_font_for_control (ply_label_plugin_control_t *label, label->fontdesc = strdup (fontdesc); else label->fontdesc = NULL; - size_control (label); + size_control (label, false); if (!label->is_hidden && label->display != NULL) ply_pixel_display_draw_area (label->display, dirty_area.x, dirty_area.y, @@ -358,7 +353,7 @@ show_control (ply_label_plugin_control_t *label, label->is_hidden = false; - size_control (label); + size_control (label, true); if (!label->is_hidden && label->display != NULL) ply_pixel_display_draw_area (label->display, @@ -389,6 +384,20 @@ is_control_hidden (ply_label_plugin_control_t *label) return label->is_hidden; } +static long +get_width_of_control (ply_label_plugin_control_t *label) +{ + size_control (label, true); + return label->area.width; +} + +static long +get_height_of_control (ply_label_plugin_control_t *label) +{ + size_control (label, true); + return label->area.height; +} + ply_label_plugin_interface_t * ply_label_plugin_get_interface (void) { -- 2.20.1 From ebf60f70197efa40c43f9cd537c5ec771e5b59b3 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 8 Feb 2019 18:04:01 +0100 Subject: [PATCH 62/82] ply-progress-bar: Redraw on percentage update All the other plymouth widgets do a (re)draw when one of their properties get updated. Make ply-progress-bar also do this, this allows dropping the draw calls directly after the 2 current callers of ply_progress_bar_set_percent_done. Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-progress-bar.c | 1 + src/plugins/splash/throbgress/plugin.c | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libply-splash-graphics/ply-progress-bar.c b/src/libply-splash-graphics/ply-progress-bar.c index c0b5f9a..2ba3bf4 100644 --- a/src/libply-splash-graphics/ply-progress-bar.c +++ b/src/libply-splash-graphics/ply-progress-bar.c @@ -199,6 +199,7 @@ ply_progress_bar_set_percent_done (ply_progress_bar_t *progress_bar, double percent_done) { progress_bar->percent_done = percent_done; + ply_progress_bar_draw (progress_bar); } double diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c index a1c8a90..4016d96 100644 --- a/src/plugins/splash/throbgress/plugin.c +++ b/src/plugins/splash/throbgress/plugin.c @@ -736,7 +736,6 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin, next_node = ply_list_get_next_node (plugin->views, node); ply_progress_bar_set_percent_done (view->progress_bar, percent_done); - ply_progress_bar_draw (view->progress_bar); node = next_node; } @@ -940,7 +939,6 @@ system_update (ply_boot_splash_plugin_t *plugin, view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); - ply_progress_bar_draw (view->progress_bar); node = next_node; } } -- 2.20.1 From 78bb39da5cc9b95d582665f42d2a1d6fb7bc0c15 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 8 Feb 2019 14:06:28 +0100 Subject: [PATCH 63/82] ply-progress-bar: Allow choosing fore- and back-ground color Allow choosing a fore- and back-ground color instead of hardcoding the foreground to white and the background to transparent. This commit does not change behavior for existing users (tested with the spinfinity theme). Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-progress-bar.c | 68 +++++++++---------- src/libply-splash-graphics/ply-progress-bar.h | 4 ++ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/libply-splash-graphics/ply-progress-bar.c b/src/libply-splash-graphics/ply-progress-bar.c index 2ba3bf4..e5697b4 100644 --- a/src/libply-splash-graphics/ply-progress-bar.c +++ b/src/libply-splash-graphics/ply-progress-bar.c @@ -1,6 +1,6 @@ /* progress_bar.c - boot progress_bar * - * Copyright (C) 2008 Red Hat, Inc. + * Copyright (C) 2008, 2019 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ * * Written by: Ray Strode * Will Woods + * Hans de Goede */ #include "config.h" @@ -50,10 +51,6 @@ #include "ply-image.h" #include "ply-utils.h" -#ifndef FRAMES_PER_SECOND -#define FRAMES_PER_SECOND 30 -#endif - #ifndef BAR_HEIGHT #define BAR_HEIGHT 16 #endif @@ -63,6 +60,8 @@ struct _ply_progress_bar ply_pixel_display_t *display; ply_rectangle_t area; + uint32_t fg_color; + uint32_t bg_color; double percent_done; uint32_t is_hidden : 1; @@ -76,11 +75,9 @@ ply_progress_bar_new (void) progress_bar = calloc (1, sizeof(ply_progress_bar_t)); progress_bar->is_hidden = true; + progress_bar->fg_color = 0xffffffff; /* Solid white */ + progress_bar->bg_color = 0x01000000; /* Transparent */ progress_bar->percent_done = 0.0; - progress_bar->area.x = 0; - progress_bar->area.y = 0; - progress_bar->area.width = 0; - progress_bar->area.height = BAR_HEIGHT; return progress_bar; } @@ -93,21 +90,6 @@ ply_progress_bar_free (ply_progress_bar_t *progress_bar) free (progress_bar); } -static void -ply_progress_bar_update_area (ply_progress_bar_t *progress_bar, - long x, - long y) -{ - unsigned long display_width; - - progress_bar->area.x = x; - progress_bar->area.y = y; - progress_bar->area.height = BAR_HEIGHT; - - display_width = ply_pixel_display_get_width (progress_bar->display); - progress_bar->area.width = (long) (display_width * progress_bar->percent_done); -} - void ply_progress_bar_draw_area (ply_progress_bar_t *progress_bar, ply_pixel_buffer_t *buffer, @@ -116,20 +98,23 @@ ply_progress_bar_draw_area (ply_progress_bar_t *progress_bar, unsigned long width, unsigned long height) { - ply_rectangle_t paint_area; + ply_rectangle_t fill_area; if (progress_bar->is_hidden) return; - paint_area.x = x; - paint_area.y = y; - paint_area.width = width; - paint_area.height = height; + /* Note we ignore the passed in area / rectangle to update, + * since ply_pixel_display_draw_area() already pushes it to + * the buffer's clip_area list. + */ - ply_rectangle_intersect (&progress_bar->area, &paint_area, &paint_area); - ply_pixel_buffer_fill_with_hex_color (buffer, - &paint_area, - 0xffffff); /* white */ + fill_area = progress_bar->area; + fill_area.width = progress_bar->area.width * progress_bar->percent_done; + ply_pixel_buffer_fill_with_hex_color (buffer, &fill_area, progress_bar->fg_color); + + fill_area.x = fill_area.x + fill_area.width; + fill_area.width = progress_bar->area.width - fill_area.width; + ply_pixel_buffer_fill_with_hex_color (buffer, &fill_area, progress_bar->bg_color); } void @@ -138,7 +123,6 @@ ply_progress_bar_draw (ply_progress_bar_t *progress_bar) if (progress_bar->is_hidden) return; - ply_progress_bar_update_area (progress_bar, progress_bar->area.x, progress_bar->area.y); ply_pixel_display_draw_area (progress_bar->display, progress_bar->area.x, progress_bar->area.y, @@ -155,8 +139,10 @@ ply_progress_bar_show (ply_progress_bar_t *progress_bar, assert (progress_bar != NULL); progress_bar->display = display; - - ply_progress_bar_update_area (progress_bar, x, y); + progress_bar->area.x = x; + progress_bar->area.y = y; + progress_bar->area.height = BAR_HEIGHT; + progress_bar->area.width = ply_pixel_display_get_width (display); progress_bar->is_hidden = false; ply_progress_bar_draw (progress_bar); @@ -208,4 +194,14 @@ ply_progress_bar_get_percent_done (ply_progress_bar_t *progress_bar) return progress_bar->percent_done; } +void +ply_progress_bar_set_colors (ply_progress_bar_t *progress_bar, + uint32_t fg_color, + uint32_t bg_color) +{ + progress_bar->fg_color = fg_color; + progress_bar->bg_color = bg_color; + ply_progress_bar_draw (progress_bar); +} + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply-splash-graphics/ply-progress-bar.h b/src/libply-splash-graphics/ply-progress-bar.h index 2fd80e0..1eab64c 100644 --- a/src/libply-splash-graphics/ply-progress-bar.h +++ b/src/libply-splash-graphics/ply-progress-bar.h @@ -57,6 +57,10 @@ long ply_progress_bar_get_height (ply_progress_bar_t *bar); void ply_progress_bar_set_percent_done (ply_progress_bar_t *bar, double percent_done); double ply_progress_bar_get_percent_done (ply_progress_bar_t *bar); + +void ply_progress_bar_set_colors (ply_progress_bar_t *bar, + uint32_t fg_color, + uint32_t bg_color); #endif #endif /* PLY_PROGRESS_BAR_H */ -- 2.20.1 From e33c1f3a06f47e78bb479a50b27f5b2ab39476eb Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 8 Feb 2019 14:38:44 +0100 Subject: [PATCH 64/82] ply-progress-bar: Allow caller to specify the widgets width and height Before this commit ply_progress_bar_show would take coordinates for where to show the progress-bar but the width and height were hardcodec. This commit adds width and height parametes, so that the caller can specify the width and height too. This commit does not change behavior for existing users (tested with the spinfinity theme). Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-progress-bar.c | 12 +++++------- src/libply-splash-graphics/ply-progress-bar.h | 4 +++- src/plugins/splash/throbgress/plugin.c | 5 ++++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/libply-splash-graphics/ply-progress-bar.c b/src/libply-splash-graphics/ply-progress-bar.c index e5697b4..369255a 100644 --- a/src/libply-splash-graphics/ply-progress-bar.c +++ b/src/libply-splash-graphics/ply-progress-bar.c @@ -51,10 +51,6 @@ #include "ply-image.h" #include "ply-utils.h" -#ifndef BAR_HEIGHT -#define BAR_HEIGHT 16 -#endif - struct _ply_progress_bar { ply_pixel_display_t *display; @@ -134,15 +130,17 @@ void ply_progress_bar_show (ply_progress_bar_t *progress_bar, ply_pixel_display_t *display, long x, - long y) + long y, + unsigned long width, + unsigned long height) { assert (progress_bar != NULL); progress_bar->display = display; progress_bar->area.x = x; progress_bar->area.y = y; - progress_bar->area.height = BAR_HEIGHT; - progress_bar->area.width = ply_pixel_display_get_width (display); + progress_bar->area.height = height; + progress_bar->area.width = width; progress_bar->is_hidden = false; ply_progress_bar_draw (progress_bar); diff --git a/src/libply-splash-graphics/ply-progress-bar.h b/src/libply-splash-graphics/ply-progress-bar.h index 1eab64c..55f5a48 100644 --- a/src/libply-splash-graphics/ply-progress-bar.h +++ b/src/libply-splash-graphics/ply-progress-bar.h @@ -40,7 +40,9 @@ void ply_progress_bar_free (ply_progress_bar_t *bar); void ply_progress_bar_show (ply_progress_bar_t *bar, ply_pixel_display_t *display, long x, - long y); + long y, + unsigned long width, + unsigned long height); void ply_progress_bar_hide (ply_progress_bar_t *bar); void ply_progress_bar_draw (ply_progress_bar_t *bar); void ply_progress_bar_draw_area (ply_progress_bar_t *bar, diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c index 4016d96..bbcf1b7 100644 --- a/src/plugins/splash/throbgress/plugin.c +++ b/src/plugins/splash/throbgress/plugin.c @@ -316,7 +316,10 @@ view_start_animation (view_t *view) view->logo_area.y + view->logo_area.height + height / 2); ply_progress_bar_show (view->progress_bar, view->display, - 0, screen_height - ply_progress_bar_get_height (view->progress_bar)); + 0, + screen_height - BAR_HEIGHT, + screen_width, + BAR_HEIGHT); view_redraw (view); } -- 2.20.1 From 3854d0052ffdd308025a9822387f24c9c37fc1ef Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 6 Feb 2019 10:08:12 +0100 Subject: [PATCH 65/82] two-step: Drop background_is_bgrt view_t member This is always set to true if plugin->background_bgrt_image is set, so we can simply check for plugin->background_bgrt_image instead. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 53f19ee..d117d03 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -94,7 +94,6 @@ typedef struct ply_rectangle_t box_area, lock_area, watermark_area, dialog_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; - bool background_is_bgrt; } view_t; struct _ply_boot_splash_plugin @@ -380,7 +379,6 @@ view_set_bgrt_background (view_t *view) ply_pixel_buffer_fill_with_buffer (view->background_buffer, bgrt_buffer, x_offset, y_offset); ply_pixel_buffer_free (bgrt_buffer); } - view->background_is_bgrt = true; } static bool @@ -1085,7 +1083,7 @@ draw_background (view_t *view, */ if ((plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY || plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) && - view->background_is_bgrt && plugin->dialog_clears_firmware_background) + plugin->background_bgrt_image && plugin->dialog_clears_firmware_background) ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, 0); else if (view->background_buffer != NULL) ply_pixel_buffer_fill_with_buffer (pixel_buffer, view->background_buffer, 0, 0); -- 2.20.1 From 9bfffa925776a74701f509df74ac955f2910c963 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 6 Feb 2019 10:34:56 +0100 Subject: [PATCH 66/82] two-step: Add per mode settings We want theme files to be able to specify different settings for different modes ("boot-up" / "shutdown" / "updates"). Specifically we want themes to be able to specify a text for (offline) updates mode to tell the user what is going on, see the mockups at: https://wiki.gnome.org/Design/OS/BootProgress This commit adds support for per mode settings to the two-step plugins and for starters moves the UseFirmwareBackground setting there, since we don't want to show the firmware-background when showing the help-text. Follow-up commits will add support for specifying the (optional) per mode text to show, note eventually we will need to make these texts translatable. Signed-off-by: Hans de Goede --- .../ply-boot-splash-plugin.h | 3 +- src/plugins/splash/two-step/plugin.c | 45 ++++++++++++++++++- themes/bgrt/bgrt.plymouth.in | 10 ++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/libply-splash-core/ply-boot-splash-plugin.h b/src/libply-splash-core/ply-boot-splash-plugin.h index 710047e..de21319 100644 --- a/src/libply-splash-core/ply-boot-splash-plugin.h +++ b/src/libply-splash-core/ply-boot-splash-plugin.h @@ -39,7 +39,8 @@ typedef enum PLY_BOOT_SPLASH_MODE_BOOT_UP, PLY_BOOT_SPLASH_MODE_SHUTDOWN, PLY_BOOT_SPLASH_MODE_UPDATES, - PLY_BOOT_SPLASH_MODE_INVALID + PLY_BOOT_SPLASH_MODE_INVALID, + PLY_BOOT_SPLASH_MODE_COUNT = PLY_BOOT_SPLASH_MODE_UPDATES + 1, } ply_boot_splash_mode_t; typedef struct _ply_boot_splash_plugin ply_boot_splash_plugin_t; diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index d117d03..1a531cb 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -96,10 +96,16 @@ typedef struct ply_pixel_buffer_t *background_buffer; } view_t; +typedef struct +{ + bool use_firmware_background; +} mode_settings_t; + struct _ply_boot_splash_plugin { ply_event_loop_t *loop; ply_boot_splash_mode_t mode; + mode_settings_t mode_settings[PLY_BOOT_SPLASH_MODE_COUNT]; ply_image_t *lock_image; ply_image_t *box_image; ply_image_t *corner_image; @@ -137,6 +143,7 @@ struct _ply_boot_splash_plugin uint32_t is_visible : 1; uint32_t is_animating : 1; uint32_t is_idle : 1; + uint32_t use_firmware_background : 1; uint32_t dialog_clears_firmware_background : 1; }; @@ -719,6 +726,22 @@ view_hide_prompt (view_t *view) ply_label_hide (view->label); } +static void +load_mode_settings (ply_boot_splash_plugin_t *plugin, + ply_key_file_t *key_file, + const char *group_name, + ply_boot_splash_mode_t mode) +{ + mode_settings_t *settings = &plugin->mode_settings[mode]; + + settings->use_firmware_background = + ply_key_file_get_bool (key_file, group_name, "UseFirmwareBackground"); + + /* If any mode uses the firmware background, then we need to load it */ + if (settings->use_firmware_background) + plugin->use_firmware_background = true; +} + static ply_boot_splash_plugin_t * create_plugin (ply_key_file_t *key_file) { @@ -842,7 +865,11 @@ create_plugin (ply_key_file_t *key_file) free (color); - if (ply_key_file_get_bool (key_file, "two-step", "UseFirmwareBackground")) + load_mode_settings (plugin, key_file, "boot-up", PLY_BOOT_SPLASH_MODE_BOOT_UP); + load_mode_settings (plugin, key_file, "shutdown", PLY_BOOT_SPLASH_MODE_SHUTDOWN); + load_mode_settings (plugin, key_file, "updates", PLY_BOOT_SPLASH_MODE_UPDATES); + + if (plugin->use_firmware_background) plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image"); plugin->dialog_clears_firmware_background = @@ -1070,6 +1097,7 @@ draw_background (view_t *view, { ply_boot_splash_plugin_t *plugin; ply_rectangle_t area; + bool use_black_background = false; plugin = view->plugin; @@ -1078,12 +1106,22 @@ draw_background (view_t *view, area.width = width; area.height = height; + /* When using the firmware logo as background and we should not use + * it for this mode, use solid black as background. + */ + if (plugin->background_bgrt_image && + !plugin->mode_settings[plugin->mode].use_firmware_background) + use_black_background = true; + /* When using the firmware logo as background, use solid black as * background for dialogs. */ if ((plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY || plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) && plugin->background_bgrt_image && plugin->dialog_clears_firmware_background) + use_black_background = true; + + if (use_black_background) ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, 0); else if (view->background_buffer != NULL) ply_pixel_buffer_fill_with_buffer (pixel_buffer, view->background_buffer, 0, 0); @@ -1250,6 +1288,8 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, ply_buffer_t *boot_buffer, ply_boot_splash_mode_t mode) { + int i; + assert (plugin != NULL); plugin->loop = loop; @@ -1301,6 +1341,9 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, } else { ply_image_free (plugin->background_bgrt_image); plugin->background_bgrt_image = NULL; + for (i = 0; i < PLY_BOOT_SPLASH_MODE_COUNT; i++) + plugin->mode_settings[i].use_firmware_background = false; + plugin->use_firmware_background = false; } } diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index 3cabbca..e93f91c 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -13,5 +13,13 @@ Transition=none TransitionDuration=0.0 BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 -UseFirmwareBackground=true DialogClearsFirmwareBackground=true + +[boot-up] +UseFirmwareBackground=true + +[shutdown] +UseFirmwareBackground=true + +[updates] +UseFirmwareBackground=true -- 2.20.1 From 2b7bad86b314b63c228208c32c0c720cca1a76d7 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 6 Feb 2019 16:58:58 +0100 Subject: [PATCH 67/82] two-step: Add support for specifying a title and sub-title in the theme file The idea behind this is to allow a splash-screen containing something like this: Installing updates... Do not turn off your computer /-----------------------\ |Animation / progres-bar| \-----------------------/ As can be seen in the mockups here: https://wiki.gnome.org/Design/OS/BootProgress Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 92 ++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 1a531cb..2051240 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -91,6 +91,8 @@ typedef struct ply_throbber_t *throbber; ply_label_t *label; ply_label_t *message_label; + ply_label_t *title_label; + ply_label_t *subtitle_label; ply_rectangle_t box_area, lock_area, watermark_area, dialog_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; @@ -99,6 +101,8 @@ typedef struct typedef struct { bool use_firmware_background; + char *title; + char *subtitle; } mode_settings_t; struct _ply_boot_splash_plugin @@ -106,6 +110,7 @@ struct _ply_boot_splash_plugin ply_event_loop_t *loop; ply_boot_splash_mode_t mode; mode_settings_t mode_settings[PLY_BOOT_SPLASH_MODE_COUNT]; + char *font; ply_image_t *lock_image; ply_image_t *box_image; ply_image_t *corner_image; @@ -120,6 +125,10 @@ struct _ply_boot_splash_plugin double dialog_horizontal_alignment; double dialog_vertical_alignment; + double title_horizontal_alignment; + double title_vertical_alignment; + char *title_font; + double watermark_horizontal_alignment; double watermark_vertical_alignment; @@ -179,7 +188,16 @@ view_new (ply_boot_splash_plugin_t *plugin, plugin->transition_duration); view->label = ply_label_new (); + ply_label_set_font (view->label, plugin->font); + view->message_label = ply_label_new (); + ply_label_set_font (view->message_label, plugin->font); + + view->title_label = ply_label_new (); + ply_label_set_font (view->title_label, plugin->title_font); + + view->subtitle_label = ply_label_new (); + ply_label_set_font (view->subtitle_label, plugin->font); return view; } @@ -193,6 +211,8 @@ view_free (view_t *view) ply_throbber_free (view->throbber); ply_label_free (view->label); ply_label_free (view->message_label); + ply_label_free (view->title_label); + ply_label_free (view->subtitle_label); if (view->background_buffer != NULL) ply_pixel_buffer_free (view->background_buffer); @@ -391,6 +411,7 @@ view_set_bgrt_background (view_t *view) static bool view_load (view_t *view) { + unsigned long x, y, width, title_height = 0, subtitle_height = 0; unsigned long screen_width, screen_height, screen_scale; ply_boot_splash_plugin_t *plugin; ply_pixel_buffer_t *buffer; @@ -466,6 +487,42 @@ view_load (view_t *view) ply_trace ("this theme has no throbber\n"); } + if (plugin->mode_settings[plugin->mode].title) { + ply_label_set_text (view->title_label, + plugin->mode_settings[plugin->mode].title); + title_height = ply_label_get_height (view->title_label); + } else { + ply_label_hide (view->title_label); + } + + if (plugin->mode_settings[plugin->mode].subtitle) { + ply_label_set_text (view->subtitle_label, + plugin->mode_settings[plugin->mode].subtitle); + subtitle_height = ply_label_get_height (view->subtitle_label); + } else { + ply_label_hide (view->subtitle_label); + } + + y = (screen_height - title_height - 2 * subtitle_height) * plugin->title_vertical_alignment; + + if (plugin->mode_settings[plugin->mode].title) { + width = ply_label_get_width (view->title_label); + x = (screen_width - width) * plugin->title_horizontal_alignment; + ply_trace ("using %ldx%ld title centered at %ldx%ld for %ldx%ld screen", + width, title_height, x, y, screen_width, screen_height); + ply_label_show (view->title_label, view->display, x, y); + /* Use subtitle_height pixels seperation between title and subtitle */ + y += title_height + subtitle_height; + } + + if (plugin->mode_settings[plugin->mode].subtitle) { + width = ply_label_get_width (view->subtitle_label); + x = (screen_width - width) * plugin->title_horizontal_alignment; + ply_trace ("using %ldx%ld subtitle centered at %ldx%ld for %ldx%ld screen", + width, subtitle_height, x, y, screen_width, screen_height); + ply_label_show (view->subtitle_label, view->display, x, y); + } + return true; } @@ -740,6 +797,9 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin, /* If any mode uses the firmware background, then we need to load it */ if (settings->use_firmware_background) plugin->use_firmware_background = true; + + settings->title = ply_key_file_get_value (key_file, group_name, "Title"); + settings->subtitle = ply_key_file_get_value (key_file, group_name, "SubTitle"); } static ply_boot_splash_plugin_t * @@ -786,6 +846,9 @@ create_plugin (ply_key_file_t *key_file) plugin->animation_dir = image_dir; + plugin->font = ply_key_file_get_value (key_file, "two-step", "Font"); + plugin->title_font = ply_key_file_get_value (key_file, "two-step", "TitleFont"); + alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment"); if (alignment != NULL) plugin->animation_horizontal_alignment = ply_strtod (alignment); @@ -828,6 +891,20 @@ create_plugin (ply_key_file_t *key_file) plugin->dialog_vertical_alignment = .5; free (alignment); + alignment = ply_key_file_get_value (key_file, "two-step", "TitleHorizontalAlignment"); + if (alignment != NULL) + plugin->title_horizontal_alignment = ply_strtod (alignment); + else + plugin->title_horizontal_alignment = .5; + free (alignment); + + alignment = ply_key_file_get_value (key_file, "two-step", "TitleVerticalAlignment"); + if (alignment != NULL) + plugin->title_vertical_alignment = ply_strtod (alignment); + else + plugin->title_vertical_alignment = .5; + free (alignment); + plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_NONE; transition = ply_key_file_get_value (key_file, "two-step", "Transition"); if (transition != NULL) { @@ -926,6 +1003,8 @@ free_views (ply_boot_splash_plugin_t *plugin) static void destroy_plugin (ply_boot_splash_plugin_t *plugin) { + int i; + if (plugin == NULL) return; @@ -960,6 +1039,13 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin->watermark_image != NULL) ply_image_free (plugin->watermark_image); + for (i = 0; i < PLY_BOOT_SPLASH_MODE_COUNT; i++) { + free (plugin->mode_settings[i].title); + free (plugin->mode_settings[i].subtitle); + } + + free (plugin->font); + free (plugin->title_font); free (plugin->animation_dir); free_views (plugin); free (plugin); @@ -1225,6 +1311,12 @@ on_draw (view_t *view, ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &image_area, ply_image_get_data (plugin->header_image)); } + ply_label_draw_area (view->title_label, + pixel_buffer, + x, y, width, height); + ply_label_draw_area (view->subtitle_label, + pixel_buffer, + x, y, width, height); } ply_label_draw_area (view->message_label, pixel_buffer, -- 2.20.1 From c5d7b61dc52064f9653b5d95ce4399e1508b3149 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 7 Feb 2019 17:44:32 +0100 Subject: [PATCH 68/82] two-step: Add MessageBelowAnimation option So far we've always printed messages coming from "plymouth display-message" in the top left corner. In some cases the theme may want to instead display the messages below the animation (where they are more prominently visible). My first attempt to support this added MessageHorizontal/VerticalAlignment options. That did not work since we want a more or less fixed distance between the animation bottom and the message and with screen-heights varying from 480 to 1200 that is not possible using alignment options to place both the animation and the message. Note the default is unchanged and still is the top left corner. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 46 ++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 2051240..c6f99ed 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -96,6 +96,7 @@ typedef struct ply_rectangle_t box_area, lock_area, watermark_area, dialog_area; ply_trigger_t *end_trigger; ply_pixel_buffer_t *background_buffer; + int animation_bottom; } view_t; typedef struct @@ -154,6 +155,7 @@ struct _ply_boot_splash_plugin uint32_t is_idle : 1; uint32_t use_firmware_background : 1; uint32_t dialog_clears_firmware_background : 1; + uint32_t message_below_animation : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -647,6 +649,7 @@ view_start_end_animation (view_t *view, ply_animation_start (view->end_animation, view->display, trigger, x, y); + view->animation_bottom = y + height; } static void @@ -689,6 +692,7 @@ view_start_progress_animation (view_t *view) plugin->loop, view->display, x, y); ply_pixel_display_draw_area (view->display, x, y, width, height); + view->animation_bottom = y + height; } /* We don't really know how long shutdown will so @@ -706,6 +710,7 @@ view_start_progress_animation (view_t *view) view->display, x, y); ply_pixel_display_draw_area (view->display, x, y, width, height); + view->animation_bottom = y + height; } } @@ -952,6 +957,9 @@ create_plugin (ply_key_file_t *key_file) plugin->dialog_clears_firmware_background = ply_key_file_get_bool (key_file, "two-step", "DialogClearsFirmwareBackground"); + plugin->message_below_animation = + ply_key_file_get_bool (key_file, "two-step", "MessageBelowAnimation"); + progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction"); if (progress_function != NULL) { @@ -1668,6 +1676,29 @@ hide_prompt (ply_boot_splash_plugin_t *plugin) } +static void +view_show_message (view_t *view, + const char *message) +{ + ply_boot_splash_plugin_t *plugin = view->plugin; + int x, y, width, height; + + ply_label_set_text (view->message_label, message); + width = ply_label_get_width (view->message_label); + height = ply_label_get_height (view->message_label); + + if (plugin->message_below_animation) { + x = (ply_pixel_display_get_width (view->display) - width) * 0.5; + y = view->animation_bottom + 10; + } else { + x = 10; + y = 10; + } + + ply_label_show (view->message_label, view->display, x, y); + ply_pixel_display_draw_area (view->display, x, y, width, height); +} + static void show_message (ply_boot_splash_plugin_t *plugin, const char *message) @@ -1676,19 +1707,8 @@ show_message (ply_boot_splash_plugin_t *plugin, ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { - ply_list_node_t *next_node; - view_t *view; - - view = ply_list_node_get_data (node); - next_node = ply_list_get_next_node (plugin->views, node); - - ply_label_set_text (view->message_label, message); - ply_label_show (view->message_label, view->display, 10, 10); - - ply_pixel_display_draw_area (view->display, 10, 10, - ply_label_get_width (view->message_label), - ply_label_get_height (view->message_label)); - node = next_node; + view_show_message (ply_list_node_get_data (node), message); + node = ply_list_get_next_node (plugin->views, node); } } -- 2.20.1 From 746a924cbdcaae2068b3e0572478849cda34f7cf Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 8 Feb 2019 22:41:15 +0100 Subject: [PATCH 69/82] two-step: Add progress-bar support Some themes may want to use a progress-bar instead of the throbber for some modes. This commit adds a new per mode UseProgressBar setting allowing this. One case where this will be used is the offline updates splash-screen mockup from: https://wiki.gnome.org/Design/OS/BootProgress Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 66 +++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index c6f99ed..32e4294 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -57,6 +57,7 @@ #include "ply-animation.h" #include "ply-progress-animation.h" #include "ply-throbber.h" +#include "ply-progress-bar.h" #include @@ -68,6 +69,9 @@ #define SHOW_ANIMATION_PERCENT 0.9 #endif +#define PROGRESS_BAR_WIDTH 400 +#define PROGRESS_BAR_HEIGHT 5 + typedef enum { PLY_BOOT_SPLASH_DISPLAY_NORMAL, @@ -88,6 +92,7 @@ typedef struct ply_entry_t *entry; ply_animation_t *end_animation; ply_progress_animation_t *progress_animation; + ply_progress_bar_t *progress_bar; ply_throbber_t *throbber; ply_label_t *label; ply_label_t *message_label; @@ -101,6 +106,7 @@ typedef struct typedef struct { + bool use_progress_bar; bool use_firmware_background; char *title; char *subtitle; @@ -144,6 +150,9 @@ struct _ply_boot_splash_plugin uint32_t background_end_color; int background_bgrt_raw_width; + uint32_t progress_bar_bg_color; + uint32_t progress_bar_fg_color; + progress_function_t progress_function; ply_trigger_t *idle_trigger; @@ -156,6 +165,7 @@ struct _ply_boot_splash_plugin uint32_t use_firmware_background : 1; uint32_t dialog_clears_firmware_background : 1; uint32_t message_below_animation : 1; + uint32_t progress_bar_show_percent_complete : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -182,6 +192,10 @@ view_new (ply_boot_splash_plugin_t *plugin, view->entry = ply_entry_new (plugin->animation_dir); view->progress_animation = ply_progress_animation_new (plugin->animation_dir, "progress-"); + view->progress_bar = ply_progress_bar_new (); + ply_progress_bar_set_colors (view->progress_bar, + plugin->progress_bar_fg_color, + plugin->progress_bar_bg_color); view->throbber = ply_throbber_new (plugin->animation_dir, "throbber-"); @@ -210,6 +224,7 @@ view_free (view_t *view) ply_entry_free (view->entry); ply_animation_free (view->end_animation); ply_progress_animation_free (view->progress_animation); + ply_progress_bar_free (view->progress_bar); ply_throbber_free (view->throbber); ply_label_free (view->label); ply_label_free (view->message_label); @@ -683,7 +698,16 @@ view_start_progress_animation (view_t *view) ply_pixel_display_draw_area (view->display, 0, 0, screen_width, screen_height); - if (view->throbber != NULL) { + if (plugin->mode_settings[plugin->mode].use_progress_bar) { + width = PROGRESS_BAR_WIDTH; + height = PROGRESS_BAR_HEIGHT; + x = plugin->animation_horizontal_alignment * screen_width - width / 2.0; + y = plugin->animation_vertical_alignment * screen_height - height / 2.0; + ply_progress_bar_show (view->progress_bar, view->display, + x, y, width, height); + ply_pixel_display_draw_area (view->display, x, y, width, height); + view->animation_bottom = y + height; + } else if (view->throbber != NULL) { width = ply_throbber_get_width (view->throbber); height = ply_throbber_get_height (view->throbber); x = plugin->animation_horizontal_alignment * screen_width - width / 2.0; @@ -796,6 +820,8 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin, { mode_settings_t *settings = &plugin->mode_settings[mode]; + settings->use_progress_bar = + ply_key_file_get_bool (key_file, group_name, "UseProgressBar"); settings->use_firmware_background = ply_key_file_get_bool (key_file, group_name, "UseFirmwareBackground"); @@ -947,6 +973,26 @@ create_plugin (ply_key_file_t *key_file) free (color); + color = ply_key_file_get_value (key_file, "two-step", "ProgressBarBackgroundColor"); + + if (color != NULL) + plugin->progress_bar_bg_color = strtol (color, NULL, 0); + else + plugin->progress_bar_bg_color = 0xffffff; /* white */ + + free (color); + + color = ply_key_file_get_value (key_file, "two-step", "ProgressBarForegroundColor"); + + if (color != NULL) + plugin->progress_bar_fg_color = strtol (color, NULL, 0); + else + plugin->progress_bar_fg_color = 0x000000; /* black */ + + free (color); + + plugin->progress_bar_show_percent_complete = ply_key_file_get_bool (key_file, "two-step", "ProgressBarShowPercentComplete"); + load_mode_settings (plugin, key_file, "boot-up", PLY_BOOT_SPLASH_MODE_BOOT_UP); load_mode_settings (plugin, key_file, "shutdown", PLY_BOOT_SPLASH_MODE_SHUTDOWN); load_mode_settings (plugin, key_file, "updates", PLY_BOOT_SPLASH_MODE_UPDATES); @@ -1063,6 +1109,12 @@ static void start_end_animation (ply_boot_splash_plugin_t *plugin, ply_trigger_t *trigger) { + if (plugin->mode_settings[plugin->mode].use_progress_bar) { + /* Leave the progress-bar at 100% rather then showing the end animation */ + ply_trigger_pull (trigger, NULL); + return; + } + ply_trace ("starting end animation"); ply_list_node_t *node; @@ -1276,7 +1328,10 @@ on_draw (view_t *view, &view->lock_area, lock_data); } else { - if (view->throbber != NULL && + if (plugin->mode_settings[plugin->mode].use_progress_bar) + ply_progress_bar_draw_area (view->progress_bar, pixel_buffer, + x, y, width, height); + else if (view->throbber != NULL && !ply_throbber_is_stopped (view->throbber)) ply_throbber_draw_area (view->throbber, pixel_buffer, x, y, width, height); @@ -1717,6 +1772,7 @@ system_update (ply_boot_splash_plugin_t *plugin, int progress) { ply_list_node_t *node; + char buf[64]; if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES) return; @@ -1730,6 +1786,12 @@ system_update (ply_boot_splash_plugin_t *plugin, next_node = ply_list_get_next_node (plugin->views, node); if (view->progress_animation != NULL) ply_progress_animation_set_percent_done (view->progress_animation, (double) progress / 100.f); + ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); + if (!ply_progress_bar_is_hidden (view->progress_bar) && + plugin->progress_bar_show_percent_complete) { + snprintf (buf, sizeof(buf), "%d%% complete", progress); + view_show_message (view, buf); + } node = next_node; } } -- 2.20.1 From 73a44fb1f71d0a246fda64b46ed60cdaac0d1bb7 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 12 Feb 2019 15:15:26 +0100 Subject: [PATCH 70/82] two-step: Add a per mode setting to suppress messages The messages passed to plymouth display-message can be quite verbose, esp. in the offline-updates case. Combined with some themes now showing their own prominent title message explaining what is going on this leads to undesirable repetitive text being shown. This commit adds support for a per mode SuppressMessages setting which allows themes to suppress messages passed to plymouth display-message on a per mode basis. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 32e4294..9b6abba 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -106,6 +106,7 @@ typedef struct typedef struct { + bool suppress_messages; bool use_progress_bar; bool use_firmware_background; char *title; @@ -820,6 +821,8 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin, { mode_settings_t *settings = &plugin->mode_settings[mode]; + settings->suppress_messages = + ply_key_file_get_bool (key_file, group_name, "SuppressMessages"); settings->use_progress_bar = ply_key_file_get_bool (key_file, group_name, "UseProgressBar"); settings->use_firmware_background = @@ -1758,6 +1761,10 @@ static void show_message (ply_boot_splash_plugin_t *plugin, const char *message) { + if (plugin->mode_settings[plugin->mode].suppress_messages) { + ply_trace ("Suppressing message '%s'", message); + return; + } ply_trace ("Showing message '%s'", message); ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); -- 2.20.1 From 38771c16e441d2109e099e1954ff502d87652f62 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 6 Feb 2019 17:04:04 +0100 Subject: [PATCH 71/82] themes: Update spinner and bgrt theme offline updates mode Make the spinner and bgrt offline updates mode match the GNOME design mockups from: https://wiki.gnome.org/Design/OS/BootProgress Signed-off-by: Hans de Goede --- themes/bgrt/bgrt.plymouth.in | 17 +++++++++++++++-- themes/spinner/spinner.plymouth.in | 18 +++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index e93f91c..b0899d7 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -4,16 +4,26 @@ Description=Jimmac's spinner theme using the ACPI BGRT graphics as background ModuleName=two-step [two-step] +Font=Cantarell 12 +TitleFont=Cantarell Light 30 ImageDir=@PLYMOUTH_THEME_PATH@/spinner +DialogHorizontalAlignment=.5 +DialogVerticalAlignment=.382 +TitleHorizontalAlignment=.5 +TitleVerticalAlignment=.382 HorizontalAlignment=.5 -VerticalAlignment=.75 +VerticalAlignment=.7 WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 +ProgressBarBackgroundColor=0x606060 +ProgressBarForegroundColor=0xffffff +ProgressBarShowPercentComplete=true DialogClearsFirmwareBackground=true +MessageBelowAnimation=true [boot-up] UseFirmwareBackground=true @@ -22,4 +32,7 @@ UseFirmwareBackground=true UseFirmwareBackground=true [updates] -UseFirmwareBackground=true +SuppressMessages=true +UseProgressBar=true +Title=Installing Updates... +SubTitle=Do not turn off your computer diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index 6ba3f42..02e7eb7 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -4,12 +4,28 @@ Description=A theme designed by jimmac that features a simple spinner. ModuleName=two-step [two-step] +Font=Cantarell 12 +TitleFont=Cantarell Light 30 ImageDir=@PLYMOUTH_THEME_PATH@/spinner +DialogHorizontalAlignment=.5 +DialogVerticalAlignment=.382 +TitleHorizontalAlignment=.5 +TitleVerticalAlignment=.382 HorizontalAlignment=.5 -VerticalAlignment=.75 +VerticalAlignment=.7 WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 +ProgressBarBackgroundColor=0x606060 +ProgressBarForegroundColor=0xffffff +ProgressBarShowPercentComplete=true +MessageBelowAnimation=true + +[updates] +SuppressMessages=true +UseProgressBar=true +Title=Installing Updates... +SubTitle=Do not turn off your computer -- 2.20.1 From 238e22b64508afa97cde56c2addd3833a18c1d58 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 13 Feb 2019 14:39:42 +0100 Subject: [PATCH 72/82] logging: Improve logging format This commit adds 2 improvemens to the ply_trace logging format: 1) It prefixes the log messages with timestamps (since system boot) 2) Previously function-names where right aligned / left padded to 45 characters. But they were prefixed with a [file:line] prefix which does not have a fixed width, making the column aligment for the actual messages fail resulting in hard to read logs. This commit fixes 2. by printing " file:line:func" to a prefix-buffer and then left-aligning / right padding this prefix buffer to 75 chars. The resulting logged lines now look like this: 00:00:01.741 main.c:1928:check_logging : checking if console messages should be redirected and logged 00:00:01.741 main.c:1937:check_logging : logging will be enabled! Signed-off-by: Hans de Goede --- src/libply/ply-logger.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libply/ply-logger.h b/src/libply/ply-logger.h index 53d1ad9..0015c0c 100644 --- a/src/libply/ply-logger.h +++ b/src/libply/ply-logger.h @@ -25,6 +25,7 @@ #include #include #include +#include #include typedef struct _ply_logger ply_logger_t; @@ -88,11 +89,21 @@ bool ply_logger_is_tracing_enabled (ply_logger_t *logger); _old_errno = errno; \ if (ply_logger_is_tracing_enabled (logger)) \ { \ + struct timespec timespec = { 0, 0 }; \ + char buf[128]; \ + clock_gettime (CLOCK_MONOTONIC, ×pec); \ ply_logger_flush (logger); \ + snprintf (buf, sizeof(buf), \ + "%02d:%02d:%02d.%03d %s:%d:%s", \ + (int)(timespec.tv_sec / 3600), \ + (int)((timespec.tv_sec / 60) % 60), \ + (int)(timespec.tv_sec % 60), \ + (int)(timespec.tv_nsec / 1000000), \ + __FILE__, __LINE__, __func__); \ errno = _old_errno; \ ply_logger_inject (logger, \ - "[%s:%d] %45.45s:" format "\n", \ - __FILE__, __LINE__, __func__, ## args); \ + "%-75.75s: " format "\n", \ + buf, ## args); \ ply_logger_flush (logger); \ errno = _old_errno; \ } \ -- 2.20.1 From d0e26e24d97e5f7f5715b5eb16730d907e21476c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 Jan 2019 12:27:01 +0100 Subject: [PATCH 73/82] logging: Minor log-message fixes This fixes 2 minor issues with our log-messages: 1. ply_trace adds a "\n" itself, so there is no need to pass one extra. 2. Correct spelling of quitting Signed-off-by: Hans de Goede --- src/libply-splash-graphics/ply-animation.c | 4 ++-- src/libply/ply-utils.c | 2 +- src/main.c | 2 +- src/plugins/renderers/drm/plugin.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libply-splash-graphics/ply-animation.c b/src/libply-splash-graphics/ply-animation.c index 323d9ed..9b6d8ce 100644 --- a/src/libply-splash-graphics/ply-animation.c +++ b/src/libply-splash-graphics/ply-animation.c @@ -261,11 +261,11 @@ ply_animation_add_frames (ply_animation_t *animation) number_of_frames = ply_array_get_size (animation->frames); if (number_of_frames == 0) { - ply_trace ("%s directory had no files starting with %s\n", + ply_trace ("%s directory had no files starting with %s", animation->image_dir, animation->frames_prefix); goto out; } else { - ply_trace ("animation has %d frames\n", number_of_frames); + ply_trace ("animation has %d frames", number_of_frames); } load_finished = true; diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c index 4ff7b1b..0cadae9 100644 --- a/src/libply/ply-utils.c +++ b/src/libply/ply-utils.c @@ -656,7 +656,7 @@ ply_open_module (const char *module_path) RTLD_NODELETE | RTLD_NOW | RTLD_LOCAL); if (handle == NULL) { - ply_trace ("Could not load module \"%s\": %s\n", module_path, dlerror ()); + ply_trace ("Could not load module \"%s\": %s", module_path, dlerror ()); if (errno == 0) errno = ELIBACC; } diff --git a/src/main.c b/src/main.c index ddc1883..9adff3a 100644 --- a/src/main.c +++ b/src/main.c @@ -1123,7 +1123,7 @@ load_devices (state_t *state, static void quit_splash (state_t *state) { - ply_trace ("quiting splash"); + ply_trace ("quitting splash"); if (state->boot_splash != NULL) { ply_trace ("freeing splash"); ply_boot_splash_free (state->boot_splash); diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index 0151f47..88c9d97 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -1100,7 +1100,7 @@ get_preferred_mode (drmModeConnector *connector) for (i = 0; i < connector->count_modes; i++) if (connector->modes[i].type & DRM_MODE_TYPE_PREFERRED) { - ply_trace ("Found preferred mode %dx%d at index %d\n", + ply_trace ("Found preferred mode %dx%d at index %d", connector->modes[i].hdisplay, connector->modes[i].vdisplay, i); return &connector->modes[i]; -- 2.20.1 From a1920e8af9530b3504811ef04c0400cf7b53da3c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 Jan 2019 12:51:05 +0100 Subject: [PATCH 74/82] ply-boot-splash: Do not add ply_boot_splash_update_progress timeout multiple times Before this commit when freeing the splash, the following would be logged: multiple matching timeouts found for removal multiple matching timeouts found for removal This is caused by us adding the ply_boot_splash_update_progress timeout handler to the event loop 3 times: 1 on first show, 2 on second show with a different mode, 3 on becoming idle. This commit fixes the 2nd add by stopping the timer when changing modes and the 3th add by not calling ply_boot_splash_update_progress to update the progress, as that will re-add itself. Instead this commit directly calls plugin_interface->on_boot_progress from ply_boot_splash_become_idle. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-boot-splash.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c index 54c7696..9549ecc 100644 --- a/src/libply-splash-core/ply-boot-splash.c +++ b/src/libply-splash-core/ply-boot-splash.c @@ -476,6 +476,11 @@ ply_boot_splash_show (ply_boot_splash_t *splash, } else if (splash->mode != PLY_BOOT_SPLASH_MODE_INVALID) { splash->plugin_interface->hide_splash_screen (splash->plugin, splash->loop); + if (splash->plugin_interface->on_boot_progress != NULL) { + ply_event_loop_stop_watching_for_timeout (splash->loop, + (ply_event_loop_timeout_handler_t) + ply_boot_splash_update_progress, splash); + } } ply_trace ("showing splash screen"); @@ -671,9 +676,12 @@ ply_boot_splash_become_idle (ply_boot_splash_t *splash, { assert (splash->idle_trigger == NULL); - if (splash->progress != NULL) { + if (splash->plugin_interface->on_boot_progress != NULL && + splash->progress != NULL) { ply_progress_set_percentage (splash->progress, 1.0); - ply_boot_splash_update_progress (splash); + splash->plugin_interface->on_boot_progress (splash->plugin, + ply_progress_get_time (splash->progress), + 1.0); } ply_trace ("telling splash to become idle"); -- 2.20.1 From 1de2794731a2b72f20f17670cc5a3ce1df5efcc4 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 13 Feb 2019 15:10:23 +0100 Subject: [PATCH 75/82] plymouthd.defaults: Change default ShowDelay to 0 ShowDelay was added with as goal to reduce the number of jarring / flickering visual transitions. The idea being that if a system boots within 5 seconds, we would avoid the transition from a black screen to plymouth, instead directly going to e.g. gdm. In practive most modern systems (with SSD) take about 4-7 seconds to boot, this causes plymouth to only show briefly (aprox. 1 second). IOW on some modern systems it quicky flashes by, this "flash" is the end result of the ShowDelay=5 default which is intended to *reduce* the number of jarring / flickering visual transitions. On older systems the boot will likely take significantly longer then the 5 seconds, so we will show the splash anyways and we might as well show it right away, so that the user can see something is happening right away. Note this has been discussed in more detail in issue #64, which also contains an alternative much more involved fix for the issues surrounding SplashDelay, but simply defaulting it to 0 seems to be best. Closes #64 Signed-off-by: Hans de Goede --- src/plymouthd.defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plymouthd.defaults b/src/plymouthd.defaults index 4d3b6d4..9e3a342 100644 --- a/src/plymouthd.defaults +++ b/src/plymouthd.defaults @@ -2,5 +2,5 @@ # upgrades. [Daemon] Theme=spinner -ShowDelay=5 +ShowDelay=0 DeviceTimeout=5 -- 2.20.1 From 1c7ce43983e3e45d65b14b630415989ff349287f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 25 Feb 2019 16:56:16 +0100 Subject: [PATCH 76/82] two-step: Make ProgressBarShowPercentComplete a per mode setting Make ProgressBarShowPercentComplete a per mode setting, this gives the theme more flexibility wrt which messages to show in different modes. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 7 ++++--- themes/bgrt/bgrt.plymouth.in | 2 +- themes/spinner/spinner.plymouth.in | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 9b6abba..94b2708 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -107,6 +107,7 @@ typedef struct typedef struct { bool suppress_messages; + bool progress_bar_show_percent_complete; bool use_progress_bar; bool use_firmware_background; char *title; @@ -166,7 +167,6 @@ struct _ply_boot_splash_plugin uint32_t use_firmware_background : 1; uint32_t dialog_clears_firmware_background : 1; uint32_t message_below_animation : 1; - uint32_t progress_bar_show_percent_complete : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -823,6 +823,8 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin, settings->suppress_messages = ply_key_file_get_bool (key_file, group_name, "SuppressMessages"); + settings->progress_bar_show_percent_complete = + ply_key_file_get_bool (key_file, group_name, "ProgressBarShowPercentComplete"); settings->use_progress_bar = ply_key_file_get_bool (key_file, group_name, "UseProgressBar"); settings->use_firmware_background = @@ -994,7 +996,6 @@ create_plugin (ply_key_file_t *key_file) free (color); - plugin->progress_bar_show_percent_complete = ply_key_file_get_bool (key_file, "two-step", "ProgressBarShowPercentComplete"); load_mode_settings (plugin, key_file, "boot-up", PLY_BOOT_SPLASH_MODE_BOOT_UP); load_mode_settings (plugin, key_file, "shutdown", PLY_BOOT_SPLASH_MODE_SHUTDOWN); @@ -1795,7 +1796,7 @@ system_update (ply_boot_splash_plugin_t *plugin, ply_progress_animation_set_percent_done (view->progress_animation, (double) progress / 100.f); ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); if (!ply_progress_bar_is_hidden (view->progress_bar) && - plugin->progress_bar_show_percent_complete) { + plugin->mode_settings[plugin->mode].progress_bar_show_percent_complete) { snprintf (buf, sizeof(buf), "%d%% complete", progress); view_show_message (view, buf); } diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index b0899d7..15bd9ba 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -21,7 +21,6 @@ BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff -ProgressBarShowPercentComplete=true DialogClearsFirmwareBackground=true MessageBelowAnimation=true @@ -33,6 +32,7 @@ UseFirmwareBackground=true [updates] SuppressMessages=true +ProgressBarShowPercentComplete=true UseProgressBar=true Title=Installing Updates... SubTitle=Do not turn off your computer diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index 02e7eb7..40613ba 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -21,11 +21,11 @@ BackgroundStartColor=0x202020 BackgroundEndColor=0x202020 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff -ProgressBarShowPercentComplete=true MessageBelowAnimation=true [updates] SuppressMessages=true +ProgressBarShowPercentComplete=true UseProgressBar=true Title=Installing Updates... SubTitle=Do not turn off your computer -- 2.20.1 From 2eceea2ce790007f77af8bf4f5c9af73f89c94c8 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 25 Feb 2019 15:45:26 +0100 Subject: [PATCH 77/82] main: Remove private ply_mode_t Remove the private ply_mode_t from main.c, this is a 1:1 mirror of ply_boot_splash_mode_t, so use ply_boot_splash_mode_t directly, leading to a nice cleanup. Signed-off-by: Hans de Goede --- src/main.c | 95 +++++++++++++++++------------------------------------- 1 file changed, 30 insertions(+), 65 deletions(-) diff --git a/src/main.c b/src/main.c index 9adff3a..e406382 100644 --- a/src/main.c +++ b/src/main.c @@ -58,13 +58,6 @@ #define BOOT_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/boot-duration" #define SHUTDOWN_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/shutdown-duration" -typedef enum -{ - PLY_MODE_BOOT, - PLY_MODE_SHUTDOWN, - PLY_MODE_UPDATES -} ply_mode_t; - typedef struct { const char *keys; @@ -93,7 +86,7 @@ typedef struct ply_buffer_t *entry_buffer; ply_list_t *messages; ply_command_parser_t *command_parser; - ply_mode_t mode; + ply_boot_splash_mode_t mode; ply_terminal_t *local_console_terminal; ply_device_manager_t *device_manager; @@ -149,7 +142,7 @@ static void toggle_between_splash_and_details (state_t *state); static void tell_systemd_to_print_details (state_t *state); static void tell_systemd_to_stop_printing_details (state_t *state); #endif -static const char *get_cache_file_for_mode (ply_mode_t mode); +static const char *get_cache_file_for_mode (ply_boot_splash_mode_t mode); static void on_escape_pressed (state_t *state); static void on_enter (state_t *state, const char *line); @@ -163,30 +156,6 @@ static void on_quit (state_t *state, static bool sh_is_init (state_t *state); static void cancel_pending_delayed_show (state_t *state); -static ply_boot_splash_mode_t -get_splash_mode_from_mode (ply_mode_t mode) -{ - ply_boot_splash_mode_t splash_mode; - switch (mode) { - case PLY_MODE_BOOT: - splash_mode = PLY_BOOT_SPLASH_MODE_BOOT_UP; - break; - case PLY_MODE_SHUTDOWN: - splash_mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN; - break; - case PLY_MODE_UPDATES: - splash_mode = PLY_BOOT_SPLASH_MODE_UPDATES; - break; - default: - splash_mode = PLY_BOOT_SPLASH_MODE_INVALID; - break; - } - - assert (splash_mode != PLY_BOOT_SPLASH_MODE_INVALID); - - return splash_mode; -} - static void on_session_output (state_t *state, const char *output, @@ -220,8 +189,6 @@ static void on_change_mode (state_t *state, const char *mode) { - ply_boot_splash_mode_t splash_mode; - if (state->boot_splash == NULL) { ply_trace ("no splash set"); return; @@ -229,17 +196,15 @@ on_change_mode (state_t *state, ply_trace ("updating mode to '%s'", mode); if (strcmp (mode, "boot-up") == 0) - state->mode = PLY_MODE_BOOT; + state->mode = PLY_BOOT_SPLASH_MODE_BOOT_UP; else if (strcmp (mode, "shutdown") == 0) - state->mode = PLY_MODE_SHUTDOWN; + state->mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN; else if (strcmp (mode, "updates") == 0) - state->mode = PLY_MODE_UPDATES; + state->mode = PLY_BOOT_SPLASH_MODE_UPDATES; else return; - splash_mode = get_splash_mode_from_mode (state->mode); - - if (!ply_boot_splash_show (state->boot_splash, splash_mode)) { + if (!ply_boot_splash_show (state->boot_splash, state->mode)) { ply_trace ("failed to update splash"); return; } @@ -689,20 +654,21 @@ on_newroot (state_t *state, } static const char * -get_cache_file_for_mode (ply_mode_t mode) +get_cache_file_for_mode (ply_boot_splash_mode_t mode) { const char *filename; - switch ((int) mode) { - case PLY_MODE_BOOT: + switch (mode) { + case PLY_BOOT_SPLASH_MODE_BOOT_UP: filename = BOOT_DURATION_FILE; break; - case PLY_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_SHUTDOWN: filename = SHUTDOWN_DURATION_FILE; break; - case PLY_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_UPDATES: filename = NULL; break; + case PLY_BOOT_SPLASH_MODE_INVALID: default: ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__); abort (); @@ -718,17 +684,18 @@ get_log_file_for_state (state_t *state) { const char *filename; - switch ((int) state->mode) { - case PLY_MODE_BOOT: + switch (state->mode) { + case PLY_BOOT_SPLASH_MODE_BOOT_UP: if (state->no_boot_log) filename = NULL; else filename = PLYMOUTH_LOG_DIRECTORY "/boot.log"; break; - case PLY_MODE_SHUTDOWN: - case PLY_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_UPDATES: filename = _PATH_DEVNULL; break; + case PLY_BOOT_SPLASH_MODE_INVALID: default: ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__); abort (); @@ -740,18 +707,19 @@ get_log_file_for_state (state_t *state) } static const char * -get_log_spool_file_for_mode (ply_mode_t mode) +get_log_spool_file_for_mode (ply_boot_splash_mode_t mode) { const char *filename; - switch ((int) mode) { - case PLY_MODE_BOOT: + switch (mode) { + case PLY_BOOT_SPLASH_MODE_BOOT_UP: filename = PLYMOUTH_SPOOL_DIRECTORY "/boot.log"; break; - case PLY_MODE_SHUTDOWN: - case PLY_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_UPDATES: filename = NULL; break; + case PLY_BOOT_SPLASH_MODE_INVALID: default: ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__); abort (); @@ -841,7 +809,7 @@ static bool plymouth_should_ignore_show_splash_calls (state_t *state) { ply_trace ("checking if plymouth should be running"); - if (state->mode != PLY_MODE_BOOT || ply_kernel_command_line_has_argument ("plymouth.force-splash")) + if (state->mode != PLY_BOOT_SPLASH_MODE_BOOT_UP || ply_kernel_command_line_has_argument ("plymouth.force-splash")) return false; if (ply_kernel_command_line_has_argument ("plymouth.ignore-show-splash")) @@ -1213,7 +1181,7 @@ quit_program (state_t *state) #ifdef PLY_ENABLE_DEPRECATED_GDM_TRANSITION if (state->should_retain_splash && - state->mode == PLY_MODE_BOOT) + state->mode == PLY_BOOT_SPLASH_MODE_BOOT_UP) tell_gdm_to_transition (); #endif @@ -1737,7 +1705,6 @@ static ply_boot_splash_t * show_theme (state_t *state, const char *theme_path) { - ply_boot_splash_mode_t splash_mode; ply_boot_splash_t *splash; if (theme_path != NULL) @@ -1752,9 +1719,7 @@ show_theme (state_t *state, if (ply_boot_splash_uses_pixel_displays (splash)) ply_device_manager_activate_renderers (state->device_manager); - splash_mode = get_splash_mode_from_mode (state->mode); - - if (!ply_boot_splash_show (splash, splash_mode)) { + if (!ply_boot_splash_show (splash, state->mode)) { ply_save_errno (); ply_boot_splash_free (splash); ply_restore_errno (); @@ -1985,7 +1950,7 @@ initialize_environment (state_t *state) if (getenv ("DISPLAY") != NULL && access (PLYMOUTH_PLUGIN_PATH "renderers/x11.so", F_OK) == 0) state->default_tty = "/dev/tty"; if (!state->default_tty) { - if (state->mode == PLY_MODE_SHUTDOWN) + if (state->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) state->default_tty = SHUTDOWN_TTY; else state->default_tty = BOOT_TTY; @@ -2181,11 +2146,11 @@ main (int argc, if (mode_string != NULL) { if (strcmp (mode_string, "shutdown") == 0) - state.mode = PLY_MODE_SHUTDOWN; + state.mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN; else if (strcmp (mode_string, "updates") == 0) - state.mode = PLY_MODE_UPDATES; + state.mode = PLY_BOOT_SPLASH_MODE_UPDATES; else - state.mode = PLY_MODE_BOOT; + state.mode = PLY_BOOT_SPLASH_MODE_BOOT_UP; free (mode_string); } -- 2.20.1 From a42915c972ae2d8495333305d4729c25754a42a1 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 25 Feb 2019 16:47:13 +0100 Subject: [PATCH 78/82] Add new reboot and system-upgrade modes Some themes show certain text strings to the user depending on the mode, see e.g. the shutdown vs reboot mockups of: https://wiki.gnome.org/Design/OS/BootProgress Besides during shutdown vs reboot, we also want different theming for installing offline (security) updates versus doing an offline OS upgrade. To make this possible this commit adds new reboot and system-upgrade modes which can be specified either when starting plymouthd, or through plymouth change-mode --. Signed-off-by: Hans de Goede --- src/client/plymouth.c | 48 +++++++++++-------- .../ply-boot-splash-plugin.h | 4 +- src/main.c | 17 ++++++- src/plugins/splash/fade-throbber/plugin.c | 6 ++- .../splash/script/script-lib-plymouth.c | 6 +++ src/plugins/splash/text/plugin.c | 3 +- src/plugins/splash/throbgress/plugin.c | 12 +++-- src/plugins/splash/tribar/plugin.c | 3 +- src/plugins/splash/two-step/plugin.c | 16 +++++-- systemd-units/plymouth-reboot.service.in | 2 +- themes/bgrt/bgrt.plymouth.in | 10 ++++ themes/spinner/spinner.plymouth.in | 7 +++ 12 files changed, 99 insertions(+), 35 deletions(-) diff --git a/src/client/plymouth.c b/src/client/plymouth.c index 8e613de..a11753a 100644 --- a/src/client/plymouth.c +++ b/src/client/plymouth.c @@ -782,38 +782,42 @@ static void on_change_mode_request (state_t *state, const char *command) { - bool boot_up; - bool shutdown; - bool updates; + bool boot_up = false; + bool shutdown = false; + bool reboot = false; + bool updates = false; + bool system_upgrade = false; + const char *mode = NULL; - boot_up = false; - shutdown = false; - updates = false; ply_command_parser_get_command_options (state->command_parser, command, "boot-up", &boot_up, "shutdown", &shutdown, + "reboot", &reboot, "updates", &updates, + "system-upgrade", &system_upgrade, NULL); - if (boot_up) { - ply_boot_client_change_mode (state->client, "boot-up", - (ply_boot_client_response_handler_t) - on_success, - (ply_boot_client_response_handler_t) - on_failure, state); - } else if (shutdown) { - ply_boot_client_change_mode (state->client, "shutdown", - (ply_boot_client_response_handler_t) - on_success, - (ply_boot_client_response_handler_t) - on_failure, state); - } else if (updates) { - ply_boot_client_change_mode (state->client, "updates", + if (boot_up) + mode = "boot-up"; + else if (shutdown) + mode = "shutdown"; + else if (reboot) + mode = "reboot"; + else if (updates) + mode = "updates"; + else if (system_upgrade) + mode = "system-upgrade"; + + if (mode) { + ply_boot_client_change_mode (state->client, mode, (ply_boot_client_response_handler_t) on_success, (ply_boot_client_response_handler_t) on_failure, state); + } else { + ply_error ("Error no mode specified for 'change-mode' command"); + ply_event_loop_exit (state->loop, 1); } } @@ -891,8 +895,12 @@ main (int argc, PLY_COMMAND_OPTION_TYPE_FLAG, "shutdown", "Shutting the system down", PLY_COMMAND_OPTION_TYPE_FLAG, + "reboot", "Rebooting the system", + PLY_COMMAND_OPTION_TYPE_FLAG, "updates", "Applying updates", PLY_COMMAND_OPTION_TYPE_FLAG, + "system-upgrade", "Upgrading the OS to a new version", + PLY_COMMAND_OPTION_TYPE_FLAG, NULL); ply_command_parser_add_command (state.command_parser, diff --git a/src/libply-splash-core/ply-boot-splash-plugin.h b/src/libply-splash-core/ply-boot-splash-plugin.h index de21319..3fa56ce 100644 --- a/src/libply-splash-core/ply-boot-splash-plugin.h +++ b/src/libply-splash-core/ply-boot-splash-plugin.h @@ -38,9 +38,11 @@ typedef enum { PLY_BOOT_SPLASH_MODE_BOOT_UP, PLY_BOOT_SPLASH_MODE_SHUTDOWN, + PLY_BOOT_SPLASH_MODE_REBOOT, PLY_BOOT_SPLASH_MODE_UPDATES, + PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE, PLY_BOOT_SPLASH_MODE_INVALID, - PLY_BOOT_SPLASH_MODE_COUNT = PLY_BOOT_SPLASH_MODE_UPDATES + 1, + PLY_BOOT_SPLASH_MODE_COUNT = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE + 1, } ply_boot_splash_mode_t; typedef struct _ply_boot_splash_plugin ply_boot_splash_plugin_t; diff --git a/src/main.c b/src/main.c index e406382..90e8a5e 100644 --- a/src/main.c +++ b/src/main.c @@ -199,8 +199,12 @@ on_change_mode (state_t *state, state->mode = PLY_BOOT_SPLASH_MODE_BOOT_UP; else if (strcmp (mode, "shutdown") == 0) state->mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN; + else if (strcmp (mode, "reboot") == 0) + state->mode = PLY_BOOT_SPLASH_MODE_REBOOT; else if (strcmp (mode, "updates") == 0) state->mode = PLY_BOOT_SPLASH_MODE_UPDATES; + else if (strcmp (mode, "system-upgrade") == 0) + state->mode = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE; else return; @@ -663,9 +667,11 @@ get_cache_file_for_mode (ply_boot_splash_mode_t mode) filename = BOOT_DURATION_FILE; break; case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_REBOOT: filename = SHUTDOWN_DURATION_FILE; break; case PLY_BOOT_SPLASH_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE: filename = NULL; break; case PLY_BOOT_SPLASH_MODE_INVALID: @@ -692,7 +698,9 @@ get_log_file_for_state (state_t *state) filename = PLYMOUTH_LOG_DIRECTORY "/boot.log"; break; case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_REBOOT: case PLY_BOOT_SPLASH_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE: filename = _PATH_DEVNULL; break; case PLY_BOOT_SPLASH_MODE_INVALID: @@ -716,7 +724,9 @@ get_log_spool_file_for_mode (ply_boot_splash_mode_t mode) filename = PLYMOUTH_SPOOL_DIRECTORY "/boot.log"; break; case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_REBOOT: case PLY_BOOT_SPLASH_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE: filename = NULL; break; case PLY_BOOT_SPLASH_MODE_INVALID: @@ -1950,7 +1960,8 @@ initialize_environment (state_t *state) if (getenv ("DISPLAY") != NULL && access (PLYMOUTH_PLUGIN_PATH "renderers/x11.so", F_OK) == 0) state->default_tty = "/dev/tty"; if (!state->default_tty) { - if (state->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (state->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + state->mode == PLY_BOOT_SPLASH_MODE_REBOOT) state->default_tty = SHUTDOWN_TTY; else state->default_tty = BOOT_TTY; @@ -2147,8 +2158,12 @@ main (int argc, if (mode_string != NULL) { if (strcmp (mode_string, "shutdown") == 0) state.mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN; + else if (strcmp (mode_string, "reboot") == 0) + state.mode = PLY_BOOT_SPLASH_MODE_REBOOT; else if (strcmp (mode_string, "updates") == 0) state.mode = PLY_BOOT_SPLASH_MODE_UPDATES; + else if (strcmp (mode_string, "system-upgrade") == 0) + state.mode = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE; else state.mode = PLY_BOOT_SPLASH_MODE_BOOT_UP; diff --git a/src/plugins/splash/fade-throbber/plugin.c b/src/plugins/splash/fade-throbber/plugin.c index a7ab4ef..294dc6f 100644 --- a/src/plugins/splash/fade-throbber/plugin.c +++ b/src/plugins/splash/fade-throbber/plugin.c @@ -468,7 +468,8 @@ view_animate_at_time (view_t *view, logo_opacity = .5 * sin ((time / 5) * (2 * M_PI)) + .8; logo_opacity = CLAMP (logo_opacity, 0, 1.0); - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) logo_opacity = 1.0; if (fabs (logo_opacity - view->logo_opacity) <= DBL_MIN) @@ -579,7 +580,8 @@ start_animation (ply_boot_splash_plugin_t *plugin) plugin->start_time = ply_get_timestamp (); animate_at_time (plugin, plugin->start_time); - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) return; ply_event_loop_watch_for_timeout (plugin->loop, diff --git a/src/plugins/splash/script/script-lib-plymouth.c b/src/plugins/splash/script/script-lib-plymouth.c index 857792b..ca7ad77 100644 --- a/src/plugins/splash/script/script-lib-plymouth.c +++ b/src/plugins/splash/script/script-lib-plymouth.c @@ -70,9 +70,15 @@ static script_return_t plymouth_get_mode (script_state_t *state, case PLY_BOOT_SPLASH_MODE_SHUTDOWN: obj = script_obj_new_string ("shutdown"); break; + case PLY_BOOT_SPLASH_MODE_REBOOT: + obj = script_obj_new_string ("reboot"); + break; case PLY_BOOT_SPLASH_MODE_UPDATES: obj = script_obj_new_string ("updates"); break; + case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE: + obj = script_obj_new_string ("system-upgrade"); + break; case PLY_BOOT_SPLASH_MODE_INVALID: default: obj = script_obj_new_string ("unknown"); diff --git a/src/plugins/splash/text/plugin.c b/src/plugins/splash/text/plugin.c index 8260daa..7298f5a 100644 --- a/src/plugins/splash/text/plugin.c +++ b/src/plugins/splash/text/plugin.c @@ -184,7 +184,8 @@ view_start_animation (view_t *view) ply_text_display_clear_screen (view->display); ply_text_display_hide_cursor (view->display); - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) { + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) { ply_text_step_bar_hide (view->step_bar); return; } diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c index bbcf1b7..3982821 100644 --- a/src/plugins/splash/throbgress/plugin.c +++ b/src/plugins/splash/throbgress/plugin.c @@ -302,7 +302,8 @@ view_start_animation (view_t *view) ply_pixel_display_draw_area (view->display, 0, 0, screen_width, screen_height); - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) return; plugin->is_idle = false; @@ -528,7 +529,8 @@ start_animation (ply_boot_splash_plugin_t *plugin) plugin->is_animating = true; - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) plugin->is_idle = true; } @@ -720,7 +722,8 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin, ply_list_node_t *node; double total_duration; - if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES || + plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE) return; total_duration = duration / percent_done; @@ -931,7 +934,8 @@ system_update (ply_boot_splash_plugin_t *plugin, { ply_list_node_t *node; - if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES) + if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES && + plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE) return; node = ply_list_get_first_node (plugin->views); diff --git a/src/plugins/splash/tribar/plugin.c b/src/plugins/splash/tribar/plugin.c index ecc17ea..bbf5d47 100644 --- a/src/plugins/splash/tribar/plugin.c +++ b/src/plugins/splash/tribar/plugin.c @@ -190,7 +190,8 @@ view_start_animation (view_t *view) ply_text_display_clear_screen (view->display); ply_text_display_hide_cursor (view->display); - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) { + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) { ply_text_progress_bar_hide (view->progress_bar); return; } diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 94b2708..4c57091 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -251,9 +251,11 @@ view_load_end_animation (view_t *view) switch (plugin->mode) { case PLY_BOOT_SPLASH_MODE_BOOT_UP: case PLY_BOOT_SPLASH_MODE_UPDATES: + case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE: animation_prefix = "startup-animation-"; break; case PLY_BOOT_SPLASH_MODE_SHUTDOWN: + case PLY_BOOT_SPLASH_MODE_REBOOT: animation_prefix = "shutdown-animation-"; break; case PLY_BOOT_SPLASH_MODE_INVALID: @@ -723,7 +725,8 @@ view_start_progress_animation (view_t *view) /* We don't really know how long shutdown will so * don't show the progress animation */ - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) return; if (view->progress_animation != NULL) { @@ -999,7 +1002,9 @@ create_plugin (ply_key_file_t *key_file) load_mode_settings (plugin, key_file, "boot-up", PLY_BOOT_SPLASH_MODE_BOOT_UP); load_mode_settings (plugin, key_file, "shutdown", PLY_BOOT_SPLASH_MODE_SHUTDOWN); + load_mode_settings (plugin, key_file, "reboot", PLY_BOOT_SPLASH_MODE_REBOOT); load_mode_settings (plugin, key_file, "updates", PLY_BOOT_SPLASH_MODE_UPDATES); + load_mode_settings (plugin, key_file, "system-upgrade", PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE); if (plugin->use_firmware_background) plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image"); @@ -1185,7 +1190,8 @@ start_progress_animation (ply_boot_splash_plugin_t *plugin) * but it's normally really fast, so just jump to * the end animation */ - if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || + plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) become_idle (plugin, NULL); } @@ -1575,7 +1581,8 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin, double duration, double percent_done) { - if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES) + if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES || + plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE) return; if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL) @@ -1782,7 +1789,8 @@ system_update (ply_boot_splash_plugin_t *plugin, ply_list_node_t *node; char buf[64]; - if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES) + if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES && + plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE) return; node = ply_list_get_first_node (plugin->views); diff --git a/systemd-units/plymouth-reboot.service.in b/systemd-units/plymouth-reboot.service.in index 1d57789..147f824 100644 --- a/systemd-units/plymouth-reboot.service.in +++ b/systemd-units/plymouth-reboot.service.in @@ -7,6 +7,6 @@ ConditionKernelCommandLine=!plymouth.enable=0 ConditionVirtualization=!container [Service] -ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=shutdown --attach-to-session +ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=reboot --attach-to-session ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash Type=forking diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index 15bd9ba..b7c14d2 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -30,9 +30,19 @@ UseFirmwareBackground=true [shutdown] UseFirmwareBackground=true +[reboot] +UseFirmwareBackground=true + [updates] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true Title=Installing Updates... SubTitle=Do not turn off your computer + +[system-upgrade] +SuppressMessages=true +ProgressBarShowPercentComplete=true +UseProgressBar=true +Title=Upgrading System... +SubTitle=Do not turn off your computer diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index 40613ba..5e8c1c1 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -29,3 +29,10 @@ ProgressBarShowPercentComplete=true UseProgressBar=true Title=Installing Updates... SubTitle=Do not turn off your computer + +[system-upgrade] +SuppressMessages=true +ProgressBarShowPercentComplete=true +UseProgressBar=true +Title=Upgrading System... +SubTitle=Do not turn off your computer -- 2.20.1 From 921328b1ef1c1ec60350a57c73b76297ea3e8455 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 26 Feb 2019 10:23:06 +0100 Subject: [PATCH 79/82] Prefix Title and Subtitle theme config keywords with an underscore Prefix Title and Subtitle theme config keywords with an underscore ('_') so that "intltool-extract --type=gettext/ini" can be used to make the title and subtitle translatable. Signed-off-by: Hans de Goede --- src/plugins/splash/two-step/plugin.c | 4 ++-- themes/bgrt/bgrt.plymouth.in | 8 ++++---- themes/spinner/spinner.plymouth.in | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 4c57091..098f262 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -837,8 +837,8 @@ load_mode_settings (ply_boot_splash_plugin_t *plugin, if (settings->use_firmware_background) plugin->use_firmware_background = true; - settings->title = ply_key_file_get_value (key_file, group_name, "Title"); - settings->subtitle = ply_key_file_get_value (key_file, group_name, "SubTitle"); + settings->title = ply_key_file_get_value (key_file, group_name, "_Title"); + settings->subtitle = ply_key_file_get_value (key_file, group_name, "_SubTitle"); } static ply_boot_splash_plugin_t * diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index b7c14d2..d6ad9e1 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -37,12 +37,12 @@ UseFirmwareBackground=true SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true -Title=Installing Updates... -SubTitle=Do not turn off your computer +_Title=Installing Updates... +_SubTitle=Do not turn off your computer [system-upgrade] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true -Title=Upgrading System... -SubTitle=Do not turn off your computer +_Title=Upgrading System... +_SubTitle=Do not turn off your computer diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index 5e8c1c1..187b635 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -27,12 +27,12 @@ MessageBelowAnimation=true SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true -Title=Installing Updates... -SubTitle=Do not turn off your computer +_Title=Installing Updates... +_SubTitle=Do not turn off your computer [system-upgrade] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true -Title=Upgrading System... -SubTitle=Do not turn off your computer +_Title=Upgrading System... +_SubTitle=Do not turn off your computer -- 2.20.1 From b0ea667525dcbe9bce9d57aa1ae9b59c9a75441f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 26 Feb 2019 11:03:36 +0100 Subject: [PATCH 80/82] Add support for translating the user visible strings in some themes This commit adds initial translation support, for now translation support is limited to the user visible strings in some splash plugins and themes, the daemon and commandline utils output are left untranslated for now. Signed-off-by: Hans de Goede --- Makefile.am | 6 ++- configure.ac | 9 +++- po/LINGUAS | 1 + po/Makevars | 78 ++++++++++++++++++++++++++++ po/POTFILES.in | 9 ++++ po/Rules-themes | 5 ++ po/nl.po | 37 +++++++++++++ src/libply/Makefile.am | 1 + src/libply/ply-i18n.h | 28 ++++++++++ src/main.c | 3 ++ src/plugins/splash/two-step/plugin.c | 7 +-- 11 files changed, 178 insertions(+), 6 deletions(-) create mode 100644 po/LINGUAS create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-themes create mode 100644 po/nl.po create mode 100644 src/libply/ply-i18n.h diff --git a/Makefile.am b/Makefile.am index cb6eedb..2d38de1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src themes images scripts systemd-units +SUBDIRS = po src themes images scripts systemd-units if BUILD_DOCUMENTATION SUBDIRS += docs @@ -6,7 +6,7 @@ endif DISTCHECK_CONFIGURE_FLAGS = --disable-tests --disable-systemd-integration -EXTRA_DIST = ChangeLog \ +EXTRA_DIST = build-tools/config.rpath ChangeLog \ README MAINTAINERCLEANFILES = aclocal.m4 \ @@ -15,3 +15,5 @@ MAINTAINERCLEANFILES = aclocal.m4 \ config.sub \ configure \ Makefile.in + +ACLOCAL_AMFLAGS = -I m4 diff --git a/configure.ac b/configure.ac index 78550d0..9771027 100644 --- a/configure.ac +++ b/configure.ac @@ -15,6 +15,13 @@ AM_INIT_AUTOMAKE([dist-xz no-dist-gzip]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AM_MAINTAINER_MODE([enable]) +AM_GNU_GETTEXT_VERSION([0.19.8]) +AM_GNU_GETTEXT([external]) +AC_PATH_PROG([INTLTOOL_EXTRACT], [intltool-extract]) +if test x$INTLTOOL_EXTRACT = x; then + AC_MSG_ERROR([intltool-extract is required to build plymouth]) +fi + PKG_PROG_PKG_CONFIG LT_INIT([dlopen disable-static pic-only]) @@ -286,7 +293,7 @@ AS_AC_EXPAND(PLYMOUTH_LIBDIR, $libdir) AS_AC_EXPAND(PLYMOUTH_LIBEXECDIR, $libexecdir) AS_AC_EXPAND(PLYMOUTH_DATADIR, $datadir) -AC_CONFIG_FILES([Makefile +AC_CONFIG_FILES([Makefile po/Makefile.in src/libply/Makefile src/libply-splash-core/Makefile src/libply-splash-graphics/Makefile diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..bec81d2 --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1 @@ +nl diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..40e01c8 --- /dev/null +++ b/po/Makevars @@ -0,0 +1,78 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Plymouth contributors + +# This tells whether or not to prepend "GNU " prefix to the package +# name that gets inserted into the header of the $(DOMAIN).pot file. +# Possible values are "yes", "no", or empty. If it is empty, try to +# detect it automatically by scanning the files in $(top_srcdir) for +# "GNU packagename" string. +PACKAGE_GNU = no + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = + +# These options get passed to msginit. +# If you want to disable line wrapping when writing PO files, add +# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and +# MSGINIT_OPTIONS. +MSGINIT_OPTIONS = + +# This tells whether or not to regenerate a PO file when $(DOMAIN).pot +# has changed. Possible values are "yes" and "no". Set this to no if +# the POT file is checked in the repository and the version control +# program ignores timestamps. +PO_DEPENDS_ON_POT = yes + +# This tells whether or not to forcibly update $(DOMAIN).pot and +# regenerate PO files on "make dist". Possible values are "yes" and +# "no". Set this to no if the POT file and PO files are maintained +# externally. +DIST_DEPENDS_ON_UPDATE_PO = yes diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..bbce0ef --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,9 @@ +# List of source files which contain translatable strings. + +# For now we only translate the user visible strings in some splash plugins +# (the daemon and commandline utils output is untranslated for now) +src/plugins/splash/two-step/plugin.c + +# Generated from the theme.in files by "intltool-extract --type=gettext/ini" +themes/bgrt/bgrt.plymouth.in.h +themes/spinner/spinner.plymouth.in.h diff --git a/po/Rules-themes b/po/Rules-themes new file mode 100644 index 0000000..8c7cbc9 --- /dev/null +++ b/po/Rules-themes @@ -0,0 +1,5 @@ +../themes/bgrt/bgrt.plymouth.in.h: ../themes/bgrt/bgrt.plymouth.in + intltool-extract --type=gettext/ini $< + +../themes/spinner/spinner.plymouth.in.h: ../themes/spinner/spinner.plymouth.in + intltool-extract --type=gettext/ini $< diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..f730bce --- /dev/null +++ b/po/nl.po @@ -0,0 +1,37 @@ +# Dutch translations for plymouth package +# Nederlandse vertalingen voor het pakket plymouth. +# Copyright (C) 2019 Plymouth contributors +# This file is distributed under the same license as the plymouth package. +# Hans de Goede , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" +"product=plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"PO-Revision-Date: 2019-02-26 11:19+0100\n" +"Last-Translator: Hans de Goede \n" +"Language-Team: Dutch\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% voltooid" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Updates worden uitgevoerd..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Schakel de computer niet uit" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Besturingssysteem upgrade wordt uitgevoerd..." diff --git a/src/libply/Makefile.am b/src/libply/Makefile.am index de15808..8f0abd9 100644 --- a/src/libply/Makefile.am +++ b/src/libply/Makefile.am @@ -19,6 +19,7 @@ libply_HEADERS = \ ply-list.h \ ply-hashtable.h \ ply-logger.h \ + ply-i18n.h \ ply-key-file.h \ ply-progress.h \ ply-rectangle.h \ diff --git a/src/libply/ply-i18n.h b/src/libply/ply-i18n.h new file mode 100644 index 0000000..94a4035 --- /dev/null +++ b/src/libply/ply-i18n.h @@ -0,0 +1,28 @@ +/* ply-utils.h - i18n handling + * + * Copyright (C) 2019 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Written By: Hans de Goede + */ +#ifndef PLY_I18N_H +#define PLY_I18N_H + +#ifdef ENABLE_NLS +#include +#define _(String) dgettext(PACKAGE, String) +#else +#define _(String) (String) +#endif + +#endif /* PLY_I18N_H */ +/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/main.c b/src/main.c index 90e8a5e..b06d29c 100644 --- a/src/main.c +++ b/src/main.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -652,6 +653,8 @@ on_newroot (state_t *state, chdir (root_dir); chroot ("."); chdir ("/"); + /* Update local now that we have /usr/share/locale available */ + setlocale(LC_ALL, ""); ply_progress_load_cache (state->progress, get_cache_file_for_mode (state->mode)); if (state->boot_splash != NULL) ply_boot_splash_root_mounted (state->boot_splash); diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 098f262..e8b91ec 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -53,6 +53,7 @@ #include "ply-pixel-buffer.h" #include "ply-pixel-display.h" #include "ply-utils.h" +#include "ply-i18n.h" #include "ply-animation.h" #include "ply-progress-animation.h" @@ -509,7 +510,7 @@ view_load (view_t *view) if (plugin->mode_settings[plugin->mode].title) { ply_label_set_text (view->title_label, - plugin->mode_settings[plugin->mode].title); + _(plugin->mode_settings[plugin->mode].title)); title_height = ply_label_get_height (view->title_label); } else { ply_label_hide (view->title_label); @@ -517,7 +518,7 @@ view_load (view_t *view) if (plugin->mode_settings[plugin->mode].subtitle) { ply_label_set_text (view->subtitle_label, - plugin->mode_settings[plugin->mode].subtitle); + _(plugin->mode_settings[plugin->mode].subtitle)); subtitle_height = ply_label_get_height (view->subtitle_label); } else { ply_label_hide (view->subtitle_label); @@ -1805,7 +1806,7 @@ system_update (ply_boot_splash_plugin_t *plugin, ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); if (!ply_progress_bar_is_hidden (view->progress_bar) && plugin->mode_settings[plugin->mode].progress_bar_show_percent_complete) { - snprintf (buf, sizeof(buf), "%d%% complete", progress); + snprintf (buf, sizeof(buf), _("%d%% complete"), progress); view_show_message (view, buf); } node = next_node; -- 2.20.1 From 39bd6bd70477b36b8693774372408be21194f2ce Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 4 Mar 2019 10:42:29 +0100 Subject: [PATCH 81/82] Sync translations with zanata Sync the translations with the translations from zanata: https://fedora.zanata.org/iteration/view/plymouth/master Signed-off-by: Hans de Goede --- po/LINGUAS | 9 +++++++++ po/be.po | 35 +++++++++++++++++++++++++++++++++++ po/cs.po | 35 +++++++++++++++++++++++++++++++++++ po/de.po | 34 ++++++++++++++++++++++++++++++++++ po/es.po | 34 ++++++++++++++++++++++++++++++++++ po/fr.po | 34 ++++++++++++++++++++++++++++++++++ po/hu.po | 34 ++++++++++++++++++++++++++++++++++ po/pl.po | 35 +++++++++++++++++++++++++++++++++++ po/plymouth.pot | 36 ++++++++++++++++++++++++++++++++++++ po/uk.po | 35 +++++++++++++++++++++++++++++++++++ po/zh_CN.po | 34 ++++++++++++++++++++++++++++++++++ 11 files changed, 355 insertions(+) create mode 100644 po/be.po create mode 100644 po/cs.po create mode 100644 po/de.po create mode 100644 po/es.po create mode 100644 po/fr.po create mode 100644 po/hu.po create mode 100644 po/pl.po create mode 100644 po/plymouth.pot create mode 100644 po/uk.po create mode 100644 po/zh_CN.po diff --git a/po/LINGUAS b/po/LINGUAS index bec81d2..c7af8be 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -1 +1,10 @@ +be +cs +de +es +fr +hu nl +pl +uk +zh_CN diff --git a/po/be.po b/po/be.po new file mode 100644 index 0000000..4cb3ecd --- /dev/null +++ b/po/be.po @@ -0,0 +1,35 @@ +# Viktar Siarheichyk , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-03-01 08:51+0000\n" +"Last-Translator: Viktar Siarheichyk \n" +"Language-Team: Belarusian\n" +"Language: be\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "Зроблена %d%% " + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Інсталяцыя абнаўленняў..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Не выключайце кампутар" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Сістэма абнаўляецца..." + diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..d9b2781 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,35 @@ +# Daniel Rusek , 2019. #zanata +# Michal Konečný , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-26 06:08+0000\n" +"Last-Translator: Daniel Rusek \n" +"Language-Team: Czech\n" +"Language: cs\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% dokončeno" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Instalace aktualizací..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Nevypínejte počítač" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Aktualizace systému..." + diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..ab653e2 --- /dev/null +++ b/po/de.po @@ -0,0 +1,34 @@ +# Thomas Eichhorn , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-03-02 08:34+0000\n" +"Last-Translator: Thomas Eichhorn \n" +"Language-Team: German\n" +"Language: de\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% abgeschlossen" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Updates werden installiert..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Schalten Sie den Computer nicht aus" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Systemupgrade wird durchgeführt..." + diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..7beb40e --- /dev/null +++ b/po/es.po @@ -0,0 +1,34 @@ +# Máximo Castañeda Riloba , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-26 08:21+0000\n" +"Last-Translator: Máximo Castañeda Riloba \n" +"Language-Team: Spanish\n" +"Language: es\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% completado" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Instalando actualizaciones..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "No apague su equipo" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Actualizando el sistema..." + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..2b7f964 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,34 @@ +# Jean-Baptiste Holcroft , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-27 09:41+0000\n" +"Last-Translator: Jean-Baptiste Holcroft \n" +"Language-Team: French\n" +"Language: fr\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%%" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Installation des mises à jour…" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "N’éteignez pas votre ordinateur" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Mise à jour du système…" + diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..76e2e94 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,34 @@ +# Meskó Balázs , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-28 03:07+0000\n" +"Last-Translator: Meskó Balázs \n" +"Language-Team: Hungarian\n" +"Language: hu\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% kész" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Frissítések telepítése…" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Ne kapcsolja ki a számítógépet" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Rendszer frissítése…" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..a3e471c --- /dev/null +++ b/po/pl.po @@ -0,0 +1,35 @@ +# Piotr Drąg , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-26 04:45+0000\n" +"Last-Translator: Piotr Drąg \n" +"Language-Team: Polish\n" +"Language: pl\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "Ukończono %d%%" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Instalowanie aktualizacji…" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Nie należy wyłączać komputera" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Aktualizowanie systemu…" + diff --git a/po/plymouth.pot b/po/plymouth.pot new file mode 100644 index 0000000..e4c6139 --- /dev/null +++ b/po/plymouth.pot @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Plymouth contributors +# This file is distributed under the same license as the plymouth package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" +"product=plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..71cc7de --- /dev/null +++ b/po/uk.po @@ -0,0 +1,35 @@ +# Yuri Chornoivan , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-26 04:44+0000\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian\n" +"Language: uk\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "Виконано на %d%%" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Встановлюємо оновлення…" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Не вимикайте комп'ютер" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Оновлюємо систему…" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..9ea6090 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,34 @@ +# Pany , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-02-27 08:56+0000\n" +"Last-Translator: Pany \n" +"Language-Team: Chinese (China)\n" +"Language: zh_CN\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "当前进度 %d%%" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "正在安装更新……" + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "请不要关机" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "正在升级系统……" + -- 2.20.1 From 4e1c00b89a710c38ba04206875c4d7c7c1d49c75 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 1 Mar 2019 17:22:30 +0100 Subject: [PATCH 82/82] ply-pixel-buffer: Fix right and bottom edge rendering of scaled buffers When scaling a buffer 2x and calling ply_pixels_interpolate to interpolate the last row / column, the extra pixels used for pixels would go out of bounds and be replaced with a black pixel. This causes a 50% dimming of the last row / column. This 50% dimming leads to an ugly darkline when a theme draws 2 images which are supposed to be joined together. This commit fixes this by clipping the coordinates to the source image limits instead of using black pixels when interpolating right and bottom edge pixels. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-pixel-buffer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c index 3ce6f78..51f9c4d 100644 --- a/src/libply-splash-core/ply-pixel-buffer.c +++ b/src/libply-splash-core/ply-pixel-buffer.c @@ -667,7 +667,13 @@ ply_pixels_interpolate (uint32_t *bytes, ix = x + offset_x; iy = y + offset_y; - if (ix < 0 || ix >= width || iy < 0 || iy >= height) + if (ix >= width) + ix = width - 1; + + if (iy >= height) + ix = height - 1; + + if (ix < 0 || iy < 0) pixels[offset_y][offset_x] = 0x00000000; else pixels[offset_y][offset_x] = bytes[ix + iy * width]; -- 2.20.1 From 8db9e868983fdc3e74fc7beea55b16e06a83890f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 25 Mar 2019 08:13:26 +0100 Subject: [PATCH 83/84] themes: Update spinner and bgrt background settings Update the spinner and bgrt themes background to solid black so that we get the same background, independent of whether the firmware-splash (ACPI BGRT extension) is available and to closer match the mock-ups from: https://wiki.gnome.org/Design/OS/BootProgress Signed-off-by: Hans de Goede --- themes/bgrt/bgrt.plymouth.in | 4 ++-- themes/spinner/Makefile.am | 1 - themes/spinner/background-tile.png | Bin 79464 -> 0 bytes themes/spinner/spinner.plymouth.in | 4 ++-- 4 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 themes/spinner/background-tile.png diff --git a/themes/bgrt/bgrt.plymouth.in b/themes/bgrt/bgrt.plymouth.in index d6ad9e1..39bfdc5 100644 --- a/themes/bgrt/bgrt.plymouth.in +++ b/themes/bgrt/bgrt.plymouth.in @@ -17,8 +17,8 @@ WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 -BackgroundStartColor=0x202020 -BackgroundEndColor=0x202020 +BackgroundStartColor=0x000000 +BackgroundEndColor=0x000000 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff DialogClearsFirmwareBackground=true diff --git a/themes/spinner/Makefile.am b/themes/spinner/Makefile.am index 6c3807f..e6e1bb6 100644 --- a/themes/spinner/Makefile.am +++ b/themes/spinner/Makefile.am @@ -2,7 +2,6 @@ themedir = $(datadir)/plymouth/themes/spinner nodist_theme_DATA = spinner.plymouth dist_theme_DATA = \ - background-tile.png \ bullet.png \ entry.png \ lock.png \ diff --git a/themes/spinner/background-tile.png b/themes/spinner/background-tile.png deleted file mode 100644 index 6b70a2d40790fcbec68b2db067f4f6b0d47ec740..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79464 zcmXt<1yGdj*TxCykOf{k7b&HrJC_h71eWdw>F$n2S{g~|1r(&aL%Kn_8|eo59{w|* zj)U$v%IRPT+ z4t93t_O8Gm5fG%D&5d2n&1gKVU9D(jKPal0v6-VGAkZLufJmr&F8H=CMrH0Mi?pm> zRE1P%p6-d<v(duz52!Oa_cT*!#9Ua#PN64r42Hl3>!1_p|{$|JZ8g%Aj%bhEkQ25peIEZqf4A z>xJ{9>alC}nbm~_dB_{01a*io$hr*9=+V{!hxyqx0eRV@f7=!4kZR-!so z>hWx4#XteFwKMX~4ul~Mad&rj_K7Ka(uvLaa~J^zfBW_=p|x)Oq3`mK3G`~k_hKY? zRSlAHNhG1#g4t!pn^Hgpw7Im8KX$bB0@i?+ffI(8(^ySZ< zp)*2$_pU<*sbYyRxjBQf_UdYaiHB71*D{;$@HW^hc*YmG?iD(MguJIVhX8`{!|)p7 zbQs~a&w3aZaRzupsGU4YZfK?KpP<+I7UILhz${m8t+Mo+Hvgx4Kg}O{%==#WH*V@Y z#bacVa`|xhlE0Ya^;kVmtn?N_7Na3#D+rB>p9cKfQ`kO6CSM&wc1=nEWtHCYe^}1* z>nrjrnidVHY;5#`T`SqP9=a64|Ba3+0iVkV-zp0PGMXhcr!jLH@>;Y*(CyY`(|%mQ zYH{}qF)^_Zzw&k1)o+GGjDNhfyGjtq(Vx(3wz{XAH^iqs{bcK7gx4?Vng35;{bvv zm~!fZ%XPU_YH#&b%u)3^#ZYmMe?}*IB0*WsVWP6=2kD-N-^%{MmP{!rDV##eRi;*F zVROnq^qV!(f+}K=j$4gh+Xkf6*VTO`=d(W*Nr1!UA0FhOQkf{bSUxJ`7|rchnij;x z=ES?#`=4tUMzIuGx46cHk+CutcUUNdJsq8#oX*z%R9jxWd`q2JBT;8D4!)+Hxa!74 zOZ_O-Xa}V>7AN~ra`zii?7T!oM9$udIW1KYSf;D*)Mu!%QMYGjHM(+4EiD;sYISbD zNf^a#cP>6%*S8->!muN{O#%YMMExIc5q}l=iql;{Hc048;e)I5^H!r{W3P`?H)yuu zWN;hr{mH@_I6NsD#W3)EN?B}#MHR#~xIR;+$z`eNM4JD3?#F-b0=v+e`rW;54psH7 zDA+vhu=E?=O>q8%6%?|S7ePg4q8LjdFxlXFW@6mVZgwQ8BUNtcc)2%$i(BQV6u?hG z#HgG-JPhlpTcyo5b#dVec)FTHoA1B6x*}q;fI>y}i6El?qPuZr5l=8qzF57LR0r-3 zM%-UThD23}_q%uRT!`5XfP3Ta;UT57stPgVOn=3-!nw6e6SB}D*qyh2QU=F7#_o8h ztbgRO>c>|s$0`2mYRK^4FS`eAp)}Ho%J`eHJpp`BLUMAlzynJa?9$xFr@754;BLs! zF%22hPpT>NY;aH>i^$#Fyij`fhg~YWDm1{_npq8c0-RavvKbo(2M0@Z0!pkuDl_-^ zb`B06?1pX8c-nCI+mT7HQ5i-kwD#C>EzkIhfJ?<~9u9}ehZ2dnvK2>2{e-VPKdnBy zF%9=y#;VU)o|vb;<;dSQY;rBNTc^e~lB1%j+jXAGnw~A%>h6`<=4-!Gl!6HI%UxG* zovwF3Ra8`L-JWe8Z*Q9yI8NH~HeXW}5=fr~VNq=Mo{-M(UKv3$VR`09a^t6n8Ah8D2S7M zi_|1m?hNS{dIH6MzG$|}`9A!8UJuKaaJZ=IT$$!i3wv*~v8Ao&_PRQa$wL&FI}1__ z9*^nR?Ch+`0++!BEK^7PITiw033z_$nq?q_Ud_(U(P2WdLRSb=en)dKb&UasJ+;sH)JkKE(X{^TCyr~%=` zB$euy`T~1}ZW#4FEgwb5ac?{im$YSTIGwBa>Tpg#jLqmcD@J)B9;L>s%`cYXQ!MNi zpZ$_tW|HhcBCi!CKB%;NDJCYy%*(4$Q7d$uE5fXVvrmGbWoco-rmGC7f@zZ1-Z5+j zEn3ks`E{hd46|0;WEGRNgrGCvF)z`NEfuxGTc_{u1+O`r!G$E*DZ<7aRB>F;5j$lp zl26{N@vr$Q|Efdeeb__$FvvmBtNu+V>(3`@tDD9+s6TmnNl z82q#S-~D)IAWUv`rCW0bftFu@Dwf5^HXh0&dv9j_;Ug*^4;|U$Nq6KOp*f@j>*aag zcE0v^92ixM7PBgW-)to+yBp&iBkvMwM7&}cMqW!_|Bv&0;5Sek1xT>vK_7nVHF7#& zZQI$~@9<}KU@;kXN@H7w@<Cy6DdV zBiCzmE^Ki-)VR3ZpQ`w6hMy_q@k0@G%cZ8syQ~NcLH)8Hb^AuTXBp<0!1K;C62vc$ihrwk`I;5DvE02$lYcCzr z|9-zXogkZrBDj`aod)6}R`8@CA0fPa7d?zkIPP`ue_6!{qk%wwGX!BBTD=0Yp5<=YU3=AE%~aTUZT8 zkd>XiUI4p3fGu0ZhnG0P)6|qsTVKE8Eac477d?CEAFtn0ReyN?L5B zI?r7fahoF^$g_CLx)fgD-cJ2eKws1VDfzEC`_o+tY}7&l3PXsXd$wQy_-dV5Xd3F# zK6VlabS8SgmmlrCp51C}?=V7=W?>;HBLqr*?OWRFZrh;l3iQbTNW6-BP>-w;$DG$Xg6JPw$$Wht z&-&5kpC_ycRiR8^_NClvO_d%M%@)z;$BQn3<|-IrhqF=It*tUcV)SG~kibL%{4KTR z2WWn6ZLJq5GT<_wdZd}&f8{p*;G7k+bzwB9;`OD_NsF3K5pZXQKWQV8PgnYO=YT$i zj)^_{Mo5sr9isHh$z;P8|0r=Hx+NjL?-}!>0p@g=*}v%N_#d%Of9pV>zxfv}TqtxHrP-@Bne*?>7dz zy6;MV(WKySX$X|y5OnB2`0p6#xbUK6_rAqrck?u44NYcl~?#>a6S_39f=gl z?Dndv1pW>hIBtTJ3~2DirG6)d{axWKS~NJFs69eNVQZ;E9HLq#848qC;|tLDu6Y(V zHmZWLJt3bY(W_}S8k3--Bz}t3a% zUKUtR2c2J9(lg3;u$H46`i1<8|BG4|mikQnn5s|&aCT_C2g~1368LY>otxliCW|U~ zU&Fq`+PXiS0nOe8Sr-`^gVT-)Trblo_`=rw$;M4jC~vqYjo@$|%#(=CtJUBqEx7H8 zuP9^!k~K%`;)z~;=7MEjG^iwpRsLr0lV}uv(#^u>pKeS6sjaQ8zQ7Pbh8qzEM`cvX z+|yPRQh}cIL=s#O?u090euWKux07kjMg7sscGh3@7umG>j>u%zU|D>000DeT@;EXw zk~ySl)*#RL_DdEIwmye*-;MCOys>r)aDTQOF*G!^U*C3B5n|!%%*li{03%W|XZcD>ql&ndDdjxW?#yS~#jubUdlWy6 zS?vPa_YllV@rs58wn%x>ynT<$nD`-DAw=ao=lL$@ggQoM-HfwTBEu(MLKw3wjqO{M zob4J`8}WA~EG!$CA8^9BBu!1BS7I*(cHHQ-Rc-gj%!p2|oqP%b=Yn%=3!<;_l`oEj53&<%>>CN=uAY*k8Kf$ zo_&lh_!&?#RIcENSg#E{)Gc5F#CkNbs1!!pwwA$vW3PQrowcBgkcKstdM}$xmjIR)r48cf@1RkvnB5O9xoFn z5~g;z*L_&V$n@bAnbL1YS_psj>Cd_?qNW{n9qae;va{24!O@llKtbEgII|#P^W4je z2-otB7}yvwVz09edXOQDbOa&%GBPcF+=+x`iu&D0nb9EcUUfI6c$1?akjShz2d2~R zo8;Q8!rmI8Sb*^tWUk=wb5`|=*R_-kFwrtT+4jeK8@UraQmEGlUggK>`|4!1A#*4I<2@5Lfqei zx6L>uv{p>Z_HyrePAyZ1b0qSkbNsIVWZR{%gH5)X12{;M>SX*1Soewp>od2%!{L}e zfzg_Sn%wLS7^En2xcdC>234BDt+$6QS@t6b&AH;+AQT8L=F!F-#o3?ro?dpy8!p}j z!apc^ZcylZ#C#rc3t}Qy+c9f|!Rza5uu2RiGO1uGv3OYu95uJ6$?X{!vz;cg{lvG; zlD?xPgFf$NFsd}GL&xx(Zon7>StZQ!hC%3zBaZAxXsXYzJgb~ zaspmvetTnMBwSr7nWz$-T*EmI0x|I3FN{S@yK>Q<>C6|U03}$Ae+JHPgP?%Q*1 zQ(owE^(>72v;J(IRJ$1z<;eIoj|V~^;agdRLl*BZMR*sBnUM=5VmC`JSaBlP^YM+K z1~e#iTQ-hL|GN*~NJo+hmLVcF7eb5a6-J}CRiyY!gd&A3>T){W!px?Y*UcX9O944yFpSQ+XwQv6&Y9tLS= z`*0iAyYp>9S70XRp^}Kjsm2T`fy+{=iOS2HYhNED^uCJiq$z}x1-td-M39Lr45OeC z3@xPV!Vk1xZA?ZdE-&j-L<8>BT-$Z6IYlg~9>V)y@$BHzZ9luHulIySeCc);r4z!1 zqK%X(nYhu#@Y1ldf6osA&kmjIu~EqbDJ2l~`ZvH_cZhuBaqPl2F3pPG5QF}%Q8W8* z_#A8F)ZigmXb(DzfWXcv5$cz2q2TBj| zs3L?ww&G1sv0EPMuWaC76SYN}gI+Tfah18%EL3U}6} zrYSz1smE=f$G9;CS!)g8tYNf1TD4h~!6UkD^ZdNxzEVaj&VfTRc&*#HT%Di4wzLh) zeegvvKyV*Ecb^EAB%)4$a3h=I4b21(rLzA7?A)fN1+yPW6~*k}^W>kt=A-^AoKA6* zxE_nRw);u^rfAYPk*AY{36C#BvyUE_TK{`2AXw#$=#BJ_#Q$0$H6$oyq3IUV%20l5 zxVq~7v$FCRe*$ZJeF=g8(ute-EG*GWYId3_g}*nA(R#VQIg`VdOP0r-%s=B-{UjPV$l28SAiU zaLF-@H@+KvHC{QDSj^#hTQtxLQ0e4x{qGU@w%Rn_S#AjzFA39m!PyX%K;(oQtgm{a zFI0pyp(k_g|J))vg%AG@kuHk@vWNKN`=M6vI!BzL`sHhV0p~5bkiDKIJwl<|Fl8Pu zTfOKu3?FLIH;AbM6TF{arC%xs+$Vna6@(vv#*_1?0^)>4xT5o1h5ZwCl3RVadtTZ5 z+yG|y9~3Kv?e4Wm#%wLx4402Sf+#Rma~f1FrP&sDj)S$sF8fXll z|2Mxgh5z{E&JD6DSdp&@+P+9v6S3O(NMmj+Nm@vCD-wF&85i)liL&T``mi)musJ>z zrc?F#2NrV1?a#uTpey4yDRp%=IPa7A#-V6fpK+KI;Hd6*BA`e(+$Qlo!h3odZ4)~? zR+&R)HN%kwA29yd$Ow+1*LE`Rhkz@IiLE~Lhf@K~w_CC9#^Tu`wa99+e{q*$Ka-0FtLy2YD@6m^LGJ zG!7bC@|!~C;(EdJgLS17arzU9cq1lB8CCBwrQg(ibu&u))X>=Yr}zRhIBm|RRuFf! z9a3YKLu;WIkxidbrRjXW^*b7&PZH`v_l_P{bW?j(JZtt5=!#ZR0|@&>82zWj{H#$# zpE?t2A_F*kX=(@i)uD)}A0WO_76*jJfRWvMpw*+ATv|j!bB-N9QxIe=flVP#5|!!V zjoeQ2HGTvE^!X6oHBrkJw9Pf_Ib`9vJ{^#vgJKup0EV|2UakAocb?e*EAqtq>@*nsK>h z&K8&l#=ueqxJ+ACVw0IXWq4cK-VbCLm@`(r_V1cHG!8uUz(VQbR9bq^eDJR@szJx| z4{Ao1`Jb=)gU%YU()3@O(vjaJ!{Iw)Ibve2`&od_3EN8MBa2y^Xr_^BfRLN2c`3El z{7v~~K~>brVAlBZ_WzxBzb4=MaM*2u$+8yyV3A&YFs_1+#LyKk4b2yO+E*UY-lBom zOha-ncE?^f{)v1|I~hs+xP~@<5cQks#`-m;AdAtegz~7aws!i%{am|$Ag&7Ps3#Pv z-`v9g(XFt9&BDH~wY{}9E4@yi1}yUVt-N%>=Lyg?jSK%JvQW=Ob*RQZ5|!gzS9YzG ztz27qqtgdHwm{i}f_pa>RUGLzA$c|24aPI&s!)OUh}@4XV3Rj|>H(^sTVq%-(V5Sk zhI+Se+Mk~UK*m9-p0n9%>Vx#F^e$;GxFYQeH!O}!?X5n6tyO_z%8C>qn-QAnG@hs> zJ|KG~_6D+5Z5iw0xkFZbTC;;FrljG@1HgXoSdX8h&5@?MV$hY-Z@Jxw!jbB-oD_Jz z33#sGR7oKKVbId`*>r=y3IiS(11K9IwMi4 zxK4gOXa9aW^?IUT9PCL^a_2yV#^#(|27k%S5=+Ybp-@FG!Z5WT?=Dyk?0ILKCQ)Q2uk10dDP;&} z(f~HKmD(4Olbcj|@_$TCtg0VolYI#E%(rm0HHik~41CXeWuQEL-ROlqP(}D*4z7hq~&&87t^joVI*8L9-Uw~(5K)1OL6Xwz<35`j4NH}yir=t%E zog!}$!QiL@ueJA{HVIJHTzML{cj!{m{bC+}^?*wGwAu{DPw#Zu9~}2%f)vouRPfFh zIdwFJJg!cwXK{hf;#1-$Nc0*U^FFv>NWQz9F}DU;ca4kOu7#XFf{c}G+rSG06A5p@ zCZPCT{;>IprH|!r{nkSC z?olZW=GNQT$S~K7tS1k>iZ0obLHO0!Ncsd+8@8?MOoVzx;<1p)Pp=j@ux!5eUO^yK z{X9XwK+1oM zb^VC^#alQZ#|O;G9bb>pZ7+fp1Vg{1+KRRR&QFy-6@j~oa=Ajl!{=HiFclN*(f5(uOC>SIxbM8~=nzP0J63cWJ)Ij+^2#YD3grm9y7>8Jg5qY#KxW@ClU z7vaYmVa}o|1Uk@ur+^kOoQmqMt!L3Tg zE-HVyhpL>M(6%m_-ljX_)$P=>G_6Z|lrrBj_2xGA;j-iPwRJ1IC#ba;2ZZ0sl)y#B zdHg*~z6~zRw|cVIxb=a*`tAy?3Wx_2gA(M7Dokaqdx;Ymu6S?3VAN6R%`^VoQqBqN z4K*m|r0 zk&|)LyXfyz_pDs#0!+kxKmKLvUy5$01qoGr_=wygufErgUV;gll;~MqvE*^n7(CO1 zP@TL_|2R&iZ;DUSLJQ7%IBBOQ_>#t%b&le~)QzLNnM7BeYUtm%OQOyTPJoK^#JqJX z%?1pL(SrjUq%0{xVp6D@a7J;*m{8OXg&?zs_@~J6cC{`%RkV;pfrQ^#vmZd#c>F|o zpisWN_aW%2f@mn~KW~7}$Nq1FxP9-U5^JsutjQ_bw9Ap_E05w_{6;On50LwcDj{BZ ztY78Sc{VHYQ-eUhL(7u7Av*dRkggE4*Zzok@7VaZ>waUubu)x^ul~EP7lA64;BeKu z9vVzf1v?)^3oNPE*@&GF(7ik2K?{+v9@9KQ#@S87lx+uQDHZ~DusU@0d{MBS`=fN| zD^uw=B2F8SxR%B5aE79{_|$;K|pf|R(+KoM%{ zXbnV3ukBKhZWJp`oWWDbUTXsfTzy7vfE{f_Q1FCKlT&y>w>yj&5(R-Y@xJc(uPIuE ztV(f50yi6OkupY<_`3k|Pj&^I)tPo)PQ(nxpMUc`l+^x>^!EFE1)a~JnOQDDbk>6u zB%CX}{OxKjM+((OKZHyFeNSO3yrNG-{IorM-9e80yfm!Rd}}BEH_frIN;5%hd82hJ zxqDnN93b9x;SCy@#r{(dpTGZGd#ohazgfx8E2%S=Xw~``fKJuws$9a z7eAcrM{_X3fL_uw{0QsRI1dPiM8o*n+r-g7tJ z)+=GW($|-i#jJ3LAO#-d|FjPh>s@xfXbF@w*VRG2vJ(J}NC8P!# z#UcD?&sT=eGg(3TGlw^`x(>-4;VHrAw(^j+fhX;hoX&Z13Z-h8T#(9Lew^qaz$6S# z6)UrgK3z^xLc@kRK7XBw@CSYv1t(54y6oaE1ck~g$Xx!BgSG-jOr6KyrN-;m0k_>K zjUrb(sA?aet^L#iEg|Pv!WreEH69$$y;u6}^0wDRfE9{!E^Jr=w~6iE1Yj3nsB3O+YRc$XNVK3O z@zJ-e({qi3b)_y6cs;!qz0IWuvvPN=i71kbeLrne>Mvhpula)BLO=UCHoNr?fPKh_ ze_6J{bh+#Ov}8>9&GDO=Mh^_um4HV8#ra{-x=<*SwTC8l+ldE$hk6bEh2FP$20#i+ zHX@Y+rAjDSs;+N5YVa*S1nrq|sYi_@*so6#gQeAXm%kosYi&<5PHI{pVzKZTo=W;Jb@3+7W7QDfSLCrSR*LpP^ zSR)jAbr`=(UI8anVM-(Z#Fa%6rvBfQBLo@(ctu4#cqr3WAPOP(@?36{m2x^%Z|>Y+ zQ#Yp^1vb<-yq0p}J}e4_@Vn?qJ=?*y1T~>{Q)>t1dK>^#NF)Bhs-7upj*^%Z^W{L^ z_G12Tht1)8w%-6yHO23=(et>oW08{dzW@eCaSo?C=QK_}yPflZjnpxGHA#CwmLcW+JxL7Gm=hcS7tPdu7 zK90FW_YbeyBCX;}&BG5a>#wS~=-Y7n3^XVdah+Ut4S~b^=*G8Q=qg zx?G2zMTqYh(~HtFa=_;*ekFrn=(^!9Cy4Ou=MQ{gPEnzAG+yH?u&=~lxA8`K#@^Ii= zETI~iOfu`PHpy-p;!m5oFWz~j*W&4fJK8~5i?!q1RWe#*vtLy|Ihdu=UGnnc!BPhPGZQSXTeZQYwz0|?TFEjBD2FC@JzN!MpcDc zS{q%JnYHfMVzvX6jh-pVQkvxBM|eHt6z+$YN7@b{bHL4pf2qEHk?IM=`k@Jvm-~&^=d1CMafZbtCY`pl#x&>1W06N1-6&GSr{YT%> zaO{|^XgUsGcb;4td zEOAfXhg|>%P=h}IvCQeMDSQQCR{dp;z*g8<7!;C;#)Z!RgH}3`M4?`B!uDABK6FDi zsVL~~H@46$2r>o%gDEXteOT&!{wYMMXQAIYzQ4am3dylm&$`3+4LG>O$rV)bi&m6;npc}y8Z@IMV~h#O63}ox z@L?(w0kW{x&HgxQqmdgQTj#CO0x7z9FNJIV(o&2t@ftf0^o}xA-Y@K@FCP@}A)}~i zOIwY0({GIh{BwDq{}1QWC@%vgh>q>MFaEPAaGg$XT@k-8FE8^}NK3BM!jY^*%uga< zsAJVeHX}k-+LWUy2kj*3f^U{?$wgT=1mlEaKQuqh2l%^yLGXg#F#i=C6xbZH} z)Au^+_ai_9(kau?2jVFdZ9zs=wk+n~6{HhZk1xGiBRqPWD$6ElNu&8#3;+@gYg8)F z#GWt2>}0w?DC4~z^gVR0sRAMRRr8(o?N7&T32%$GzQ3@6WH@tnG#OyY-02CxN!oHx z)hvatM=NnY&uALzhjw}&*UqUhl%ZLU54;m?5iMui4P1Tt>+u>Nj5|4`@2qmV0M_~KmZ&L+atS#joFGD}og1?)@$KJWtx?mld_kJ~LO z(5Kg8kCnzPA$yN^7gF(sd&9Y8(6Ip9TAi$`E4LqlMm4?w$n-Pd>GRNax}~w_n<`3@ z#*!awpmoL~Rm-C_%lU5t>dq7kf~R3U(MB=(pg>|kLWy8xibh=iOMqRng0UmHdu?Rb z0eyo&g=v7zGp!2QdZ9)0XKZHPib0`a4An{JGA3=A(gZ5?c26cR82a9rH8Y=qDC6AKC|eeGp$Z$21Yj`j1!C={NH28s_4f-+7|2#n&uyQ& zXt#+-vq5@IuFQ6|I(AbRWxDyLOS{eDSJCIC!$t@U;#bx+p0=MPezmsZTr&tFd$D-# z70@Uigp{aZ;#1i*BCsVE#GfEXyUW80;VBFZ-JA2sJ6OKJbS=VPDE(4m0lVrXU5z4A z&iin-Vr#lo4d=qWmanMuD>^l@Bn_$db;nqy9~wW2>%YhC(Etbw|B=$GBZ2@eU~`K_>3 zcfDY@>*qJLY1*heO^<-izbQHU$tHhd4}|tz$pMIEeUIj=x~?lyW=wF=_3Icu?}Apr z^);;EHrbY!p?AQR%Lx<2jN?eo->!;p(PwVV0X7G2J`e+-7n}0GD@FWSUbTlmBd&g+ z^R9v9Gnez=^+ojN%)^Hf)@&Fd1OFeiM9f#gz^n_HV3igd#!19JI6t!Te_)3bnj+8Y z5zd$2FP-V3Akytg^wYksYyeu(zR>F3C}Ju}cf=Rxjo@sdO$C|MQfBb`KxyLQ4r!@n zGIX{nbpcN2*YTvO;T5d9kCPxKb0RYiDVar=j$CGCi4M{Z?Mi_tZ4pE+8TD13zvXcF z^!1`5Eg}-{OMK$GzT8I|IuPWCG$X8ZG@J*7Q#mDPX3{g2_J%++h<&BZ7 z!MlZ4+%zq)plN}PZ`{&00w=NS5RQ5JWFnyyrCW-G@jI;MW&5e<;mr4+{h(I>0p<}O z9k7gSyp+(TQ;OWL9jQV`IvSD{a!Zw%l>l65g3ic@g>Qo zgbmpap3o;*uLmWd`?W|9r$PVkHBGVC$d6USui}j_gp?ffXpq|;&cH}y#K(c&m zs)2WDh+Kc3J{tT$$mAC%zyYHL68^x?UB_6f_UeS)U_r?_$7zd;cxTJ0=6I;$kc9|D zp|9nm{>k@ScN)9uU(=3;SM6sg!N+;>SDZT?eEla&x7N8{pyEcrPZmh1UBsl02Pwjc zr~m-QJE2H7VmQXp+n{L5dI~4x(Zz%kT3J(~C>18#FtrD;S`h+aj*_iwfR>w-m^4xN zUCk)zvZRPnY)s78?zAb>^(k1tM%&ka^!?mgWLxonI5q(YWfnw-KB@FHk4wt6-#jMS#w1lRm=gBk&j*^jI-r`bx z`j4p9f+b_{LC%E`p+%+#M_f%w3ZgU1qCR<95G(Y}gy_o0%S(VhIZqIi18E9T_@}hS z6s|lpA0R9HsL10)z9!8fAVur{h zY=cxpz4+Iggl4|ICudDZEP}a=(=k5AM)$0%YV@|ft}}sj5q!j!XZr8-w{8Tk(QJ5e zT3$AxCbV|IjBJ$eeR-{=fL&_0%Gv9e0@N5XEc>*!PMVqb3-oi&Ymy&iZqI?;YiOXTnH{Nx@)tVPM`) znnS#j4UH$!zsdIb+bH0(>)w=nAJTOz;lEGP_NpGe)Htp^ zZq6#5UWW(&AsCz$6N97CTzVk_|0auIn#mapgFUZDQ1iY_^f%PcXVg+vjo5O04f5+n zuau@gMMQM3SLW`S%Vmo>Gmn1k%b57sW4FSbT;mH~H481A4j+TdHICTXs*=8U_e3O( z%;u)_b^ta54#O$GOdl{E6pKAszoysZatwo+@eaRgAzY=1QpW6zrZd|~FD6NHO;Cl# z_`d+VTy+xL8X%C@L22>MZ@GT3bH`hhc+Q_r;mTr9+z&f^?Tuit39;5d;Gkyv{Y)4f z?)w(MAhY@-_w~F1_ZURbY8&UWSTV@NoDv`sx8N^t=Ga~uz;H+kERQ4K6sj%(o*u9l@XM)+ppHoEGw zHi8}G*f=uEUK$o(AdnX=Ztq|j&gvp^(r-AVnJW8* zCs{Aif{Ju&{4M%=G+V2u z3=b`L$bSM=v8*Wzq?q1m|HFirxyT1>H8uCirjnGkkgbH0}U2&Z&!@i1@4sxt~_|ypP<$6*#Zy2_ACN z_J_Sr{QZeB*0Vy&rq=U;U+(>049T@3OK)_2&d?w%T({a3(_lbQdKj{73pgy))9Yme7QACKSnCztt{I_zWcwdj*3WL$&fh`ewep3(C zM8$Z_{nTl<$i#d zX3TWVaSJCCIqg7x7n_QjP)ZAK3{y~0zu$8lwIYt|<=0pDfD6Thhcp#dbW~jq++dB{ zj0lNqfgKA6a2R1m1K9vI*d5w+6A3;5lClkeMzAik5tou|INDdL`44~%uCIXAS40Lao>hD9&1eH4Y|0gwfwBgpcOjf#dP$U= zv<{_as>{k(f2rh;XR{|QW9B&d^Zs+#IK`JAEZm53#P~tI9?lDF`YYa##5JfDzW6lq zvkfc*$ z$`$q#`Fn%Gnm-Lh#8Hc>RCQA5$!r8u-qOR#viO}$sIrS^Y?dwg6%*O1kbT7fm>^Gh zkshJs@p4MJ8V+yb{o%W!&Bu$2Q7EJKAKtq%W0eof>`1e@Q<>Yr)>cA0t`-T1h7TU? zaQJxg3MUX zrBr;e{E6{%zKb!j_O1ySPmA%|pt>n(Ol}l*gf?M@MQCay+>G>27c+kvs zCYhbkKcZhPBZ6vc8p8G?*U_t{-r$p$3=DTqBmU*D$!vB%UdWutDt09RR)#VxmbDk& z0ZTpXVnEiI9iy|`GQ|bw@|ntpy}`o5@;gGl+yL=p3VU&W`^Z3wy$5u^!XfHNw-Dh$>n6V`2KgS^+%3wHL?1UtlnAq7co zur)4uU{x~Cgdm}79+nrfDE=_v1NidafOjsP)3_6cKvQpA+bP14d*=gMWx8@#gX^sI zyU6N%D|X#YwZwhaLMR8?r?gUttl~0?4lZxv6&2yMu?F28K%igHoT!NQVY1sA(?M|* z-wqQbWD;?3u}?1pi%y7jj#r%rhraIR$Gw3$Lv5avr`Dm_f-BcUDJYZifHS;T66PgUL56fW;1!~T*k!fn2 z4J=c~%~yWHK+p0AMkw#2Z_-$KSHU&RV9Xfeaf|4XH@C>}YaVkMf+$9CBhJj0@wlDGvHBbw3YL1=KR~w`MbEZG+Y`vn5EvG*RG5vTyy^E;A^R^UE?wz zEi!?2sCw$8BRa4`+&Lh%KforAs9^+5%4Y?XQLiK;h6#ty@wxiC`w6Lh;ACzF_2~c4 z0th-UvUW$IDmCOdx!_+%f3NAn3m}n%C|}JBb{p6-JdrUU_*KQ`@#O?b;bTzk7O4Vk*c(lvI(}=coQEg2V?x8E%Z=t9tH( zfX}jIqEsNh!}-YaifhZ$>)T%EZ&3a=GO<$|gsP2h&Ff_R2@jsWTdL5lM->th5=cIY z&kn8mG!z~_7u`qN;<@S^@OmX%266|__$L0F0-OVE!tpZfe`gPr`+%3sq|PJcexzk= z>^X%2qRUP@zw^!aW#hge1r@viS>VXslX`#)4J)irZZ znU%AKvCc`30GZSx-G3%tc5z;hhBn-Wp#-2H>6G8KY{ywUs{9m z2G+5aQ-|!_@<@LDA5CW&6?ON1eY(3lhED135@{(3QM$WB5Tu5b?rxAyN$Kts1f)y4 zB-Hyk^Ly6+4KIYXoLTdo6W8ARvvt-*ZBV;vlXvIE{H!gT7t^Yqmbs0DRq;<~z?RIs z=1+ZKG2ztV_Ju*H9^$SN&@%le_Hf{|kNb{#ub0F0NG+XL(8U0EuURU(*O$(up49H6 zw#^2M~PRRn-*f+jHpW2OQU!C~fTY24y%S7rsn2>;R@XB~kxd+eo~}$_d-u zc3)@u_v|h{KBQR$y%l7>F(%zXd?dW7Tn?P@Pk+lO;bIw(#h2$8_f`|&`Xs;DH>(v% zF{KtKXbU^fs`~i&=meJ=uy|TX!93yIh6t!R(rV5USGFk8*~Ya}f<*z~;`SdbudlVl z96sC)_HrX*xmTOMZgE5{z zZ?ShGP_4JzafUcucBTAVA2PYV{?ZH39Ya$*;ciST<{=b=GmQ9eqnNnGj;RUCP1XGD zF+i^E%9duakcKGI3ExPabQL(UB3B`4mURp)xRk5(>8H_k4=C)K{6=^ywXf zF)b?XSij!=O)@GAr&>WEpUENrf<%OxvO~l;IaaWmBidn5Hj=+F#Jl?QXXM+A41tdI z4zDjHE8U*Q+CKzn#5^}8vu@I%$}{Zl^yCYoSy@C$+O3pkdvC|XxkK(o_7oOuG-l3D zh*Rwj{`-%HK#jYn9wzgozp-^BTcaNUVo6>DuM_(fuj#LWu0m#?s9HlYM{ z+&Q|bFj0?pepov)3bS-^sk^wORM4{^B+YE$#@cMZ-gZWoQ(*kx$Q0v_4Yhj7+ZIlF zlhSAeEYRsPqsy>^=vo#C|HuqNo9$gW(ySH)loK7^7Tdu4*bL|8|i052M{qs zuxhGe&sUMp8{pmxce(boJS1p;9|HBXL*uAu%|s+yssmODBl9QJ*m1%iFGPWx38W!9 zopS~2WB1oHy-!v*ku@@PxZn3kG~W$bp)g4x`;GML;x;iJ%ar$G!v3AnoMcp&H#OR% zy^Z9fK1WNmXmBV$YfoM&MhuV+T#Vc63RbS+2f4VotgJZ;wU9G;mQk<_sqSGZ9M#B zP)$p!(EkO2>4PFhkFu@9RKBqK4MiVJKBz=5Dlp<{^Gy3)A*<9}i5|!4Tv=r^>NHSe zWu!qdn)_(2lNeR?6w#{WZrm zhbRqQ{X|nxc;(z%2M33S7RN|_c3R#2pM_+%v+nTd>T04pg8NDgc70hn3CfUOVuj^<<{| zK<-~V&|)}|edR>U7yn6N5Vmi~4#=EWK{FGb#YB+#ZAtgz9lIiXsQH_DZ;`jY_689r zA=im6f)9DFzhBOIFQH%dMihxasoqIGOzaXQ9Rl&$Y8qH!U>qnfS(Ne!2_1-7H-u+Y zH;Xg5%B=mx4_6rDgu^~M0_Syqp+>C8*yC?e-7n>u@EAOU@LOloen>v?vW@rFW3L7y zMA`6xY&;CbF!mRtiXtOVDp=olq~nL1hsRCAdZK59ewXThUN3@rTU;S(OZ?~6o<|7P zOxtXUqfTS)#bzsB`yk>PB|74D4^{H?I+ipc&PvFd774%Ima?cZ zmP>Md)o2wbm$|UNCkX>zzt>(@OUn|Y-BmE0Ev?VIFXpE1;>h1Sq^hNB4HA1-7X5)y zlonnXal&v<2&cpkxxNc;%^J`B>&tHK-erQs*jqFPdrvzGwAEH@Y}V?L&_}TOx2L9m z7#5ob7FtHFFu`r@9b{kr{sUK(8vb4F)PY46tkU<5IkmD%9LNMj z8?77!j)uh7*P?p*Z(GY;P#a7&<%j7(P&DTKpB=tZyGmX(kLXVryVbv)#x-+UcKhD~ zjS3b_k${;)RGN$+2%>f0yL^>$@HO=a`Kx&03o@w5@fL75rR%E3Swa~gJMc^_Y8H7Z z?gQkNa?W2vRJ*Qi;MdEfx5&54;N@LN-Azvhde&(^t>NQ~g0=6jlInY0I1J6ZozMQpu0w@k|yQ=DJiZC^GZ?ZQMp|fAA#>>&` z@l9CY)(-=8L2z7f)f0)(2&65t$X(?0;7?lH2-;PR#pj7YKX9mgeS=w4-dpLUdBviP zZ^&61%pp36LqwB5Xlo(TctnXbJQgIx;{L{nTea@(dR5_Y@Z*@7j^DDcRk#s3BrK5x4k z;321tDe_XnY4b+!-5=dP(EM@w>HdzS0t-!DsVAREk@w}~xZ(cy%y#<71CoYP&oTLH zPB86XMN|uC~<(~EAZrJ!Cxy~_8%nLe^&(6u%C3|Ec zHYVtu1%dci*y~QSR`A?&8AIK@Xna}pqQv++Kw@8gtjL}@@6THyIg@?!93h7Y=EWO*UCj)R>VU;V{w49{VLPBd^je?L0a)sw`$ zp}*G_$2=M8WxB=wapeS!dC`U}ZV}c9Qrv@9{lH5fi-5zh;t%wB`b~V;>xDNEBWBh> zhfrdYMnN-%O`+$C^IwRrD@v6&YICENlfT|O3)4d?V?)dX{#HUs4hganbP*K4y^O8= z_B+9agZiD?*<*TIn*M%#7X>Bij7nJ>Y9ASH!8^uaocJ)evnBKtOjfn2Q@LB}nJ~Yr zDCi_*^eN%!elnf4%!1Br&lsTv-Arzbax$D8FCG`9)ntzf&a-J_DNn^z*+_3G=P%{r zL0G~$1y9&R<&t6FQPm*?4{xlLS5q%=*7Vh1=*o9ss`AbLf`F5(o%3hY11iQNRQ>wR zq?W?4RkhbMOy|ZyK|ES{7D(FKFvU(EyjzfQ` zw^vDDA4jS9wMsY6>aV(QQl4()ZRAr!uDXJywK}2!_os#BdH(i6Fv0)CucE5jOY5?m zXGXGVEm*Rp*_7np7EUtuI&0{GE#L2-{ED>agh$h?g{Y85U$9q9=GegE9Q@8c>i>+u zu3sib!iD6MYR&ij&dv%cEhJCd!z;MS7UkPoc@DnEGta_$>HhLoS|w)7abJ5Rg%P4u zKP!T|oU`7L%^whG#ru@XElK`ZY%-ZM>@DBT3}8DdYKR)XJiCC+Vu-i)lTOp*y~y+5 z43Yh)DrS=9A&Abv>$keJf({qqr0+x+7tX$NOLzI+ObO4OP=XvN@PF)sVTBXc9l+Iz z()@Rc`yY=&htJKyR7%HwhDa)jBJYR2#FsdmfB`iz8Uy6R0!1DL8gpIANxX4N%aJ+U8nl^B=E=nT}Dbbw+lzi^OcZgLVdlheO2ar z{kl5`JvaRD^{p?W7x=nbTfL$C{d3b~-T=9?|6wa<1hPZvej2}clHi3qog?ZYJ&$Vc zz5QDPKT%?)4<9#{CaN!cD+X0dI5VVogzk?P8neFKEo_TafI5@b3|<)L`>BM=4yCpP z!D8yxDRLc?vvI%KK5%Dx9q96Cza7_)!Ok(>k|H z^i0t1a9khk>0SpzxhTH3l>IP^9kwf$t{_iwK1P&e2Wf4dxD72;8mo_-=tup$i#=Iv zeDv679IC=H;?N3HX`jPI-lI>gJ4QXHFjOC0!F1`awj}A@_x~?NVhogBzo#IYcboA4 z`e7LV(y)ES{mMWOL^)7Gi|~|7{rn9m^ErbckVN_;Fpx}?R_MCyl1o=0W zEll5a(z%Tu6Ij9-1f6h_K2&|DRckPfP;Grne2GL%HB0iF462ODm7LNf{FEW_bNR`CpyNu$%Pn*|EkyHC^~CW6SPZ;O-{>UoQPDM z?TmKvvO#znkwQrw+0ty_=zENl|E|siEkD7cTZ<3;FZFYY--}t!l_jVn=((DC>*(qaH_3rQuCj8yz?y*ttsQB^fh3)Tyc>6D@rg%{y* z2_QmzfPLkd*iy_~bt3)ea$v%{SLH-(@Xzmr!Pj`AsbwO@B6E}!ZQ6*8h{?n*;w@&i zy${a(#F0C7Jx}(b%NrgZcAZqBIIO99rJNHKb2ga|Ffi6$->=O`@c#Yy&qHcNZxMdo z!aaluYFOcH?g7BSno${lQEbOT%7F+FXJG73ljz|HOG`o_1n)kG3ibz-{*7yfe5=T& z&rMR{q+PJ^D}Ya`#py^ThCZ#U2^UkK{8Ms{sApMFH&&B5@emI{r+}E$isHSpti+P-ZG*PeTZnPic!RQz`ld z%4;AS6^@5pm@S7koLQf&m`U5lxfhwt%!MO96YU7_mZs6)@jnm|msDk?Scxt*;qKZD zV?9%AuZ3xwc;ad(^%7$bN6_6^*KH8ui@I+061@9KR+ERnD+e4Knv(c-#!;fd@Jt0H z8Ltmvubm*2RNYXy-6DO2!SdBUAb{p1AJ^7%FOka=j+u(Ntc*ozV>Th~X3kXFTaHVF z@Map>Oy^_*sezZi?M}jzv)`xZCKqu!a%!WICM3m?s*xN`0>`DKik`mtGKajZbGCW? zXsyKo`DEO{*530)a4Kq!a)GpjP7+^&89~xDGu*2M z=hISI`O^USW~wwBG*>Y<^-2^i`YTj=kBQMJ;^-vDRK#_ntBaZUs)zRhDJC725n*?E zDwLdPHDU7`QR4KszdycB5svh?{RxoO^B54J!=W(Nph+mto^O}QO!m5Ul1rvETXy$j zUNOmNcp-W^oUZ3FD@#rQjp{_8@Hb~uSimxI>V-G>A!&!F)8_0Y1skkL(2OW)?aKCq zK$~wQ-hU1H>#us=oDq5|WTPQORNqv=rT;Z9@d&z8@T5bjN>llzY7-zr8+O88HdL9H z<$kBbK*@tNC9T`!&(h0CwyXAjhs;L-#ou#%DY~n*A_STO1Rd71mMD)c@`}jWsPp4$Be~U!;zOuE&&x46*2FZ8}K~!&x_Af>4yM~We zx^Q?sl$2*&F)($OU?V+6C0?EZ{0e(lki1AKStx^;tvtYz&(zk1GuWyRoYo?k8a|gf zth74BW_bs6bbLLSC2y7#SOriEnVKRwbGpb#zp0yQ?Fr}z)ELs2;FJx=UX$MZT{RA! ziN(y~qqhUDjUrjbIV|@mD75Qpn35VFpF=i$_&z4e@pbXvt@iBe3%nV72rbQ_b%ryd zs{JORgkPI1tG3>ZT+jErDwM&(UB{4Fvzg33vc$w#JweDcyvOffW%vVbA0Xb3mNMeH zGu&}zhlByOiVCGL7_FR)qs+0a-wQ`&JqreRza|lU5V5>qy-f4$!_ZTt$wz$Vjb(x? zl~umppgXIssY(6z@2*Z+I?pC21BV-693BQ_V!=iOG_Bq7`AeL9=snhqa*>)T=ED3I%jjA_egmlO7z3gH4U)ho>gvPw*N|+EWnA zMkqDehkNbw<|SqUeAfKe$ap(%ecf${MBaS3Y!h_Zff{{6~5~oSs zZ<>{aL=KZv_L3sOFhuI1XQ-m8Z7p&YK&G-lXax>uJrsnB3lx5J?#^DWV{@QK!*Aa;4ED|$S(0w|+>wuh=~#ROlc!de#c^iDClR{RNR@ES z1q)1$Z!OYbx^g;Ss`}dynmUn--XP!3UZxNv*o_1IPw2RG_zFF2|Ntk1x9R)s3sm{;a zVK>#o*GZ1Q)xL8)ghL#ZEF{U*x*Y7TorO~h7IhZo>8+lOI0MGlKmSw10KI}dPRXgr ziUrd62N3=ywbf}{$z@|w`6IPuNB4r{d2j#lY)&|}uZyO`RWD&xDb8>fWcmbP989+- zbRaPyFV=53`^d1Y%#dYFCBvXcn#;>t@E-tIE&>2P3PmkoBT7|)+vQq!B4oB z5o_7-daf6uwwcJAD6hsXOVg}Put?Keg5Hc3qo?j zspWivcO$WKmKe-2XLP-nzY`zFL+IFW;(}EgCbwQm;yv&f7rjd?vQmr*9zklgvmB+M z+F=tvoCkcpke;xfWfkRo$YQZFzsvg95WlOO6uV9gIA+Kuq7=P88N+w8^Qd{q!p<3Ey98l`MfG|E0d;U9? zA1N~TW1^&X4oa6lpR`wFf?4`iD9W)F6jJoFdb!eXkxY4#0DDtc%raT*kZ%L6p|A^O z@#i@-{xK_0LP2eBi1hs_0W}qu#SfuaFEtTuwct4Is;p}>b{Y11isfe25PU3I&YkMy z`QI|3a`~Y{V4Yr_pzFe|ClxSZ^DbGgtjMM6f76>3cE)C z3n~iPT^eDd>Vf)bjIZ*Gx(QaE(#h|pybVibXk=vY8|&-UFg*MNNY!1F_Y4rSXiPe& z6X^&;N@pr~^sA4})GLTwkG&hAG%d0T*UXgTT!=d-~ad^|Nxi$KpSKqam@8GvSz4 zDmnQs)|Pv_jAm_5p=?r)rfP)wv_oWZ1y>&SFCk{|!w>?yPFC$Ovf|-bwKr8L>%16Z zQP41zl}W>dzS~3#deNI?7EK`-qdMLjBDWTn=)qk`$WMiO!S0uJ0Zg5BQqUHKRUGm6W0ricWEX~wUY4u;bi>>eG&+o>e+>Tn^sBDv3x5h! zF-n0x{jB*vzQt80bVq?y+r(sVQ7CIFw7KBJ4Uh~|yWin{D(vxQ;iSt_V@}oP!*s@` zk@WXW)9#Z|*aHb0r?w4eTD{=NmrSAHOZ+xeua~m{jEhPhVe#ySXwDevbA;ijc3Z|g zB|05;T7P4QlPSxL@!80P^q%lUD1IKMe9f2aAj?B5udCd70l%6`Z;E>H?Z2RZll(KD z)m%C7ZwEk1RPo=lL|2{gONgn#udW1#_gCEhNia;ZW1yB3c6k7pCrfQ9ptFVwa zdEv`d>5D+SOd1l0X4HbNsy8`cD|@)!pMc|mFlFpP zw3Eunzbv3krp!mq&rfL`M}~_ zQOjGiLNrRRi|5eRLc*<$;N8gBrL>yQaqUq85b&=gsLoPa&@t`ikEi+h%+!Y`34^H* z-&SDs<9Bg?8na9~vD0-GU=cl(X9*tvXyunz2NxANo$FCc_IV`LgWDJAL(-}*+AQgD z?O!7;X7%mF*fJb2FSS^VspHqt?P*p}=!_D5N3a_)tEH3aE@KJQVYw$TPfhJ2+w?ok z6&0NwLM83P;jwxdPi448l1l#}%>1oMN*IAQZT{G+p3l{_;xs1u0+P&Go8*+%yMvaaVR z>H%yYjI(G3q@);geDu`eOmEXQ3N;M-ntr*wJFyRNuMv&aFi_l0r%#x!v>*xS>MIO$ zuzX}E(JNB5?tGamU6y-xM2PyFdm(MP6Lvm)uqnXx#b*TpPw3urEi8@97l<}#_2on>G` zB!-iViw|OhAjo}&mR!aTS}zCVlx7jhhUU>~!g&k+K+o~W4APH*Z-Bu$Hbl-S^zt$U zX#nKR3?p0YPf6DH^-==K_^;1(?m} zfU{FKz}`1MKYvoGQ%+JCZ5}NC;$ta`tuiB+5xxK4w&&^Ze!D-(Sa8kcHm&FChkO~f zsQN>a?z*|T3|kLHV%~opwG;$Ny>IugbAoZ-rOZ7DyoYZ@{mSqu&UuiM0?)(xv zB#=@EYg-3FlGQ3AWL^Sz1RDhm-@QApt*O!b_}k~Bu>4A5wDKhwt~^4aqcBdg#nURi zm=@gQ;&-d@fNS9J%ir(S_=VegK4By^q${K*%5R}##6#dHfqlE#v<)a#-T7f9+)I#> zWBUYea4GQ^^L^Z`7avcMw06{w za^$~EL6)Md;WDKj1}(WtnQ|^;bclpzol!n%IjSOVShh}~jC<;adh%xzIMI0;MZlDh z&nG*h`}Il;)}4t?d%99y*my*E6~y$HbgJ7rs<~l1S+@rEB;FD3)1v7TSA&Exw|>M& z4KVY1R&m zgbSCc#!P&g%Jm;@{(rC-!#^ou9wv$+J0_XJTJpW^pDuiqaXPF_?yhyjH=EnAtGKSV zif=yKa0Xf2m92ov;o+g`23i!9lT9kv6YETBm_<(Xl1-U4H#{&43Vqw{?-ib~839EC zv_&UM9j({N^R3?epPseed-zKwdemw=T1FQ%H8#$h4d@VRk*`J))Jc00OH9W0gr1(B zPKFFYzbP6X^d><4i>ihNqa}zpgWuJ?K41j!+)=1Ghy54Sv#8Ju$ zrSGg>F-SySydoI9#%#{rW&7-D^zy_dj~sPbo(W!89gJX`L9n&qb;(dT{!i2VPdV^n zjshBr*eX9p3c}6FoTz`@X1|Nn@#P1E6*fbpnzRfWRvisOp##t95Dr=g&4049vUajl zX1g3)BuV;32_xygbElY? zJLSA%B#Q?5XIX1$?ur*O>F`Hj*sR?r_EVOQk%qeXlQD>fR@7(mjZ01?sf?4=BsIeD z>C_CP7@B<VG1Isr%yNHJYUhtJqPmP7%eZ>}Hv zf!Ur5+zDMXiSTecXV1}XJEBDUA{wPdQtblpkFC`X;_140@WK_1qm)bRJe7XuxVruY z&*sKL_`)1vgBEAFY)Pyz$A>H1=)`ai0(rXrPE4@f$Sjl3i=*Z&OY_TGRWGr20C>E9C?e zt7bd)&X*N6!!3R>muYHcLoU3fXmaVu`v{|7h!q=@9o3CDn_(A}oXgzG>lw5&M)v}d z4}d!7`t-8eQT z_>G~#8UEPK(SVaT#-O5AwP3%;tyNKOIs@0_4y0Tf3&s*e+os4$#ADcWau?)61I5M& zRBwjYsNLnrhOX+s^(j$fc}R7HLSC75ub z)b?sIWAq;p`Mb2}7|TUw>=GrsK~YjFaEl^=HjvXqUGIdH1K^a0zVg8q-Nm*{xD2kHik*?+Nq@i2NA`8&ay zdAwi^DFnehDL%44l*ZukmjQu7STBgXEKtYJo6J^7|6QkdO=YGlqJ~D?A*N;``WH;b(^VU?}Mq3Rniea9y|ND60Bu z*rk|;9QyT~=D=Lz$)xXmx5Eg^`m>Ul@e8G6lcXvaT2mn-Y7WPd9MJUi?90&a zI5ml@i4Jk@Z-{)-fnSh<9~tqta&S}u zxT+DO1&e8h6`eNAo$r7cC033xzXaHjp!Lc6r~o}-suxFN$zQbCnV-(-s{pIIF;xZ; zR=A(akFRKt{xpAZ-RtiyIfUqz{z?wOQyg2dLg=640fe2u6X00xGiN?n<5!fHX;fDe ztbcVYe%W-djQFEj<~0RYjt9J5k77wI!L5Hclex^$R}$A9`U6|ea*8zy*~21*fVq;y zaA>nGX5IvC3epgm8o&aDSWtwR^k`_Fy%PVI5WG;~@U_H%1RY^nK+G;TXQA;wuu{hm zM-GY`+3jnZk@_J_rxO-}ukxm^!G-W4MeNXh!&3gFDr}KMBiCcDR5d*d=zo$HFVe_% z@JXEdQEHWcdNoYY{`W94ObR0JhHELrhJ`b>Jfn78ZpJOD@`f>RKCd3rmp&W3W&!@q zgu7r~qK@;yOE?JRY%7q{og@TH&#>e;k~Rpfx}^FT;VLVe!s;8ayc1Feffop2aXOzv zRZ}p3*9-fJtOQE_FlroBm}GTrBNHrn5yNzZ9lu*p<0k@5qm2WCxZLtG zum?bOSAYD7(VLJKsC+*|x7(ocff!@!4)8Xsz^X;xh(pGS*UP||#138zqGVsUECZKr zo|41t+aRkh9GiA3(4u6*$LeJNG}y#Q$)!{?((!Bw`Z&^ErxpDhhX%KH({$5A^g1-o z-$ZuF!uS}QKtX)Qc-P;>uyc-PZ)_#|l!UH-RAQCEUbImI&t_BUG(n9dl>7>Gf^`8V z`$+fB?-q&CT#rO+%hywj7RhF$f(PVl-0KgE}G+M7fcZcoca=X(hzJt>uRoy~34K{OR{De@G5;_*RXQMwShX zl{Lm0hWF0F{b&o8v|I}}4I?LC$M`i$yY3__q%ZFuWp@w|9qV~8nMvQUhBH#nCa6eHDunt@0fRa&}o`W)}XQh9yOA!a_U+7;Y&63XvEPCVX6z+6)ulOf-r? zG!4@BshaT=OE9%G&vr3}YA^F-QaI2E?X-l>It2hJXdeG}?2lhvLVgFkAZ3nBD{-rF z10$B-1HhF-V-&`yZ$}%&X|Q_i(%@GS78I9c6^Hi9p{DL`6X4AP?_8^o>g@-_4-b(v z{rQfqZ;}#`UD-b5u ziutZbq0@Xf*amnl_vibwJ>VBR1E(W}=LMZPqt*9?HL}P2m{|mB23*#_r1uPX&LYpk zA8&+TlAVp9EA>-UV(8Q(xLNzRm|@d%5G5ik8m$GZRqO<4YUYT{*kCkEY6LiNxLpW*L?K!jux;C(b=Sdq>d2SV z*mF|QW4h(cZX!EKf+iBL27c}fGe0s(i{)4R$x{c{!^(Jt^3tOJ)N-3x?Z-KT$})K3 zyms);no?u(XaQG2kpZ|6$$i@YkI;aRwqH;Sk6U6{Q*CI{FnfcKicW#=CE=; zBBr(a3=CaIM1NuO#T=s7Bd^+I%I%e8El(W${QTb8s2Awi3BQ@#6JBblm>B+`wMK3gx4Aa*-}gbcHn`pK!8g#j z*Pkb+r-f+zj|vTQ_id^A*+ouZ(5S$}w`GDIOmmB`rSYRY0u6jGH>V$fvu+hY=G|e} z>ZI2=RzE|m44vZ03Y}N}sxJi*dd$0@q`PV%u$J=ukZoE$T|go|N{%#e)6Mt4j!KG# zLBU$<%4xOF@~-Oxe;VK{21+z(6T8c;u24>z6+D6qKpm{!aM_K%1wLdxO{REhpvUdz zK;5MX!!%|irw;<---*5W_UHQ4SAyHla(P%X4Yazyq_5K0Wa?eqy86c&peo8X3sNjRqpgtJ=MEC*xAI^qkxf`L&QVy4Fh zGWAAcb`fSLkcTw5iMy!T+Aa541c~lFtz*h>)XFyr`-X+-4S=;bmdtk`T6fj65n#Q7G-INEU0(wMN}Pr8WQ=H6LW_& z(H>W^mq!!I*Wre;w!nqvN0O_j98+XaZMRMA$%h&iEPu+oa&3iEo&*2u;U5XiZ|)hY zsxG9zh%K5KN19wFAFM<52lZ?^41C)|-^!R;SdOEieMQL-{t7-m*(8@Vm5sUHQ*^`X zm0m{yQ;d@tGE=wgki1I7h>aK#2CwPxi=O9mEF9J?CJI{&YzRK?72QovZmuK-l}aZg zuVy=h2R!;#3)+~4DcxON>q9f3!j;8x2Iot|C8!qUFPX}>w<1YYdd?WcyLi23%0NY3%0ej5uUXTTa$$g9;(b$imLNdCU_R*zpxuH zy9#X~!F!(em;s*UD!}XDCVYCInfBWB5tXs?T$Rn_NQBsz|L~xFC?b&Tb!)gYs^<}* zE9Ig=Dfh1{jp^Z-dJYIvPM+GAhWow7z0wZT8beD3&zn&sBST~3U*KFw#PWigMu&@= zI2_x7EI4&EMcL_-P=$4;@<_RixTKy1*XKV-r=SaB0p}8KgEpvE0g>Pa^OM*)!dW>Q zU8y;FAUmS0^$j`S=|G$-`iynT?K#(frBQ~sTP`2I$v4UHBVeK&?CT$d!mG(ruz?e{ z6Xj-i+fPuCb^9qkT&m#X1(doGoSxXzQ}LXLv*}BE+(@?=BaC(7Sp>`N!RfiB6z;ov zi=ij~CwH;^rFdO`3yb1j^F^JKJrdT}zJ2`4x`UAVY9;$jFLe_Bm+p2U-jIT$A4Q7D z?4D*ho;a_~mcm*}np5mHqdd5o1KjFYtfy>*&|k7n3buWnih}zM>ITOht~sQ3gfq~O zjyF1e`1dbt1c&P&5cLgDR*rH$7Qv}rf7XH>RrqosdvCAHS52b~fjU<%d<1Gj4Fx2f zoK%8L$kd+cb1FVFu?`A#|4!_W6_v$)uW4J<5b|m!e#`bfdUwJDe1qhAO|C;3h5p05 z0B5C;8JG!X3c!5+3Q7qJx5+tnljD!QFzHxa#GUX$^t>B%GAhE$_5U02`+Oe-DW;EL zk%*TG#k8+?6I3wUJP05ppalvChM;Mw&%e%AK}}^%)YlWN$aE*dC%3mJp6}PRb8E)3 z5}MNv320QCC+AsJ{x-vqM?clrrsiO8tNlQBP|+H%@3R-|hMZJ3u&xd zedzr8w^nO+S$-8x0BhgWKdBtoPg^4o1YnuzX97(gxWv?+n8o|pHeII$1QG zHO$4t@T{)xZ92HK`JBj-bXx81aIe-G5)qw{y{^obj&4C^`zf5P4nKqjivuhrfZ?Dm zyD>gZQ*ryjaa=`~oC&o``V4d;ZUud>xym$@I!gKX-dHj}JDcQP>H3FJgXctpqvD0dw`>q6li+&mdnamu zVgBi38}S7DGuSwgqme?Z1dDUT=!by*wzWQv<1C@%nMGzE(WD@pphC$kk;p=_r0?C* zn`fm%I%In2NsB_+l*Vj!xPr*bJ9>BpiOH~FVIqb&bta=3EdR+EWm>_Wgw+w)up%Nz zT2SuGcLDOdo`5VpYF?X58E8V36iv{;P@=s+uYChO^TB1lLuQ544?IaZ{ z2-^_~6v!x4>#_c8Rw$Ww_#L7pipx|!9F_-03BJ8&a*Z~aiY2mPLi9aw2&BOqMq4PVTV5Gukj>$ONnRq(&Y@S$_JJM>ueh6U2t|MLQfziRM> zSOq>}e?g(b%t>d@0olMYo=ACmuQ= ze(*nS7%|EcJMa!xCJuEhzyUX#G}P3pqgr-X=3A<;b*KgYt3p!-)cXq&yX16aQ~;v~MmJ zT*LCK6`s2odU5oL)zSD27U>as7S1L4vH~!s3KrDrd?3YkQ>&7r%@rJ2f>+ z)PqdyP-TBj*vg1kgh%S`&r*?)iR;ttF*5&~{s%eP(zlh8{`q$Ofl)}N1VyZEIUZvz z4l7x@Ldu;R=Z!V#=(EJH8^if_WF~gV2foX9E;php8ZYUY9F)D6#Fj&M@#doc6R>hB z`YrI;yQu3wIfZ#(CinF6Y6)-0wN-TI8KURURMXA~VHF}q{AxGaL-Jt~3lgZMb>P&5 zBJPox>bU?XrrBX1-ce2jtV>J0M!24K<6%P72UFr|QGviC-!Us`^TlFA?HHVKu3>f` z|M|4(_E=`ZOp7Tyzn`3^mz&)IqDqSUGCsBCEQa9WfZU0rO+v8Ms5gWK%}^L~8{iu! z&)HeYS7s9elmba8y(92UxkLX{hvel1d3YS?3ZIsK`+>w)W0|h}>y0IK;hL%8flc-+ zL)#|$P_1G@qynN2jOh25Tl$j<#5f25qq0{U1h2ticGTpA+*V~N4#*EYc?bs&IudJ9hEup>i<@Qp{ z`ich6SwTMecu0(^A>rS^7Z0Fwi0dDi@CK6H)s{&pXRdDbwaO?cLej|vLT2)yNLpRI z5!lEHACU0WojT1G7+t&J_P#5k_2OP4XOsaQr{fU>vF<@SKKm2V%%BbA`CNKW5AM}5 zQTG9eK34wmRt^y-PSmc8>_(4Bd1Ylw?}iSlGhZL+TBylR{Fl>8=*JKd#?&mLL;p$l zC`Z*xyGbs4$us{?gjUT!~?_glHFWslX4+ zP{A6$w;cC?LtT9+Ne($92jdG&+Ign~+a4 zIy_{**9rncB>(7gxPrR}3P>ltEMcQQKAkBog6!$RMrpIJY7)t66Hsz4^ap{%Efbba!XvZXWh@bD%bcn{ z7C08mpVZ}hn6>=W3KWHsN3E~wAZmm7BK$VWFCxFYjPo@spwjOk^Mn&iZufU2`|@Qf zyq(V2bf|_mOY~oXU-@8aH+TG2>=41}qm?ytHy=xo?f;|cEWD!n-Y!lK-8~4>-7vra zA~7J{AR$Og2qK|?(lvB~}}w zZK2H=@1F!#e2eVji(x9a&tRL^e85E^JWUr7DwNpOHXq7Wft_gOo+}%3ywbT;HAS5v zm03wZ;q;C~axkTmqg`5t`Nb7OkGIS?7!0HW?%r4az;-1H7jbc1=gV6rb%veu`koJEM`4jq0{ zLicwfRTY*XBl`p(3AdworLF#kv91m0@ZUw{m`^+OC2Ky1TqTHkTH!k&C| z4r5z*vEAQ=kC(F9z8s}izs}Xswe#|E>xU0d$)1}L#{1)kV!~)0TUsYDjA8%9yhZrl zYU(qJeY=H;EAnmR5TsHL#PoA7xtklW1Bnytx+%7=z5?#?s}Ar0{rej5@2k@8vy$$k z!o}y9?7n|{?U2AC5dyUVn!|H*6WLbRnXBZzD{rxa0 zg!CP2_fIH`6nDjdy|%6WIFsmIpnR@qT5b7vw8@BrpIFfga2hVfN-HghbhQw>kQ_c= zLqoqB@>REf=tfR-YR*~@Woj+{cVe?C*G~x?c9cZ_@u(*Xl^bN~e@YmV6)Tjmdk}e1 zvwAEceAC^!bL9&thtyP_rrijJJ8C4IJu~|c*FVU={z|y-YMEYCx4u9RE~&ydDb#)Q z8xLVuDvZ^K1x@rLLI2{eqYMfJ2u&0`K{?u&sp2Ou#v+ZKxD!r?o+xv9g|ehbCnB-f zOidQuvFUowKz*O9HShO*?wL{1sn@4+wyP?0&%Ol8c04&`DTPt&-Duk_{w~+-w&9Lo z$P3PT*)rLlOIL|`_Y7N=g3J+M%l;8me}{_MiigSXUAvqvhq}YnxP0Kd3d17VwwiH~ z!w2-MS6_w!EyW+4)GvYXI1Z;F;GT(kkikCuLiRkZhJ*kF=RQ|4@C(FxtUt9^ZVh3!d!D(9tRr=Vh4d0WR)w){YQZQWF?DN^>| ziQ-2*ZFKpPe4+B?kUYm#VI;kd*+{_t{@@CB*xg&X(26eP1@K#T?f|VPd{6ni`~${F zqk2iUFXqPjMJMa85%cPm&dfzpOC-`ifoT{dSt4s0#Lq{C43y0C)AonA)_%=@N6LFi zmZBYM`~Tz<%3tOAJu10N&aaPQfA6?sy7ykqKvb|nuHyFAAezL_QKw4o8>dJ%4WsZ! z{eOe3@q9XEHo~EPo(9En60Jgseijl?trhI))o7y|XDejgeOB}0y#ceuZJ^wwQYAs`J?f7B zXZ_fwr>vhbBun!(u*W^{N_gOagYuR?3b^~%{rz3>OFS`AT<7Tyj@4p;1Y0Ys9a|&22ugP zw0UV0&<1BcWkCJr0`&Z!YCot)`vUX@sFON&0*QVycRHPKLbGuR#zZ{M>xy?t(Sw+m z$E;0Lo)Q~O!w=s7bQOB+KkPKpj71+#gI2oFXobjp^8i`}c`%K8%0d=mz55K#7{AF0 z1ZUhw&H-)*U4xz#xIYpy<}4k2@S|9%Y>$#ACvH?#td*>9-&j@fI8C`q>*(}M|A9F- z1R{Gl^wxW#t+RjX=(;0*CiKY8p0bbw6_@iHHSq870%T8)6&884kzFN$o*ciET!Oc& zt7`?mH1gs#kvHxn-!+g^Z%r^a3{vvgp?nE=DZ3N-f-O%UzkOIEE{rJ=3m_fhXmk6$ z7fn>2dX!O%jZy^E4iRXj-Ef>I#;?cOxB8=R5QkLUoca-eUwvs$IJJN-7tLB?PLpoR zyL^+!wHgR>-f)GGc#yTuY{&~(@_xy%k^4~+<+Pbn_CsOOVJ-;Qnj24)qQL@4N>A_v zD}Rp8Vg<{lbHZpz8UrUSwU&i5lS=#A3tXYyUNXCsUpS)vVHOX+c=3Xs>ov@qQfwt} zjj`p~@F-09!}=s4e$6?v4NWx(jjri~T;Nsv@0kZv>b~^xC;iGKH|sGGM^SMQK|Gdm zxc+hq;&#FWO~8g)(!Qk`mo?r-Y95@Mn~PtWlK4wa?t8)U_H}oHYm^8nfkOA`q_shf}EoV6ob#Tr=A9E61XXH}VLFvBi2 zi}apLX-pT(Gi3`C#lAx0>)wrV^z zeL1ccN?)S(Q4T)|S@XZ#Z`Lv$jr_Y7LSky~%?Bt^DDMnAPGLqc`P{~=Up723#ZLf< zPa>KaBWkkytSHmMx(!pdbe@JRwZokG_aB?%UlJM9yyR@OO+6%1hcW11nJWx7jBExYn6rdhlKfZ2_E`9`p zTow7QbxLd~T3uJ(g9dc8Y!34=r>pad=kS&|o$I}!hva{`B(^o4=r5R<{zK>Lz*-YY zB#?=?0Is%uASIjucl86^_Z32z@T(a1-Dg*T&%4B}^v0pFT#7g`5LeSW*k6%2$JIX9 zgL&jd^c8n+Z7{O(8bje&5HOAYf+X9swCx;?>^X&xGv^e8$$~|@1HV5U{rox5EP(z% zVzR}t#q?3jF9DaIu`h^|;*ozXwvTOo0ab z`rh-5#|QcWEG-C*mbKTTDG`rV?nx58iMOD?Y^L|)89jJdMu3_~=Tn+)K>wlHmWwar zY*LYAtcvOl*T!xq*p@s{Of*Jd6=kv9gmYcLRomeKoRGJUcU^NhI*6=go(|vNPMGxH zb4dNLR7H}3>|WUQPbq{R>@A!hjrl{z+bEk3(dvJ#bY`Q@HL0sa+FvqSy*}6&tSK_a z?-6|KfrKwPJjd-0-p(gr&gYi7U)fMI_h^Jbc2XoB?KNE7XENz$6=s*^^=EL?x--ob zcs$NNWLzA0d%QAsQ4&+3-W)nj8l>D5jQEQ$9Qid^8-0|;b3FCun~rnTW&&(^H^7!O zbO+A&C3VpU^W1fkkqF#W0TA^uuku;Uw@OciyzVf`&r?&0oAX6Zk{s0J%Aw-ggXOITkeA7jM0 zwy+-_3(U;Jy$*fRzlE6?2qQ548%r+{Ra#oAfW8-srY-)jS*|*vLZcu8LQGoCf2@Q{ z|L#BbA$Ib`cA`YTRN7gR`ugdhAUCj_P_o7&9SXd5+R7pD+L3Y}PsO4f<2|E|tU8w5 z6;b+oyc;R;O~hFY+T`_;%jJhH;?7|@TmW&&UrJQ<`~W7dc~}>OLnNMKq3wE8H!MMV z+o3+*W+2L0cA`aA;((BBWGNVC-Sa>T!w}f(IC`lVs8>{Oq#zZ|zcBA~r1LpImskTd z8+SijjTmn`B6xn)OGXvbPib4S?_KhneP`z8V%cNH=_P!(H~#S*t&5%dD4ia|$ntII zio9Arju6=)za75xOeCsgNy|$I!8YA+%q1c)#hzdJ*_V>dj2y zDY12dd^Alj`$rD;Bzbd3BLt!xSCK3dB&W%*lyLP!gNQ6LrJ6iS<;mf=xbH9bwIuqpvagfms-5MtKld}P;fOL5 z3DV6R0+?JFRul{tc%!GX-8kJYkOaw8BFp^tN3=gfX0DU*Jv03e3=N~i%QJq5(zJHG(~t9!_2;<0OT1^nLa0#U@HN~NvVZ2CH zeYkD}MQQ9M+0Bq+0R%z{8mX(3QqmJd$h4`$J&6kO{ni4z3-q-S-K`JKio&RaAssqB zZM2qrr3))6WVS-ZE z|8^fg7ISC@yJe8-dg}<~UtV5*&>a(J!BvS;QTMsRmLaIr zpDKR4uWG8KYiX$pN``nCa(^XkzV_J*O;DV9o2OV9#4RM>Zct|b^2OSE&|rDF2`l=k zSP|F^8)#Z}$2l*T-;akluPk_1ZNvP6LpmNp#~^5qWL(=aujJ=!J#b}ZqOEorbcjKY z|5Sc$H4-uvdPSJX{gr~OXQHr#klWi>~^XMH`v%`u6}M`L+DSN?^7%H3G_=&p8BMn-lMg!LV`e@j-W2BEbZmbuU&krl;S zVZ@M8IDdV_cps|slJR1xK?sbG9yI}0EYM8P&r0$_q+Yk*l==uh*KtB?8I3%?)IAo9S5}oE=VECM_>Z8kgDT^Ly8ac%u%mqs)484j>3-56vt)vfnKI4E^;@BHik_P?rkLYi?l_y)(U^aBm{4eBA3X{GEMBMFsv`|7uKdC zX!99WNfLMtq;dGJwe6es@u!3qNl~v2enU5|nJD5)KD=7hqP=CG99nvmXsTAVMT(da z53=W;hSs>8oM5U~Ob!sVWXMIbFn_CRgU4njGf3^SFzi{*AY&w?zdwa6_ZO{c637PF z8oXs~dd(s=g`a%+ngN=`CO)VabWJQ$@hzy?C^lGIWjWZM=$+8kN}bfgR^uxg@p>=L ze24ZR;}2az@J~;ZWlRPp?f-);3VDm%C>W zrLB5Ps$WnqU;DSE&hIB}s;GI<{AGc6NpEE|;e+R0@8R#jx~+Y@4fiU>ip;1#RP#uA zR@013Hs}UAC$maC@ff&b@`ZeH`0%K!3~pk^QhxpDNGBjQ^(WOBz#2lY?rP-QO&z3w zUWkgtaT4|l^)M@8f#Ja8nkAfNTK}tA-ITrDV8Z165h`unJ5vY3rR-;#=jRMTccEF9mT*GII2Oxg%u%*y^S%$en{}B{ z-do$b>-iUtXL%Hz7T70i^mO=P3s0(UU!b}RQQ-w#YU@~LmFPfbN!oO9tsj|?IoEgr z+~S(o9A)L+Xwy)_4fB?d}E(Dn6g23G$jIeGf~UH8#tRzL^g~46x0}_9tt{FwbnU! zL*z0S@7Qbj1YsKLwD_{u9UD3hCza~``}Z%nE!}~J7x;)E!}g$`2Fv;uxdZ;Q!5-SZ zHQ94aFof-pyOd@4{)IQ)Hplka$NCo_-KYqgvA~Q(B71kW$t(1$I#PlRJ!Gw71Z5us z6`;Y92IFnWe`NpC)AUy8br4XHsQ#G+f0O8!+aH=2P#M&6m@{HzWOU~GVTt4VB-lg1 z^!amb@L|*~x>DQ(;h}8@v8WW)Ed5rr>#DC*gbXb&@YE3PPQu5QKrMjzQmpMinE+MX zgy))0GQ1Ceel)fK%IS0ODTQ1%dcbBptXo(Z_zhWpkLkV zTS?WMWF@gahLPqB73LX8q>k0khVPsWYm$9j+}Ko3immb<=HQiPfVT+BFOlb?OTXxr0&BlzkUWOeld&=;Jfz|%Lm;^xh%G81ZPfNXIxpoA z?lPDzt5(!KbL%dNe$hNUbRuN?TsN`icKVkzOgLL{@Kd$#!TYyk9#Zk$>P2Ly!1h{H z?qyaM#;?Eo>=UqJR}QJDk&&^>W3%Y-yeiVPAOpm%tZ!UW@Ah9d3S@s{=5l)wjJlA6 zB92C2l`94hbO@2s3$C1=pkRJA9!ey&PfIfm9kDm{js%H0!YnSdrP-N2Ok$)1gNuGS{*V zvaLb;dBj1{3D?@osL$%P9MuN|ySZH+0)8k9iLdr;yXicdQ{Jayn0=w&Qr_H-%Pk)v zhfgLyc6yelHG_L`D&|k0*@(X=`Wta+O4wYgzL(=z$wIfQmaRBGTiRX&aNs}wHQdaf zzPF~!cjInP^=cBNuL`SZcgsi^q<4E!94XF^3t?H@ z#u0BRvb+W=eM305pb)n(Q=PMb6DY>+vsxVD@PV@T+(4e97|^ixRjzC$Q(t(?j}NCM z$Kx+Nbaj41{f!}Qvb@5v;btzsHkpw86ritD(`ea)hBAMRb99@;!g0@hhmb^~!T}sAv zYyATf@Qae?tV5S=%4&U)-H_7p_SjxVn}uZv$jQq(5SQpd#kuJp=@C)oSW)VzS(&mgzRTbSHMW9*bRs`0~ZBXoB!l+tv@k%QWuz?jVuA1%F8vs9OZ&Am$}c4CzC6Idj$zYmqn@3uAMs{1eR7U;1=N*w zA>c$&n<;Ww5_u#J$V=|0N<`tIaQ}xVgE9jFWNqA@hMYXj$3gHn{Hf?6tLGuK_{?`-vWzV}jfu^QN*_6t_~zJ&GX& zq;g7gTurO@5KvNqCQ^zJ!-E-WE7{83IX;**ZJwlmd_5I^ZIDID!U7;~PaJ}J1xEfO zJ|x&kNpWc>*U;dh(5=^v?I}kkKXnh{nJdaX1ipC+earI;n>CQ2X{;(t!yj2L)S1i2 zxn-*3V0oglqha78@p^pwy3=&*26dUiV_go-d)H$~922U$R^pgs=%W&$q~`IE3}Xy@ z_w+FD)(zBKLI9%(5LBHQ6K)+Jaj8YH1P|#J#z6jvikUcA6IU2%;sGQSal6sO6tH!Y z+T8#gseVdMZK7%A->y267skvgqHEMOQ^paOng^0ks`@7?N$bjf`6O*A+>)%`Z`c+$B6NgGLyvPyaeg^LWE!d;J4@nsk z`we6j6B`=~>{FH_pojX8Whh$f{r~)U+X33Pa;KOpS)(W(ltN{IQ9J7W6If--9%q`}b%;LV>EYxF+6U*JfuCUiZ)pPK z(@r#3%vLc9+xaylZ7{!#x+yE8_qTw23~@(hb@M+Vi?7UQ&se6X4_hu5!W^|Dq{J;O zDH^_g!i)I}mW8PP10@7N3X9IROwLRklkMh|C~h05Ev=MxjlIs3 z!4cEC56qwR!@kDo>=z@Nw+*GSl{uE9Rbydsxqiz%;;uC_`5m6_z_7^issjM31XkoP zXZ5wcxaAC_+>&O;h`HMHK(<_Mm)2KFm(LB3R0@M**1RG~tdF^h&KMP;P7K1ZSVvjO zKr|!ILty6Rf0`^6vgQGxA=-XnO09+7_&;WrMK>hhD;dV}_7xUO2;YP&B!q_yj8*5)mbaF@Ruu9@5ilarB{3xJ9_IXo}FJx;a9~j@qn0D zFS?SRx@QAD+hy1}u%ahY7DwC5a6JYIsR6mIYKFvqYqDk^nv2ghYwGd8?-_lz62pK% zf>A1d`>PPi7DZ!g06lqkA%%(H!N0nY@E}g?$siwam+OdgzB>D~e%-%7qExaBUd3-W zBK@{`jO5jQ#ya6y`nh?tI(ZcITi|6>K`P0!5;+LdRlC8zi?DNqw3b5bA>O-`?=prD zRA!2q(yUw}11Z0g-0poZ%>SiGA9kHXhA!_?na^l*Q@jN@I(?|iix^Ws7SG>ydr-q- zf)L@St0$!&?!^aU-~=4UTs{S@s7kB>$ww!u?u{K@cAJ=7Zl)4Ut?+0jVfsJ;;XX=Y ziT~^L>%;uYA+4Rl9afy$Hd&#{5Y1kB{)zK#;L!O849&lE?LSq1g3&jyh4($*#qMTp znOa$~C~dJCiVh7mhywSAN<6Jns)*$$bMH*VTAVeUdjvORCZ6t@{Mma!aBX2E+GdQZ z0xZtWojg%e$fCgAUnN`Py?vBDgnL3fMhb1WsvhuBK=((_%(SpkM`VGe$UjsT%$6AI zC(fY>x=H<{(9?6MrEr+r9tu8!)(pt=)Z5)gd{akt=5K|Dn|F$VL1OHxqzv;lm(D3) zH**pO#~0%p;2fcS)XEIuN9%qB*ok9rI%1;(zv<~1rfUABr*!NwKFe}XAp+?L>o;#& z<&)NekfBl68@7YCrVmQ~i?&zGv6Xya8_`gH%FR>SW~aKS;(YAWX%)no^xI!0Rb~P`&Dzf|O?!#lq1bs|3`0219Sfa&d% z=l(Q?(rveUH8a1aWx*s%`$PNgn$+(?UDOwhukQ=-jq7XQb<^t%0d5#p)x|+(sgM60E$Wb2L-K(IQr=K`6-@ZCbD|3NvruKhNgrRD)Eq}IjQLoY}*^1 znn&-vC@+>|*KeBEZ%yUqQ$joE2*Gu6wCwxtYTJqFg!TL#KuqxemRHdf%x3rxLvxDN z+FT*BQcmuF8=Ld~SKeSorD zdCl}tHk%oKlRK`2^V3O_=Mg*sG5z4b<` ztg1r)%gQ#(j06$rO190mx!Bna(HBa#-oOXI(MWf||HNQ%3z(=zKx%YKpRk~q%N>Va zU0eRxO}zq+D|vpAN78T%D$sX9GXU*u111cO<~nBmJC;n*4N$Zv0EWmm+_+vPUATH+ z!Uvc&25h4$?`})x5BaBmV~5VZ-IjaS-0<<^$NuV`n>D5&k6N9VtZ&8#O7tE8C*5fz zFIbOYZYVR6wh;MKBUNxkrcstC;M8q{Cb~%InI!9SvTpvVramV+m?Lx)q-K+j7;Q8l zR&hr;v>X3|@5*p=o5Qg6SC1w@-}baBWS@}*quLV|97ewifW?)U%o0zQ?zYiM$JR$P#U*GaYUkk2H6{W`CacnfV&VJU{&83OPRjb`XHQrRW!ufv~fSA2b-Q%f0 z(f52@NHdy`5nrs@v>=S4)MHse6_wM-yzSYHmqY|J$<-gtT}=JkxLJQrc<#6VH8GM| zs>?KrI-H5wu0SH=^1o(PhO&s9vV;E<;@nJG&XdnCOrANmAm!7Kz^&j1~jE%K=JW%wp|`t zTN&0O@o5EoTF`-PW7ZqxP&$xKpBv^h}U3 z{q>JTK|RfW!S$4#$fI9SG8LL^`5ZY!=z*lnhb>U%Y|;Bp*Y11H&AO9I_%V2PxxS5c zIrOviq-yKNnj=Z7F`6Xk#Z1*<$oj=#0HfaoKMDHx)URU{I@M``nDwq(9(p zH{gwqyRpw{7Wwe?Q^?w+P0TqOw-=vV)Ee@m1#9@$J!z$A^j2sWeT@)dG3= z6*L0R94dFSQv=AQYR*2a`qS&Hw_$`3?LL#|5idjr;?YE__=4ifOR(H43XW-z*Py8R zK%<24w7PMuLuFC5ck^WBer@7liD8HISmt4vl)3B5WQH?#?qUYMEa85S$**O983b4E zPR79o+%B_&HH!HQvrKvc-}W!ISv_7hCFU_m3;Tk33i=2A9wN%cQ@|oCPZ_GSn`XF$ z9TLBi{0A?zrLDE!Sk|ea#iM&rW}@ZrPln-q6S_$V!cGc9C(M4{N@EPqF3FpQy-AZS zMJyGN&g~v56Lc!^FQ^RZMapmaP0lO!e2`iNhQqQut%Ch#LkicGa*}-fzgOS(Ae3K_ z_A2t2`ia7tz2UZD7P@JJKX6|i466G-hN5`mgO=n*MJMXOz zF4CQnfjEL>xHRmLL6FQ}BfMp7S_nt8t_|&1Wh>X;1g38Yb zcBV|kmzFKrsvx8M6v?d;MDH{v324qV?jr)Oa9TYN?)S9=oJ4-4YF!P&)A7V#WXy9AMm%NKk>8BeH1oj3A_=WrHjbXIuEW`ZQxb{ zYsY_JYtLxK!I~FhO-81htH={ipCg=+6oLtXbbZ2$BN;Rn17t6)(*G1g0JiP3@w=HH zz)9G+n?ukABAgTFwzNv)2`mii+Ay8}9Hnxhm()9F`ugFaU*dS#7`n@joXITTFtfRd zz>LN;oOezqCj&W)6iS6}{TPn|KQQ1xYUigeBS&T6(@Vt9Y5w~&7}Twlj9Dl$h_UUE zVt-;=fJn;7w56w~f3)!7Dx8h>)t5YE$w5?#gE(1~N;SbJ)Q>M080q~8sj}eI;=9bv zLRF?9{qQw#!ISOZZP0vn=(aQ%i9trB%Bd*qv^6ztCOVlv*A)E}LQW}4ujo%rn04R< z;pzCY(_D~nGiy9=r)6n6?!J|kYgNEwH;&%SThEBf`R$+r6~IBM>H&bJ2NK32$V&ch z#GmJ?c4|e3mE?&D*s75$jI?nhDYI}AtOXN_da_J6Qu1|n(nO8&>5u7gN~BIHn87g@ zyw~8{x$HG=_wfCR{0LX6wd*6@f!bQQFSOwjsJ2R80<+nCC(X320@F0@Cq-c9UZ_O(vIO z650V#ozRqG=mIz?FwN)X=DNsrrgOK4vw1p9R)m{?Ha@qze?EgvVYW<|Vp3k?0|r?w zhkM^hf6RvER(d0MUpYK2v#i%6zBus~X|i^@l;}E*g*zE4kHZO-!_)+d@b9>k(%>2HrdY}4t zu7_LMfhgL4tQ$XW#vprvPxt<0Z(9RrD=e<`WOAa9|SWdA@Svg3PU#wzdco<*-hTndm7q zC2WaQHS2GrfrNu|#i2{DB;nCiW!g)+%%9W@9PrZ49+0RR)-QP=WIg>{1&xv?FPLmg zM|4E|BQvmYxL`fhd+y&2r|G&}bZ+uBZ-T9H&pjt`nF5~@rGf5tHIZl~Hqh|o#7&B8 z+UoG3Fs09CsL(@zX*niDrk+et>SO&>T`&nR-AQ>MiUmR3>S2B47zedwtO zu?I7+#1#jN&d~koc4?DgDJ9Q;cL?l+Zdf*w@F5s$u|aSYazwB<0I4xLl!w!1U(_~a zyynx+n6P(R)P*hn1wHGvM+z}oV!;%UA zPmtl9L1RQ9*Mp2q^%J}_Pk@219eg(2zd;;#pMf5Uurv<=+u(R4U!+RNmtOMEN$>)X^Lt34$-8Qe*%Jx?I zNB_k?caB(gV~&Y5^#?oh6BJfgENp)`h>BuD>?sSm9Fvt8v{XunBEiz(B_vS_(yXGp zR0Jz>yp8!;=RPdO7~co*q9ko`j{zPwf;Li^HsX4kH$<{H+^NdMUW1;QX}D%`Ek<%T znCAKWh9&S}%E*4Yjw^E!<8upG=#RBBpLDn6NMV9SzRs_9c8|gNuFIA?(13XjNO@m> zsldechY98I`11v#69VPBrv!v%i6ERbh;fgXLOu=#l{z%VvtBKB>CxbM0x? z)q3?8I84)=C%wh(KHi&QU`w8}IpyM7qnF@%UQe@5%>6S+LwnC){=vj#xi4)iwO|U46zgS;+0s1K#fP%IDCewt?Fji*Pfat${+lorHiuP@E3n^p0 zwQY*A`C-^V**yF|mpX2dh&=a~)>-??hxZSU#JbACt@-gw^1z)Rp$0`+neqJiD!Fz3 zzyBkd799oDfCwoX?D==L(98^Sr*T3@cC}xbb%ksnMnkQ}qtvTkygDI!_(06%r)Z5? z8RuUFaT)qj_)&7SN@HVVFa6>RrTf!|_frxDWJ&*i+sP_^VW|=N@2nrb`^JXBybHGz9z(Kh$TDx=<<^;yd{$pBxk@XEyaQ5e!it~!g_e(E^3Y& zxxkj!6N*!{`3aq^*>SE@Q=>;kd*>M<3qYEO;~qY~3q-1bID?{~#Y2OC_qgwtXgUr> z1O8nvujbu&?2Kw~h(f;?jfyck}a@h;7 z!>#;jnb**N=76FL&^5W{%L*L1LiLd%QD-Nb#_DDRaz z7kIfC&hlq!K1&^2vT=U2M`{=MSJ71oNsWBzdqLD#MFTtam2Qj9`D22-vyDoG81xH7 zYP~U`N1t{nU9N9*Erj>ki}axsM9Sj?-yH+4)+4%-P{Dbe#a21axCXtFkKJ;JVN@yW z53uID1iNg={qMA>lJ|CDFR(qd3j6J3Z9%0|Q|N0RKl?elwVN;^U9-HYtAFPc^WbDT z1vUcFZrcd-PoOL7Y;UUg8z_dUGGg$T@&p_l!YuS=Ndq#7ln;{6)HTNBNPE*0quCjZ zZ%0iN!ERJP+(-CvT4Dsi&UFUB@@*5;c*U{0n}rOHMEZ(OBG|>w$TdN5_>p0GAwzR;6UYUiD;Ux&Vjoan> zUpv;ezMldMfkj`{7esL@bZyW7-j%%kxP7?ra;Iq%d_^dXl<0`$ouzW$TnzLt&W9sp zVE{PQSAUH)8+z+)7?viDI$;YplA}JdZ9N-b91Z9Toe8IpS_#RpgohhoMmo@9X zPAI_;X)#0ic^~Wly#QvQWf+aYh-$#Mhe)D4 z<8Azc1HF;X{!cHaPqeYW3iRZSTq|1}^RL-H{CHyqnz1|m=FQ*6RwI>bKNxAdP0C(= zxA`vxmS~ccsY*efNn%Y^1b^3SST}Dr&>^(8xh$nyFVj=X>7*I)`!%rAs+H?A)JVOL zB3*$$S(vbI`uNR>XmC15P%TcY$@ACkLy@IG<#ru%MBxt7NUaS~M0lToG+J^ZJxaMK zP|TX>E6-1L@8fuePA|7$Dx_A*2y+YM|kZdY+R_c*H0SNd%z+f*pBi1?Qgu8cAJ=C0XEX)<)DbvrO&*`Fx zx{rH#lB5)=Dh)E^u&%&&@k>J#3_~sI6_HM(_mO9tAfaL@>pt*^QB7)@)Ym=y;+;ZK zH{_#>fO)&Yf#&M!!omS*OFzJo#uIypL4ehTuJEv*b8&8}7Trj*>pV3Uqk>9&HBn&>{G zcm0!KTBH+e6gc2{x_t4&sJT@^VWb$urWEk@S0nt(tJbX#(9o0y@l3UIRSYG(sdW{r zpI-d{4o)<<4W7AFLk;fQv(U?F1AbY=4)|nH#UdUJR@CS?eN9oTc~MrNQ9c7DR#_81 z|H%6OSKF=-B(h?eV1MW695R_*TKwVB>J^TI4IizhJm1aK?A0WE@~x8i-)7uJA7V!T(Fo7*OCi)FC%`~0r_g@;n5U& zlwmpvufy-m>GYTXQ6N+qx#q)sF8o@y4(*DXp=?DpGM3=|1DeA0)HC(>L@4VYt9D~RP~`*l-k>|v7XL=LYw$NIZ^TOn6eqi&W;W<@OqPK$pr+h zQLX@cMF=CXbk?NxPQOVwd>FhiKCmqn4{&<~Y5elrYMzmT2UmtpT-sGQN{MHI5yis`uN5dDJ zKlC|b))R#I6(X=i6S>=L7#B|YtDrX;kEo=v8by>Tp%yA;CdIG-oR8u`JcOhMN){E+ z^vPfpUXtHs_3qwZPa88N=8Gp247{+(OByeO6uQC^B~-p)p8p8}UXypR zwCap1{i|)D+pwc7f6O6;AeLUsk|mpktiw}8k|CndyHUf{5fISqt; zQSh+gWLQTN8~*u|*ip=7v8t*{n3D_iT)Bo^=9{}K=o|UI;b0%R9vV3~aC!yW+Vp!8 z@0$+hSAjATUsc3qgi9N($xY;^IN5E!79xuZ*((jp9&^PweTAp%&H3T!#yfVr_vX0= ztUf33&u4g&OIO*GYiw5^U_r|7*4l!S$wvHoe(^aL%?!xLhZqYs8V{OhkqFaP@^CWI zB&rCG#i{ivp2vusReX$Nia3&E^~Y2d$dg7xs&a-uj!lLuKX$=V=q;gdX9$KU;)}bU zbk<$AGvUViy#FqDqm&QH=9qdj5aG7bFF{a~r@`@d@Y9B%=lHg%6a+B&l{oI!x&AC2 z_BF_NU2Q}!ru^_=As_8Aq@_|23ZDLE@QD5H71xYGm#Gc0Y^KHmuqcBY0>#PW82({R z7pS)2e>yXLI4$uD({a1vZI}hBwISonq%Txg4ZiK(n zLG4#V%k^-LeC3MMB!MLYy7FepWn{d~QViN~P9CrES|^sCLo(;_f`SU}Kxs?munU37 zoTJ(1=1wLZ?!Esr!r8cMFVJgBA8@m@`YZ8RZgI`0I}ge{6|@jLMBWed*%IhO#@`bR zU(gvV(&7{|wI#mdBGq0JOpBJ^3ihOpw zFYzQM(a*f|^UwW~{r~};Ze<5KE*%{+iM5oF=WCnwA6NAYasFNEFk?$<>;-ZIhET8v z@n0Md9F8w8mt`~9gJm_?nbr6S@2NtWJ{MxSdVo9*$%XP5l^kYJS@f|MyHmktW!x9t z-(IIwSu)wAr_NS3HmrsppvQ0JY(x?}yT2#qD(HA2`}c?AHpDFWIP|j?;ptV$dL8H| zAQb`h^t=82BTg1s_-mj1X7a9ow;ixCMn^}p3ap#e%oQ*f zicye(WU>E@_?z#0_m6m7kz)%@G8EWK0$cPQ;6Y@TXjpLv!wx z(4~!n-`{#s#?BRR(JdPNnicPm+?XTnHZJczcGFNmFSGpp`<@N{lw0C8{sr)A@ZUkndexUgCP@vlZ(^A%$v}j?Q z;$SpW)Me~R#B%axg*WrxGu#KOyI7;x^DuYAdE?aHbc2yM2pPT!I@QZO6y$is9 zntF<58Ta)Qk_rxzbyQ*^DySS)=>h3ezhwU;TFz5NCeouN7)`# zIqk*I7?dtqZ+#+6_`$A=3I!GHl_2%E6x0k4tweTXCg^T+G~wqs2!$p9E5SGjzmSu` zNSTC-=<(&L!osy%_t&Y=9ySd9A5B*o7FE}-X^`&DA*4%MnxR8lB&0hfq!FZsl3d@(2ETgtv z=ivTE$Tz|pR&s6q&N(bUpKy>rp6l_fj_uYhSe83;)P_yhV~XB!PR<5y{J~rG*@{b) z+1-jzNh!DKG{6*jmMKM*QCC)>JcQIK_s5>H4XO9|YXbfwEgxSp*nH^r6iFPXE^Z~P z--+caxOUvKXxlA?ahI2^srfcCK~nWm5@hbwOK?R>kB{bb5MFBb)Qv9zUg}HWyI5bb zVVQ%NSd8|u?0!{UNk!pxzk4mv2LuYh>`GI|2386Ertm7L(Vrx>wPW;_NLXBOtbGb2 zaRzu1(`OV0w(;BeAk7;X}>(0{Ogf==t*iPhD&l7+Oc+nOCVFPW%Qt|qS>EmQ3zD=mSIjK zFEG1ftyhKX3z~wX1$k#_{LWJp(+!c z{{03X2*5!b^378N=_|r---XZ>-!orEGSLY!u&Wv9zC@eG_dpG6POEQrG2J^o4EUM5L=__h0exwvPvc;N`7jO2)F9eaOiSuS zM@vBS-7cXr@~))^jVR5XKXc}08ArHTv*Ne09S%1>lGM9`y=bCF`JD|<`YR|?mPYxi zy2=@HP`}4W2Z*_{$;3@Q66a}Z(s*+rf8QViP{tUi8^eJ=SUDb=0XXtjGSx6#vmo*8 zQFpF2)z%%K2Sy0t(rsH>feiB354e@(e+jwd%yt_s-CLghzEL0Uwf<+)!-9lgR7GAV z_}(Ib${Tb(Z4V@pa3$XZpb$DIt%Jt~U+NI4r3ECEhxI=s|22qwI1qogm#9d4Fx~&{ zi!ul6AUsJwdUNcBi~3F31bJ=P&-^g?M%GpnXvy4?;LJ?vNF#a_V&6n^eTaReA#@nW z{=njT{^#N%r4P2-=vmR1|4v#ROSUN<|8?oSk`M%y=yB>ut`+IZGAMMr^X0k(amV2b zl7Uh7s^L}0R}gGy$rI?TNe7Z(f-Nah22b}to|gFgTSAVp zRw4iwP@HxMG(QuelESH6L8tYI@z<(C1W}hfjEip?)%KQ~44&%9Ed>KB^RPOt2@b9o zjQOXGO1U635^C-{7q1Nyx0#4#25i8Go3Sv2GU-$cxZpjx^6>EZpGxfPKQ~Op#*X0> z_Voy*qW`xp!GuCP1b%e_n5>V|aO?)}COb$V)TGDn(SKf0d3es5ihPQPK8prrYHS^= z)sbWUcd9=MWrGyv-K~}*a>aI>!*Hn)+NeuH-WjT(<9IxT<1(G1Bg85QZ`B_^r$c^S z*;Jy@XxcP&1QqsDo2D+&!+VnTAA8Q#7rU31fTO}GG@A#F2! zI-}Nnm*376b5ObMYzh<*mKm*;`irGxsl(_e#Xu6(WQ^8@LA@_gzD;Tx4w(Wj9>ez43`dv7%QPfV|uK|yGrI4 z=;mom+HBUVOvNjm(DQR2u5;uheScxA(vLh7NMpaz`p;hm-2Bm82%bRW%@z6f^bKaU zzIUYCB}Va1g`ea8Bk-!${51=!MJGrEi9r(gfOhsU!78+nxOp?9kBX}mHEFZG{HV1w zwUZdw<5?*18y_pS{=kz`<{UzgCw{XYS_~hC9^o@7iv{LT?%&GtJW71AH!vk=NCH7! ze%f(2qYO?ACDOFw?fMu{j4%&W^_&*yGx+ZpM&iPhPXBE5$f1@R7TI7#SWx@`3DPvs z7az8$*2p=0i%X;lf+{!Q96`sbw)m9ApcC``>ZKF$AQ!YoIDpR6JnK3Fx)KXKnTpok z9w}x-B%}}F*|_zaCm!Px&AgyD6*%h%3G_x#rr9x@k3ah1Z&#h|Q{W3aIWX(KIw2!p z&bOAbanv|J0}L~_BS-qfxzyA7{3fx$$%P*B4hl6q`kA*gJZ#+KaHet&exVgq2-{Ei zBJh1(FiZ8l#V$HP>nkL&V@`OJm;xIB@Y+sjtI&6(_>E{MBOM2xrA3#<#IrL5uBpTv|`Dq0ujCrK4>avU0g2 zoCL%cHnI_-A ztFYuFFM?+6>tuP&Jl`acef^W1jN@ubf3Vi;`{0P}W}4QBNcQkmHfx`El^YJN;7TpnwV=L4QF;9i3?nVzCd3UF?}!-D#pvMbzC6sePVny zrOJa7M^Fw^`qFT7g!>)fo-j|0N~Cz72rh@FyZ+aFCEF0GO-t0==Vm+SIoBWpNfN}my! z14m5EGSWec&6DO2fU~0U@-khB%Pd&D&5+N_4q^{rHSG1M8!(IL;=|Y`)bx83Ce!>? z{B}Eec>QMU)c%Af-$#^r1}fe4MsNPfa{``LJspF^3 zb0(DfHcz`}4-Jy=JBLjCl_LZ>wl0g4AH;UkD;~mTh_@kD-?I*FU{IzW8;c|MK-+3G zXF0W_(r;!ArkG;UBhQ|jL-f?vSrEo38T-zB0vbHH=PDKAmC+|bOESpihJ$2koz-@& z6YL+ntGJ1(FzXcI#mi%M0#zjWD!CpB8kT-rQSSKL>k|-@9_l9mm3c(H$;K&OFLMxS z!Zw+>ewjO_ZlJTcyN$1O0sZ%z`)wP>NvrUmiA2hw`jfG-F{M`%VdDD_WhRD(l!yJ7 z?Xylo93=F}JKw9RI4t5@HgQ5E8|O^-KQJ=9*#k*;g~D26(hEM~H3iMDpU-HsGM>PJ z>a((3jq-osy7N-|_EKbSKye?Y^y>HLI(vU&af-_77qY55VCZ^N-UpmFG;>qa47$P> z-`>*IjN=GL=a*adDhfm6Zhr)QMM=dDkNhLvw(Dsc=*^cHOivzTer16h)54As$r3Ak zfWKqM4^|v!t`NlwY{Jd0a)CL=thvrAagZ(!AD#(eLXad!tlpv;@}YqU(&iEZbEB@s znJ*Gd)=eW7zlPuY${mGJ%oA*bvLAQQwy4rVhq^HS8j|E7K=BF7^3oAI*CVPPS7+No z5`g6BCm>Va+T?j&8g5zz>@}_5b#-itc3u3ympFc#UYa{?-U>Ch?n9;L$oY#GhJ0tM znRJ?Fa}S_r!MjO#12vP9x2&n5AvBVjl}o^E*v;aFA4w6W^%NW+H*vcfOb{p{;~8rq z46dLJit3nvGS{JZ#%Tu0ux=8?wPgaiMBC>1QRiB@o8s;4*PtC`2+HOkA0EbysC*H# z3%mIc30<4$jMr%Bm7Vj*ZxmE@JAPx0BEzUs;w$W;|2LK@Fhs$q(a3-tfQoeaH;}H_ zAbcOWmtz+BNnjquaeYvAkFRpaWj$^$)*f=lOPnb9dugvqgFM0EJ?$&{?ubj;PF;PD z+OVqN0ny0)>l<)j=`{6`6}&KxDx!AZ>M*12vgSoS?+C%kl252GtoaQg6oK<=H>~vuF(jvF?-uRweEF{vWc{Q;zug z$P2D-p>sx{3M6!iyM9%6`d$wV%BUgE&SG)@-EA(Fzsi4GNVc$nVsK(FEF?5RWN}^% zkCzPqdBS22Cxf^hd3m3!$BeZ(w;Os#)9N`VZMmoN-^@uhmt4%GRMf~GR|As?TvS($ zZi`qL4f7mPCnEo-;h-AupqXPB01VC8o^_zXO;^!}Z3t+f0|1SMx@SDt&0?~SjPH_? zod7f=km9hSJYcLa;(aCMT4B*960@8Tz>GL!{G5OnCF%fS-HWNJ^+;BXuh{E9Y|auK1L z=&PloOZsUO_aV{-PT{QZ5pNnp2?ZYpuzx`Tk;dNnZP028K1SjZF2?uxxj0ix2KZoz zBPmY;mHRcno?RCZ3bnx3Lmc!tI|+GR!N2FnTb=N7ao}D@5xE7N%H^v(@rC<-;SN5R zqy{3v3Sk-=d7z3LcctlMKZ%QBy&Pf33tCK3SR4;jUZ}rpkSvH5?f&N8Rn>js9U% z%c;f7To+83DoEl{eL#;{VT$r+?{-PWX(RH)l_~la*1(4`DXB3hkFnWxo{2#tid_cB zE96}LZGPAG_)}d%DVjY05E#>9Sr|KaG?WR{Wj4i^L!m0aLw;|pyJE9ry*OWHO!K$2 z84JP$;6d(3k4(Ioi{%e`sW!r9cc|ca2(Hz%lD-7N5U&3GnZ2A&lkcOurphuLw`F+i zSQCAVah+Jd4o-YyO=@qGJ53$9+Cxa>!l*%^N?WQ=eKa^{{0Q%x*bh%lWd0zUsTKhc zH)cl#gPvCf?`7weeZU;2Hv5seX`~DE5$K>o7++YQ8Q`{!6@!@=zz!W(7!xPyhKohs zr+-2UD=b{>qD5O4FfNzsJh)|DtEpHW*}YPlSA`fAOt0!4`JzNx@BU7~tHw2@#1zy) zil7iUAbJ-eze&}~bu=Sn?$s%Bh!aUWbE~TQ^8>FaN;>4GcyH26iBLbSvI})%_^_Nu zeLsGkkU;VV^L^IHlIN%|X@z8ANe`27cNyv4X5vk6@wwag$+sPO;C=M+mF81UlZv<_S5o$u44wQOSgP&iBc~;9dxsBDMaOXH;VL`8ltDw19}rBSdo+hASVY>Px``!S8=T|}3u>Xda0e87c`@Fi zXId|eLI@{0gScyhUBcC%kd#jlZ8p^!#&d>3W|zDJ&n&_pS)tOAR?0$qxr$HveKYFX zlq~$GGMG zbnE|L3-B3RfmQ-_L0g^QaPrMNR)4l8!4;^u#v$NM$Q9CclhUKb<&1TKJg>NVYry^QIu8&~(h_@HhnV#p@;SP4r)|MdN`~LX4##kBXg*x28 z=8-1peT0bk#>b{h3~cnZG)ltuaeeHZHa~D zWi>mNPpDD1&U9$x($Sf&8l^P(wbWQbLK4)ZYPf+7hDxR2tUL}MU`1hr@=zVZt4;4Q zYo^H9Nz1cOQ<0+23Ct_MU?u}Sw>3Bc&&tSK?WLo*n)WUvF5%#&vb3gd1Vo#IuZ;d5 zf-RyAgs`U>H_$%Rc>a#6ccfp(^FzEq>3A7JgZkvjk**W)3n1H(R_;G5sgUR1W9a73 zLPe;iC|v?bo8uQFndVc-%46lgTRTjeHfN7cG)U5sw_KB_w6L}E`@?5+)Zz+lAi%JS z-Xgn8b@sDo)G*m7kZuG*qsXJOIQf!p5qpr68;0%Q)IrK&)|Cz#m#tnY zlRwi#Y%z9CU*VfEe-$9(#81E#=GRakGP4;f2%_V^5UV3d5R6b7@QA}Fl2wm(;TtJWh{j&xh{}LVzBms;c$4D1i|`X zZV>1G3lFif#*_aq&WT{fqOq0)1zY}HjTjINXia?@9``r@={6tPS@_{2_=9U~41dk; zqZ?S{W{xiL7MK)bIn&FBtRXp=V)9;l(l7xg9ZYC1gX@Z1?5M>gJYdqJ& zJQ6jI-OTldB966EaRcQUlZADATZ?0A2onV%DW1JP?UU)*!@U0i?m)KPl-VDbBPjlJ zj35iji&^!?g0@{FN`)6^V0!indK*IbYL^r>UBr(cg30bU!BNX#fq+hVxs>hUK6^HL z(;bf0cYD4^riM4iFLokL_x?CXF2$p&m&H`b(wr|?AbWHXI%IFO3)!5OFS!BD*#QZD z*P>MK(#oQhs{ z@T$}*uA|xBiU{+(EQw1w8s1&Xn>C%ycI{Z0jLVNvqKbbpL`!X_U_4^B0BSAE5Dcng z{*#LleQu#{?I*5e@nU(Cy~+T=GLa?{&VUwGBc&_Fq6Lom4XV)ruTD`}a^9*c){7Z; zis$bXqI<(6{xxaC2AzLt7g=f`%po)8joRd3>#i0&IrB>qcqHhu7zps*##&gmfXiA% z9}2#<;&RF6fckX2M0^s_*{c4SpBPqerwFs(mCXjo5!%lo2fjS zgh$TNefo)|(uG4zh9S?iUBPR?@(tsc0|#?1+xLVEB%^_f-$?K57P;I zwd3W1pco-q-1R*ESB~T{c34da1T^0y4Ihc%O|fUu^6RnaiRa>36GjzG1oH5KgoG1wh4+~=|4piq zAM=1<>FQlZYCj~2^;hQ3e}XP1G$3kbN)oPo_|irm6W6DL!imLlE+>J&TiedwaAQYb zuSxpHkF6Y4J=sIy)wO>sYcvVBx^x7I8^1x*)y-6TM`Ib4npsR=VYbuMU?kDAx8&qG z=aitAv&NpIfet{#5Mnjz;pUkW9 z?}iZd7R~8fRlp45LoPeD$ZJu>{~}7MJKyga zS2&|KWA%Xfxm3utrfQ>|t%QEN$`#OOq~K>^iQhbM=X5I($AVAF$$t(_XOYWZ z%XaLh5|&yAed3HYIE?DCr^d?&D0l^0ikpd{N2I?vvP{YFxl({(6!Xih z&{r*}pCPw9hp-|(lA&6)>0H9BK{D1mGZr}l7E*+!jPFI{TF-FN0@I{LFK^)>1LJh8 zA;TZEheh3CG0wkk-ri($rpN7($PhaSHpOx|zX93}eI-nHpnLmDc!C2GDxDVEX`LD)(zVXWfN+fch66I|+eB0fkAD%ra zp2ar*QyIDh=lK29hC-2b`0}CE}d21;$sQ-jH||ztmprR(mj|J z40t4miBe#r4PT7hA0r9mYP?Jyw36?$64?*5jyk~q_b-DxG}P{uU0JRPh?g8^;%(Ff z4iBnIA<25e6HsEhkB|eq%r&pFz>(Z4Q;yxZd!Z_%?b1(;i;`e;wUUaQrPc&3`46ZY zD*^-ZDKghPI$wlBh60lK*tMNqxxCT1>|=-uE)o8qODLHca{XD8fEjU-CQ@%FOZ_`| z1s?t&e;Kaoe`=J0C&1!hK%Ty@?d8X_R2sv6}-{=bOOukYCN+Wge%G2L$ zrY{T7b;)~$f$3G)?DdtzX5fM+@J|$R4m0a%@ws+VilDV-%H~pRdEd&1W(wVISZ+k9 zeA3WEP9VzbW>YCtFbijrHl)TzV}-$VQXGG8Qt z)ZPpD03CqyU@9_$&(I0_9Ml=i#Aqn}q!GU8v*=ZVUZe_9(oJL39BgJ2(KmoB%6AY!LtQb575ji?;3WY~&ic7Z9Kx}hLY6Z^#{O6C__ z#UXsK#)iR1M(AM$xKV0~|EgFf)k}nJ!SXzb%2$@SUwOHX4NinqaodH*lmAJJZ2^Y& zU=XsO?;mqwAhckP#)8>PajNoLW*vhX-6cr?9vg)yvY1$gv9BfPowgzH>_uk1=NJH{6xXeyk9QE7M?wk9WUS zC~`&y@sy4d%^u{P2?jW6vOcFjylf1AHdrPeT1uI1k))SH#@`OwH^Hm$rXUdH%)k9Seh)H+wD)78{#9zhfIl5ieQcF`q6f(k)k(yaGzZIq2HSQYBHMG|8*}5ykVo^ zIfo3{Sy3_$hEA~|M-eJ!rV>@p^M5PXW+3DA!z%U$MAtM}al8?)yQA&Bdld ze^hBHp8ZJ-Ti*-q4uR_wgBdpk<)-Jv1kd8BMeFN3I#vNI7fqk;Y0zs{8-miiYL7Fk zR8m~J4HvoW%HvtD*$eAiNw$DY;6jNduQSW1yRT2J(w>$Nv?WZDLnyKGSK!HDUv$qM zmUDdU+9nSE=nQ$q;DpRrSYnQ7n$8{eOtpOa;9%FFwgqBq=xhV(!wr3yw)tWS@0_94z3i_8*d~fc+;KIka_Ec8VM(@{3Bcm@I43 zV*p!=`30o-Z@JVz`@XImb!oPVJ>a+U_KKik{mjd-L%AH4PX3a?Sw;!nSTtAT9w*od z#W`3X6*fOKo+t5NClepnxlF{fN~i*{4<}>;{?bCc9JI(Nk}GZhxRgjI71X9(BRiv+ z>W-Rr_CPnyPLo-`TVnB^nww8zSvHvA8-vZ|m#o607Ei{E0ZZxKiJwRWGpz0ueEjzc&GaF9;#N8~MI-xDsDh zYVJaQI7&oF#NBvdeD2PFl6i53gY#XeM4r@9z~|$t_J^MX?CCQtEDZFvVf=VI0?2xX ze~A^mGAc5aC)|1>8y2t?3Qd9-bT>!Uspm^JK%&^?#|#km3$P zIhpg{V%TYx-7st^K%IR(_qExQ8LwTUHXnbpx}n}I5^f9p2x--;9>^7)dRQ5@YHIC3 zp=gJa)WQYR%quk%1kJls8T;pvA7rGF^JLi|$P!8xM6i!iJ?DSax@1k~MfT_sHuZyt zeb!!le$TJ~1oP`k%n;`lM!xD{QQS^XvA7C!bXIE33vYHvk6a|Kmr^MkfC+LzejE9T z+{1q$ISai@U;Zx98gh2491^kg_9v3w3PMhNq&TU}AT5ZXE*a4;N@7?~asjl~1fO2% zi*0H~>9^SMP1(uSwcN}epsNp{x)L2oqU|Tpaf==g4-con+lAw1Pz!HOpo$He8hu0S zq}&f-gb4J_?@M=6A#v_05jlL-#m^={%WbNsmC2%@a92@~{jB2eo)_pn5&>u@WW>WC zKo#N7sQ{{Ahbw2h5Yu2vHO+yh!zQu!gzZ{p*EAWEhANauM=AJA} z6qEc?yP75r7QSxuT(|B8fD&hozh>3K1Wpg1tfK3hn2uGD>NRo!M_Y7fzHl2xc#fP zPw=uOd;2--k1>xYnl#QurKQY`L|6S)lu*u2a_yvU738l$tdI~fTn0fF*-nhUs-EI5 zqD)D^4oY&3L7^^XRmCiQtKGn!Ll<7+nIgX*%rStIHGCL6@z9%=l96Gj zT009H{>3@cj{H{*~fEGNqt=&<5X|EC!XoA5kh(wSz%zRu4e)#&2M zSMcT|fCVr$!>q{tC$Ej(kLdxo8xzP4-NKJnDqO}OwPujR`xkhYdm3OXKR^;m9%Odi zrvN1$cuO5nk)r$U%mpYTtvTIq9OcnIa7d&i z4>IZFs-c||Cv17XaGyBHS(d}An-Q05>&c@HVxVE7UqpmrSEy_$BOgKPTdIb~CNBH4 zr_nQ{vMreY!oREjc$gO<=lN#BDxf8+0N9(M^BWyR3(FI`{cY zM_Xi@i~ABGj1_08A+4|c{XS#HYU>d42)7kqTpUbe!4=LlB5r2#Q1a}g%OZ6?liVCDi}eSL)gI zgoy|{QXwLFQJiST`L(M9h61Pl zCgoqw^{~Cj`q;R3+FbW$V*1GT3&89sMc?OmgxAkNXOh%%J><0BoWpfyxbG-I9l9gv z^5nW(QQb3se7rwpB;+JZ+y-``R1+qvZ-kjwCDj-n4nJe-^JQa=2aod~5AsQ~4QUA2 zCa3oA<7X8(%u}s^p(fZUg*v)D8^<_FeBR?gi5&G++*kl4a*y%-gdiv*PiW#)G_)FYS4b)}na%fCUXuk}r`xD4y*`LJZ1u5lP@K>N1;X1^S|&5j7NA zpXQ4AwAI$JWGTtwOc6e#^@+Z&sjl9k{%BEEvw`z~ie+K*o|r1iGjWdp^kR_#f4?>P z2dL!pO|np#xB{2mn?)66C@qTrX4G>uxU=mH1ae|qjelXDLp32O zpNssK6clUp>k`Hti+s2D+S>GynuD=Hy^Pdj8Z?zvFy&+n7)~*@b^rJW%A&tKhjiPI zB5c90F~EGbOmCMJJ64pa4F2rY8JaboN*q<#R!)2)1%U+8+?D}lhbU@@!dOclYzA=4 z29@0Ub@puhyGIp14rb*XSW0RHi7G#>JJN06Fnm4>Rv~nF)@tdXrE^Ckf%ePoo+32n z7^I*G>)fUT;6>6!$)vZV%@q8be9G(cqs)$FPyVx;?Mh43nF5G&5F{;+m&L8+_p<)9 zJkO}+4qOFBs{6r1Yq6vmTqHV#7Y9TD5TF>41a|mXM4cd&I?y#CS(aCCcVc}f86x(s6e_#5o4LoTnZ%|2JB;R zc&Fvc%s6eua_5d|q^tU^U(~_EMnrDtkmw2DSY>}HL{MV_=aGh=0Td_^5c>EqX8C}; zn$h~>va%r5L3V6y$`!B9Kw?@*;m{wlb@he4SpNswYO~#pn0h+tL1($LNGqt>>L2)2 zbG(m98+sS(zl*vHs4XtRZ_T(I-7W=VmbkuFuFp*#5ZOo=cS3mVUhcWlHRWM8*`D;U z&gs&-hq7|tFSsKuLbe#AaA^3rvOQ5{cN`9LVu)ebUC~QmP`j9D)HmWXsM*Tm7HVF3|AP;&;S zBtV@SW@+aOTeK+%yrrS`ogw+w^#?@{CpDf)AnO0*l$O zA7x1KE#bm+V5o;#*h`uu$M=mqxKZ7Ximrtf$aq84TeQnb5^q|NJIe(WGZZ-TmkHWzYM^y@@qDM_RnU{Z*-Ix>&0%<{v%!^==fk zfuDrvpENpZ^*uyP0Lr+>{J^Yy|8b~>m&AF2w=@P?qT9y$1GHcTO{)u6PwF~8ogb-_ zC3ndeW#=*H!WGZp0i6c>;NIbCmc704u<2t|=EuREV-O)BJ`oDBoQOjZ!{=~cDUi^I zYCYpbVd0u8TTki$s232)virSU_;o9nn6V6(@qdrYoDC?Y2>MRG9&!6iEbHE(@up<_7W8lN>ykHYxE8< z*gal%T({FEHi_G8=5TllkP#F+)kJ?}+lBW4@)p%7nM6dAlht3|_r;JYKG(<@*uVNc z&2ZFy$!hUijH{#db$GzKIkD5j4O0K-i_WP1mB_39KIULiu{S$?{P~7fsz<IraijE#Om9hwIu#7dAi8u8UtX&z3Hxi@vm(dU zU7$?R=-P+|p;F|nBKs)V{zj^ctE+bkmYM6~%*0Q*J!9pANrRt~mj*P+vK^Y_rhKo zXygB{1&AcIi|yKK*S5`PJ3xg<92kamv(RUdLxtLX&Me9>e5TgjHlO}08m<$Y@S7#S zJ-NPo>J#37@}2DWv;!@*vU{`it5!_if1Y!szzQ&qJTCena0=%&2V21S>iy}DHHfVV z)0WlYiI~-zUz_eq%JEpTp{`LKUYHrNfOkAdjp_omy^HD35C2ltk0ami$V2!GG_}k- z6XruH`a{_#<#+Tbeq%x_G?Fl zc4Fn=sjDqrjP+n_BD~2xf_+8!=rq(Z@~7P>Rvf;-BQV4MY$_^%uxIsG`I7B3wFnVc z5i<`6g+c!zKh}3R<%b>RaCn)ML6SbxwSId3D>}r#WGFVeE$yyhT#|#h)S1YDbSRI? z-KKN&C};pdk8*%TRMRHV_wgl&tAwNj6Rb504uzR1N{aEll~ZFpOc$=LV83}Ntoj`> zjyn(Db>JkPUY-DVv8=GJh0PvC+@t${A@U_((HY6({{bul1Zqg_HPSKAKGlz%b#-&> z3pr(9mDw%_?s21=7&Rqz)!XI=e)~GJ&x}fGxrpJBnc(n-lq0qM)3@{-ZzRK`+ZW^F zJz7?&d~fR#uh`f{t-pSpNjbbbouXXN7JJScP}|tpsFF?M$n^oh(04$_vwZ_ny^N>S)$mZjtKZ8u z{hwu4E1x8k54E!7*oZv}7X06-|5j^FWXZbffqt*-Xd~U2;F&juP#&8vN2|JQ&!-bX z0?Bpty&TK6Kt9~giOKYf6|9qTD!+jl`prD4aVAoEm(2TdcMHT|IHSVxU*UvP2uTAZu^G!A$eU`thFA`4L+PeLEv43O&{y;s-KHKBgixD5C2%-Bw z5s6as<-Q@tv24}Z=1;>aBd2nNy2OoU;FwQM(*)IsDBtw;E`2- z*qZ!h+J*Mw`>o7Jj)`mtShH+wWOkSf$w z_--vtiFL(iCC2CSy>LNuBW_5?T_RfMH|?jN!sa?#_bYx!)##0iwERZLAU~_BG1WdX zg1)4VaMko0NOwi;s)|HE&VV-}QMD+uv<3kA%QO_NVrGS7#3wOXSvdUKe$615oy$E< zRzz4Px1c}>lqVpWhcDzm+lx>_AdK3EERFB}`}1S0@JEF+mI+zdr>-I6#mGkg!o7v~6G3K45zP6vl+$o-jM7^;WuO zN6RLJe)bKzS@Y!YpNOc={nMu0w){%W-*Q|?-TFh z`eYM>nh8Xl;xLUB4{C5SU-KL-Ocl)_~-q*C-3sA-#N~ zt){#(w1FU|WI1=So6$_b)>v_)JC0-AYM7vd3(98N`MP=g!=pI#|$4=F+5f`66dE(|PGo%!05OD)1ilH!^-SMQ-6j@<6H{z;Z z5&P#n!lAz(A?1JOTE1JMETfV`0%-B;|6XmQg)#NQ-RKqPtmRw;iD_3i0ipDX%pgAu zTraajLzn}EsW22T6TDoHkiUm}Q<_vkcaS8|FVV>Mntod{D`7FXLkGG;?h=fV^0rst zpfLRa4e_$2I)4E&YS$#P@6P0pn8C(y%7y&hW~{}4By8feTzXuq3N&4yc5@_1nI711 zK7yRDcav&T9}hf-TpA>`mqp1wf8^axCxz#5&rqUJFG{#v`ejVaQ#gMbvPnb2EMdN zfoEQrx^@U1SbIw%tsI?nmD+#(`n5#9_i-Hs%QM-Sm@sd4>Ir?VM}@T>muwQe)qh~S zQ?K2v{<#c6r?vZid~C&{{*B8Yx7}kzFnTvWE^;wvgK4zvEZChr@TJ-lc)h_H_3s-O zbnKWhK^T6Ii?N}Q*18N&;%FF%G4+#~)TB0MxWx$r%Z(I>2E)9*7SnfhWZsr~$xOE5 zxj#`DAHP2oA*YCaUaOjnMIMNPVmSEe!^2jM7*a?AktUt#;lunE&Z71_ul~so*Sf-* zdb-Np%0*Dd(Y3oMm@-%z-^Jg4fOPjVD2{bEF>wNI6}!@_U5j*MeqB9qvBX392e38f z@7-pNyhM90z>rm3#t|%1B4^D_EpLP(q|-%g-5ZId25rneoGQZ&=SR=l97*jY)$tEG zB~H3RWGa?q>P5$+HMR*QI8WZto*E~`SI`!C2X4wPZ_u7ivS<7Uj$fDRMSKnR17cB? zg4iiZW`abyyR~XT0cp;o+~zp}BY6aLhK80rV^w&R=2GpYn}3%A^;?Ig)tm4_=&t&A zr14BIA?gG>D~&8)P^$qo!hCvpv6hppS3eHI7Uz2S)+Lh+(`8=}Cr7;Tn2{#K{jD(d zg4^WYI7QF3kJwEvm}W5Ifp>FHIkJOcgAg z`u2m53!3|7r9h%N(%Nc-XjZWUWAMTUw8M8V49V&S^7z=>U&W5gHq{|>E$xZ9p^o^) zMO+eZn0&7O@725R<9x`k`4;xcI{W2`))@$7?QX7lS7CE8&7wP1{ORFb5Xs+O&1g7J z*Ut@EYer=221Ef7nY=}W$;|KCoU5pJ{+_OMGe8exykR!>pFkx8V5O)NnV zwne(}ZgSKvh5(Alo5$~87gOf41}|$Q37Xjcn8I3qG-;?}{$)TZnZV@O+0zK-9k5It zLHAlu7zI^d4D%q6{|!R1nXMWLaaLAOR z5^mr(E0DKUJ@$$kA&C+(!3>-GzN=#XqOvPe)871J_hazGUNFHgalkMRNP43AIKs)id?`{Uh_>cbm01SU*on8lEgwdq9mEMVQS zzSh!Jldv@@X7;lU%vzyhz`|sy*{O5hFQkO%Lz&x+#6!Dlk(0s71-e>ZTOEx`Avc&K z*D77U=~H`t;wdIEwuo@9kLna+U*0*AJG>dZ$3lZ`@Usg>%WXiyiS!dWHA@LyE11 zGJQGn3!_R>;F}99^9oHY`s%kDc)dc~crCzi7J_@YUN7A&w3LzVxqjK?EFv^W}3k$jryH!W|xt5lj2r{VC7sX01mxAjS zj^k1?ANN3x$*GHz(?t^sE^Ixy(@6X2p8FgqQ?gJURm^-qMQ#_`u5ogE4!(*X}`>6@z!LNC-(32=4VZFQkI2bA7 zGppVNeFx`f^Z&wLy|z*2`T(XARQx4iku_dW3uyf`JNKWX$jk#iTEDuG1O6;$_L*KJ zSqd8KSn1uv;p-pWImVvb`>y@)0@GBR2fjB<1c^vk!TI@O-@-VvWY|`=r-Oh`eV(6MzXCr?fDj<2 zxMi4wi;Ihp=VV$tC*iU%ifQkaR#2*d8PBHh%oJY-b2IDW@|UTUnGnGcb$lc{MxO?> zgh6Vi7ICGjMgYRSLOgR zrNZ30F2qS`b5i-SMf6D3j(aq+@Bwal{c+XwwR+NzV}#2ump$4Z&S#SZD(=!tagw~dHIl6Wmn#Xwr9`F|aqcRbbKAII&z zuD#>hWOGGjUi*?ADtl+|y~nl6C0n@mjzY-Z*<_1khm3DX62If;AAh;`^KkDu=Y8Jq z*X#M(QASh0gv~aka~L<(%ei6E+5&LU-1(;|k%62q5wnO)fC1j`c3j}Zp^5$bBG-%w z3y3~AQ-LaP^7eXC9*&prW-xG6MZ&fE@4p)&!7av{PzkGQIAT=gCHFm=e|pqt2;>verZ2H!ZB}7V&KHgpF~?% zoiPlc9Oo0!vm;Iwyq+~uh8l4t1Ger0D*x|Cke8;I=I3^o%<_wPP7Ig>^fcN2BU#LP z0qBbmv+O_ZiNOIW4~C82h-SYk8Hv7c7JNDo$<3N{^eoR25*o~Wg_avFq3X7;Zc_ai zm(*oZ7`#pIyF?xnUx8bLP-d#{r;GdQ3?sH=sN>|?kv8U+y`;zRDF*JPkM<;f9#dD( zCx=*rYHY{}l6^OIzxyD}P$8Ka1Q0!Nti`w@iEyZY6-C43tynE4*JhT}@a69p1RY7g zTu+Ht3k0gyW|aB}xR|xsxshFAXsFU+CYvd*D=CMJWw_V#!1+GfB%2?`7~O4PxXBn}h_5f?$bFY4f#k zfsg%yIGCuxECo;*FQ&fhGUJCwI?P{zOw#}zNg_T`++2*wR}MGbcMWFupYg0e&&lpg zcHQms2~0^9{~Q=>*pz4~i@yE7ge{yC3y3GJtOOE7w#@lW%z;XYF~>>DPA?PR(%>&? zoN3}KVz`vS{t}A$Qy2G04N--?wW$l?)EI_QdVW&n+D$EZ$j`s73)eJ^>n&IU1OK~Q z*`=F<7DJA15*EoFuCXbyUQSuBv!PcAy^RN4a!eq2q2(e%+01q_K>)9MN}4X+wpESn zy}D9AEzIQp`|=&E-!I-;Uq@gyB!<4meIWsfD`kw#&^fnxR(;3e5c_HQ;cnuX^3j*@ zEtw-HcLJQp^eRJUKM8Ct6GuS9;b!zt$-#>!ps(^gS4w1CFPj{Xs|SAeNi3K5FfXy@ zH!J3c)4N0&f8oZ%-T&(}d`K%?wBCAQX60rIn@^N~ajYt^U(X{BJuALP+8}qB$ zg4X0~nf|qYG1o{LI*u9CCjnBUwuf=M+m?X|=NrKO+)3E?%2~nJ3$pmk!rtcxX2X{n zo_`e-xZX=ivc}T6 z6$=^SC!M+*aziN<$E);H-Ynxi$(iwC9_@6R6Zew*++tx=X9fH5oMs9G+7uw`HfWk> zzGI&`(nkg+92^<^{}JnO>uGIJbBp_jbl8>r@fZWT@~U{OO@@E+bn-Z5R8xL)9L5ke zHYsv+K& zXZZm;*%{KzSwH>X_M!?Vfe&~FZNvfNSd4r?Q)$xpSyQ+}0$v)~bqj*08fCn85KQ<| zO@7&|WhXP6Bhj{Fm50)Mmo=)jjaZNU1x))0Eh&`TjYNJH5fPwsno2#e@mud)@e&!M z4tmk&D^i^I>;y~^JTd^%G|=c$!!@UB99+f-xIcUH84w+h)mIy#E~4K$KypFb7B>c^TVm7sw1#A_vf z72c8h7VNc+$BD$SE(1Njdm(4KrC%baC@m;Z(UX_|7djIQa@Pj1FFeyH2b3+9giDr0 zjnq>Wh)kN>Azd;KZ3*W+T-#;j<$6!lJTONYnzaB?1rBBHb_u<}k@0OZqILJr=4-jN z7)eP{7JL#U%;oxSbRY-%x&((O22KV#hK9-LSJbi4_-}O6H4mW{ z0^A*#6v2T0fz{b9X*M9tJRA2tYH+{VOZ~NCU|-?x+-QPKP>cJCt^ymO=-;BUW;I6U@N?LCX1rG&ysThmjY`uS z`hFG*(zfWb`1{-x!kM5|Vv%PRyeeWvdY4R*D<3c)R-H^pc~Nln_=I=%>2{NAD0f2i zgfzYXh9=LUOm(>|mXcK;dp9Z5LD@wq>Q#c(&*_tHNTadiWYi3m73an7E;Yj<=jJ!{ z#+vFqHuX2OOmhDXbNmAXfX%LF_%Cicwz>xA7q}v%va6WVKsMs{WV;t(Z@qe6_^nEc zb@jb^9V}4hJCp4tBp%7Xw7je#?=fH>dt?R3k`j$FsH=5ilL*xeSxp7Tcp=KYZ!16- zX?6>mEJypdta>rn`5{{0imSg_S_IJA9Wo}U6*Zg6ioYhcyo}XvWW_jQ_86DWl>Zx1 zIQIXZvtv8Jb36h-EKLtG>9Ct?tjdi=xdsW07kp3@-X8ZAb4RK>@Nj}L)l?*M>#jHV zsd(A}MRtNh7Saegbl@%jqPv)y#<92HZixxhMYSkxE1fmW+Th?eCFaSCBxQ<=*#+020Vbfzq+A6X=ysNv9AnY^m<$ytxFn=*E-AThaxAcu!vv1|FHCHNO~Vmj2@JW8{M```KWhh<)>MK;Xa zh6J%JI)I6O5sKX&X_XBLlOfO)4_nn>S%o%(1CA#<|$wn{~kB5BF~V6 z63tAG$1{JhTl9Z}a9C(fT+*DgL9hj{ODhEmmbG- z6E5zIOe~DC%1vH@n5(4G%zZ&T$D?dQ`tl=<=}M3v!x9Ve8fv-Ww(sRyBK3if(hiD3P3 zCv?=h&nsf0o4C%k%~%Hk1x!nQy-4gq>P>buy;n=evLfNYBB%Qp+KCO%C(mZOl%Z=* z29o&3hPw@t%`%!zQ~w}wTp5M6mpg7Jc`c05b{g9A{b4qOw#js_VvTKKY$LxTt~7h3Mjv@|*z#1b?p12-3#L~`StF)b?3z>T+$U5(hM zf3P)N@qrdRm!v0)Avdy0!TG7cKu&&TIaQ)s?QwouSsiiVH0iRqezq|jt1}>dX+%GK zcI=mK&Tqn+=8wS$yH-RjQF;!ERX%C*kA34uZduN_PUpw!?l&_(&ja6bsJ=QQ5$#VC zI(x(K!`)WHrtLcXkV8TqJN`MvdI#AuGzfTwbG9UR0Nd@kdpPdg(0mshC0840+U)0@fHC6!yI2=>CZ=Hr+!hMVcp!=x1HOZ_j-M-}xB+{JZ+Q zV{*y9;F)%yr=#`1jdv92(&!9R!H5LLt8+zs5X#x3IQ7O@3G&vqq!|Z40*XV-qQ;ZW zOO`OBpupm-Ls7C`uj9^k9%kI7ux7u#Le^}|FdI0@Y`;P&{^sguS?}KyMZ>8 z#?dK!E2Yi{Xce((S$j&GPeE9T_5B15Ob)crw5$HP&zNH*X1TH3x$=L`#5Kwj(*E0A zzOQcXmZDfU0~v{hJj=w361|5d1x@D56r&+jxII>tpP+F>Y=N*UQPpHeX2vWf%F}(V z$7f30zg|xtyNC})c)*f(p^yUQMGDdi%YV_^YXTL1#_$;s9RLpyZ)M=yIXfmi^*sFb z=e6J|pg~A$g_)OS6Yv=}e#(>yEYj`8exxQQmZZ$7Gx=#^V`HQHa+dg3N6=bv$4UTI z3^UcuJ!xii4wPX0bv-ZWA{h@ot!yaA}=`x{BUsA5OGtF5Gva>%+?r{JOSc$5d z&4Pc^6E26$M#82o)+ksU2ni$Pxt&VPm?3y-Gt{3(gKif>BhN6}6t1e6V_=Vddxyw8 z7u_qc4bS*7Lm#JHEX1kb`xmBPj(wMxkZ1ivH&$PHfjzLEO?LDWQdV}QC`psc+%xkW zE6uKN-ni)Q_1}|Mav@dMbq=eTvvy}GAOWWvF@|`}dtP|ZNw4`p3=A3zb-04TL-nUg zQa!#;Jfep6ep-qf0+}EUiBU~mo!y(_qfz>j54`T;cFwg}8kdCQHDV>vY2ia$6Rk+j zQb}z&!nj8-QG=1Nc9df#%T&C=)l_R}@Sp#-9Urn5uWKh>jS`I54N22=oDMQY0ci>4 zk+6V(02gbK(fw?fWVml$l1Y$!xZSv2&^;QPY1fYr%>ic$bHauVO>pxmub`lSZTZ6x zPKD>mD{;W~1H;sQOiI9Gv3ejWDd_?mpcW#98BISct6mOj#$@uDbdS8}dSnXzXpS#$_KregPuU$od!O7+6&h+ya%B zeX&h+!IqZn^GrccZtEKwBHSZ&+=RZZJO@xbacSwLa;CSHjgNh#YEhI)9x57@+%Gs5 zEnb%4SVJFLQN7PJH8vjR^Ak4gZ)g9s=8hYosrWVAfQM=LF;cnY^|f@7ybZ@>Vf zYXY*WwC+#rt#t(D6*3(RHq~@wi4d;HY_;FKU$A=2O(7+6doPG{{i5dq1J_@~7THXR z##p~Vc>zkdDgD&4So&3IPW)kXjRPTgs{CuS+AJ(*F_F1|W#8qIfr^<8 zbDsE(EIjQ(;ceDxE>rzM9`PM@%*Z4I+c}|#x2y^JGJd!vvJZmf#L>3=8Ip3?^m2hr zWW6-tH_c-@Je>ee+6s5xIrUV4r@6$iClmP{S=^MFnMp+^vikMw*jbTUI@Z^DpW$@c zM=+;-g?tRsfy}@$IG4K6J=W>IIPw)Bu0o1dbcEgB(066F`C_BD>{{mxss3IvhjZN9-9POAPQJ_CUh6AXA*ZxED#=FcnUgEwWC;PD=}eOgW1$=)+MNrF}*5#XE8V#|dKl%{IN;Y0vl&7Pkqr8UJ z*RxuX?63nws^j27M)LsYNALQ2f;=3HMV+?WZBHZk1LTy(N)lGU*?vWpwa{#sl=g7flNWJ*e3H60H#fI`wEC$Q zj7VTGK{Duh`F+gU>8+}lEgYzsPgJ<7Om93Ko;{T##LfWIAWT;(R}2fv^yeZ)F&nfc zSbH}>qY4Kzn-H|Tug_2UY7Q!e=T!Mwp-pdCa!aD^KP#H}8GG|$Taq@ve~)!g?`~yf zMZ)0T94&?vf6WMSG)z!?YU1acrw3A4e29n?=wMW&TkI!!)Z7dZjMl2EK+{mwmH>;v zh^Cnl0t|ck*gQ!&KV~x`z4_~%u&W>CgFrm@ti%$D$VznZy@zeyFp)Pj#!bZQI(}R1 zq$PUxveoCnDA#o%INA)ePP5_W?IG$oSubBUBnL=`jFPmbdPa|wz!gH;|75+SE~J^9 zma0mYi#r9y(Mo@u^4J3Dn!P>@-{i@e$hUzXlTewE&JK_cx1nOF?9Q&ZiOnnBb%L-Q&Uq@ z7p$61ucu2(Ttn0xVfkU>jJEASa(?S~zCU;UTJENvHB!=Kt5Uz5t&ZR?UyB;OO`t_-h*W>oNUa=Y`nPtdfP zKvREd54%>_s*01Zfae|ny4u*XXtX%v_Ng8MmP_e=>(D5rU@P%EE8QPxR)pzAVRa5ZJGsl`b4;b^N{)uF4+B3obcp5J{wK#} zD3GzkH1i<&_R#XJ28R6oACpZgE+q8E>s{Xo3ya<$^MYS?yv_MwQDTt)ILLS83>|?) zVzq4ASV6K^qGVws02HEiE ze{~RT{{UH9#g8qF8Lca3%uA`4bi*yXRPg_`Gw$(zuP>taPYy_4_CMWFPVCZ8`_-ov z$lIOuRXVd`f!;m53`q^xg?x(!A{`i~gGuEeJOQ5P8k!}FX{E%<@k5E!@z;D!bJOpO z#u*4?+GX>_w=J_5r=)9J+31fW{r&w}p7S0S{mW5!K%J-c*;!YGtygTLj0(aBsKi5$ z2bq^)oCrh7-b@^xM+6EO{#l1`p_UqjVPs@Zz13tJ#Dtr(i9+%hO*3!iYD$`iq)+_b z;A8pdoHCDn$6R$4%g|aa!anx&F&3N}FyK5ICyXzUK#ZHNDCZ#$ff(W)HQTQu&RV=> zM6bsLm;bIZ9LPXrE3Mck#A@p4KyxqsuE6!E*`QK_x?^^l_ZglPYpA7l?TA zK`$~0I`a^iduGSR#!?34p-^rU*qW+HgsABypm0#<=%6JN$Ny3j!CbFPle*eb;BEN$Rse0dLBgp8V{**Nl|-X#heY;W7NJx zP%h&ZyI6?uPA3RiexX_C#kr0p*@>6g;>{w=5mNQD-Or5+^+9xb-G|NrpTtP9q77G0 zay-&|@$D}7Sd|b2Z?IG8r^)VZ5b|r_6sfJ^>-JxA$mbRB2sg0$wjyyN#ozI-V#O{iz*{}?NR zF6sGjLE#SY{EX4V9a&rS^RCbiH`Z4=niQ2v{0IM8>SyS_ zj5?kU1ka{`k!RZ{s?6ZM5&bo#2;wY=ri-65p*g$ou8@S=sCD}5NB>s_uh_sT*VA-& zPC*9Ry?)mYdg5u`N-%&619tU7=K>q%X2ZnFxIqbvNHd3b?h+3$$#zkgSzA}5=}b2) z%!Jd}D9DALZ?d%~{}6UymlOXJW`jWXrm^8yo4YM-C-1H6Yz!Doy_RTEZ-y;Ikc9U3 z_To@sUSJd)Z?=ca&pr8d2A}C4_}T!|qnJNmjSJ2K0(P_P zp~s6)m@4QU3S`gH{G|Ex_hm6I_V%0FYKT?8eh`y;F75!jRnooiJU;S8A`=G{>7@4T zN`nVTNnp?1W&T&!?N&h6OY2gFe8812A^}S8Jw~qtcSYm$FjCb2#?Rv}G^vyRLQuA6K;Ah%F=6DrscaXa zSyVpQuSR5}x{4EHd@%9$;e#X@D0J-Yysoh$p>oxK#5MXU3=LcygX%0z?qrn)G1Crk z9$1zs)qCsKJkVvc17O1!Pv9V>UMqf>y=DoNxOgR*{7L(u*lyk6BZa6BGw_r{#_8k2 z8E^frSwmqj>OA)XltGLet#R^qu&RsV7`yxPy@Y0`4U?KQru593KRI+9`Kp z2iZDb%^SKcjfCfA2RzAos8e0kxDZRjC_wXfC*(t0Iy^g<&+s$5x$)H>vd^zRWqkD4 z=U{%_1S#9m3_dqSM*O)ZpIZ9Zp+|0(ekbssTtt1d2<(dmz%!S|26Y<$#3n&C7z`G^ zW!jfG^-7DRO89+RP{D_X)%?HOT4K7N!iw*|QP)W-ty$$R_)S5T2$V7ilc-YUnU4~F zbl!&1c&X5r^9REKBgW+PehDkGPU?5~s6Ej$fU3IOuYPxB3Qa`%VG!|lb!f&ZIWwnT zU%q+#6|s~MCtE@(g~fm@zu)h6{2w#mT=EJ^Lm`?`BB_YmF^atwewwtOKV9x6)=F7F zTdD6ykY{z~>>V?t>rtmPE86fp6>BhtD4O={w+H=pJpiYZXq8^d%HEXy0myV~IYMHu zzJ3yqzaG|ku})}GY*M2NFNwf55FVH3`_8hMZc_O6{-5^kC4x9~?4LYBFE)2$r%+36 z4y~?EV-Df@P2Dd)S3W))emLY@@PvJz^xxv0HuiC#LXS&+X|_FfM-g9`)%JmsD^nGN zy>#U1ZtG@3y*-rj8q{5n^*sj=Kj*SOP?M)IB)&=gvQUpAvSCa04y2_g)QE(PsX6;IWjp%@XbHkqXIH+F|X4uHyL7mPz}Mu>~y^IPg!)W}BV>(`|=_{bs~r zQ;Bt99rtJ0L8{E|%qPF&W^i8XW64=_d2)G2Jyk*IPrnNolNWxI14U_E;pEbX3k8NW zX=wstS()thN#8tpl!u)yEm=PZgrVMYWu$9;3hp$^opTDDEypuxTY9N9>vpP?J5`OLvEfg!IteHMOys*(^gtaiao>BVV08I#tw3|AyF&EIejf_ z%y;;v?+l7(jrn%NUhf=mLCsDwvWSW0qHbRy>FbrM-kXYxi~j*b>X9u;F`{_Yvu!OR zBgm3RBC9x?;DKJvORASDo*e%!2;~!E+%*}psNW&8U;E~81B8b`g927+!rEBS*%<%l z@vN{=K)~T1;U-NbAq}%2r@C`1&VjHE8Fcd?MEWa61p(oY-<)heznf^7=IRtK8=IIg zQ10lg*klQ#LRF$HH3(+M$CpcKs;<<+50&JV0vtrn=3T-XO|@kq|p zjsXp8ePyz848=+&xiJOyB}y)zx%Y%7#PV`+L4LP>3@dfsINhcv!|uMmuwws4@Qap_ z&_K5v=5L*;_j~pAlofK=!ox%K3+Zg(@j~JGn9VyzvAYb_6(G7e1zL5HZL!k zq9Ozd$KhxTr}yVehfyKmt=>QMc0vElwSEaFxwBh}ATuL_Xetfph`+dgTrt9Uw}{V< z+xx=GIqoKNWJ?sJW`hgK{LIWuN}xxQ10@6%M}F_3r)>uEbcmCOuok=XfOEzyU7q^h zL*GNLw&YVWsbQseBJG4Hn;sR0NSd(gOAlP(;C%txenc0ViexGYlzfF@WK#P21Mrr& z7d3(%6@s0Act4ui44G71AH3@_rPh+2uoQtMW{O`$5USj++ zETZ>aEpK#oRC5wo;6(Mwl#LAt78&Ye7QXWbEyKW$?c>5XXuxkoTZKVT$dY-9J`BW* zwK?t_x*l*f!Wdwr8QhX=JYE8`kzcnrzq?jJn2<-RB%QZ<85DX;PMG-0Y1*Jp76bgK MD{I5+6fGkE2SYF}a{vGU diff --git a/themes/spinner/spinner.plymouth.in b/themes/spinner/spinner.plymouth.in index 187b635..5c0b297 100644 --- a/themes/spinner/spinner.plymouth.in +++ b/themes/spinner/spinner.plymouth.in @@ -17,8 +17,8 @@ WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 -BackgroundStartColor=0x202020 -BackgroundEndColor=0x202020 +BackgroundStartColor=0x000000 +BackgroundEndColor=0x000000 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff MessageBelowAnimation=true -- 2.21.0 From 1246c79a0973b4b6fab7e52a861a4388ffd8835e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 25 Mar 2019 08:23:00 +0100 Subject: [PATCH 84/84] Translations: Sync translations with zanata Add new fur and sr translations from fedora.zanata.org : https://fedora.zanata.org/iteration/view/plymouth/master Signed-off-by: Hans de Goede --- po/LINGUAS | 2 ++ po/fur.po | 34 ++++++++++++++++++++++++++++++++++ po/sr.po | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 po/fur.po create mode 100644 po/sr.po diff --git a/po/LINGUAS b/po/LINGUAS index c7af8be..ddf13c6 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -3,8 +3,10 @@ cs de es fr +fur hu nl pl uk +sr zh_CN diff --git a/po/fur.po b/po/fur.po new file mode 100644 index 0000000..10da670 --- /dev/null +++ b/po/fur.po @@ -0,0 +1,34 @@ +# Fabio Tomat , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-03-19 08:14+0000\n" +"Last-Translator: Fabio Tomat \n" +"Language-Team: Friulian\n" +"Language: fur\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% completât" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Daûr a instalâ i inzornaments..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "No sta distudâ il computer" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Inzornament dal sisteme..." + diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..b8decc3 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,35 @@ +# Marko Kostic , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: plymouth 0.9.5\n" +"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=" +"plymouth\n" +"POT-Creation-Date: 2019-02-26 12:09+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2019-03-11 09:03+0000\n" +"Last-Translator: Marko Kostic \n" +"Language-Team: Serbian\n" +"Language: sr\n" +"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: src/plugins/splash/two-step/plugin.c:1809 +#, c-format +msgid "%d%% complete" +msgstr "%d%% завршено" + +#: themes/bgrt/bgrt.plymouth.in.h:1 themes/spinner/spinner.plymouth.in.h:1 +msgid "Installing Updates..." +msgstr "Инсталирам ажурирања..." + +#: themes/bgrt/bgrt.plymouth.in.h:2 themes/spinner/spinner.plymouth.in.h:2 +msgid "Do not turn off your computer" +msgstr "Не искључујте ваш рачунар" + +#: themes/bgrt/bgrt.plymouth.in.h:3 themes/spinner/spinner.plymouth.in.h:3 +msgid "Upgrading System..." +msgstr "Надограђујем систем..." + -- 2.21.0