Saturday, September 30, 2023

U-Boot for RK356x SoCs

So here is the start of a port for a few RK3566 and RK3568 boards.
These boards currently need some binary blobs to run. And a LICENSE
file was added to the relevant repository that explicitly allows
redistribution of these blobs.

The default baudrate for the serial console is embedded in one of the
blobs. Since the default rate is unusable, the port changes this to
115200, which is the de-facto standard for single-board computers
these days. This requires a small modification to the blobs, for
which I write a small C program.

At this point I'm primarily interested in suggestions about how I can
improve the way I handle these blobs.



diff --git a/sysutils/u-boot/Makefile b/sysutils/u-boot/Makefile
index 857155ac9f6..9da1b1599d5 100644
--- a/sysutils/u-boot/Makefile
+++ b/sysutils/u-boot/Makefile
@@ -2,5 +2,6 @@
SUBDIR += aarch64
SUBDIR += arm
SUBDIR += riscv64
+ SUBDIR += rk356x

.include <bsd.port.subdir.mk>
diff --git a/sysutils/u-boot/Makefile.inc b/sysutils/u-boot/Makefile.inc
index 34055a7e502..51e0582edc7 100644
--- a/sysutils/u-boot/Makefile.inc
+++ b/sysutils/u-boot/Makefile.inc
@@ -74,6 +74,16 @@ do-build:
${SETENV} ${MAKE_ENV} BL31=${RK3328_BL31} ${MAKE_PROGRAM} \
${MAKE_FLAGS} O="build/${BOARD}" \
-f ${MAKE_FILE} ${ALL_TARGET}
+.elif "${BOARD:M*-rk3566*}"
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} ROCKCHIP_TPL=${RK3566_TPL} ${MAKE_PROGRAM} \
+ ${MAKE_FLAGS} O="build/${BOARD}" \
+ -f ${MAKE_FILE} ${ALL_TARGET}
+.elif "${BOARD:M*-rk3568*}"
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} ROCKCHIP_TPL=${RK3568_TPL} ${MAKE_PROGRAM} \
+ ${MAKE_FLAGS} O="build/${BOARD}" \
+ -f ${MAKE_FILE} ${ALL_TARGET}
.elif "${BOARD:M*sifive_*}"
cd ${WRKSRC} && \
${SETENV} ${MAKE_ENV} OPENSBI=${FW_DYNAMIC} ${MAKE_PROGRAM} \
diff --git a/sysutils/u-boot/rk356x/Makefile b/sysutils/u-boot/rk356x/Makefile
new file mode 100644
index 00000000000..2de3b5c138c
--- /dev/null
+++ b/sysutils/u-boot/rk356x/Makefile
@@ -0,0 +1,33 @@
+VERSION= 2023.10-rc4
+
+SOC= rk356x
+
+BOARDS=\
+ quartz64-b-rk3566 \
+ rock-3a-rk3568
+
+BUILD_DEPENDS+= devel/arm-none-eabi/gcc,aarch64 \
+ devel/py-elftools${MODPY_FLAVOR} \
+ sysutils/e2fsprogs
+CROSS_COMPILE= aarch64-none-elf-
+
+RK3566_TPL= rk3566_ddr_1056MHz_v1.18.bin
+RK3568_TPL= rk3568_ddr_1560MHz_v1.18.bin
+RK356X_BL31= rk3568_bl31_v1.43.elf
+
+DISTFILES.rkbin= ${RK3566_TPL} ${RK3568_TPL} ${RK356X_BL31}
+SITES.rkbin= https://github.com/rockchip-linux/rkbin/raw/master/bin/rk35/
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
+
+MAKE_ENV+= BL31=${FULLDISTDIR}/${RK356X_BL31}
+
+pre-build:
+ cc -o ${WRKSRC}/rkbinpatch ${FILESDIR}/rkbinpatch.c
+ cd ${WRKSRC} && \
+ cp ${FULLDISTDIR}/${RK3566_TPL} . && \
+ ./rkbinpatch ${RK3566_TPL}
+ cd ${WRKSRC} && \
+ cp ${FULLDISTDIR}/${RK3568_TPL} . && \
+ ./rkbinpatch ${RK3568_TPL}
+
+.include <bsd.port.mk>
diff --git a/sysutils/u-boot/rk356x/distinfo b/sysutils/u-boot/rk356x/distinfo
new file mode 100644
index 00000000000..3b057558d11
--- /dev/null
+++ b/sysutils/u-boot/rk356x/distinfo
@@ -0,0 +1,8 @@
+SHA256 (rk3566_ddr_1056MHz_v1.18.bin) = 3ABjVq4NHR9mhYo3Yub1pSlMruHKFz7lsMRTG9QgjU8=
+SHA256 (rk3568_bl31_v1.43.elf) = U7k3G+6qDGo8AjWg8Gmtxxn/kCinhjdyzl7vJBVqsHw=
+SHA256 (rk3568_ddr_1560MHz_v1.18.bin) = nmIAyhP4RjebrnA7A21C4oCIirOoFDmZOAvcmJjQQyI=
+SHA256 (u-boot-2023.10-rc4.tar.bz2) = khjrF3FCF8EAaCXXLhYO65kWh5yjZa/MQaa4UcI43ps=
+SIZE (rk3566_ddr_1056MHz_v1.18.bin) = 55296
+SIZE (rk3568_bl31_v1.43.elf) = 402376
+SIZE (rk3568_ddr_1560MHz_v1.18.bin) = 55296
+SIZE (u-boot-2023.10-rc4.tar.bz2) = 19677302
diff --git a/sysutils/u-boot/rk356x/files/rkbinpatch.c b/sysutils/u-boot/rk356x/files/rkbinpatch.c
new file mode 100644
index 00000000000..0ec5688d394
--- /dev/null
+++ b/sysutils/u-boot/rk356x/files/rkbinpatch.c
@@ -0,0 +1,46 @@
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <err.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ void *start, *end;
+ uint32_t *word;
+ uint32_t data;
+ int fd;
+
+ fd = open(argv[1], O_RDWR);
+ if (fd == -1)
+ err(1, "%s", argv[1]);
+
+ if (fstat(fd, &st) == -1)
+ err(1, "%s: stat", argv[1]);
+
+ start = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, fd, 0);
+ if (start == MAP_FAILED)
+ err(1, "%s: mmap", argv[1]);
+
+ end = (char *)start + st.st_size;
+ for (word = start; (void *)word < end; word++) {
+ if (*word == 0x12345678 && (void *)(word + 10) < end) {
+ data = *(word + 9);
+ if ((data & 0xffffff) == 1500000) {
+ data &= 0xff000000;
+ data |= 115200;
+ *(word + 9) = data;
+ close(fd);
+ return 0;
+ }
+ }
+ }
+
+ warnx("%s: can't find parameters", argv[1]);
+
+ close(fd);
+ return 1;
+}
diff --git a/sysutils/u-boot/rk356x/patches/patch-configs_quartz64-b-rk3566_defconfig b/sysutils/u-boot/rk356x/patches/patch-configs_quartz64-b-rk3566_defconfig
new file mode 100644
index 00000000000..c5cf259f07e
--- /dev/null
+++ b/sysutils/u-boot/rk356x/patches/patch-configs_quartz64-b-rk3566_defconfig
@@ -0,0 +1,12 @@
+Index: configs/quartz64-b-rk3566_defconfig
+--- configs/quartz64-b-rk3566_defconfig.orig
++++ configs/quartz64-b-rk3566_defconfig
+@@ -90,7 +90,7 @@ CONFIG_PWM_ROCKCHIP=y
+ CONFIG_SPL_RAM=y
+ CONFIG_SCSI=y
+ CONFIG_DM_SCSI=y
+-CONFIG_BAUDRATE=1500000
++CONFIG_BAUDRATE=115200
+ CONFIG_DEBUG_UART_SHIFT=2
+ CONFIG_SYS_NS16550_MEM32=y
+ CONFIG_ROCKCHIP_SFC=y
diff --git a/sysutils/u-boot/rk356x/patches/patch-configs_rock-3a-rk3568_defconfig b/sysutils/u-boot/rk356x/patches/patch-configs_rock-3a-rk3568_defconfig
new file mode 100644
index 00000000000..548f36030fb
--- /dev/null
+++ b/sysutils/u-boot/rk356x/patches/patch-configs_rock-3a-rk3568_defconfig
@@ -0,0 +1,12 @@
+Index: configs/rock-3a-rk3568_defconfig
+--- configs/rock-3a-rk3568_defconfig.orig
++++ configs/rock-3a-rk3568_defconfig
+@@ -90,7 +90,7 @@ CONFIG_PWM_ROCKCHIP=y
+ CONFIG_SPL_RAM=y
+ CONFIG_SCSI=y
+ CONFIG_DM_SCSI=y
+-CONFIG_BAUDRATE=1500000
++CONFIG_BAUDRATE=115200
+ CONFIG_DEBUG_UART_SHIFT=2
+ CONFIG_SYS_NS16550_MEM32=y
+ CONFIG_ROCKCHIP_SFC=y
diff --git a/sysutils/u-boot/rk356x/pkg/DESCR b/sysutils/u-boot/rk356x/pkg/DESCR
new file mode 100644
index 00000000000..2d1b3c1f5cc
--- /dev/null
+++ b/sysutils/u-boot/rk356x/pkg/DESCR
@@ -0,0 +1,9 @@
+U-Boot is a firmware for embedded boards based on PowerPC, ARM, MIPS and
+several other processors, which can be installed in a boot ROM and used to
+initialize and test the hardware or to download and run application code.
+
+As single-board computers often do not come with firmware it must be
+supplied on an SD card or MMC device to have a bootable system.
+
+This package provides U-Boot for various boards using Rockchip RK3566
+and RK3568 SoCs.
diff --git a/sysutils/u-boot/rk356x/pkg/PLIST b/sysutils/u-boot/rk356x/pkg/PLIST
new file mode 100644
index 00000000000..69e80e59081
--- /dev/null
+++ b/sysutils/u-boot/rk356x/pkg/PLIST
@@ -0,0 +1,17 @@
+share/u-boot/
+share/u-boot/quartz64-b-rk3566/
+@comment share/u-boot/quartz64-b-rk3566/idbloader.img
+@comment share/u-boot/quartz64-b-rk3566/u-boot
+share/u-boot/quartz64-b-rk3566/u-boot-rockchip.bin
+@comment share/u-boot/quartz64-b-rk3566/u-boot-spl.bin
+@comment share/u-boot/quartz64-b-rk3566/u-boot.bin
+@comment share/u-boot/quartz64-b-rk3566/u-boot.img
+@comment share/u-boot/quartz64-b-rk3566/u-boot.itb
+share/u-boot/rock-3a-rk3568/
+@comment share/u-boot/rock-3a-rk3568/idbloader.img
+@comment share/u-boot/rock-3a-rk3568/u-boot
+share/u-boot/rock-3a-rk3568/u-boot-rockchip.bin
+@comment share/u-boot/rock-3a-rk3568/u-boot-spl.bin
+@comment share/u-boot/rock-3a-rk3568/u-boot.bin
+@comment share/u-boot/rock-3a-rk3568/u-boot.img
+@comment share/u-boot/rock-3a-rk3568/u-boot.itb

Re: [broken] games/minecraft

On Sat, Sep 30, 2023 at 04:24:24PM +0200, Renaud Allard wrote:
> Hello,
>
> It seems games/minecraft has been broken for quite a while. And is not
> really maintained by qbit anymore anyway.
> Also, you can easily run with the java version without this package anyway.
> And that package is only some kind of helper script, which could easily be
> replaced nowadays by "pkg_add jdk".
> So maybe it would be a good time to remove it.
>
> What do you think?
>
> Best Regards

It looks to me like we should remove this port... upstream hasn't been
updated in 9 years. I don't use it myself, but I recall that
games/multimc is supposed to be the better way to run minecraft now.

Also, games/minecraft doesn't have a maintainer and Aaron doesn't use
it anymore. So I advocate that we remove this port.

Bridging em and vlan

All of my devices until now have been behind my OpenBSD NAT router, but I
recently acquired a Internet of Trash device that I would like to be
accessible to the internet (yes, I know).

My home configuration uses a Unifi AP to translate my various SSIDs into
VLANs which plug into one of my APU em(4) ports. The IoT thing already has
its own dedicated SSID/VLAN, but doesn't enjoy living behind my NAT.

Is there a way for me to bridge just one of the vlan(4) logical interfaces
with my other em(4) uplink, so that my IoT item can speak DHCP directly
with my internet provider?

Can this be done with veb/vport or bridge, or will I need to use something
more exotic to strip the 802.1q tags before they are sent to my ISP?

Thanks in advance,

--david

Re: exim

On 30/09/2023 17:16, Stuart Henderson wrote:
> So here's an alternative diff to disable SPA... (I have added a quirks
> vulnerability marker on -current so pkg_add will warn about it - that
> can go to -stable too).

That looks like a plaster on a wooden leg, but it's better than nothing.
The quirk vulnerability marker seems a good idea. That's OK for me for
-stable, but I am not sure about 7.4.

Re: Update games/wtf(6) to wtf-20230906

stu@spacehopper.org (Stuart Henderson), 2023.09.30 (Sat) 13:06 (CEST):
> On 2023/09/30 12:40, Marcus MERIGHI wrote:
> > Hello,
> >
> > the following would update wtf(6) to 20230906 (from 20230828).
> > Does this need a quirk because the package name changes?
>
> changes in what way?

It doesn't, I'm just confused. Sorry for the noise!
(I've had troubles replacing the old package because of -Dunsigned and
heavily misread the errors.)

Marcus

Re: exim

On 2023/09/30 15:35, Solène Rapenne wrote:
> What would marking it BROKEN solve? People upgrading to 7.4 will keep
> the old version, but indeed new user won't be able to install it.

It would mean that new users won't be able to install it.

True it won't help 7.3-stable etc. But hard to say what we can fix
or workaround without good reliable information about the problems.

What I've gleaned from (non exim related) IRC channels and what was
published are,

- worst issues are in SPA (NTLM) auth
- there's an int underflow issue in libspf2 parsing macros
(which seemingly was reported to exim not libspf2 upstream,
nit that libspf2 upstream are usually fast either)
- some other (lower priority?) issues

I wouldn't expect huge problems for most users from disabling SPA,
so regardless of what we do for -current/7.4 I suppose we could at
least do that for -stable which would at least improve things a bit.

Guessing spf is probably a bit more widely used in configs so
that maybe harder to disable.

> I'd prefer to see it removed, including a quirks entry with the reason,
> if it's such a trashfire that shouldn't be used

That does still leave an old version installed, however.

So here's an alternative diff to disable SPA... (I have added a quirks
vulnerability marker on -current so pkg_add will warn about it - that
can go to -stable too).

Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/exim/Makefile,v
retrieving revision 1.143
diff -u -p -r1.143 Makefile
--- Makefile 26 Sep 2023 12:28:11 -0000 1.143
+++ Makefile 30 Sep 2023 15:13:39 -0000
@@ -7,7 +7,7 @@ PKGNAME-main = exim-${VERSION}
FULLPKGNAME-eximon = exim-eximon-${VERSION}
FULLPKGPATH-eximon = ${PKGPATH},-eximon
REVISION-eximon = 0
-REVISION-main = 0
+REVISION-main = 1

CATEGORIES = mail

Index: patches/patch-Local_Makefile
===================================================================
RCS file: /cvs/ports/mail/exim/patches/patch-Local_Makefile,v
retrieving revision 1.8
diff -u -p -r1.8 patch-Local_Makefile
--- patches/patch-Local_Makefile 9 Aug 2022 13:51:10 -0000 1.8
+++ patches/patch-Local_Makefile 30 Sep 2023 15:13:39 -0000
@@ -126,10 +126,9 @@ Index: Local/Makefile
# AUTH_HEIMDAL_GSSAPI_PC=heimdal-gssapi
# AUTH_HEIMDAL_GSSAPI_PC=heimdal-gssapi heimdal-krb5
-# AUTH_PLAINTEXT=yes
--# AUTH_SPA=yes
--# AUTH_TLS=yes
+AUTH_PLAINTEXT=yes
-+AUTH_SPA=yes
+ # AUTH_SPA=yes
+-# AUTH_TLS=yes
+AUTH_TLS=yes

# Heimdal through 1.5 required pkg-config 'heimdal-gssapi'; Heimdal 7.1

Re: sysutils/rofi sometimes coredumps in __vfprintf (+ similar crash in fvwm3)

My patch was incomplete -- str was still accessed later, after the
debug printf, so a better fix was due.

Mikhail sent my diff upstream[0], where was improved and committed[1]
a couple of hours ago. Here's an adaptation for the version we have
currently in tree.

[0]: https://github.com/davatorium/rofi/pull/1902
[1]: https://github.com/davatorium/rofi/commit/a6d297591ef4d389a3d0043afb887b0bdb48a317

(sneaking in a plist update too while here)

ok?

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/sysutils/rofi/Makefile,v
retrieving revision 1.41
diff -u -p -r1.41 Makefile
--- Makefile 27 Sep 2023 17:16:33 -0000 1.41
+++ Makefile 30 Sep 2023 08:53:55 -0000
@@ -2,7 +2,7 @@ COMMENT = window switcher, run dialog a

V = 1.7.5
DISTNAME = rofi-${V}
-REVISION = 0
+REVISION = 1

CATEGORIES = sysutils x11
HOMEPAGE = https://github.com/davatorium/rofi
@@ -35,6 +35,8 @@ CONFIGURE_STYLE = gnu
CONFIGURE_ARGS = --disable-check
CONFIGURE_ENV = CPPFLAGS="-I${LOCALBASE}/include -I${X11BASE}/include" \
YACC="bison -y"
+
+DEBUG_PACKAGES = ${BUILD_PACKAGES}

pre-configure:
sed -i 's,/usr/bin/env bash,/bin/sh,' ${WRKSRC}/script/get_git_rev.sh
Index: patches/patch-source_xcb_c
===================================================================
RCS file: patches/patch-source_xcb_c
diff -N patches/patch-source_xcb_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-source_xcb_c 30 Sep 2023 15:06:23 -0000
@@ -0,0 +1,25 @@
+adaptation of https://github.com/davatorium/rofi/commit/a6d297591e
+
+Index: source/xcb.c
+--- source/xcb.c.orig
++++ source/xcb.c
+@@ -1475,13 +1475,16 @@ static void x11_helper_discover_window_manager(void) {
+ xcb_ewmh_get_wm_name_unchecked(&(xcb->ewmh), wm_win);
+ if (xcb_ewmh_get_wm_name_reply(&(xcb->ewmh), cookie, &wtitle, (void *)0)) {
+ if (wtitle.strings_len > 0) {
+- g_debug("Found window manager: |%s|", wtitle.strings);
+- if (g_strcmp0(wtitle.strings, "i3") == 0) {
++ // Copy the string and add terminating '\0'.
++ char *str = g_strndup(wtitle.strings, wtitle.strings_len);
++ g_debug("Found window manager: |%s|", str);
++ if (g_strcmp0(str, "i3") == 0) {
+ current_window_manager =
+ WM_DO_NOT_CHANGE_CURRENT_DESKTOP | WM_PANGO_WORKSPACE_NAMES;
+- } else if (g_strcmp0(wtitle.strings, "bspwm") == 0) {
++ } else if (g_strcmp0(str, "bspwm") == 0) {
+ current_window_manager = WM_ROOT_WINDOW_OFFSET;
+ }
++ g_free(str);
+ }
+ xcb_ewmh_get_utf8_strings_reply_wipe(&wtitle);
+ }
Index: pkg/PLIST
===================================================================
RCS file: /home/cvs/ports/sysutils/rofi/pkg/PLIST,v
retrieving revision 1.15
diff -u -p -r1.15 PLIST
--- pkg/PLIST 21 Aug 2022 18:55:20 -0000 1.15
+++ pkg/PLIST 30 Sep 2023 15:11:41 -0000
@@ -16,7 +16,6 @@ lib/pkgconfig/rofi.pc
@man man/man5/rofi-keys.5
@man man/man5/rofi-script.5
@man man/man5/rofi-theme.5
-share/applications/
share/applications/rofi-theme-selector.desktop
share/applications/rofi.desktop
share/examples/rofi/
@@ -24,8 +23,6 @@ share/examples/rofi/i3_empty_workspace.s
share/examples/rofi/i3_switch_workspaces.sh
share/examples/rofi/rofi-file-browser.sh
share/examples/rofi/test_script_mode.sh
-share/icons/
-share/icons/hicolor/
share/icons/hicolor/apps/
share/icons/hicolor/apps/rofi.svg
share/rofi/

Re: exim

Renaud Allard <renaud@allard.it> wrote:

> On 30/09/2023 16:32, Theo de Raadt wrote:
> > I'll try to summarize my point.
> >
> > When less-secure AND more-secure pieces of software exist in the
> > the same role/service area, I think it is valid for developers who
> > care about security of their userbase to *DEMOTE* the less-secure
> > variations.
> >
> > This kind of "hide the garbage" policy needs to exist somewhere
> > in the greater community, otherwise we have a situation where
> > software use is decided by "oh look, it is pretty".
> >
>
> You are the captain of this boat. I think if there are bad fishes, you
> will take the right decision.

I don't make any decisions in ports, I can only make comments.

> After some discussion in the exim IRC channel, I am not sure there will
> be fixes for everything soon. Given that one of the issues is in libspf2
> and there have been no updates in this project since 2021. Maybe we
> should discard libspf2 too then, which means also milter-greylist.
> Maybe it's time for a good cleanup.

Well, contrast that with the 4 layers of defence added inside ssh-agent for
dlopen being a broken interface.

You do what you do....

Re: exim

On 30/09/2023 16:32, Theo de Raadt wrote:
> I'll try to summarize my point.
>
> When less-secure AND more-secure pieces of software exist in the
> the same role/service area, I think it is valid for developers who
> care about security of their userbase to *DEMOTE* the less-secure
> variations.
>
> This kind of "hide the garbage" policy needs to exist somewhere
> in the greater community, otherwise we have a situation where
> software use is decided by "oh look, it is pretty".
>

You are the captain of this boat. I think if there are bad fishes, you
will take the right decision.
After some discussion in the exim IRC channel, I am not sure there will
be fixes for everything soon. Given that one of the issues is in libspf2
and there have been no updates in this project since 2021. Maybe we
should discard libspf2 too then, which means also milter-greylist.
Maybe it's time for a good cleanup.

Re: exim

I'll try to summarize my point.

When less-secure AND more-secure pieces of software exist in the
the same role/service area, I think it is valid for developers who
care about security of their userbase to *DEMOTE* the less-secure
variations.

This kind of "hide the garbage" policy needs to exist somewhere
in the greater community, otherwise we have a situation where
software use is decided by "oh look, it is pretty".

Re: exim

Right, it is not the first time.

Will it be the last time?

Doubtful.

If it won't be the last time, will the next time be just as bad?

For sure, because there is no security architecture in it.

[broken] games/minecraft

Hello,

It seems games/minecraft has been broken for quite a while. And is not
really maintained by qbit anymore anyway.
Also, you can easily run with the java version without this package
anyway. And that package is only some kind of helper script, which could
easily be replaced nowadays by "pkg_add jdk".
So maybe it would be a good time to remove it.

What do you think?

Best Regards

Re: exim

On 30/09/2023 15:37, Theo de Raadt wrote:
> Stuart Henderson <stu@spacehopper.org> wrote:
>
>> With OpenBSD release fast approaching and considering the lack of solid
>> information about the vulnerabilities, I think we should probably mark
>> mail/exim BROKEN for now.
>
> That's almost too kind.

This is not the first time that exim security issues are discovered just
before an OpenBSD release.
This time, removing a feature in the build solves one of the biggest
issues, but not everything. For example, there is an issue in one of the
libraries exim uses.
Some fixes are already available but are somehow kind of embargoed (not
that I find any kind of embargo on security fixes a good idea at all).
They are supposed to be made public in something like 2 weeks.

I don't know what is the best step to take. I don't think marking it as
broken is really the best idea, just as Solène said.
So in my mind, the choices are
- we completely remove that port because OpenBSD is security focused
- we wait until 4.97 with fixes is released
- we publish a version without the affected feature now (although that
will reveal to everyone where the problem is, might break some
installations and is probably not enough anyway)

Re: exim

ports@phosphorus.com.br wrote:

> Unfortunately I like/use exim for years - pretty simple config file syntax.

Yes, you like unsafe software.

> https://seclists.org/oss-sec/2023/q3/254
>
> So... I suppose those fixes were shared also with Exim's OpenBSD manteiners?

Wow. Are you not listening? They didn't fix anything.

Packaging non-hackage Haskell

Hi,

I would be grateful for any clues on how to package a Haskell program that has version 9.0.x on hackage, but the latest version on GitHub is 11.2.x and the project appears to not be interested in hackage going forward. This is what I have so far.

If I use the 9.0.1 line, I can at least do 'make extract'.

┆ COMMENT = REST API for any Postgres database

┆ MODCABAL_STEM = postgrest
┆ MODCABAL_VERSION = 11.2.0
┆ #MODCABAL_VERSION = 9.0.1
┆ MODCABAL_EXECUTABLE = postgrest
┆ PKGNAME = ${DISTNAME:L}
┆ CATEGORIES = www mystuff
┆ HOMEPAGE = https://postgrest.org/

┆ # MIT
┆ PERMIT_PACKAGE = Yes

┆ MODULES = devel/cabal

┆ do-build:
┆ cabal v2-build

┆ .include <bsd.port.mk>


--
Alex Holst

Re: exim

Stuart Henderson <stu@spacehopper.org> wrote:

> With OpenBSD release fast approaching and considering the lack of solid
> information about the vulnerabilities, I think we should probably mark
> mail/exim BROKEN for now.

That's almost too kind.

> And also consider whether we want to keep this in ports at all...
> The response to this was much weaker than I'd expect from maintainers
> of software like this (note that it is a huge setuid root binary so
> it'd really be nice if they were a bit more active on that front)

Lacking any elements of privsep design. In this regard, it is a very
strange piece of software.

sendmail was so terrible decades ago, that qmail showed up as
privsep-based-upon-file-moves. That was privsep program #2. Then
postfix, called vmailer at the time, showed up with privsep via other
forms of object movement, which is privsep program #3. (openssh then
showed up as privsep program #4. In my version of history, privsep
program #1 is the BSD auth subsystem, which is a piece of libc executing
gid-hidden setuid/setgid-if-needed service programs with their own
address spaces). Many years later, sendmail even grew some aspects of
privsep. But exim? No...... it's a newer piece of software using
old design rules.

It's a bad piece of software to expose users to, via the ports/packages.
Perhaps right after the ides of March next year, we should just move exim
into base.

Re: NEW: x11/qt6/{qtwebengine,qtwebview}

On Sat Sep 30, 2023 at 03:23:01PM +0200, Rafael Sadowski wrote:
> Hi porters@
>
> I know the ports tree is locked for new ports. I want to ask for OKs to
> import after the look. I also know that no one is willing to build such
> a monster of code. In addition, there is still no consumers for testing
> that uses it.
>
> Of course build tests are welcome. It's a good opportunity to heat your
> place.
>

phessler@ noticed that I missed to add x11/qt6/qtwebchannel.

Please find attached qtwebchannel.tar.gz

Information for inst:qt6-qtwebchannel-6.5.2

Comment:
Qt6 seamless HTML/JavaScript integration

Required by:
debug-qt6-qtwebchannel-6.5.2
debug-qt6-qtwebengine-6.5.2
debug-qt6-qtwebview-6.5.2
qt6-qtwebengine-6.5.2
qt6-qtwebview-6.5.2

Description:
Qt WebChannel bridges the gap between Qt applications and HTML/JavaScript.

Qt WebChannel enables peer-to-peer communication between the host
(QML/C++ application) and the client (HTML/JavaScript application). The
transport mechanism is supported out of the box by the two popular web
engines, Qt WebKit 2 and Qt WebEngine (experimental). It works on all
browsers that support Qt WebSockets, enabling Qt WebChannel applications
to run in any JavaScript runtime. Additionally, a custom transport
mechanism can also be implemented using Qt WebSockets to support Qt
WebChannel-based communication.

The module provides a JavaScript library for seamless integration of C++
and QML applications with HTML/JavaScript clients. The client must use the
JavaScript library to access the serialized QObjects published by the host
applications.

Maintainer: Rafael Sadowski <rsadowski@openbsd.org>

WWW: https://www.qt.io/

Re: exim

Le 30/09/2023 à 15:27, Stuart Henderson a écrit :
> With OpenBSD release fast approaching and considering the lack of solid
> information about the vulnerabilities, I think we should probably mark
> mail/exim BROKEN for now.
>
> And also consider whether we want to keep this in ports at all...
> The response to this was much weaker than I'd expect from maintainers
> of software like this (note that it is a huge setuid root binary so
> it'd really be nice if they were a bit more active on that front)
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/mail/exim/Makefile,v
> retrieving revision 1.143
> diff -u -p -r1.143 Makefile
> --- Makefile 26 Sep 2023 12:28:11 -0000 1.143
> +++ Makefile 30 Sep 2023 12:52:52 -0000
> @@ -1,3 +1,7 @@
> +BROKEN = known unfixed remote vulnerabilities, likely serious
> +# https://www.openwall.com/lists/oss-security/2023/09/29/5
> +# https://www.openwall.com/lists/oss-security/2023/09/29/10
> +
> COMMENT-main = flexible mail transfer agent
> COMMENT-eximon = X11 monitor tool for Exim MTA
>
>

What would marking it BROKEN solve? People upgrading to 7.4 will keep
the old version, but indeed new user won't be able to install it.

I'd prefer to see it removed, including a quirks entry with the reason,
if it's such a trashfire that shouldn't be used

exim

With OpenBSD release fast approaching and considering the lack of solid
information about the vulnerabilities, I think we should probably mark
mail/exim BROKEN for now.

And also consider whether we want to keep this in ports at all...
The response to this was much weaker than I'd expect from maintainers
of software like this (note that it is a huge setuid root binary so
it'd really be nice if they were a bit more active on that front)

Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/exim/Makefile,v
retrieving revision 1.143
diff -u -p -r1.143 Makefile
--- Makefile 26 Sep 2023 12:28:11 -0000 1.143
+++ Makefile 30 Sep 2023 12:52:52 -0000
@@ -1,3 +1,7 @@
+BROKEN = known unfixed remote vulnerabilities, likely serious
+# https://www.openwall.com/lists/oss-security/2023/09/29/5
+# https://www.openwall.com/lists/oss-security/2023/09/29/10
+
COMMENT-main = flexible mail transfer agent
COMMENT-eximon = X11 monitor tool for Exim MTA

NEW: x11/qt6/{qtwebengine,qtwebview}

Hi porters@

I know the ports tree is locked for new ports. I want to ask for OKs to
import after the look. I also know that no one is willing to build such
a monster of code. In addition, there is still no consumers for testing
that uses it.

Of course build tests are welcome. It's a good opportunity to heat your
place.

Information for inst:qt6-qtwebview-6.5.2

Comment:
simple web viewing component for Qt6

Required by:
debug-qt6-qtwebview-6.5.2

Description:
Qt WebView provides a way to display web content in a QML application without
necessarily including a full web browser stack by using native APIs where it
makes sense.

Maintainer: Rafael Sadowski <rsadowski@openbsd.org>

WWW: https://www.qt.io/

-----------------------------------------------------------------------------

Information for inst:qt6-qtwebengine-6.5.2

Comment:
Qt chromium based web engine

Required by:
debug-qt6-qtwebengine-6.5.2
debug-qt6-qtwebview-6.5.2
qt6-qtwebview-6.5.2

Description:
The Qt WebEngine module provides a web browser engine that makes it easy to
embed content from the World Wide Web into your Qt application on platforms
that do not have a native web engine.

Qt WebEngine provides C++ classes and QML types for rendering HTML, XHTML, and
SVG documents, styled using Cascading Style Sheets (CSS) and scripted with
JavaScript. HTML documents can be made fully editable by the user through the
use of the contenteditable attribute on HTML elements.

Maintainer: Rafael Sadowski <rsadowski@openbsd.org>

WWW: https://www.qt.io/

Re: Update games/wtf(6) to wtf-20230906

On 9/30/2023 7:06 AM, Stuart Henderson wrote:
> On 2023/09/30 12:40, Marcus MERIGHI wrote:
>> Hello,
>>
>> the following would update wtf(6) to 20230906 (from 20230828).
>> Does this need a quirk because the package name changes?
>
> changes in what way?
>

wtf is boring and routine to update; it barely ever changes. Almost
always just adding some new terms to its database.

Whoever wants to commit this can go ahead--I don't think it needs my ok
because these updates are so trivial but you can count this as my ok.

If no one wants to, I'll do it tomorrow.

~Brian

[Re: sparc64 bulk build report] - devel/llvm failed

> http://build-failures.rhaalovely.net/sparc64/2023-09-28/archivers/snappy.log
(DIST_TUPLE issue in this and a couple of other ports, should now be fixed)


> http://build-failures.rhaalovely.net/sparc64/2023-09-28/devel/llvm/13.log

Error: /usr/obj/ports/llvm-13.0.0/fake-sparc64/usr/local/llvm13/lib/clang/13.0.0/include/unwind.h does not exist
pkg_create: can't continue

Ideally this could do with fixing for release ..

> http://build-failures.rhaalovely.net/sparc64/2023-09-28/devel/llvm/16,-lldb.log

/usr/bin/ld: unrecognized option '-Bsymbolic-functions'

Re: update games/taisei to 1.4

On 2023/09/30 10:00, Omar Polo wrote:
> On 2023/09/18 13:07:23 +0100, Stuart Henderson <stu@spacehopper.org> wrote:
> > On 2023/09/18 11:07, Omar Polo wrote:
> > > it uses c++ to build a sub-library (basis-universal) and to link, I
> > > guess that's why c++ ends up in the wantlibs but doesn't link to
> > > c++abi nor pthread... Here's why i'm not using COMPILER_LIBCXX in
> > > WANTLIBs. any clue?
> >
> > no idea about that. since it sets ONLY_FOR_ARCHS to a subset of
> > base-clang archs anyway that won't cause a problem with WANTLIB,
> > at least.
>
> I still can't wrap my head around this.
>
> At first I thought it was due to lto, newly introduced with this
> release, but it isn't the case.
>
> The (only) executable is linked like this: (formatted for readability)
>
> c++ -o src/taisei [...many objects files...] \
> -flto \
> -Wl,--as-needed \
> -Wl,--allow-shlib-undefined -O2 -pipe -g \
> -Wl,--start-group \
[..]

hmm, perhaps the other libs are getting stripped by --as-needed?

> % readelf -d $(make show=WRKBUILD)/src/taisei | grep NEEDED

(this is the list of libraries that need to be in WANTLIB)

> ...while ldd shows libpthread and c++abi too!

picked up via inter-library dependencies.

> looking at LD_DEBUG=1 ./taisei -h shows that libc++abi is loaded via:

that basically provides the same information as ldd.



> ONLY_FOR_ARCHS = amd64 aarch64 i386
..
> +WANTLIB += SDL2 c c++ crypto freetype m opusfile png shaderc_shared
> +WANTLIB += spirv-cross-c-shared webpdecoder z zstd
..
> +COMPILER = base-clang ports-gcc

that WANTLIB will fail on systems that don't have base-clang,
so it might make sense to remove ports-gcc from that list - or
to list ${COMPILER_LIBCXX} anyway and ignore the "Extra" warning
from check-lib-depends.

although, ONLY_FOR_ARCHS only lists base-clang archs anyway,
so in practical terms it won't be hit unless ONLY_FOR_ARCHS is
changed.

Re: sysutils/rofi sometimes coredumps in __vfprintf (+ similar crash in fvwm3)

On Sat, Sep 30, 2023 at 11:00:10AM +0200, Omar Polo wrote:
> I managed to reproduce it. It doesn't seem to fail with CWM, so I run
> fvwm3 inside Xephyr.
>
> The issue seems to be in source/xcb.c:
>
> (gdb) p wtitle.strings
> $2 = 0xf9d9ce2ce30 "FVWM", '\004' <repeats 12 times>, '\337' <repeats 183 times>, <incomplete sequence \337>...
>
> wtitle.strings is not NUL terminated, so it later crashes in strlen
> (via __vfprintf) after it goes out of the bounds.
>
> This seems to fix it, but I'm not knowledgable enough to tell whether
> this is a FVWM3 issue. (i assume so tho since it's intermittent.)
>
> Can you give this diff a spin? I don't use nor rofi anymore nor
> fvwm3.

No crash in 100 iterations, thanks for the fix.

Re: exim

Unfortunately I like/use exim for years - pretty simple config file syntax.

from here:

https://seclists.org/oss-sec/2023/q3/254

So... I suppose those fixes were shared also with Exim's OpenBSD manteiners?

--

Next contact with ZDI was in May 2023. Right after this contact we
created project bug tracker for 3 of the 6 issues. 2 high scored of them
are fixed (OOB access). A minor scored (info leak) is fixed too.

Fixes are available in a protected repository and are ready to be
applied by the distribution maintainers.

The remaining issues are debatable or miss information we need to fix
them.

We're more than happy to provide fixes for all issues as soon as we
receive detailed information.

Best regards from Dresden/Germany
Viele Grüße aus Dresden
Heiko Schlittermann
--

On 9/30/23 10:37, Theo de Raadt wrote:
> Stuart Henderson<stu@spacehopper.org> wrote:
>
>> With OpenBSD release fast approaching and considering the lack of solid
>> information about the vulnerabilities, I think we should probably mark
>> mail/exim BROKEN for now.
> That's almost too kind.
>
>> And also consider whether we want to keep this in ports at all...
>> The response to this was much weaker than I'd expect from maintainers
>> of software like this (note that it is a huge setuid root binary so
>> it'd really be nice if they were a bit more active on that front)
> Lacking any elements of privsep design. In this regard, it is a very
> strange piece of software.
>
> sendmail was so terrible decades ago, that qmail showed up as
> privsep-based-upon-file-moves. That was privsep program #2. Then
> postfix, called vmailer at the time, showed up with privsep via other
> forms of object movement, which is privsep program #3. (openssh then
> showed up as privsep program #4. In my version of history, privsep
> program #1 is the BSD auth subsystem, which is a piece of libc executing
> gid-hidden setuid/setgid-if-needed service programs with their own
> address spaces). Many years later, sendmail even grew some aspects of
> privsep. But exim? No...... it's a newer piece of software using
> old design rules.
>
> It's a bad piece of software to expose users to, via the ports/packages.
> Perhaps right after the ides of March next year, we should just move exim
> into base.
>

Re: Update games/wtf(6) to wtf-20230906

On 2023/09/30 12:40, Marcus MERIGHI wrote:
> Hello,
>
> the following would update wtf(6) to 20230906 (from 20230828).
> Does this need a quirk because the package name changes?

changes in what way?

> Marcus
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/games/wtf/Makefile,v
> retrieving revision 1.112
> diff -u -p -u -r1.112 Makefile
> --- Makefile 26 Sep 2023 09:41:43 -0000 1.112
> +++ Makefile 30 Sep 2023 10:14:41 -0000
> @@ -1,6 +1,6 @@
> COMMENT = translate common internet acronyms
>
> -DISTNAME = wtf-20230804
> +DISTNAME = wtf-20230906
> CATEGORIES = games
>
> HOMEPAGE = https://sourceforge.net/projects/bsdwtf/
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/games/wtf/distinfo,v
> retrieving revision 1.104
> diff -u -p -u -r1.104 distinfo
> --- distinfo 8 Aug 2023 22:53:04 -0000 1.104
> +++ distinfo 30 Sep 2023 10:14:41 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (wtf-20230804.tar.gz) = hVuTsrml1pxQrdLa8SWWi6AZo07t7vwKBk+wficGbkE=
> -SIZE (wtf-20230804.tar.gz) = 31535
> +SHA256 (wtf-20230906.tar.gz) = ed9c1fa927fcd878cce955fb0bdc586876ee1ae234666be75c3bbd6e5b2a094b
> +SIZE (wtf-20230906.tar.gz) = 31564
>

Re: Bought a new Intel laptop? Test packages!

On Sat, Sep 30, 2023 at 12:42:53PM +0200, Theo Buehler wrote:

> > I ran into a similar backtrace with Taisei [0]. Most seemingly it needs
> > to USE_NOBTCFI=Yes as our Boost sits at 1.80.0, while CET was introduced
> > in boost::context at 1.81.0 and updating Boost is not an option at this
> > point.
> >
> > I successfully tested it with USE_NOBTCFI.
> >
> > [0]: https://github.com/taisei-project/koishi/issues/6#issue-1888944976
> >
>
> Committed this slightly tweaked diff, thanks. REVISION bump is needed
> since the package changed. Maybe USE_NOBTCFI-amd64 would be enough, but
> I think at this point in the cycle it's better to play it safe.

Great! Please commit. I'll make sure it gets removed on the first
update after boost 1.81 is in-tree.

-Otto

>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/net/powerdns_recursor/Makefile,v
> retrieving revision 1.45
> diff -u -p -r1.45 Makefile
> --- Makefile 27 Sep 2023 14:18:29 -0000 1.45
> +++ Makefile 30 Sep 2023 10:38:58 -0000
> @@ -4,6 +4,7 @@ V= 4.9.1
> DISTNAME= pdns-recursor-${V}
> EXTRACT_SUFX = .tar.bz2
> PKGNAME= powerdns-recursor-${V}
> +REVISION= 0
>
> CATEGORIES= net
>
> @@ -11,6 +12,9 @@ HOMEPAGE= https://www.powerdns.com/
>
> # GPLv2 only, OpenSSL exemption
> PERMIT_PACKAGE= Yes
> +
> +# SIGILL on startup because of boost::context. Needed until boost >= 1.81.
> +USE_NOBTCFI= Yes
>
> WANTLIB+= ${COMPILER_LIBCXX} boost_context-mt boost_filesystem-mt
> WANTLIB+= boost_system-mt boost_thread-mt c crypto curl fstrm m

Re: Possible use after free in fvwm3 [Re: sysutils/rofi sometimes coredumps in __vfprintf (+ similar crash in fvwm3)]

On Sat, Sep 30, 2023 at 11:43:10AM +0100, Thomas Adam wrote:
> On Sat, 30 Sept 2023 at 11:32, Theo Buehler <tb@theobuehler.org> wrote:
>
> Hey all,
>
> > ===================================================================
> > RCS file: patches/patch-fvwm_infostore_c
> > diff -N patches/patch-fvwm_infostore_c
> > --- /dev/null 1 Jan 1970 00:00:00 -0000
> > +++ patches/patch-fvwm_infostore_c 30 Sep 2023 10:16:21 -0000
> > @@ -0,0 +1,24 @@
> > +Avoid use-after-free caused by LoadGlobalState() freeing the key
> > +that was just inserted. Fix this by always copying the key and
> > +avoiding a leak in the only other caller of insert_metainfo()
>
> Thanks, Theo. I think you're right -- I've tested this a few times
> and it hasn't broken things for me.
>
> I've merged this to 'main' -- if someone wishes to do any testing of
> their own, please do.

Great. I've committed this to the port, so fvwm3-1.0.8p0 should fix it.

Re: Possible use after free in fvwm3 [Re: sysutils/rofi sometimes coredumps in __vfprintf (+ similar crash in fvwm3)]

On Sat, 30 Sept 2023 at 11:32, Theo Buehler <tb@theobuehler.org> wrote:

Hey all,

> ===================================================================
> RCS file: patches/patch-fvwm_infostore_c
> diff -N patches/patch-fvwm_infostore_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-fvwm_infostore_c 30 Sep 2023 10:16:21 -0000
> @@ -0,0 +1,24 @@
> +Avoid use-after-free caused by LoadGlobalState() freeing the key
> +that was just inserted. Fix this by always copying the key and
> +avoiding a leak in the only other caller of insert_metainfo()

Thanks, Theo. I think you're right -- I've tested this a few times
and it hasn't broken things for me.

I've merged this to 'main' -- if someone wishes to do any testing of
their own, please do.

Kindly,
Thomas

Re: Bought a new Intel laptop? Test packages!

> I ran into a similar backtrace with Taisei [0]. Most seemingly it needs
> to USE_NOBTCFI=Yes as our Boost sits at 1.80.0, while CET was introduced
> in boost::context at 1.81.0 and updating Boost is not an option at this
> point.
>
> I successfully tested it with USE_NOBTCFI.
>
> [0]: https://github.com/taisei-project/koishi/issues/6#issue-1888944976
>

Committed this slightly tweaked diff, thanks. REVISION bump is needed
since the package changed. Maybe USE_NOBTCFI-amd64 would be enough, but
I think at this point in the cycle it's better to play it safe.

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/powerdns_recursor/Makefile,v
retrieving revision 1.45
diff -u -p -r1.45 Makefile
--- Makefile 27 Sep 2023 14:18:29 -0000 1.45
+++ Makefile 30 Sep 2023 10:38:58 -0000
@@ -4,6 +4,7 @@ V= 4.9.1
DISTNAME= pdns-recursor-${V}
EXTRACT_SUFX = .tar.bz2
PKGNAME= powerdns-recursor-${V}
+REVISION= 0

CATEGORIES= net

@@ -11,6 +12,9 @@ HOMEPAGE= https://www.powerdns.com/

# GPLv2 only, OpenSSL exemption
PERMIT_PACKAGE= Yes
+
+# SIGILL on startup because of boost::context. Needed until boost >= 1.81.
+USE_NOBTCFI= Yes

WANTLIB+= ${COMPILER_LIBCXX} boost_context-mt boost_filesystem-mt
WANTLIB+= boost_system-mt boost_thread-mt c crypto curl fstrm m

Update games/wtf(6) to wtf-20230906

Hello,

the following would update wtf(6) to 20230906 (from 20230828).
Does this need a quirk because the package name changes?

Marcus

Index: Makefile
===================================================================
RCS file: /cvs/ports/games/wtf/Makefile,v
retrieving revision 1.112
diff -u -p -u -r1.112 Makefile
--- Makefile 26 Sep 2023 09:41:43 -0000 1.112
+++ Makefile 30 Sep 2023 10:14:41 -0000
@@ -1,6 +1,6 @@
COMMENT = translate common internet acronyms

-DISTNAME = wtf-20230804
+DISTNAME = wtf-20230906
CATEGORIES = games

HOMEPAGE = https://sourceforge.net/projects/bsdwtf/
Index: distinfo
===================================================================
RCS file: /cvs/ports/games/wtf/distinfo,v
retrieving revision 1.104
diff -u -p -u -r1.104 distinfo
--- distinfo 8 Aug 2023 22:53:04 -0000 1.104
+++ distinfo 30 Sep 2023 10:14:41 -0000
@@ -1,2 +1,2 @@
-SHA256 (wtf-20230804.tar.gz) = hVuTsrml1pxQrdLa8SWWi6AZo07t7vwKBk+wficGbkE=
-SIZE (wtf-20230804.tar.gz) = 31535
+SHA256 (wtf-20230906.tar.gz) = ed9c1fa927fcd878cce955fb0bdc586876ee1ae234666be75c3bbd6e5b2a094b
+SIZE (wtf-20230906.tar.gz) = 31564

keepassxc-2.7 + Hardware Key

Hi, anyone using keepassxc-2.7.4p2 with a hardware dongle - preferably
opensource or DIY type - succesfully in OpenBSD?


--

Fabio

Possible use after free in fvwm3 [Re: sysutils/rofi sometimes coredumps in __vfprintf (+ similar crash in fvwm3)]

Cc:

+ Thomas Adam, Michael for fvwm3 expertise
- jasper since this is no longer about rofi

> > As a side note - yesterday I got very suspicious crash in fvwm3
> > during simple fvwm restart, I can't reproduce it, but the bt also had
> > __vfprintf in it, fvwm3 dev's said that it was very strange segfault and
> > they have no idea what has happened, but with fvwm the snapshot wasn't
> > very new.
> >
> > Reading symbols from fvwm3...
> > Reading symbols from /usr/local/bin/.debug/fvwm3.dbg...
> > [New process 532945]
> > Core was generated by `fvwm3'.
> > Program terminated with signal SIGSEGV, Segmentation fault.
> > #0 strlen () at /usr/src/lib/libc/arch/amd64/string/strlen.S:125
> > 125 movq (%rax),%rdx /* get bytes to check */
> > (gdb) bt
> > #0 strlen () at /usr/src/lib/libc/arch/amd64/string/strlen.S:125
> > #1 0x00000141784fd6d8 in __vfprintf (fp=<optimized out>, fmt0=<optimized out>, ap=<optimized out>) at /usr/src/lib/libc/stdio/vfprintf.c:877
> > #2 0x00000141784fa996 in _libc_vfprintf (fp=0x14178548630 <usual>, fmt0=0x13f0429b0be " [KEY] %s\n", ap=0x7a1e8b73bb80) at /usr/src/lib/libc/stdio/vfprintf.c:263
> > #3 0x000001417852784c in _libc_fprintf (fp=0x14169019ff0, fmt=0x0) at /usr/src/lib/libc/stdio/fprintf.c:44
> > #4 0x0000013f04319b60 in SaveGlobalState (f=0x14178548630 <usual>) at session.c:183
>
> use egdb to go to this frame (f 4) and inspect what it's doing there.
> It could be another not-NUL terminated string or some other garbage
> pointer.

I think it's a garbage pointer due to a UAF free in SaveGlobalState():

https://github.com/fvwmorg/fvwm3/blob/main/fvwm/session.c#L183

prints the key from the MetaInfo list. That key was likely inserted by
insert_metainfo() in LoadGlobalState() earlier (as a key not already
present):

https://github.com/fvwmorg/fvwm3/blob/main/fvwm/session.c#L1231

and then freed right afterward.

insert_metainfo() has dubious ownership handling leaving the caller
clueless whether it should free the key that was passed or not (since
the caller has no way to know whether the key was already present
without querying beforehand):

If the key was already present in the MetaInfo list, the value is copied
and the caller needs to free the key. If not, the value is copied and
ownership of the key is taken:

https://github.com/fvwmorg/fvwm3/blob/main/fvwm/infostore.c#L81

I think this diff should fix this problem: always copy the key and make
sure it's freed in the other caller. But I don't use fvwm3 and don't
know how to reproduce, so this was only compile tested.

Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/fvwm3/Makefile,v
retrieving revision 1.11
diff -u -p -r1.11 Makefile
--- Makefile 27 Sep 2023 20:37:05 -0000 1.11
+++ Makefile 30 Sep 2023 10:17:19 -0000
@@ -2,6 +2,7 @@ COMMENT= multiple virtual desktop window

VERSION= 1.0.8
DISTNAME= fvwm3-${VERSION}
+REVISION= 0

CATEGORIES= x11

Index: patches/patch-fvwm_infostore_c
===================================================================
RCS file: patches/patch-fvwm_infostore_c
diff -N patches/patch-fvwm_infostore_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-fvwm_infostore_c 30 Sep 2023 10:16:21 -0000
@@ -0,0 +1,24 @@
+Avoid use-after-free caused by LoadGlobalState() freeing the key
+that was just inserted. Fix this by always copying the key and
+avoiding a leak in the only other caller of insert_metainfo()
+
+Index: fvwm/infostore.c
+--- fvwm/infostore.c.orig
++++ fvwm/infostore.c
+@@ -78,7 +78,7 @@ void insert_metainfo(char *key, char *value)
+
+ /* It's a new item, add it to the list. */
+ mi_new = new_metainfo();
+- mi_new->key = key;
++ mi_new->key = fxstrdup(key);
+ CopyString(&mi_new->value, value);
+
+ mi_new->next = mi_store;
+@@ -192,6 +192,7 @@ void CMD_InfoStoreAdd(F_CMD_ARGS)
+ }
+
+ insert_metainfo(key, value);
++ free(key);
+ free(value);
+
+ return;

Re: Bought a new Intel laptop? Test packages!

Otto Moerbeek <otto@drijf.net> wrote:
> I can only guess about powerdns_recursor here, ads I do not have a
> modern Intel machine: it's the context switch assembly in boot-md. I
> have no clue yet how to fix this, I did not follow the IBT
> developments closely. Sadly I'll also be leaving for a holiday for a
> week this weekend. So I'd be really grateful if somebody else could
> take a look at powerdns_recursor and boost-md.
>
> -Otto

Backtrace:

Program terminated with signal SIGILL, Illegal instruction.
#0 pdns_makecontext(pdns_ucontext_t&, std::__1::function<void ()>&) (ctx=..., start=...) at ./mtasker_fcontext.cc:239
239 ctx.uc_mcontext = res.fctx;
[Current thread is 1 (process 298693)]
(gdb) bt
#0 pdns_makecontext(pdns_ucontext_t&, std::__1::function<void ()>&) (ctx=..., start=...) at ./mtasker_fcontext.cc:239
#1 0x00000f1f7fa79595 in MTasker<std::__1::shared_ptr<PacketID>, std::__1::vector<unsigned char, noinit_adaptor<std::__1::allocator<unsigned char> > >, PacketIDCompare>::makeThread (this=0xf22481f1000, start=<optimized out>, val=<optimized out>) at ./mtasker.cc:303
#2 0x00000f1f7fafef34 in recLoop () at rec-main.cc:2592
#3 0x00000f1f7fad2a3c in recursorThread () at rec-main.cc:2787
#4 0x00000f1f7fb0af0b in RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0::operator()() const (this=<optimized out>)
at rec-main.cc:211
#5 std::__1::__invoke<RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0>(RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0&&) (__f=...) at /usr/include/c++/v1/type_traits:3918
#6 std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0>&, std::__1::__tuple_indices<>) (__t=...) at /usr/include/c++/v1/thread:280
#7 std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, RecThreadInfo::start(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::map<unsigned int, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> > > > > const&, std::__1::shared_ptr<Logr::Logger> const&)::$_0> >(void*) (__vp=0xf222cae4060) at /usr/include/c++/v1/thread:291
#8 0x00000f2196619025 in _rthread_start (v=<optimized out>) at /usr/src/lib/librthread/rthread.c:96
#9 0x00000f21f72db17a in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:86

I ran into a similar backtrace with Taisei [0]. Most seemingly it needs
to USE_NOBTCFI=Yes as our Boost sits at 1.80.0, while CET was introduced
in boost::context at 1.81.0 and updating Boost is not an option at this
point.

I successfully tested it with USE_NOBTCFI.

[0]: https://github.com/taisei-project/koishi/issues/6#issue-1888944976


diff /usr/ports
commit - ee7b757b31af9f695e90108988182d450e1758e9
path + /usr/ports
blob - 3128ced143951b4ee2ac8ffdd1a0e8372d26bc28
file + net/powerdns_recursor/Makefile
--- net/powerdns_recursor/Makefile
+++ net/powerdns_recursor/Makefile
@@ -12,6 +12,9 @@ HOMEPAGE= https://www.powerdns.com/
# GPLv2 only, OpenSSL exemption
PERMIT_PACKAGE= Yes

+# SIGILL on startup because of boost::context.
+USE_NOBTCFI= Yes
+
WANTLIB+= ${COMPILER_LIBCXX} boost_context-mt boost_filesystem-mt
WANTLIB+= boost_system-mt boost_thread-mt c crypto curl fstrm m
WANTLIB+= sodium ssl z

Re: update games/taisei to 1.4

ftr, it still works fine for me.

Omar Polo <op@omarpolo.com> wrote:
> Index: Makefile
> ===================================================================
> RCS file: /home/cvs/ports/games/taisei/Makefile,v
> retrieving revision 1.16
> diff -u -p -r1.16 Makefile
> --- Makefile 26 Sep 2023 09:41:42 -0000 1.16
> +++ Makefile 30 Sep 2023 07:52:30 -0000
> @@ -2,28 +2,34 @@
> # modern video cards
> ONLY_FOR_ARCHS = amd64 aarch64 i386
>
> +# the koishi coroutine library needs boost 1.81.0+ for BTI
> +# https://github.com/taisei-project/koishi/issues/6
> +USE_NOBTCFI = Yes
> +
> COMMENT = clone of the touhou games
>
> -VERSION = v1.3.2
> +VERSION = 1.4
> DISTNAME = taisei-${VERSION}
> -PKGNAME = taisei-${VERSION:S/^v//}
> -REVISION = 4
>
> CATEGORIES = games
>
> HOMEPAGE = https://taisei-project.org/
>
> +MAINTAINER = Omar Polo <op@openbsd.org>
> +
> # MIT
> # Soundtrack: CC-BY 4.0 / Photos: PD and CC-0
> PERMIT_PACKAGE = Yes
>
> -WANTLIB += SDL2 SDL2_mixer c crypto freetype m opusfile png webpdecoder
> -WANTLIB += z
> +WANTLIB += SDL2 c c++ crypto freetype m opusfile png shaderc_shared
> +WANTLIB += spirv-cross-c-shared webpdecoder z zstd
>
> -SITES= https://github.com/taisei-project/taisei/releases/download/${VERSION}/
> +SITES = https://github.com/taisei-project/taisei/releases/download/v${VERSION}/
>
> EXTRACT_SUFX= .tar.xz
>
> +COMPILER = base-clang ports-gcc
> +
> MODULES = devel/meson \
> lang/python
>
> @@ -37,17 +43,24 @@ RUN_DEPENDS = devel/desktop-file-utils
>
> LIB_DEPENDS = audio/opusfile \
> devel/sdl2>=2.0.5 \
> - devel/sdl2-mixer>=2.0.4 \
> graphics/libwebp>=0.5 \
> - graphics/png>=1.5.0
> -
> -# Don't include docs
> -# Don't zip the ressources, it avoids using archivers/libzip
> -# Don't call git(1), use upstream version as version string
> -CONFIGURE_ARGS += -Ddocs=false \
> - -Denable_zip=false \
> - -Dversion_fallback=${VERSION}
> + graphics/png>=1.5.0 \
> + graphics/shaderc \
> + graphics/spirv-cross
> +
> +CONFIGURE_ARGS += -Ddefault_library=shared \
> + -Ddocs=disabled \
> + -Dinstall_macos_bundle=disabled \
> + -Dinstall_relocatable=disabled \
> + -Dpackage_data=disabled \
> + -Dvfs_zip=disabled
> +
> +# don't statically link to these
> +.for lib in freetype glslang libpng libwebp libzip libzstd ogg opus opusfile \
> + sdl2 shaderc SPIRV-Cross vorbis zlib
> +CONFIGURE_ARGS += -D${lib}:default_library=shared
> +.endfor
>
> -NO_TEST = Yes
> +DEBUG_PACKAGES = ${BUILD_PACKAGES}
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /home/cvs/ports/games/taisei/distinfo,v
> retrieving revision 1.3
> diff -u -p -r1.3 distinfo
> --- distinfo 10 Dec 2021 13:32:31 -0000 1.3
> +++ distinfo 8 Sep 2023 13:26:41 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (taisei-v1.3.2.tar.xz) = 28BfG1wxmB2HERMKwoM1W3v61AOJX0CWprt+mj1zo7w=
> -SIZE (taisei-v1.3.2.tar.xz) = 70481856
> +SHA256 (taisei-1.4.tar.xz) = zAJa1zJGeQ4aU5eMRhKzqv/A06z7/RgaOeb72FPKmb4=
> +SIZE (taisei-1.4.tar.xz) = 219573588
> Index: patches/patch-external_koishi_src_stack_alloc_c
> ===================================================================
> RCS file: patches/patch-external_koishi_src_stack_alloc_c
> diff -N patches/patch-external_koishi_src_stack_alloc_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-external_koishi_src_stack_alloc_c 9 Sep 2023 09:58:06 -0000
> @@ -0,0 +1,14 @@
> +fix koishi' coroutine stack allocation: needs MAP_STACK
> +
> +Index: external/koishi/src/stack_alloc.c
> +--- external/koishi/src/stack_alloc.c.orig
> ++++ external/koishi/src/stack_alloc.c
> +@@ -39,7 +39,7 @@ static inline void *alloc_stack_mem(size_t size) {
> + #if defined KOISHI_HAVE_WIN32API
> + return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
> + #elif defined KOISHI_HAVE_MMAP
> +- return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | KOISHI_MAP_ANONYMOUS, -1, 0);
> ++ return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_STACK | MAP_PRIVATE | KOISHI_MAP_ANONYMOUS, -1, 0);
> + #elif defined KOISHI_HAVE_ALIGNED_ALLOC
> + return aligned_alloc(koishi_util_page_size(), size);
> + #elif defined KOISHI_HAVE_POSIX_MEMALIGN
> Index: patches/patch-scripts_taiseilib_version_py
> ===================================================================
> RCS file: /home/cvs/ports/games/taisei/patches/patch-scripts_taiseilib_version_py,v
> retrieving revision 1.2
> diff -u -p -r1.2 patch-scripts_taiseilib_version_py
> --- patches/patch-scripts_taiseilib_version_py 11 Mar 2022 19:05:00 -0000 1.2
> +++ patches/patch-scripts_taiseilib_version_py 8 Sep 2023 19:31:37 -0000
> @@ -1,8 +1,8 @@
> Index: scripts/taiseilib/version.py
> --- scripts/taiseilib/version.py.orig
> +++ scripts/taiseilib/version.py
> -@@ -62,6 +62,9 @@ def get(*, rootdir=None, fallback=None, args=common.de
> - rootdir = pathlib.Path(__file__).parent
> +@@ -77,6 +77,9 @@ def get(*, rootdir=None, fallback=VERSION_FALLBACK, ar
> + return Version(version_str)
>
> try:
> + # XXX do not call git, use port-provided fallback instead
> Index: pkg/PLIST
> ===================================================================
> RCS file: /home/cvs/ports/games/taisei/pkg/PLIST,v
> retrieving revision 1.6
> diff -u -p -r1.6 PLIST
> --- pkg/PLIST 11 Mar 2022 19:05:00 -0000 1.6
> +++ pkg/PLIST 9 Sep 2023 08:32:44 -0000
> @@ -1,57 +1,63 @@
> @bin bin/taisei
> -share/applications/taisei-replay-viewer.desktop
> -share/applications/taisei.desktop
> +share/applications/org.taisei_project.Taisei.desktop
> +share/applications/org.taisei_project.Taisei.tsr.desktop
> +share/doc/taisei/
> +share/doc/taisei/COPYING
> +share/icons/hicolor/128x128/apps/org.taisei_project.Taisei.png
> share/icons/hicolor/128x128/apps/taisei.png
> +share/icons/hicolor/128x128/mimetypes/org.taisei_project.Taisei.tsr.png
> +share/icons/hicolor/128x128/mimetypes/taisei-replay.png
> +share/icons/hicolor/256x256/apps/org.taisei_project.Taisei.png
> +share/icons/hicolor/256x256/apps/taisei.png
> +share/icons/hicolor/256x256/mimetypes/org.taisei_project.Taisei.tsr.png
> share/icons/hicolor/256x256/mimetypes/taisei-replay.png
> -share/mime/packages/taisei.xml
> +share/icons/hicolor/32x32/apps/org.taisei_project.Taisei.png
> +share/icons/hicolor/32x32/apps/taisei.png
> +share/icons/hicolor/32x32/mimetypes/org.taisei_project.Taisei.tsr.png
> +share/icons/hicolor/32x32/mimetypes/taisei-replay.png
> +share/icons/hicolor/512x512/apps/org.taisei_project.Taisei.png
> +share/icons/hicolor/512x512/apps/taisei.png
> +share/icons/hicolor/512x512/mimetypes/org.taisei_project.Taisei.tsr.png
> +share/icons/hicolor/512x512/mimetypes/taisei-replay.png
> +share/icons/hicolor/64x64/apps/org.taisei_project.Taisei.png
> +share/icons/hicolor/64x64/apps/taisei.png
> +share/icons/hicolor/64x64/mimetypes/org.taisei_project.Taisei.tsr.png
> +share/icons/hicolor/64x64/mimetypes/taisei-replay.png
> +share/metainfo/
> +share/metainfo/org.taisei_project.Taisei.appdata.xml
> +share/mime/packages/org.taisei_project.Taisei.xml
> share/taisei/
> share/taisei/00-taisei.pkgdir/
> share/taisei/00-taisei.pkgdir/.nocompress
> share/taisei/00-taisei.pkgdir/bgm/
> -share/taisei/00-taisei.pkgdir/bgm/bonus0.bgm
> share/taisei/00-taisei.pkgdir/bgm/bonus0.opus
> -share/taisei/00-taisei.pkgdir/bgm/credits.bgm
> share/taisei/00-taisei.pkgdir/bgm/credits.opus
> -share/taisei/00-taisei.pkgdir/bgm/ending.bgm
> share/taisei/00-taisei.pkgdir/bgm/ending.opus
> -share/taisei/00-taisei.pkgdir/bgm/menu.bgm
> +share/taisei/00-taisei.pkgdir/bgm/gameover.opus
> +share/taisei/00-taisei.pkgdir/bgm/intro.opus
> share/taisei/00-taisei.pkgdir/bgm/menu.opus
> -share/taisei/00-taisei.pkgdir/bgm/scuttle.bgm
> share/taisei/00-taisei.pkgdir/bgm/scuttle.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage1/
> -share/taisei/00-taisei.pkgdir/bgm/stage1.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage1/boss.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage1/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage1boss.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage2/
> -share/taisei/00-taisei.pkgdir/bgm/stage2.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage2/boss.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage2/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage2boss.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage3/
> -share/taisei/00-taisei.pkgdir/bgm/stage3.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage3/boss.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage3/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage3boss.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage4/
> -share/taisei/00-taisei.pkgdir/bgm/stage4.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage4/boss.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage4/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage4boss.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage5/
> -share/taisei/00-taisei.pkgdir/bgm/stage5.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage5/boss.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage5/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage5boss.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage6/
> -share/taisei/00-taisei.pkgdir/bgm/stage6.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage6/boss_phase1.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage6/boss_phase2.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage6/boss_phase3.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage6/stage.opus
> -share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase1.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase2.bgm
> -share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase3.bgm
> +share/taisei/00-taisei.pkgdir/bgm/stage1.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage1boss.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage2.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage2boss.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage3.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage3boss.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage4.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage4boss.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage5.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage5boss.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage6.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase1.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase2.opus
> +share/taisei/00-taisei.pkgdir/bgm/stage6boss_phase3.opus
> +share/taisei/00-taisei.pkgdir/demos/
> +share/taisei/00-taisei.pkgdir/demos/00_stg3_reimuA_hard.tsr
> +share/taisei/00-taisei.pkgdir/demos/01_stg6_youmuA_normal.tsr
> +share/taisei/00-taisei.pkgdir/demos/02_stg1_marisaA_lunatic.tsr
> +share/taisei/00-taisei.pkgdir/demos/03_stg5_reimuB_normal.tsr
> +share/taisei/00-taisei.pkgdir/demos/04_stg2_youmuB_easy.tsr
> +share/taisei/00-taisei.pkgdir/demos/05_stg4_marisaB_normal.tsr
> share/taisei/00-taisei.pkgdir/fonts/
> share/taisei/00-taisei.pkgdir/fonts/Exo2-Regular-CHANGES
> share/taisei/00-taisei.pkgdir/fonts/Exo2-Regular-LICENSE
> @@ -66,16 +72,15 @@ share/taisei/00-taisei.pkgdir/fonts/mono
> share/taisei/00-taisei.pkgdir/fonts/small.font
> share/taisei/00-taisei.pkgdir/fonts/standard.font
> share/taisei/00-taisei.pkgdir/gfx/
> -share/taisei/00-taisei.pkgdir/gfx/abstract_brown.webp
> +share/taisei/00-taisei.pkgdir/gfx/abstract_brown.basis
> +share/taisei/00-taisei.pkgdir/gfx/atlas_common_0.alphamap.png
> share/taisei/00-taisei.pkgdir/gfx/atlas_common_0.tex
> share/taisei/00-taisei.pkgdir/gfx/atlas_common_0.webp
> share/taisei/00-taisei.pkgdir/gfx/atlas_common_ui_0.tex
> share/taisei/00-taisei.pkgdir/gfx/atlas_common_ui_0.webp
> -share/taisei/00-taisei.pkgdir/gfx/atlas_gray16_0.png
> -share/taisei/00-taisei.pkgdir/gfx/atlas_gray16_0.tex
> share/taisei/00-taisei.pkgdir/gfx/atlas_huge_0.tex
> share/taisei/00-taisei.pkgdir/gfx/atlas_huge_0.webp
> -share/taisei/00-taisei.pkgdir/gfx/atlas_portraits_0.alphamap.webp
> +share/taisei/00-taisei.pkgdir/gfx/atlas_portraits_0.alphamap.png
> share/taisei/00-taisei.pkgdir/gfx/atlas_portraits_0.tex
> share/taisei/00-taisei.pkgdir/gfx/atlas_portraits_0.webp
> share/taisei/00-taisei.pkgdir/gfx/boss/
> @@ -206,18 +211,145 @@ share/taisei/00-taisei.pkgdir/gfx/boss/w
> share/taisei/00-taisei.pkgdir/gfx/boss_circle.spr
> share/taisei/00-taisei.pkgdir/gfx/boss_indicator.spr
> share/taisei/00-taisei.pkgdir/gfx/boss_spellcircle0.spr
> -share/taisei/00-taisei.pkgdir/gfx/cell_noise.webp
> +share/taisei/00-taisei.pkgdir/gfx/cell_noise.basis
> +share/taisei/00-taisei.pkgdir/gfx/credits/
> +share/taisei/00-taisei.pkgdir/gfx/credits/tower.material
> +share/taisei/00-taisei.pkgdir/gfx/credits/tower_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/credits/tower_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/credits/tower_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/credits/tower_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/hakurei.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/moriya.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/netherworld.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/sdm.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/locations/tower.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_bad/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_bad/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_bad/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_extra/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_extra/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_extra/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_good/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_good/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/marisa_good/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/opening/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/opening/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/opening/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/opening/03.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/opening/04.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/paper.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_bad/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_bad/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_bad/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_extra/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_extra/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_extra/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_good/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_good/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_good/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/reimu_good/03.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_bad/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_bad/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_bad/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_extra/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_extra/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_extra/02.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_good/
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_good/01.basis
> +share/taisei/00-taisei.pkgdir/gfx/cutscenes/youmu_good/02.basis
> share/taisei/00-taisei.pkgdir/gfx/dialog/
> share/taisei/00-taisei.pkgdir/gfx/dialog/cirno.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/cirno_face_angry.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/cirno_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/cirno_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/cirno_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/elly.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_angry.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_blush.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_eyes_closed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_shouting.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_face_smug.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/elly_variant_beaten.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/hina.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/hina_face_concerned.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/hina_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/hina_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/hina_face_serious.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/hina_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/iku.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_face_eyes_closed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_face_serious.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_face_smile.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/iku_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_dissatisfied.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_puzzled.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_tsun.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_face_tsun_blush.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/kurumi_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/marisa.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_happy.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_inquisitive.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_puzzled.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_smug.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_surprised.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_sweat_smile.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/marisa_face_unamused.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/reimu.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_annoyed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_assertive.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_happy.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_irritated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_outraged.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_puzzled.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_sigh.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_smug.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_surprised.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_unamused.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/reimu_face_unsettled.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/scuttle.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/scuttle_face_normal.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_calm.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_outraged.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_outraged_unlit.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_face_proud.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/wriggle_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/dialog/youmu.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_chuuni.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_eeeeh.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_embarrassed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_eyes_closed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_happy.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_puzzled.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_relaxed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_sigh.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_smug.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_surprised.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/youmu_face_unamused.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_eyes_closed.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_normal.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_sad.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_sigh.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_smug.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_face_surprised.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_misc_code_mask.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_misc_code_mask_variant_defeated.spr
> +share/taisei/00-taisei.pkgdir/gfx/dialog/yumemi_variant_defeated.spr
> share/taisei/00-taisei.pkgdir/gfx/difficulty/
> share/taisei/00-taisei.pkgdir/gfx/difficulty/easy.spr
> share/taisei/00-taisei.pkgdir/gfx/difficulty/hard.spr
> @@ -229,13 +361,31 @@ share/taisei/00-taisei.pkgdir/gfx/enemy/
> share/taisei/00-taisei.pkgdir/gfx/enemy/bigfairy.frame0001.spr
> share/taisei/00-taisei.pkgdir/gfx/enemy/bigfairy.frame0002.spr
> share/taisei/00-taisei.pkgdir/gfx/enemy/bigfairy.frame0003.spr
> -share/taisei/00-taisei.pkgdir/gfx/enemy/fairy.ani
> -share/taisei/00-taisei.pkgdir/gfx/enemy/fairy.frame0000.spr
> -share/taisei/00-taisei.pkgdir/gfx/enemy/fairy.frame0001.spr
> -share/taisei/00-taisei.pkgdir/gfx/enemy/fairy.frame0002.spr
> -share/taisei/00-taisei.pkgdir/gfx/enemy/fairy.frame0003.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_blue.ani
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_blue.frame0000.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_blue.frame0001.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_blue.frame0002.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_blue.frame0003.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_red.ani
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_red.frame0000.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_red.frame0001.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_red.frame0002.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/fairy_red.frame0003.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/hugefairy.ani
> +share/taisei/00-taisei.pkgdir/gfx/enemy/hugefairy.frame0000.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/hugefairy.frame0001.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/hugefairy.frame0002.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/hugefairy.frame0003.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/superfairy.ani
> +share/taisei/00-taisei.pkgdir/gfx/enemy/superfairy.frame0000.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/superfairy.frame0001.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/superfairy.frame0002.spr
> +share/taisei/00-taisei.pkgdir/gfx/enemy/superfairy.frame0003.spr
> share/taisei/00-taisei.pkgdir/gfx/enemy/swirl.spr
> share/taisei/00-taisei.pkgdir/gfx/fairy_circle.spr
> +share/taisei/00-taisei.pkgdir/gfx/fairy_circle_big.spr
> +share/taisei/00-taisei.pkgdir/gfx/fairy_circle_big_and_mean.spr
> +share/taisei/00-taisei.pkgdir/gfx/fairy_circle_red.spr
> share/taisei/00-taisei.pkgdir/gfx/fire.ani
> share/taisei/00-taisei.pkgdir/gfx/fire.frame0000.spr
> share/taisei/00-taisei.pkgdir/gfx/fire.frame0001.spr
> @@ -264,13 +414,16 @@ share/taisei/00-taisei.pkgdir/gfx/fire.f
> share/taisei/00-taisei.pkgdir/gfx/fire.frame0024.spr
> share/taisei/00-taisei.pkgdir/gfx/flare.webp
> share/taisei/00-taisei.pkgdir/gfx/focus.spr
> -share/taisei/00-taisei.pkgdir/gfx/gaplight.png
> +share/taisei/00-taisei.pkgdir/gfx/fractal_noise.webp
> +share/taisei/00-taisei.pkgdir/gfx/gaplight.basis
> share/taisei/00-taisei.pkgdir/gfx/gaplight.tex
> share/taisei/00-taisei.pkgdir/gfx/hakkero.spr
> share/taisei/00-taisei.pkgdir/gfx/hud/
> share/taisei/00-taisei.pkgdir/gfx/hud.webp
> share/taisei/00-taisei.pkgdir/gfx/hud/heart.spr
> share/taisei/00-taisei.pkgdir/gfx/hud/star.spr
> +share/taisei/00-taisei.pkgdir/gfx/ibl_brdf_lut.basis
> +share/taisei/00-taisei.pkgdir/gfx/ibl_brdf_lut.tex
> share/taisei/00-taisei.pkgdir/gfx/item/
> share/taisei/00-taisei.pkgdir/gfx/item/bomb.spr
> share/taisei/00-taisei.pkgdir/gfx/item/bomb_indicator.spr
> @@ -291,20 +444,54 @@ share/taisei/00-taisei.pkgdir/gfx/item/v
> share/taisei/00-taisei.pkgdir/gfx/item/voltage_indicator.spr
> share/taisei/00-taisei.pkgdir/gfx/kyoukkuri.spr
> share/taisei/00-taisei.pkgdir/gfx/kyoukkuri.webp
> -share/taisei/00-taisei.pkgdir/gfx/loading.webp
> -share/taisei/00-taisei.pkgdir/gfx/marisa_bombbg.webp
> +share/taisei/00-taisei.pkgdir/gfx/loading.basis
> +share/taisei/00-taisei.pkgdir/gfx/marisa_bombbg.basis
> share/taisei/00-taisei.pkgdir/gfx/masterspark_ring.spr
> share/taisei/00-taisei.pkgdir/gfx/menu/
> share/taisei/00-taisei.pkgdir/gfx/menu/arrow.spr
> share/taisei/00-taisei.pkgdir/gfx/menu/logo.spr
> -share/taisei/00-taisei.pkgdir/gfx/menu/mainmenubg.webp
> +share/taisei/00-taisei.pkgdir/gfx/menu/mainmenubg.basis
> share/taisei/00-taisei.pkgdir/gfx/part/
> share/taisei/00-taisei.pkgdir/gfx/part/arc.spr
> share/taisei/00-taisei.pkgdir/gfx/part/blast.spr
> share/taisei/00-taisei.pkgdir/gfx/part/blast_huge_halo.spr
> share/taisei/00-taisei.pkgdir/gfx/part/blast_huge_rays.spr
> share/taisei/00-taisei.pkgdir/gfx/part/boss_shadow.spr
> -share/taisei/00-taisei.pkgdir/gfx/part/bullet_cloud.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.ani
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0000.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0001.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0002.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0003.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0004.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0005.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0006.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0007.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0008.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0009.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0010.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0011.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0012.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0013.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0014.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0015.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0016.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0017.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0018.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0019.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0020.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0021.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0022.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0023.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0024.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0025.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0026.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0027.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0028.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0029.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0030.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0031.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_clear.frame0032.spr
> +share/taisei/00-taisei.pkgdir/gfx/part/bullet_flare.spr
> share/taisei/00-taisei.pkgdir/gfx/part/fantasyseal_impact.spr
> share/taisei/00-taisei.pkgdir/gfx/part/flare.spr
> share/taisei/00-taisei.pkgdir/gfx/part/graze.spr
> @@ -365,7 +552,7 @@ share/taisei/00-taisei.pkgdir/gfx/player
> share/taisei/00-taisei.pkgdir/gfx/player/youmu.frame0008.spr
> share/taisei/00-taisei.pkgdir/gfx/player/youmu.frame0009.spr
> share/taisei/00-taisei.pkgdir/gfx/player/youmu.frame0010.spr
> -share/taisei/00-taisei.pkgdir/gfx/powersurge_flow.webp
> +share/taisei/00-taisei.pkgdir/gfx/powersurge_flow.basis
> share/taisei/00-taisei.pkgdir/gfx/proj/
> share/taisei/00-taisei.pkgdir/gfx/proj/apple.spr
> share/taisei/00-taisei.pkgdir/gfx/proj/ball.spr
> @@ -389,75 +576,299 @@ share/taisei/00-taisei.pkgdir/gfx/proj/t
> share/taisei/00-taisei.pkgdir/gfx/proj/wave.spr
> share/taisei/00-taisei.pkgdir/gfx/proj/youhoming.spr
> share/taisei/00-taisei.pkgdir/gfx/proj/youmu.spr
> -share/taisei/00-taisei.pkgdir/gfx/reimubg.webp
> -share/taisei/00-taisei.pkgdir/gfx/runes.webp
> +share/taisei/00-taisei.pkgdir/gfx/reimubg.basis
> +share/taisei/00-taisei.pkgdir/gfx/runes.basis
> share/taisei/00-taisei.pkgdir/gfx/spell.spr
> share/taisei/00-taisei.pkgdir/gfx/stage1/
> -share/taisei/00-taisei.pkgdir/gfx/stage1/cirnobg.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage1/fog.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage1/snowlayer.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage1/waterplants.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage1/cirnobg.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage1/fog.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage1/horizon.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage1/horizon.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage1/snowlayer.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage1/waterplants.basis
> share/taisei/00-taisei.pkgdir/gfx/stage2/
> -share/taisei/00-taisei.pkgdir/gfx/stage2/border.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage2/leaves.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage2/roadgrass.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage2/roadstones.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage2/spellbg1.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage2/spellbg2.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch.material
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/branch_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/envmap.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground.material
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/ground_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor.material
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/lakefloor_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves.material
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/leaves_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks.material
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/rocks_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/spellbg1.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage2/spellbg2.basis
> share/taisei/00-taisei.pkgdir/gfx/stage3/
> -share/taisei/00-taisei.pkgdir/gfx/stage3/border.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage3/spellbg1.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage3/spellbg2.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage3/wspellbg.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage3/wspellclouds.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage3/wspellswarm.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage3/envmap.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground.material
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/ground_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves.material
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/leaves_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks.material
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/rocks_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/spellbg1.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/spellbg2.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees.material
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/trees_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/wspellbg.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/wspellclouds.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage3/wspellswarm.basis
> share/taisei/00-taisei.pkgdir/gfx/stage4/
> -share/taisei/00-taisei.pkgdir/gfx/stage4/kurumibg1.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage4/kurumibg2.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage4/lake.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage4/mansion.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage4/planks.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage4/wall.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor.material
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/corridor_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground.material
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/ground_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/kurumibg1.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/kurumibg2.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion.material
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_ambient.basis.zst
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage4/mansion_roughness.tex
> share/taisei/00-taisei.pkgdir/gfx/stage5/
> -share/taisei/00-taisei.pkgdir/gfx/stage5/noise.png
> +share/taisei/00-taisei.pkgdir/gfx/stage5/envmap.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/metal.material
> +share/taisei/00-taisei.pkgdir/gfx/stage5/metal_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/metal_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/metal_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/metal_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/noise.basis
> share/taisei/00-taisei.pkgdir/gfx/stage5/noise.tex
> -share/taisei/00-taisei.pkgdir/gfx/stage5/spell_bg.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage5/spell_clouds.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage5/spell_lightning.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage5/tower.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage5/spell_bg.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/spell_clouds.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/spell_lightning.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs.material
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/stairs_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall.material
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage5/wall_roughness.tex
> share/taisei/00-taisei.pkgdir/gfx/stage6/
> share/taisei/00-taisei.pkgdir/gfx/stage6/baryon.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/baryon_center.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/baryon_connector.spr
> +share/taisei/00-taisei.pkgdir/gfx/stage6/floor.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/floor_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/floor_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/floor_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/floor_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_roughness_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/rim_roughness_ao.tex
> share/taisei/00-taisei.pkgdir/gfx/stage6/scythe.spr
> -share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_chalk.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_classic.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_modern.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage6/sky.basis.zst
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_chalk.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_classic.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_modern.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_toe.basis
> share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_toe.spr
> -share/taisei/00-taisei.pkgdir/gfx/stage6/spellbg_toe.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_roughness_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/spires_roughness_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_roughness_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/stairs_roughness_ao.tex
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/0.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/1.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/2.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/3.spr
> share/taisei/00-taisei.pkgdir/gfx/stage6/toelagrangian/4.spr
> -share/taisei/00-taisei.pkgdir/gfx/stage6/towertop.webp
> -share/taisei/00-taisei.pkgdir/gfx/stage6/towerwall.webp
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom.material
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_ambient.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_ambient.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_roughness_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_bottom_roughness_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_depth.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_depth.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_diffuse.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_diffuse.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_normal.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_normal.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_roughness.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_roughness.tex
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_roughness_ao.basis
> +share/taisei/00-taisei.pkgdir/gfx/stage6/tower_roughness_ao.tex
> +share/taisei/00-taisei.pkgdir/gfx/stageex/
> +share/taisei/00-taisei.pkgdir/gfx/stageex/bg.webp
> +share/taisei/00-taisei.pkgdir/gfx/stageex/bg_binary.webp
> +share/taisei/00-taisei.pkgdir/gfx/stageex/code.num_slices
> +share/taisei/00-taisei.pkgdir/gfx/stageex/code.tex
> +share/taisei/00-taisei.pkgdir/gfx/stageex/code.webp
> +share/taisei/00-taisei.pkgdir/gfx/stageex/dissolve_mask.webp
> share/taisei/00-taisei.pkgdir/gfx/star.spr
> -share/taisei/00-taisei.pkgdir/gfx/static.png
> +share/taisei/00-taisei.pkgdir/gfx/static.basis
> share/taisei/00-taisei.pkgdir/gfx/static.tex
> -share/taisei/00-taisei.pkgdir/gfx/titletransition.webp
> +share/taisei/00-taisei.pkgdir/gfx/titletransition.basis
> share/taisei/00-taisei.pkgdir/gfx/yinyang.spr
> -share/taisei/00-taisei.pkgdir/gfx/youmu_bombbg1.webp
> +share/taisei/00-taisei.pkgdir/gfx/youmu_bombbg1.basis
> share/taisei/00-taisei.pkgdir/meson.build
> share/taisei/00-taisei.pkgdir/models/
> -share/taisei/00-taisei.pkgdir/models/hud.obj
> -share/taisei/00-taisei.pkgdir/models/lake.obj
> -share/taisei/00-taisei.pkgdir/models/mansion.obj
> -share/taisei/00-taisei.pkgdir/models/skysphere.obj
> -share/taisei/00-taisei.pkgdir/models/tower.obj
> -share/taisei/00-taisei.pkgdir/models/towertop.obj
> -share/taisei/00-taisei.pkgdir/models/towerwall.obj
> +share/taisei/00-taisei.pkgdir/models/credits/
> +share/taisei/00-taisei.pkgdir/models/credits/metal_columns.iqm
> +share/taisei/00-taisei.pkgdir/models/credits/tower.iqm
> +share/taisei/00-taisei.pkgdir/models/cube.iqm
> +share/taisei/00-taisei.pkgdir/models/hud.iqm
> +share/taisei/00-taisei.pkgdir/models/stage2/
> +share/taisei/00-taisei.pkgdir/models/stage2/branch.iqm
> +share/taisei/00-taisei.pkgdir/models/stage2/grass.iqm
> +share/taisei/00-taisei.pkgdir/models/stage2/ground.iqm
> +share/taisei/00-taisei.pkgdir/models/stage2/leaves.iqm
> +share/taisei/00-taisei.pkgdir/models/stage2/rocks.iqm
> +share/taisei/00-taisei.pkgdir/models/stage3/
> +share/taisei/00-taisei.pkgdir/models/stage3/ground.iqm
> +share/taisei/00-taisei.pkgdir/models/stage3/leaves.iqm
> +share/taisei/00-taisei.pkgdir/models/stage3/rocks.iqm
> +share/taisei/00-taisei.pkgdir/models/stage3/trees.iqm
> +share/taisei/00-taisei.pkgdir/models/stage4/
> +share/taisei/00-taisei.pkgdir/models/stage4/corridor.iqm
> +share/taisei/00-taisei.pkgdir/models/stage4/ground.iqm
> +share/taisei/00-taisei.pkgdir/models/stage4/mansion.iqm
> +share/taisei/00-taisei.pkgdir/models/stage5/
> +share/taisei/00-taisei.pkgdir/models/stage5/metal.iqm
> +share/taisei/00-taisei.pkgdir/models/stage5/stairs.iqm
> +share/taisei/00-taisei.pkgdir/models/stage5/wall.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/
> +share/taisei/00-taisei.pkgdir/models/stage6/calabi-yau-quintic.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/floor.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/rim.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/spires.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/stairs.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/tower.iqm
> +share/taisei/00-taisei.pkgdir/models/stage6/tower_bottom.iqm
> +share/taisei/00-taisei.pkgdir/models/tower_alt_uv.iqm
> share/taisei/00-taisei.pkgdir/sfx/
> share/taisei/00-taisei.pkgdir/sfx/bomb_marisa_a.opus
> share/taisei/00-taisei.pkgdir/sfx/bomb_marisa_b.opus
> @@ -470,6 +881,7 @@ share/taisei/00-taisei.pkgdir/sfx/bossde
> share/taisei/00-taisei.pkgdir/sfx/charge_extra.opus
> share/taisei/00-taisei.pkgdir/sfx/charge_generic.opus
> share/taisei/00-taisei.pkgdir/sfx/death.opus
> +share/taisei/00-taisei.pkgdir/sfx/discharge.opus
> share/taisei/00-taisei.pkgdir/sfx/enemydeath.opus
> share/taisei/00-taisei.pkgdir/sfx/extra_bomb.opus
> share/taisei/00-taisei.pkgdir/sfx/extra_life.opus
> @@ -499,6 +911,8 @@ share/taisei/00-taisei.pkgdir/sfx/warp.o
> share/taisei/00-taisei.pkgdir/shader/
> share/taisei/00-taisei.pkgdir/shader/alpha_depth.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/alpha_depth.prog
> +share/taisei/00-taisei.pkgdir/shader/alpha_discard.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/alpha_discard.prog
> share/taisei/00-taisei.pkgdir/shader/baryon_feedback.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/baryon_feedback.prog
> share/taisei/00-taisei.pkgdir/shader/bloom.frag.glsl
> @@ -515,10 +929,26 @@ share/taisei/00-taisei.pkgdir/shader/bos
> share/taisei/00-taisei.pkgdir/shader/boss_death.prog
> share/taisei/00-taisei.pkgdir/shader/boss_zoom.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/boss_zoom.prog
> +share/taisei/00-taisei.pkgdir/shader/calabi-yau-quintic.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/calabi-yau-quintic.prog
> +share/taisei/00-taisei.pkgdir/shader/calabi-yau-quintic.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/circle_distort.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/circle_distort.prog
> -share/taisei/00-taisei.pkgdir/shader/copy_depth.frag.glsl
> -share/taisei/00-taisei.pkgdir/shader/copy_depth.prog
> +share/taisei/00-taisei.pkgdir/shader/cutscene.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/cutscene.prog
> +share/taisei/00-taisei.pkgdir/shader/envmap_reflect.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/envmap_reflect.prog
> +share/taisei/00-taisei.pkgdir/shader/extra_bg.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/extra_bg.glslh
> +share/taisei/00-taisei.pkgdir/shader/extra_bg.prog
> +share/taisei/00-taisei.pkgdir/shader/extra_tower_apply_mask.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/extra_tower_apply_mask.prog
> +share/taisei/00-taisei.pkgdir/shader/extra_tower_mask.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/extra_tower_mask.prog
> +share/taisei/00-taisei.pkgdir/shader/extra_tower_mask.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/fireparticles.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/fireparticles.prog
> +share/taisei/00-taisei.pkgdir/shader/fireparticles.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/fxaa.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/fxaa.prog
> share/taisei/00-taisei.pkgdir/shader/fxaa.vert.glsl
> @@ -536,44 +966,25 @@ share/taisei/00-taisei.pkgdir/shader/ing
> share/taisei/00-taisei.pkgdir/shader/interface/
> share/taisei/00-taisei.pkgdir/shader/interface/fxaa.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/healthbar.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/laser_pass1.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/laser_pass2.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/particle_emitter.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/pbr.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/pbr_water.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/reimu_gap.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/spellcard.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/sprite.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/sprite_pbr.glslh
> +share/taisei/00-taisei.pkgdir/shader/interface/ssr.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/standard.glslh
> share/taisei/00-taisei.pkgdir/shader/interface/tower_light.glslh
> -share/taisei/00-taisei.pkgdir/shader/laser_generic.prog
> -share/taisei/00-taisei.pkgdir/shader/laser_generic.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/lasers/
> -share/taisei/00-taisei.pkgdir/shader/lasers/accelerated.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/accelerated.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/circle.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/circle.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/common.vert.glslh
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_fermion.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_fermion.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_gluon.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_gluon.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_higgs.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_higgs.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_photon.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/elly_toe_photon.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/iku_cathode.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/iku_cathode.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/iku_lightning.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/iku_lightning.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/linear.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/linear.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/maxwell.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/maxwell.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/sine.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/sine.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/sine_expanding.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/sine_expanding.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/turning.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/turning.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/lasers/vertex_pos.glslh
> -share/taisei/00-taisei.pkgdir/shader/lasers/weird_sine.prog
> -share/taisei/00-taisei.pkgdir/shader/lasers/weird_sine.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_apply.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_apply.prog
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_apply.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_generate.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_generate.prog
> +share/taisei/00-taisei.pkgdir/shader/lasers/sdf_generate.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/lib/
> share/taisei/00-taisei.pkgdir/shader/lib/blur/
> share/taisei/00-taisei.pkgdir/shader/lib/blur/blur13.glslh
> @@ -581,12 +992,20 @@ share/taisei/00-taisei.pkgdir/shader/lib
> share/taisei/00-taisei.pkgdir/shader/lib/blur/blur5.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/blur/blur9.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/defs.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/frag_util.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/fxaa.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/hash.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/legacy_compat.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/parallaxmap.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/pbr.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/pbr_features.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/pbr_generic.frag.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/pbr_generic.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/render_context.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/sprite_default.vert.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/sprite_main.frag.glslh
> share/taisei/00-taisei.pkgdir/shader/lib/util.glslh
> +share/taisei/00-taisei.pkgdir/shader/lib/water.glslh
> share/taisei/00-taisei.pkgdir/shader/mainmenubg.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/mainmenubg.prog
> share/taisei/00-taisei.pkgdir/shader/marisa_laser.frag.glsl
> @@ -597,6 +1016,16 @@ share/taisei/00-taisei.pkgdir/shader/mas
> share/taisei/00-taisei.pkgdir/shader/masterspark.prog
> share/taisei/00-taisei.pkgdir/shader/max_to_alpha.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/max_to_alpha.prog
> +share/taisei/00-taisei.pkgdir/shader/pbr.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/pbr.prog
> +share/taisei/00-taisei.pkgdir/shader/pbr.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/pbr_diffuse_alpha_discard.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/pbr_diffuse_alpha_discard.prog
> +share/taisei/00-taisei.pkgdir/shader/pbr_roughness_alpha_discard.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/pbr_roughness_alpha_discard.prog
> +share/taisei/00-taisei.pkgdir/shader/pbr_water.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/pbr_water.prog
> +share/taisei/00-taisei.pkgdir/shader/pbr_water.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/player_death.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/player_death.prog
> share/taisei/00-taisei.pkgdir/shader/powersurge_effect.frag.glsl
> @@ -619,14 +1048,15 @@ share/taisei/00-taisei.pkgdir/shader/spe
> share/taisei/00-taisei.pkgdir/shader/sprite_bullet.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_bullet.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_bullet.vert.glsl
> -share/taisei/00-taisei.pkgdir/shader/sprite_bullet_dead.frag.glsl
> -share/taisei/00-taisei.pkgdir/shader/sprite_bullet_dead.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_circleclipped_indicator.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_circleclipped_indicator.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_circleclipped_indicator.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_default.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_default.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_default.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/sprite_fairy.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/sprite_fairy.prog
> +share/taisei/00-taisei.pkgdir/shader/sprite_fairy.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_filled_circle.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_filled_circle.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_filled_circle.vert.glsl
> @@ -635,18 +1065,25 @@ share/taisei/00-taisei.pkgdir/shader/spr
> share/taisei/00-taisei.pkgdir/shader/sprite_hakkero.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_negative.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_negative.prog
> +share/taisei/00-taisei.pkgdir/shader/sprite_particle.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/sprite_particle.prog
> +share/taisei/00-taisei.pkgdir/shader/sprite_pbr.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/sprite_pbr.prog
> +share/taisei/00-taisei.pkgdir/shader/sprite_pbr.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_silhouette.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_silhouette.prog
> share/taisei/00-taisei.pkgdir/shader/sprite_silhouette.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_yinyang.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_yinyang.prog
> -share/taisei/00-taisei.pkgdir/shader/sprite_youmu_charged_shot.frag.glsl
> -share/taisei/00-taisei.pkgdir/shader/sprite_youmu_charged_shot.prog
> -share/taisei/00-taisei.pkgdir/shader/sprite_youmu_charged_shot.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_youmu_myon_shot.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/sprite_youmu_myon_shot.prog
> +share/taisei/00-taisei.pkgdir/shader/ssr.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/ssr_water.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/ssr_water.prog
> share/taisei/00-taisei.pkgdir/shader/stage1_water.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/stage1_water.prog
> +share/taisei/00-taisei.pkgdir/shader/stage3_wriggle_bg.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/stage3_wriggle_bg.prog
> share/taisei/00-taisei.pkgdir/shader/stage6_sky.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/stage6_sky.prog
> share/taisei/00-taisei.pkgdir/shader/stage6_sky.vert.glsl
> @@ -656,9 +1093,14 @@ share/taisei/00-taisei.pkgdir/shader/sta
> share/taisei/00-taisei.pkgdir/shader/standardnotex.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/standardnotex.prog
> share/taisei/00-taisei.pkgdir/shader/standardnotex.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/text_cutscene.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/text_cutscene.prog
> share/taisei/00-taisei.pkgdir/shader/text_default.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/text_default.prog
> share/taisei/00-taisei.pkgdir/shader/text_default.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/text_demo.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/text_demo.prog
> +share/taisei/00-taisei.pkgdir/shader/text_demo.vert.glsl
> share/taisei/00-taisei.pkgdir/shader/text_dialog.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/text_dialog.prog
> share/taisei/00-taisei.pkgdir/shader/text_dialog.vert.glsl
> @@ -671,9 +1113,8 @@ share/taisei/00-taisei.pkgdir/shader/tex
> share/taisei/00-taisei.pkgdir/shader/text_stagetext.prog
> share/taisei/00-taisei.pkgdir/shader/texture_post_load.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/texture_post_load.prog
> -share/taisei/00-taisei.pkgdir/shader/tower_light.frag.glsl
> -share/taisei/00-taisei.pkgdir/shader/tower_light.prog
> -share/taisei/00-taisei.pkgdir/shader/tower_light.vert.glsl
> +share/taisei/00-taisei.pkgdir/shader/tonemap.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/tonemap.prog
> share/taisei/00-taisei.pkgdir/shader/tower_wall.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/tower_wall.prog
> share/taisei/00-taisei.pkgdir/shader/tower_wall.vert.glsl
> @@ -685,6 +1126,8 @@ share/taisei/00-taisei.pkgdir/shader/you
> share/taisei/00-taisei.pkgdir/shader/youmua_bomb.prog
> share/taisei/00-taisei.pkgdir/shader/zbuf_fog.frag.glsl
> share/taisei/00-taisei.pkgdir/shader/zbuf_fog.prog
> +share/taisei/00-taisei.pkgdir/shader/zbuf_fog_tonemap.frag.glsl
> +share/taisei/00-taisei.pkgdir/shader/zbuf_fog_tonemap.prog
> share/taisei/gamecontrollerdb.txt
> @tag gtk-update-icon-cache %D/share/icons/hicolor
> @tag update-desktop-database