diff --git a/.github/workflows/buildroot.yml b/.github/workflows/buildroot.yml new file mode 100644 index 000000000..4252596dc --- /dev/null +++ b/.github/workflows/buildroot.yml @@ -0,0 +1,47 @@ +name: buildroot + +on: + workflow_dispatch: + inputs: + git-address: + description: 'git-address' + required: true + default: 'https://github.com/buildroot/buildroot.git' + branches-tags: + description: 'branches-tags' + required: true + default: '2022.02' + board: + description: 'board' + required: true + default: 'syno' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Clone source code + run: | + git clone ${{github.event.inputs.git-address}} /opt/buildroot + cd /opt/buildroot + - name: Install packages + run: | + sudo apt-get update + sudo apt-get install -y libelf-dev + - name: Bulid + run: | + mkdir /opt/firmware + cd /opt/buildroot + git checkout ${{github.event.inputs.branches-tags}} + git pull origin ${{github.event.inputs.branches-tags}} + cp -rf /home/runner/work/redpill-load/redpill-load/buildroot/* . + echo '---start make---' + make ${{github.event.inputs.board}}_defconfig + make + cp -r /opt/buildroot/output/images /opt/firmware + - name: Upload buildroot-${{github.event.inputs.branches-tags}}-${{github.event.inputs.board}} + uses: actions/upload-artifact@v3 + with: + name: buildroot-${{github.event.inputs.branches-tags}}-${{github.event.inputs.board}} + path: /opt/firmware diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml new file mode 100644 index 000000000..f30fbbba1 --- /dev/null +++ b/.github/workflows/make.yml @@ -0,0 +1,118 @@ +name: Make kernel bs patch + +on: + workflow_dispatch: + inputs: + pat-address: + description: 'Pat file URL' + required: true + default: 'https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS918%2B_42218.pat' + toolchain: + description: 'DSM toolchain URL for repack zImage' + required: true + default: 'https://sourceforge.net/projects/dsgpl/files/Tool%20Chain/DSM%207.0.0%20Tool%20Chains/Intel%20x86%20Linux%204.4.180%20%28Apollolake%29/apollolake-gcc750_glibc226_x86_64-GPL.txz' + linux-src: + description: 'Linux kernel source URL for repack zImage' + required: true + default: 'https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.180.tar.xz' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Bulid + id: bulid-bsp + run: | + patfile=$(basename ${{github.event.inputs.pat-address}} | while read; do echo -e ${REPLY//%/\\x}; done) + echo "::set-output name=patfile::$patfile" + # install bsdiff + sudo apt-get install -y bsdiff + + #ls -al $GITHUB_WORKSPACE/ + mkdir /opt/build + mkdir /opt/dist + cd /opt/build + curl -L ${{github.event.inputs.pat-address}} -o ds.pat + curl -L ${{github.event.inputs.toolchain}} -o toolchain.txz + curl -L ${{github.event.inputs.linux-src}} -o linux.tar.xz + mkdir pat + tar xf ds.pat -C pat + # is update_pack + if [ ! -f "pat/zImage" ]; then + cd pat + ar x $(ls flashupdate*) + tar xf data.tar.xz + cd .. + fi + mkdir toolchain + tar xf toolchain.txz -C toolchain + mkdir linux-src + tar xf linux.tar.xz --strip-components 1 -C linux-src + + # extract vmlinux + ./linux-src/scripts/extract-vmlinux pat/zImage > vmlinux + # sha256 + sha256sum ds.pat >> checksum.sha256 + sha256sum pat/zImage >> checksum.sha256 + sha256sum pat/rd.gz >> checksum.sha256 + sha256sum vmlinux >> checksum.sha256 + # patch vmlinux + # vmlinux_mod.bin + curl -L https://github.com/jumkey/dsm-research/raw/master/tools/common.php -o common.php + curl -L https://github.com/jumkey/dsm-research/raw/master/tools/patch-ramdisk-check.php -o patch-ramdisk-check.php + curl -L https://github.com/jumkey/dsm-research/raw/master/tools/patch-boot_params-check.php -o patch-boot_params-check.php + php patch-boot_params-check.php vmlinux vmlinux-mod + php patch-ramdisk-check.php vmlinux-mod vmlinux_mod.bin + + git clone https://github.com/kiler129/recreate-zImage.git + chmod +x recreate-zImage/rebuild_kernel.sh + cd linux-src + # ---------- make zImage_mod + # Make file more anonymous + export KBUILD_BUILD_TIMESTAMP="1970/1/1 00:00:00" + export KBUILD_BUILD_USER="root" + export KBUILD_BUILD_HOST="localhost" + export KBUILD_BUILD_VERSION=0 + + export ARCH=x86_64 + export CROSS_COMPILE=/opt/build/toolchain/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- + #make olddefconfig + make defconfig + # change to lzma + sed -i 's/CONFIG_KERNEL_GZIP=y/# CONFIG_KERNEL_GZIP is not set/' .config + sed -i 's/# CONFIG_KERNEL_LZMA is not set/CONFIG_KERNEL_LZMA=y/' .config + << see_below + make clean + sed -i 's/bzImage: vmlinux/bzImage: /' arch/x86/Makefile + make vmlinux -j4 || true # make some *.o inspire by UnknowO + cp ../vmlinux_mod.bin vmlinux # vmlinux_mod.bin is already stripped of debugging and comments, strippe again should be ok + make bzImage + sed -i 's/bzImage: /bzImage: vmlinux/' arch/x86/Makefile + cp arch/x86/boot/bzImage ../zImage_mod + make clean + see_below + # for DS3615xs + #sed -i 's/ -std=gnu89$/ -std=gnu89 $(call cc-option,-fno-PIE)/' Makefile + sed -i 's/ ld -/ ${CROSS_COMPILE}ld -/' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/(ld -/(${CROSS_COMPILE}ld -/' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/ gcc / ${CROSS_COMPILE}gcc /' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/ nm / ${CROSS_COMPILE}nm /' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/ objcopy / ${CROSS_COMPILE}objcopy /' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/(objdump /(${CROSS_COMPILE}objdump /' ../recreate-zImage/rebuild_kernel.sh + sed -i 's/ readelf / ${CROSS_COMPILE}readelf /' ../recreate-zImage/rebuild_kernel.sh + ../recreate-zImage/rebuild_kernel.sh $PWD/../linux-src ../vmlinux_mod.bin ../zImage_mod + # ---------- + cd .. + bsdiff pat/zImage zImage_mod diff.bsp + + echo '---copy file---' + cp vmlinux /opt/dist + cp vmlinux_mod.bin /opt/dist + cp diff.bsp /opt/dist + cp checksum.sha256 /opt/dist + echo '---END---' + - name: Upload + uses: actions/upload-artifact@v2 + with: + name: kernel bs patch for ${{ steps.bulid-bsp.outputs.patfile }} + path: /opt/dist diff --git a/build-loader.sh b/build-loader.sh index 6fa616840..23f6ccaa9 100755 --- a/build-loader.sh +++ b/build-loader.sh @@ -12,6 +12,7 @@ cd "${BASH_SOURCE%/*}/" || exit 1 ######################################################################################################################## ##### CONFIGURATION YOU CAN OVERRIDE USING ENVIRONMENT ################################################################# +BRP_JUN_MOD=${BRP_JUN_MOD:-0} # whether you want to use jun's mod BRP_DEBUG=${BRP_DEBUG:-0} # whether you want to see debug messages BRP_CACHE_DIR=${BRP_CACHE_DIR:-"$PWD/cache"} # cache directory where stuff is downloaded & unpacked BRP_USER_CFG=${BRP_USER_CFG:-"$PWD/user_config.json"} @@ -257,6 +258,7 @@ fi readonly BRP_RD_FILE=${BRP_UPAT_DIR}/$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" 'files.ramdisk.name') # original ramdisk file readonly BRP_URD_DIR="${BRP_BUILD_DIR}/rd-${BRP_REL_OS_ID}-unpacked" # folder with unpacked ramdisk contents readonly BRP_RD_REPACK="${BRP_BUILD_DIR}/rd-patched-${BRP_REL_OS_ID}.gz" # repacked ramdisk file +readonly BRP_JUN_PATCH="${BRP_USER_DIR}/jun.patch" # jun.patch #rm -rf build/testing/rd-* # for debugging ramdisk routines; also comment-out rm of BRP_URD_DIR #rm "${BRP_RD_REPACK}" # for testing @@ -272,6 +274,17 @@ if [ ! -f "${BRP_RD_REPACK}" ]; then # do we even need to unpack-modify-repack t pr_info "Found unpacked ramdisk at \"%s\" - skipping unpacking" "${BRP_URD_DIR}" fi + if [ "${BRP_JUN_MOD}" -eq 1 ]; then + pushd ${BRP_URD_DIR} + git init + git config user.name "Mona Lisa" + git config user.email "email@example.com" + git add -A + git commit -m "import ramdisk" + git tag baseline + popd + fi + # Applies all static .patch files to the ramdisk brp_apply_text_patches \ "${BRP_URD_DIR}" \ @@ -317,16 +330,30 @@ if [ ! -f "${BRP_RD_REPACK}" ]; then # do we even need to unpack-modify-repack t || pr_crit "Failed to move mfgBIOS LKM" fi + if [ "${BRP_JUN_MOD}" -eq 1 ]; then + git -C ${BRP_URD_DIR} diff baseline > ${BRP_JUN_PATCH} + pushd ${BRP_URD_DIR} + # rm .git + "${RM_PATH}" -rf .git + popd + fi + # Finally, we can finish ramdisk modifications with repacking it readonly BRP_RD_COMPRESSED=$(brp_json_get_field "${BRP_REL_CONFIG_JSON}" "extra.compress_rd") - pr_process "Repacking ramdisk to %s" "${BRP_RD_REPACK}" - if [ "${BRP_RD_COMPRESSED}" == "true" ]; then - brp_pack_zrd "${BRP_RD_REPACK}" "${BRP_URD_DIR}" - elif [ "${BRP_RD_COMPRESSED}" == "false" ]; then - brp_pack_cpiord "${BRP_RD_REPACK}" "${BRP_URD_DIR}" + if [ "${BRP_JUN_MOD}" -eq 1 ]; then + cp ${BRP_RD_FILE} ${BRP_RD_REPACK} else - pr_crit "Invalid value for platform extra.compress_rd (expected bool, got \"%s\")" "${BRP_RD_COMPRESSED}" + pr_process "Repacking ramdisk to %s" "${BRP_RD_REPACK}" + if [ "${BRP_RD_COMPRESSED}" == "true" ]; then + brp_pack_zrd "${BRP_RD_REPACK}" "${BRP_URD_DIR}" + # add fake 64byte sign + dd if=/dev/zero of=${BRP_RD_REPACK} bs=$((3-(($(stat --format=%s ${BRP_RD_REPACK})+3)&0x03)+64)) count=1 conv=notrunc oflag=append + elif [ "${BRP_RD_COMPRESSED}" == "false" ]; then + brp_pack_cpiord "${BRP_RD_REPACK}" "${BRP_URD_DIR}" + else + pr_crit "Invalid value for platform extra.compress_rd (expected bool, got \"%s\")" "${BRP_RD_COMPRESSED}" + fi fi pr_process_ok @@ -384,13 +411,28 @@ if [[ "${BRP_DEV_DISABLE_EXTS}" -ne 1 ]]; then pr_process_ok fi -pr_process "Packing custom ramdisk layer to %s" "${BRP_CUSTOM_RD_PATH}" -if [ "${BRP_RD_COMPRESSED}" == "true" ]; then +if [ "${BRP_JUN_MOD}" -eq 1 ]; then + brp_mkdir "${BRP_CUSTOM_DIR}/usr/bin" + brp_mkdir "${BRP_CUSTOM_DIR}/etc" + "${CP_PATH}" --recursive --dereference "${BRP_COMMON_CFG_BASE}/jun/init" "${BRP_CUSTOM_DIR}/init" + "${CP_PATH}" --recursive --dereference "${BRP_COMMON_CFG_BASE}/jun/usr/bin/patch" "${BRP_CUSTOM_DIR}/usr/bin/patch" + "${CP_PATH}" --recursive --dereference "${BRP_JUN_PATCH}" "${BRP_CUSTOM_DIR}/etc/jun.patch" + + pr_process "Packing custom ramdisk layer to %s" "${BRP_CUSTOM_RD_PATH}" brp_pack_zrd "${BRP_CUSTOM_RD_PATH}" "${BRP_CUSTOM_DIR}" -elif [ "${BRP_RD_COMPRESSED}" == "false" ]; then - brp_pack_cpiord "${BRP_CUSTOM_RD_PATH}" "${BRP_CUSTOM_DIR}" + # add fake 64byte sign + dd if=/dev/zero of=${BRP_CUSTOM_RD_PATH} bs=$((3-(($(stat --format=%s ${BRP_RD_REPACK})+3)&0x03)+64)) count=1 conv=notrunc oflag=append else - pr_crit "Invalid value for platform extra.compress_rd (expected bool, got \"%s\")" "${BRP_RD_COMPRESSED}" + pr_process "Packing custom ramdisk layer to %s" "${BRP_CUSTOM_RD_PATH}" + if [ "${BRP_RD_COMPRESSED}" == "true" ]; then + brp_pack_zrd "${BRP_CUSTOM_RD_PATH}" "${BRP_CUSTOM_DIR}" + # add fake 64byte sign + dd if=/dev/zero of=${BRP_CUSTOM_RD_PATH} bs=$((3-(($(stat --format=%s ${BRP_RD_REPACK})+3)&0x03)+64)) count=1 conv=notrunc oflag=append + elif [ "${BRP_RD_COMPRESSED}" == "false" ]; then + brp_pack_cpiord "${BRP_CUSTOM_RD_PATH}" "${BRP_CUSTOM_DIR}" + else + pr_crit "Invalid value for platform extra.compress_rd (expected bool, got \"%s\")" "${BRP_RD_COMPRESSED}" + fi fi pr_process_ok diff --git a/buildroot/README.md b/buildroot/README.md new file mode 100644 index 000000000..8e5748c14 --- /dev/null +++ b/buildroot/README.md @@ -0,0 +1,13 @@ +# Build + +```shell +git clone git://git.buildroot.net/buildroot +cd buildroot +# copy custom files +make syno_defconfig +make +# get bzImage rootfs.cpio.lzma +ls output/images +``` + +[see .github/workflows/buildroot.yml](../.github/workflows/buildroot.yml) \ No newline at end of file diff --git a/buildroot/board/syno/busybox.config b/buildroot/board/syno/busybox.config new file mode 100644 index 000000000..3264a3b81 --- /dev/null +++ b/buildroot/board/syno/busybox.config @@ -0,0 +1,1216 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.35.0 +# Thu Jan 27 10:16:54 2022 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +CONFIG_DESKTOP=y +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_FEDORA_COMPAT is not set +CONFIG_INCLUDE_SUSv2=y +CONFIG_LONG_OPTS=y +CONFIG_SHOW_USAGE=y +CONFIG_FEATURE_VERBOSE_USAGE=y +# CONFIG_FEATURE_COMPRESS_USAGE is not set +CONFIG_LFS=y +# CONFIG_PAM is not set +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +# CONFIG_FEATURE_PIDFILE is not set +CONFIG_PID_FILE_PATH="" +CONFIG_BUSYBOX=y +CONFIG_FEATURE_SHOW_SCRIPT=y +CONFIG_FEATURE_INSTALLER=y +# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_SUID=y +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG_INFO=y +CONFIG_FEATURE_SYSLOG=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_SYSROOT="" +CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_LDFLAGS="" +CONFIG_EXTRA_LDLIBS="" +# CONFIG_USE_PORTABLE_CODE is not set +CONFIG_STACK_OPTIMIZATION_386=y +CONFIG_STATIC_LIBGCC=y + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_DEBUG_SANITIZE is not set +# CONFIG_UNIT_TEST is not set +# CONFIG_WERROR is not set +# CONFIG_WARN_SIMPLE_MSG is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_FEATURE_USE_BSS_TAIL is not set +CONFIG_FLOAT_DURATION=y +CONFIG_FEATURE_RTMINMAX=y +CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SMALL=1 +CONFIG_SHA3_SMALL=1 +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_VI=y +CONFIG_FEATURE_EDITING_HISTORY=999 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_FEATURE_REVERSE_SEARCH=y +CONFIG_FEATURE_TAB_COMPLETION=y +# CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +CONFIG_FEATURE_EDITING_WINCH=y +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_LOCALE_SUPPORT is not set +# CONFIG_UNICODE_SUPPORT is not set +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=0 +CONFIG_LAST_SUPPORTED_WCHAR=0 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set + +# +# Applets +# + +# +# Archival Utilities +# +# CONFIG_FEATURE_SEAMLESS_XZ is not set +# CONFIG_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_FEATURE_SEAMLESS_BZ2 is not set +# CONFIG_FEATURE_SEAMLESS_GZ is not set +# CONFIG_FEATURE_SEAMLESS_Z is not set +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_FEATURE_AR_CREATE=y +# CONFIG_UNCOMPRESS is not set +CONFIG_GUNZIP=y +CONFIG_ZCAT=y +CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y +CONFIG_BUNZIP2=y +CONFIG_BZCAT=y +CONFIG_UNLZMA=y +CONFIG_LZCAT=y +CONFIG_LZMA=y +CONFIG_UNXZ=y +CONFIG_XZCAT=y +CONFIG_XZ=y +# CONFIG_BZIP2 is not set +CONFIG_BZIP2_SMALL=0 +CONFIG_FEATURE_BZIP2_DECOMPRESS=y +CONFIG_CPIO=y +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set +# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +CONFIG_GZIP=y +# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_GZIP_FAST=0 +# CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_LZOP is not set +CONFIG_UNLZOP=y +CONFIG_LZOPCAT=y +# CONFIG_LZOP_COMPR_HIGH is not set +# CONFIG_RPM is not set +# CONFIG_RPM2CPIO is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_LONG_OPTIONS=y +CONFIG_FEATURE_TAR_CREATE=y +# CONFIG_FEATURE_TAR_AUTODETECT is not set +CONFIG_FEATURE_TAR_FROM=y +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +CONFIG_FEATURE_TAR_TO_COMMAND=y +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_FEATURE_TAR_SELINUX is not set +CONFIG_UNZIP=y +CONFIG_FEATURE_UNZIP_CDF=y +CONFIG_FEATURE_UNZIP_BZIP2=y +CONFIG_FEATURE_UNZIP_LZMA=y +CONFIG_FEATURE_UNZIP_XZ=y +# CONFIG_FEATURE_LZMA_FAST is not set + +# +# Coreutils +# +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for date and touch +# +CONFIG_FEATURE_TIMEZONE=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_FEATURE_CATN=y +CONFIG_FEATURE_CATV=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_CHROOT=y +CONFIG_CKSUM=y +CONFIG_CRC32=y +# CONFIG_COMM is not set +CONFIG_CP=y +# CONFIG_FEATURE_CP_LONG_OPTIONS is not set +# CONFIG_FEATURE_CP_REFLINK is not set +CONFIG_CUT=y +CONFIG_FEATURE_CUT_REGEX=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_FEATURE_DD_STATUS=y +CONFIG_DF=y +# CONFIG_FEATURE_DF_FANCY is not set +CONFIG_FEATURE_SKIP_ROOTFS=y +CONFIG_DIRNAME=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_EXPAND is not set +# CONFIG_UNEXPAND is not set +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +CONFIG_FACTOR=y +CONFIG_FALSE=y +CONFIG_FOLD=y +CONFIG_HEAD=y +CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_HOSTID=y +CONFIG_ID=y +# CONFIG_GROUPS is not set +CONFIG_INSTALL=y +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_WIDTH=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_MD5SUM=y +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA512SUM=y +CONFIG_SHA3SUM=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MKTEMP=y +CONFIG_MV=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +CONFIG_SHRED=y +# CONFIG_SHUF is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +CONFIG_STAT=y +CONFIG_FEATURE_STAT_FORMAT=y +CONFIG_FEATURE_STAT_FILESYSTEM=y +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +# CONFIG_FEATURE_SYNC_FANCY is not set +# CONFIG_FSYNC is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TEST=y +CONFIG_TEST1=y +CONFIG_TEST2=y +CONFIG_FEATURE_TEST_64=y +# CONFIG_TIMEOUT is not set +CONFIG_TOUCH=y +CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +CONFIG_FEATURE_TR_EQUIV=y +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNAME_OSNAME="GNU/Linux" +CONFIG_BB_ARCH=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +CONFIG_BASE32=y +CONFIG_BASE64=y +CONFIG_UUENCODE=y +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHO=y +CONFIG_W=y +# CONFIG_USERS is not set +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +# CONFIG_FGCONSOLE is not set +# CONFIG_KBD_MODE is not set +CONFIG_LOADFONT=y +# CONFIG_SETFONT is not set +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_DEFAULT_SETFONT_DIR="" + +# +# Common options for loadfont and setfont +# +CONFIG_FEATURE_LOADFONT_PSF2=y +CONFIG_FEATURE_LOADFONT_RAW=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +CONFIG_RESIZE=y +CONFIG_FEATURE_RESIZE_PRINT=y +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +CONFIG_SETKEYCODES=y +CONFIG_SETLOGCONS=y +# CONFIG_SHOWKEY is not set + +# +# Debian Utilities +# +CONFIG_PIPE_PROGRESS=y +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_MINIPS is not set +CONFIG_NUKE=y +CONFIG_RESUME=y +CONFIG_RUN_INIT=y + +# +# Editors +# +CONFIG_AWK=y +# CONFIG_FEATURE_AWK_LIBM is not set +CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_CMP=y +CONFIG_DIFF=y +# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=4096 +CONFIG_FEATURE_VI_8BIT=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_COLON_EXPAND=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set +CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_FEATURE_VI_READONLY=y +CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_FEATURE_VI_SET=y +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_ASK_TERMINAL=y +CONFIG_FEATURE_VI_UNDO=y +CONFIG_FEATURE_VI_UNDO_QUEUE=y +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 +CONFIG_FEATURE_VI_VERBOSE_STATUS=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_ATIME=y +CONFIG_FEATURE_FIND_CTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_AMIN=y +CONFIG_FEATURE_FIND_CMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_EXECUTABLE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_SAMEFILE=y +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_EXEC_PLUS=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +CONFIG_FEATURE_FIND_QUIT=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_EMPTY=y +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +# CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_GREP=y +CONFIG_EGREP=y +CONFIG_FGREP=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y +CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y +CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y + +# +# Init Utilities +# +# CONFIG_BOOTCHARTD is not set +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +CONFIG_HALT=y +CONFIG_POWEROFF=y +CONFIG_REBOOT=y +CONFIG_FEATURE_WAIT_FOR_INIT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" +CONFIG_INIT=y +CONFIG_LINUXRC=y +CONFIG_FEATURE_USE_INITTAB=y +CONFIG_FEATURE_KILL_REMOVED=y +CONFIG_FEATURE_KILL_DELAY=0 +CONFIG_FEATURE_INIT_SCTTY=y +CONFIG_FEATURE_INIT_SYSLOG=y +CONFIG_FEATURE_INIT_QUIET=y +# CONFIG_FEATURE_INIT_COREDUMPS is not set +CONFIG_INIT_TERMINAL_TYPE="linux" +CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y + +# +# Login/Password Management Utilities +# +CONFIG_FEATURE_SHADOWPASSWDS=y +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set +CONFIG_USE_BB_CRYPT=y +# CONFIG_USE_BB_CRYPT_SHA is not set +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +CONFIG_ADDGROUP=y +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +CONFIG_ADDUSER=y +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +# CONFIG_CHPASSWD is not set +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5" +# CONFIG_CRYPTPW is not set +CONFIG_MKPASSWD=y +CONFIG_DELUSER=y +CONFIG_DELGROUP=y +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_GETTY=y +CONFIG_LOGIN=y +# CONFIG_LOGIN_SESSION_AS_CHILD is not set +# CONFIG_LOGIN_SCRIPTS is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +CONFIG_SULOGIN=y +CONFIG_VLOCK=y + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +CONFIG_LSATTR=y +# CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +# CONFIG_MODPROBE_SMALL is not set +# CONFIG_DEPMOD is not set +CONFIG_INSMOD=y +CONFIG_LSMOD=y +CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y +# CONFIG_MODINFO is not set +CONFIG_MODPROBE=y +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +CONFIG_RMMOD=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +CONFIG_FEATURE_MODUTILS_ALIAS=y +CONFIG_FEATURE_MODUTILS_SYMBOLS=y +CONFIG_DEFAULT_MODULES_DIR="/lib/modules" +CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" + +# +# Linux System Utilities +# +# CONFIG_ACPID is not set +# CONFIG_FEATURE_ACPID_COMPAT is not set +# CONFIG_BLKDISCARD is not set +CONFIG_BLKID=y +# CONFIG_FEATURE_BLKID_TYPE is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_CAL is not set +CONFIG_CHRT=y +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_EJECT=y +# CONFIG_FEATURE_EJECT_SCSI is not set +CONFIG_FALLOCATE=y +# CONFIG_FATATTR is not set +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +CONFIG_FDFORMAT=y +CONFIG_FDISK=y +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +CONFIG_FEATURE_GPT_LABEL=y +CONFIG_FEATURE_FDISK_ADVANCED=y +# CONFIG_FINDFS is not set +CONFIG_FLOCK=y +CONFIG_FDFLUSH=y +CONFIG_FREERAMDISK=y +# CONFIG_FSCK_MINIX is not set +CONFIG_FSFREEZE=y +CONFIG_FSTRIM=y +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y +CONFIG_HEXDUMP=y +# CONFIG_HD is not set +CONFIG_XXD=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IONICE is not set +CONFIG_IPCRM=y +CONFIG_IPCS=y +CONFIG_LAST=y +# CONFIG_FEATURE_LAST_FANCY is not set +CONFIG_LOSETUP=y +CONFIG_LSPCI=y +CONFIG_LSUSB=y +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +CONFIG_FEATURE_MDEV_RENAME=y +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set +CONFIG_FEATURE_MDEV_EXEC=y +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_FEATURE_MDEV_DAEMON=y +CONFIG_MESG=y +CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y +CONFIG_MKE2FS=y +# CONFIG_MKFS_EXT2 is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_MKFS_REISER is not set +CONFIG_MKDOSFS=y +# CONFIG_MKFS_VFAT is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_UUID is not set +CONFIG_MORE=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set +# CONFIG_FEATURE_MOUNT_HELPERS is not set +# CONFIG_FEATURE_MOUNT_LABEL is not set +# CONFIG_FEATURE_MOUNT_NFS is not set +CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_FEATURE_MOUNT_OTHERTAB=y +CONFIG_MOUNTPOINT=y +CONFIG_NOLOGIN=y +# CONFIG_NOLOGIN_DEPENDENCIES is not set +# CONFIG_NSENTER is not set +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_RDEV is not set +CONFIG_READPROFILE=y +CONFIG_RENICE=y +# CONFIG_REV is not set +# CONFIG_RTCWAKE is not set +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set +CONFIG_SETARCH=y +CONFIG_LINUX32=y +CONFIG_LINUX64=y +CONFIG_SETPRIV=y +CONFIG_FEATURE_SETPRIV_DUMP=y +CONFIG_FEATURE_SETPRIV_CAPABILITIES=y +CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y +CONFIG_SETSID=y +CONFIG_SWAPON=y +# CONFIG_FEATURE_SWAPON_DISCARD is not set +# CONFIG_FEATURE_SWAPON_PRI is not set +CONFIG_SWAPOFF=y +CONFIG_FEATURE_SWAPONOFF_LABEL=y +CONFIG_SWITCH_ROOT=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_FEATURE_TASKSET_CPULIST is not set +CONFIG_UEVENT=y +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_UNSHARE is not set +# CONFIG_WALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +CONFIG_VOLUMEID=y + +# +# Filesystem/Volume identification +# +# CONFIG_FEATURE_VOLUMEID_BCACHE is not set +# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set +CONFIG_FEATURE_VOLUMEID_EROFS=y +CONFIG_FEATURE_VOLUMEID_EXFAT=y +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_F2FS=y +CONFIG_FEATURE_VOLUMEID_FAT=y +# CONFIG_FEATURE_VOLUMEID_HFS is not set +# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set +# CONFIG_FEATURE_VOLUMEID_JFS is not set +# CONFIG_FEATURE_VOLUMEID_LFS is not set +# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set +# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set +# CONFIG_FEATURE_VOLUMEID_LUKS is not set +CONFIG_FEATURE_VOLUMEID_MINIX=y +# CONFIG_FEATURE_VOLUMEID_NILFS is not set +# CONFIG_FEATURE_VOLUMEID_NTFS is not set +# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set +# CONFIG_FEATURE_VOLUMEID_REISERFS is not set +# CONFIG_FEATURE_VOLUMEID_ROMFS is not set +# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set +# CONFIG_FEATURE_VOLUMEID_SYSV is not set +CONFIG_FEATURE_VOLUMEID_UBIFS=y +# CONFIG_FEATURE_VOLUMEID_UDF is not set +# CONFIG_FEATURE_VOLUMEID_XFS is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +CONFIG_ASCII=y +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +CONFIG_BC=y +CONFIG_DC=y +CONFIG_FEATURE_DC_BIG=y +# CONFIG_FEATURE_DC_LIBM is not set +CONFIG_FEATURE_BC_INTERACTIVE=y +CONFIG_FEATURE_BC_LONG_OPTIONS=y +# CONFIG_BEEP is not set +CONFIG_FEATURE_BEEP_FREQ=0 +CONFIG_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_CONSPY is not set +CONFIG_CROND=y +# CONFIG_FEATURE_CROND_D is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +CONFIG_FEATURE_CROND_SPECIAL_TIMES=y +CONFIG_FEATURE_CROND_DIR="/var/spool/cron" +CONFIG_CRONTAB=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +CONFIG_DEVMEM=y +# CONFIG_FBSPLASH is not set +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +# CONFIG_FLASHCP is not set +CONFIG_HDPARM=y +CONFIG_FEATURE_HDPARM_GET_IDENTITY=y +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +CONFIG_HEXEDIT=y +CONFIG_I2CGET=y +CONFIG_I2CSET=y +CONFIG_I2CDUMP=y +CONFIG_I2CDETECT=y +CONFIG_I2CTRANSFER=y +# CONFIG_INOTIFYD is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +CONFIG_FEATURE_LESS_TRUNCATE=y +# CONFIG_FEATURE_LESS_MARKS is not set +CONFIG_FEATURE_LESS_REGEXP=y +# CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set +# CONFIG_FEATURE_LESS_DASHCMD is not set +# CONFIG_FEATURE_LESS_LINENUMS is not set +# CONFIG_FEATURE_LESS_RAW is not set +# CONFIG_FEATURE_LESS_ENV is not set +CONFIG_LSSCSI=y +CONFIG_MAKEDEVS=y +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +CONFIG_FEATURE_MAKEDEVS_TABLE=y +# CONFIG_MAN is not set +CONFIG_MICROCOM=y +CONFIG_MIM=y +CONFIG_MT=y +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set +CONFIG_PARTPROBE=y +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RFKILL is not set +CONFIG_RUNLEVEL=y +# CONFIG_RX is not set +CONFIG_SETFATTR=y +CONFIG_SETSERIAL=y +CONFIG_STRINGS=y +CONFIG_TIME=y +CONFIG_TS=y +# CONFIG_TTYSIZE is not set +# CONFIG_UBIATTACH is not set +# CONFIG_UBIDETACH is not set +# CONFIG_UBIMKVOL is not set +# CONFIG_UBIRMVOL is not set +# CONFIG_UBIRSVOL is not set +# CONFIG_UBIUPDATEVOL is not set +CONFIG_UBIRENAME=y +# CONFIG_VOLNAME is not set +CONFIG_WATCHDOG=y +# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_UNIX_LOCAL is not set +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_FEATURE_HWIB=y +# CONFIG_FEATURE_TLS_SHA1 is not set +CONFIG_ARP=y +CONFIG_ARPING=y +# CONFIG_BRCTL is not set +# CONFIG_FEATURE_BRCTL_FANCY is not set +# CONFIG_FEATURE_BRCTL_SHOW is not set +CONFIG_DNSD=y +CONFIG_ETHER_WAKE=y +# CONFIG_FTPD is not set +# CONFIG_FEATURE_FTPD_WRITE is not set +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +CONFIG_DNSDOMAINNAME=y +# CONFIG_HTTPD is not set +CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0 +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +# CONFIG_FEATURE_HTTPD_ETAG is not set +# CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set +# CONFIG_FEATURE_HTTPD_DATE is not set +# CONFIG_FEATURE_HTTPD_ACL_IP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +CONFIG_FEATURE_IFCONFIG_SLIP=y +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +# CONFIG_IFENSLAVE is not set +# CONFIG_IFPLUGD is not set +CONFIG_IFUP=y +CONFIG_IFDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +CONFIG_INETD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_IPADDR=y +CONFIG_IPLINK=y +CONFIG_IPROUTE=y +CONFIG_IPTUNNEL=y +CONFIG_IPRULE=y +CONFIG_IPNEIGH=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +CONFIG_FEATURE_IP_TUNNEL=y +CONFIG_FEATURE_IP_RULE=y +CONFIG_FEATURE_IP_NEIGH=y +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FAKEIDENTD is not set +CONFIG_NAMEIF=y +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +# CONFIG_NBDCLIENT is not set +# CONFIG_NC is not set +# CONFIG_NETCAT is not set +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +# CONFIG_NC_110_COMPAT is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +# CONFIG_FEATURE_NETSTAT_PRG is not set +CONFIG_NSLOOKUP=y +CONFIG_FEATURE_NSLOOKUP_BIG=y +CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS=y +# CONFIG_NTPD is not set +# CONFIG_FEATURE_NTPD_SERVER is not set +# CONFIG_FEATURE_NTPD_CONF is not set +# CONFIG_FEATURE_NTP_AUTH is not set +CONFIG_PING=y +# CONFIG_PING6 is not set +CONFIG_FEATURE_FANCY_PING=y +# CONFIG_PSCAN is not set +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +# CONFIG_SSL_CLIENT is not set +CONFIG_TC=y +CONFIG_FEATURE_TC_INGRESS=y +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_FEATURE_TELNET_WIDTH=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0 +# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set +CONFIG_TFTP=y +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +CONFIG_FEATURE_TFTP_HPA_COMPAT=y +# CONFIG_TFTPD is not set +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +CONFIG_FEATURE_TFTP_BLOCKSIZE=y +# CONFIG_TFTP_DEBUG is not set +# CONFIG_TLS is not set +CONFIG_TRACEROUTE=y +# CONFIG_TRACEROUTE6 is not set +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_TUNCTL is not set +# CONFIG_FEATURE_TUNCTL_UG is not set +CONFIG_VCONFIG=y +CONFIG_WGET=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_FTP=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_TIMEOUT=y +# CONFIG_FEATURE_WGET_HTTPS is not set +# CONFIG_FEATURE_WGET_OPENSSL is not set +# CONFIG_WHOIS is not set +# CONFIG_ZCIP is not set +# CONFIG_UDHCPD is not set +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_DHCPD_LEASES_FILE="" +# CONFIG_DUMPLEASES is not set +# CONFIG_DHCPRELAY is not set +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_UDHCPC6 is not set +# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set +# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set + +# +# Common options for DHCP applets +# +CONFIG_UDHCPC_DEFAULT_INTERFACE="eth0" +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=0 +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_FEATURE_UDHCP_RFC3397=y +CONFIG_FEATURE_UDHCP_8021Q=y +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-b -R -O search" + +# +# Print Utilities +# +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set + +# +# Mail Utilities +# +CONFIG_FEATURE_MIME_CHARSET="" +# CONFIG_MAKEMIME is not set +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set + +# +# Process Utilities +# +# CONFIG_FEATURE_FAST_TOP is not set +# CONFIG_FEATURE_SHOW_THREADS is not set +CONFIG_FREE=y +CONFIG_FUSER=y +# CONFIG_IOSTAT is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_KILLALL5=y +CONFIG_LSOF=y +# CONFIG_MPSTAT is not set +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +# CONFIG_PKILL is not set +CONFIG_PIDOF=y +CONFIG_FEATURE_PIDOF_SINGLE=y +CONFIG_FEATURE_PIDOF_OMIT=y +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set +# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set +CONFIG_PS=y +# CONFIG_FEATURE_PS_WIDE is not set +# CONFIG_FEATURE_PS_LONG is not set +# CONFIG_FEATURE_PS_TIME is not set +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_PSTREE is not set +# CONFIG_PWDX is not set +# CONFIG_SMEMCAP is not set +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_INTERACTIVE=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_FEATURE_TOPMEM is not set +CONFIG_UPTIME=y +# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set +CONFIG_WATCH=y + +# +# Runit Utilities +# +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_FEATURE_RUNSVDIR_LOG is not set +# CONFIG_SV is not set +CONFIG_SV_DEFAULT_SERVICE_DIR="" +CONFIG_SVC=y +CONFIG_SVOK=y +# CONFIG_SVLOGD is not set +# CONFIG_CHCON is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RUNCON is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SESTATUS is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_RESTORECON is not set +# CONFIG_SETSEBOOL is not set + +# +# Shells +# +CONFIG_SH_IS_ASH=y +# CONFIG_SH_IS_HUSH is not set +# CONFIG_SH_IS_NONE is not set +# CONFIG_BASH_IS_ASH is not set +# CONFIG_BASH_IS_HUSH is not set +CONFIG_BASH_IS_NONE=y +CONFIG_SHELL_ASH=y +CONFIG_ASH=y +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +CONFIG_ASH_INTERNAL_GLOB=y +CONFIG_ASH_BASH_COMPAT=y +# CONFIG_ASH_BASH_SOURCE_CURDIR is not set +CONFIG_ASH_BASH_NOT_FOUND_HOOK=y +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_RANDOM_SUPPORT=y +CONFIG_ASH_EXPAND_PRMT=y +CONFIG_ASH_IDLE_TIMEOUT=y +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_ECHO=y +CONFIG_ASH_PRINTF=y +CONFIG_ASH_TEST=y +CONFIG_ASH_HELP=y +CONFIG_ASH_GETOPTS=y +CONFIG_ASH_CMDCMD=y +# CONFIG_CTTYHACK is not set +# CONFIG_HUSH is not set +# CONFIG_SHELL_HUSH is not set +# CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set +# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set +# CONFIG_HUSH_LINENO_VAR is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_HUSH_CASE is not set +# CONFIG_HUSH_FUNCTIONS is not set +# CONFIG_HUSH_LOCAL is not set +# CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_HUSH_ECHO is not set +# CONFIG_HUSH_PRINTF is not set +# CONFIG_HUSH_TEST is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_EXPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_READONLY is not set +# CONFIG_HUSH_KILL is not set +# CONFIG_HUSH_WAIT is not set +# CONFIG_HUSH_COMMAND is not set +# CONFIG_HUSH_TRAP is not set +# CONFIG_HUSH_TYPE is not set +# CONFIG_HUSH_TIMES is not set +# CONFIG_HUSH_READ is not set +# CONFIG_HUSH_SET is not set +# CONFIG_HUSH_UNSET is not set +# CONFIG_HUSH_ULIMIT is not set +# CONFIG_HUSH_UMASK is not set +# CONFIG_HUSH_GETOPTS is not set +# CONFIG_HUSH_MEMLEAK is not set + +# +# Options common to all shells +# +CONFIG_FEATURE_SH_MATH=y +CONFIG_FEATURE_SH_MATH_64=y +CONFIG_FEATURE_SH_MATH_BASE=y +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set +CONFIG_FEATURE_SH_READ_FRAC=y +# CONFIG_FEATURE_SH_HISTFILESIZE is not set +CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y + +# +# System Logging Utilities +# +CONFIG_KLOGD=y +CONFIG_FEATURE_KLOGD_KLOGCTL=y +CONFIG_LOGGER=y +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +# CONFIG_FEATURE_SYSLOGD_DUP is not set +# CONFIG_FEATURE_SYSLOGD_CFG is not set +# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_FEATURE_KMSG_SYSLOG is not set diff --git a/buildroot/board/syno/rootfs-overlay/etc/inittab b/buildroot/board/syno/rootfs-overlay/etc/inittab new file mode 100644 index 000000000..dad21d7bd --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/etc/inittab @@ -0,0 +1,42 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/bin/mkdir -p /run/lock/subsys +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +::once:/bin/sh /root/init.sh + +# Put a getty on the serial port +console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/buildroot/board/syno/rootfs-overlay/root/bzImage-to-vmlinux.sh b/buildroot/board/syno/rootfs-overlay/root/bzImage-to-vmlinux.sh new file mode 100755 index 000000000..b2096a6cf --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/bzImage-to-vmlinux.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +read_u8() { + dd if=$1 bs=1 skip=$(( $2 )) count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+' +} +read_u32() { + dd if=$1 bs=1 skip=$(( $2 )) count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+' +} + +set -x +setup_size=$(read_u8 $1 0x1f1) +payload_offset=$(read_u32 $1 0x248) +payload_length=$(read_u32 $1 0x24c) +inner_pos=$(( ($setup_size + 1) * 512 )) + +tail -c+$(( $inner_pos + 1 )) $1 | tail -c+$(( $payload_offset + 1 )) | head -c $(( $payload_length )) | head -c $(($payload_length - 4)) | unlzma > $2 diff --git a/buildroot/board/syno/rootfs-overlay/root/calc_run_size.sh b/buildroot/board/syno/rootfs-overlay/root/calc_run_size.sh new file mode 100755 index 000000000..1a4c17bb3 --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/calc_run_size.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# +# Calculate the amount of space needed to run the kernel, including room for +# the .bss and .brk sections. +# +# Usage: +# objdump -h a.out | sh calc_run_size.sh + +NUM='\([0-9a-fA-F]*[ \t]*\)' +OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"$NUM$NUM$NUM$NUM"'.*/\1\4/p') +if [ -z "$OUT" ] ; then + echo "Never found .bss or .brk file offset" >&2 + exit 1 +fi + +OUT=$(echo ${OUT# }) +sizeA=$(printf "%d" 0x${OUT%% *}) +OUT=${OUT#* } +offsetA=$(printf "%d" 0x${OUT%% *}) +OUT=${OUT#* } +sizeB=$(printf "%d" 0x${OUT%% *}) +OUT=${OUT#* } +offsetB=$(printf "%d" 0x${OUT%% *}) + +run_size=$(( $offsetA + $sizeA + $sizeB )) + +# BFD linker shows the same file offset in ELF. +if [ "$offsetA" -ne "$offsetB" ] ; then + # Gold linker shows them as consecutive. + endB=$(( $offsetB + $sizeB )) + if [ "$endB" != "$run_size" ] ; then + printf "sizeA: 0x%x\n" $sizeA >&2 + printf "offsetA: 0x%x\n" $offsetA >&2 + printf "sizeB: 0x%x\n" $sizeB >&2 + printf "offsetB: 0x%x\n" $offsetB >&2 + echo ".bss and .brk are non-contiguous" >&2 + exit 1 + fi +fi + +printf "%d\n" $run_size +exit 0 diff --git a/buildroot/board/syno/rootfs-overlay/root/common.php b/buildroot/board/syno/rootfs-overlay/root/common.php new file mode 100644 index 000000000..a604484a1 --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/common.php @@ -0,0 +1,244 @@ + $num) { + if ($num === null) { + $searchSeq[] = null; + } elseif (is_array($num) && count($num) == 2 && is_int($num[0]) && is_int($num[1]) && $num[0] >= 0 && + $num[0] <= 255 && $num[1] >= 0 && $num[1] <= 255 && $num[0] < $num[1]) { + $searchSeq[] = $num; //Leave them as numeric + } elseif (is_int($num) && $num >= 0 && $num <= 255) { + $searchSeq[] = chr($num); + } else { + perr("Found invalid search sequence at index $idx", true); + } + } + + //$pos denotes start position but it's also used to mark where start of a potential pattern match was found + fseek($fp, $pos); + do { //This loop is optimized for speed + $buf = fread($fp, $bufLen); + if (!isset($buf[$bufLen-1])) { + break; //Not enough data = no match + } + + $successfulLoops = 0; + foreach ($searchSeq as $byteIdx => $seekByte) { + if ($seekByte === null) { //any character + ++$successfulLoops; + continue; + } + + //element in the array can be a range [(int)from,(int)to] or a literal SINGLE byte + //if isset finds a second element it will mean for us that it's an array of 2 elements (as we don't expect + //a string longer than a single byte) + if (isset($seekByte[1])) { + $curByteNum = ord($buf[$byteIdx]); + if ($curByteNum < $seekByte[0] || $curByteNum > $seekByte[1]) { + break; + } + } elseif($buf[$byteIdx] !== $seekByte) { //If the byte doesn't match literally we know it's not a match + break; + } + + ++$successfulLoops; + } + if ($successfulLoops === $bufLen) { + return $pos; + } + + fseek($fp, ++$pos); + $maxToCheck--; + } while (!feof($fp) && $maxToCheck != 0); + + return -1; +} + +/** + * @return resource + */ +function getFileMemMapped(string $path) +{ + $fp = fopen('php://memory', 'r+'); + fwrite($fp, file_get_contents($path)); //poor man's mmap :D + + return $fp; +} + +function saveStreamToFile($fp, string $path) +{ + perr("Saving stream to $path ...\n"); + + $fp2 = fopen($path, 'w'); + fseek($fp, 0); + while (!feof($fp)) { + fwrite($fp2, fread($fp, 8192)); + } + fclose($fp2); + + perr("DONE!\n"); +} + +/** + * Do not call this in time-sensitive code... + */ +function readAt($fp, int $pos, int $len) +{ + fseek($fp, $pos); + return fread($fp, $len); +} diff --git a/buildroot/board/syno/rootfs-overlay/root/crc32.php b/buildroot/board/syno/rootfs-overlay/root/crc32.php new file mode 100644 index 000000000..3181a3e6b --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/crc32.php @@ -0,0 +1,7 @@ + 2) { + fwrite(STDERR, "Usage: " . $argv[0] . " \n"); + die(); +} +echo hash_file('crc32b', $argv[1]); +?> diff --git a/buildroot/board/syno/rootfs-overlay/root/init.sh b/buildroot/board/syno/rootfs-overlay/root/init.sh new file mode 100755 index 000000000..8de3938a7 --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/init.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +if grep /dev/null | cpio -o -H newc -R root:root | xz -9 --format=lzma >../rd.gz +find . 2>/dev/null | cpio -o -H newc -R root:root >../rd.gz + +cd .. + +# add fake sign +#dd if=/dev/zero of=rd.gz bs=68 count=1 conv=notrunc oflag=append + +rm -rf ramdisk + +# rebuild zImage +if [[ -f "/temp1/tools/vmlinux-to-bzImage.sh" ]]; then + echo -n "Rebuilding zImage using external template..." + /temp1/tools/vmlinux-to-bzImage.sh +else + echo -n "Rebuilding zImage... " + ./vmlinux-to-bzImage.sh +fi + +umount /temp1 +umount /temp2 + +# start +kexec -d --args-linux ./zImage --type=bzImage64 --reuse-cmdline --initrd=./rd.gz +kexec -d -e diff --git a/buildroot/board/syno/rootfs-overlay/root/patch-boot_params-check.php b/buildroot/board/syno/rootfs-overlay/root/patch-boot_params-check.php new file mode 100644 index 000000000..4d14ee32b --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/patch-boot_params-check.php @@ -0,0 +1,140 @@ + 3) { + perr("Usage: " . $argv[0] . " []\n", true); +} + +$file = getArgFilePath(1); +perr("\nGenerating patch for $file\n"); + +//The function will reside in init code part. We don't care we may potentially search beyond as we expect it to be found +$codeAddr = getELFSectionAddr($file, '.init.text', 3); + +//Finding a function boundary is non-trivial really as patters can vary, we can have multiple exit points, and in CISC +// there are many things which may match e.g. "PUSH EBP". Implementing even a rough disassembler is pointless. +//However, we can certainly cheat here as we know with CDECL a non-empty function will always contain one or more +// PUSH (0x41) R12-R15 (0x54-57) sequences. Then we can search like a 1K forward for these characteristic LOCK OR. +const PUSH_R12_R15_SEQ = [0x41, [0x54, 0x57]]; +const PUSH_R12_R15_SEQ_LEN = 2; +const LOCK_OR_LOOK_AHEAD = 1024; +const LOCK_OR_PTR_SEQs = [ + [0xF0, 0x80, null, null, null, null, null, 0x01], + [0xF0, 0x80, null, null, null, null, null, 0x02], + [0xF0, 0x80, null, null, null, null, null, 0x04], + [0xF0, 0x80, null, null, null, null, null, 0x08], +]; +const LOCK_OR_PTR_SEQs_NUM = 4; //how many sequences we are expecting +const LOCK_OR_PTR_SEQ_LEN = 8; //length of a single sequence + +$fp = getFileMemMapped($file); //Read the whole file to memory to make fseet/fread much faster +$pos = $codeAddr; //Start from where code starts +$orsPos = null; //When matched it will contain our resulting file offsets to LOCK(); OR BYTE PTR [rip+...],0x calls +perr("Looking for f() candidates...\n"); +do { + $find = findSequenceWithWildcard($fp, PUSH_R12_R15_SEQ, $pos, -1); + if ($find === -1) { + break; //no more "functions" left + } + + perr("\rAnalyzing f() candidate @ " . decTo32bUFhex($pos)); + + //we found something looking like PUSH R12-R15, now find the ORs + $orsPos = []; //file offsets where LOCK() calls should start + $orsPosNum = 0; //Number of LOCK(); OR ptr sequences found + $seqPos = $pos; + foreach (LOCK_OR_PTR_SEQs as $idx => $seq) { + $find = findSequenceWithWildcard($fp, $seq, $seqPos, LOCK_OR_LOOK_AHEAD); + if ($find === -1) { + break; //Seq not found - there's no point to look further + } + + $orsPos[] = $find; + ++$orsPosNum; + $seqPos = $find + LOCK_OR_PTR_SEQ_LEN; //Next search will start after the current sequence code + } + + //We can always move forward by the function token length (obvious) but if we couldn't find any LOCK-OR tokens + // we can skip the whole look ahead distance. We CANNOT do that if we found even a single token because the next one + // might have been just after the look ahead distance + if ($orsPosNum !== LOCK_OR_PTR_SEQs_NUM) { + $pos += PUSH_R12_R15_SEQ_LEN; + if ($orsPosNum === 0) { + $pos += LOCK_OR_LOOK_AHEAD; + } + continue; //Continue the main search loop to find next function candidate + } + + //We found LOCK(); OR ptr sequences so we can print some logs and collect ptrs (as this is quite expensive) + $seqPtrsDist = []; + perr("\n[?] Found possible f() @ " . decTo32bUFhex($pos) . "\n"); + $ptrOffset = null; + $equalJumps = 0; + foreach (LOCK_OR_PTR_SEQs as $idx => $seq) { + //data will have the following bytes: + // [0-LOCK()] [1-OR()] [2-BYTE-PTR] [3-OFFS-b3] [4-OFFS-b2] [5-OFFS-b1] [6-OFFS-b1] [7-NUMBER] + $seqData = readAt($fp, $orsPos[$idx], LOCK_OR_PTR_SEQ_LEN); + $newPtrOffset = //how far it "jumps" + $orsPos[$idx] + + (unpack('V', $seqData[3] . $seqData[4] . $seqData[5] . $seqData[6])[1]); //u32 bit LE + + if($ptrOffset === null) { + $ptrOffset = $newPtrOffset; //Save the first one to compare in the next loop + ++$equalJumps; + } elseif ($ptrOffset === $newPtrOffset) { + ++$equalJumps; + } + + perr( + "\t[+] Found LOCK-OR#$idx sequence @ " . decTo32bUFhex($orsPos[$idx]) . " => " . + rawToUFhex($seqData) . " [RIP+(dec)$newPtrOffset]\n" + ); + } + if ($equalJumps !== 4) { + perr("\t[-] LOCK-OR PTR offset mismatch - $equalJumps/" . LOCK_OR_PTR_SEQs_NUM . " matched\n"); + //If the pointer checking failed we can at least move beyond the last LOCK-OR found as we know there's no valid + // sequence of LOCK-ORs there + $pos = $orsPos[3]; + continue; + } + + perr("\t[+] All $equalJumps LOCK-OR PTR offsets equal - match found!\n"); + break; +} while(!feof($fp)); + +if ($orsPos === null) { //There's a small chance no candidates with LOCK ORs were found + perr("Failed to find matching sequences", true); +} + +//Patch offsets +foreach ($orsPos as $seqFileOffset) { + //The offset will point at LOCK(), we need to change the OR (0x80 0x0d) to AND (0x80 0x25) so the two bytes after + $seqFileOffset = $seqFileOffset+2; + + perr("Patching OR to AND @ file offset (dec)$seqFileOffset\n"); + fseek($fp, $seqFileOffset); + fwrite($fp, "\x25"); //0x0d is OR, 0x25 is AND +} + +if (!isset($argv[2])) { + perr("No output file specified - discarding data\n"); + exit; +} + +saveStreamToFile($fp, $argv[2]); +fclose($fp); diff --git a/buildroot/board/syno/rootfs-overlay/root/patch-ramdisk-check.php b/buildroot/board/syno/rootfs-overlay/root/patch-ramdisk-check.php new file mode 100644 index 000000000..cc8f160bf --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/patch-ramdisk-check.php @@ -0,0 +1,84 @@ + 3) { + perr("Usage: " . $argv[0] . " []\n", true); +} + +$file = getArgFilePath(1); +perr("\nGenerating patch for $file\n"); + +//Strings (e.g. error for printk()) reside in .rodata - start searching there to save time +$rodataAddr = getELFSectionAddr($file, '.rodata', 2); + +//Locate the precise location of "ramdisk error" string +$rdErrAddr = getELFStringLoc($file, '3ramdisk corrupt'); + + +//offsets will be 32 bit in ASM and in LE +$errPrintAddr = $rodataAddr + $rdErrAddr; +$errPrintCAddrLEH = decTo32bLEhex($errPrintAddr - 1); //Somehow rodata contains off-by-one sometimes... +$errPrintAddrLEH = decTo32bLEhex($errPrintAddr); +perr("LE arg addr: " . $errPrintCAddrLEH . "\n"); + +$fp = getFileMemMapped($file); //Read the whole file to memory to make fseet/fread much faster + +//Find the printk() call argument +$printkPos = findSequence($fp, hex2raw($errPrintCAddrLEH), 0, DIR_FWD, -1); +if ($printkPos === -1) { + perr("printk pos not found!\n", true); +} +perr("Found printk arg @ " . decTo32bUFhex($printkPos) . "\n"); + +//double check if it's a MOV reg,VAL (where reg is EAX/ECX/EDX/EBX/ESP/EBP/ESI/EDI) +fseek($fp, $printkPos - 3); +$instr = fread($fp, 3); +if (strncmp($instr, "\x48\xc7", 2) !== 0) { + perr("Expected MOV=>reg before printk error, got " . bin2hex($instr) . "\n", true); +} +$dstReg = ord($instr[2]); +if ($dstReg < 192 || $dstReg > 199) { + perr("Expected MOV w/reg operand [C0-C7], got " . bin2hex($instr[2]) . "\n", true); +} +$movPos = $printkPos - 3; +perr("Found printk MOV @ " . decTo32bUFhex($movPos) . "\n"); + +//now we should seek a reasonable amount (say, up to 32 bytes) for a sequence of CALL x => TEST EAX,EAX => JZ +$testPos = findSequence($fp, "\x85\xc0", $movPos, DIR_RWD, 32); +if ($testPos === -1) { + perr("Failed to find TEST eax,eax\n", true); +} + +$jzPos = $testPos + 2; +fseek($fp, $jzPos); +$jz = fread($fp, 2); +if ($jz[0] !== "\x74") { + perr("Failed to find JZ\n", true); +} + +$jzp = "\xEB" . $jz[1]; +perr('OK - patching ' . bin2hex($jz) . " (JZ) to " . bin2hex($jzp) . " (JMP) @ $jzPos\n"); +fseek($fp, $jzPos); //we should be here already +perr("Patched " . fwrite($fp, $jzp) . " bytes in memory\n"); + +if (!isset($argv[2])) { + perr("No output file specified - discarding data\n"); + exit; +} + +if (!isset($argv[2])) { + perr("No output file specified - discarding data\n"); + exit; +} + +saveStreamToFile($fp, $argv[2]); +fclose($fp); diff --git a/buildroot/board/syno/rootfs-overlay/root/vmlinux-to-bzImage.sh b/buildroot/board/syno/rootfs-overlay/root/vmlinux-to-bzImage.sh new file mode 100755 index 000000000..f2aa3fc59 --- /dev/null +++ b/buildroot/board/syno/rootfs-overlay/root/vmlinux-to-bzImage.sh @@ -0,0 +1,61 @@ +#!/bin/sh + +#zImage_head 16494 +#payload( +# vmlinux.bin x +# padding 0xf00000-x +# vmlinux.bin size 4 +#) 0xf00004 +#zImage_tail( +# unknown 72 +# run_size 4 +# unknown 30 +# vmlinux.bin size 4 +# unknown 114460 +#) 114570 +#crc32 4 + +# Adapted from: scripts/Makefile.lib +# Usage: size_append FILE [FILE2] [FILEn]... +# Output: LE HEX with size of file in bytes (to STDOUT) +file_size_le () { + printf $( + dec_size=0; + for F in "${@}"; do + fsize=$(stat -c "%s" $F); + dec_size=$(expr $dec_size + $fsize); + done; + printf "%08x\n" $dec_size | + sed 's/\(..\)/\1 /g' | { + read ch0 ch1 ch2 ch3; + for ch in $ch3 $ch2 $ch1 $ch0; do + printf '%s%03o' '\' $((0x$ch)); + done; + } + ) +} + +size_le () { + printf $( + printf "%08x\n" "${@}" | + sed 's/\(..\)/\1 /g' | { + read ch0 ch1 ch2 ch3; + for ch in $ch3 $ch2 $ch1 $ch0; do + printf '%s%03o' '\' $((0x$ch)); + done; + } + ) +} +SCRIPT_DIR=`dirname $0` +VMLINUX_MOD=$PWD/vmlinux.bin +ZIMAGE_MOD=$PWD/zImage +gzip -cd $SCRIPT_DIR/zImage_template.gz > $ZIMAGE_MOD + +dd if=$VMLINUX_MOD of=$ZIMAGE_MOD bs=16494 seek=1 conv=notrunc +file_size_le $VMLINUX_MOD | dd of=$ZIMAGE_MOD bs=15745134 seek=1 conv=notrunc + +RUN_SIZE=$(objdump -h $VMLINUX_MOD | sh $PWD/calc_run_size.sh) +size_le $RUN_SIZE | dd of=$ZIMAGE_MOD bs=15745210 seek=1 conv=notrunc +file_size_le $VMLINUX_MOD | dd of=$ZIMAGE_MOD bs=15745244 seek=1 conv=notrunc +# cksum $ZIMAGE_MOD # https://blog.box.com/crc32-checksums-the-good-the-bad-and-the-ugly +size_le $(($((16#$(php $PWD/crc32.php $ZIMAGE_MOD))) ^ 0xFFFFFFFF)) | dd of=$ZIMAGE_MOD conv=notrunc oflag=append diff --git a/buildroot/board/syno/rootfs-overlay/root/zImage_template.gz b/buildroot/board/syno/rootfs-overlay/root/zImage_template.gz new file mode 100644 index 000000000..cb00ed1ab Binary files /dev/null and b/buildroot/board/syno/rootfs-overlay/root/zImage_template.gz differ diff --git a/buildroot/configs/syno_defconfig b/buildroot/configs/syno_defconfig new file mode 100644 index 000000000..ed164781c --- /dev/null +++ b/buildroot/configs/syno_defconfig @@ -0,0 +1,34 @@ +BR2_x86_64=y +BR2_SHARED_LIBS=y +# BR2_STATIC_LIBS is not set +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_LZMA=y +BR2_TARGET_ROOTFS_INITRAMFS=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_USE_WCHAR=y +BR2_PACKAGE_PHP=y +BR2_PACKAGE_PHP_SAPI_CLI=y +BR2_PACKAGE_BINUTILS=y +BR2_PACKAGE_BINUTILS_TARGET=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_CPIO=y +BR2_PACKAGE_KEXEC=y +BR2_PACKAGE_KEXEC_ZLIB=y + +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_PACKAGE_QUICKJS=y + +BR2_PACKAGE_EUDEV=y +# Use custom busybox to enable `stat` +BR2_PACKAGE_BUSYBOX_CONFIG="board/syno/busybox.config" + +# +# Kernel +# +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_DEFCONFIG="x86_64" +BR2_LINUX_KERNEL_LZMA=y + +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_OVERLAY="board/syno/rootfs-overlay" diff --git a/bundled-exts.json b/bundled-exts.json index 0e0a6be78..c633a844e 100644 --- a/bundled-exts.json +++ b/bundled-exts.json @@ -1,4 +1,4 @@ { - "thethorgroup.virtio": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/rpext-index.json", - "thethorgroup.boot-wait": "https://raw.githubusercontent.com/RedPill-TTG/redpill-boot-wait/master/rpext-index.json" + "thethorgroup.virtio": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/rpext-index.json", + "thethorgroup.boot-wait": "https://github.com/jumkey/redpill-load/raw/develop/redpill-boot-wait/rpext-index.json" } diff --git a/config/DS1621+/7.0.1-42218/config.json b/config/DS1621+/7.0.1-42218/config.json new file mode 100644 index 000000000..f89a05050 --- /dev/null +++ b/config/DS1621+/7.0.1-42218/config.json @@ -0,0 +1,112 @@ +{ + "os": { + "id": "ds1621p_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS1621%2B_42218.pat", + "sha256": "19f56827ba8bf0397d42cd1d6f83c447f092c2c1bbb70d8a2ad3fbd427e866df" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "f4648d0dd6b29ef6149b0ff46afe1fe32f81730aa79af72f37ffd3647c76f586" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "73512c7bceb34cf7f7f93c2703db60496da0e27274fc45e5aefa0366c9734d6e" + }, + "vmlinux": { + "sha256": "1b5dfa049df20c00bb5fe33ac561daf994248ca3e536a2c2eac9b6ec236f13c7" + } + }, + + "patches": { + "zlinux": [ + "zImage-001-1621p-42218-ramdisk-and-flag-NOP.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS1621+", + "SMBusHddDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS1621+ v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS1621+ v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS1621+/7.0.1-42218/zImage-001-1621p-42218-ramdisk-and-flag-NOP.bsp b/config/DS1621+/7.0.1-42218/zImage-001-1621p-42218-ramdisk-and-flag-NOP.bsp new file mode 100644 index 000000000..13a364ea4 Binary files /dev/null and b/config/DS1621+/7.0.1-42218/zImage-001-1621p-42218-ramdisk-and-flag-NOP.bsp differ diff --git a/config/DS2422+/7.0.1-42218/config.json b/config/DS2422+/7.0.1-42218/config.json new file mode 100644 index 000000000..9f36abd8b --- /dev/null +++ b/config/DS2422+/7.0.1-42218/config.json @@ -0,0 +1,111 @@ +{ + "os": { + "id": "ds2422p_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS2422%2B_42218.pat", + "sha256": "415c54934d483a2557500bc3a2e74588a0cec1266e1f0d9a82a7d3aace002471" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "38281a90036fffcb41cd17f05a6c7e9a1d5740a78c135980fb0c3a6d0ca1485f" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "2b5b8dd90b2e6020ffccc2719d8bc16d9935421754a8c088d6b31dbca4e4ff7b" + }, + "vmlinux": { + "sha256": "" + } + }, + + "patches": { + "zlinux": [ + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS2422+", + "SMBusHddDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS2422+ v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS2422+ v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS3615xs/7.0-41222/config.json b/config/DS3615xs/7.0-41222/config.json index 96d7d5b1c..d96eb1e0a 100644 --- a/config/DS3615xs/7.0-41222/config.json +++ b/config/DS3615xs/7.0-41222/config.json @@ -65,6 +65,7 @@ "menu_entries": { "RedPill DS3615xs v7.0-41222 Beta (USB, Verbose)": { "options": [ + "savedefault", "set root=(hd0,msdos1)", "echo Loading Linux...", "linux /zImage @@@CMDLINE@@@", @@ -80,6 +81,7 @@ }, "RedPill DS3615xs v7.0-41222 Beta (SATA, Verbose)": { "options": [ + "savedefault", "set root=(hd0,msdos1)", "echo Loading Linux...", "linux /zImage @@@CMDLINE@@@", diff --git a/config/DS3615xs/7.0.1-42218/config.json b/config/DS3615xs/7.0.1-42218/config.json new file mode 100644 index 000000000..204dbbd5e --- /dev/null +++ b/config/DS3615xs/7.0.1-42218/config.json @@ -0,0 +1,114 @@ +{ + "os": { + "id": "ds3615xs_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3615xs_42218.pat", + "sha256": "dddd26891815ddca02d0d53c1d42e8b39058b398a4cc7b49b80c99f851cf0ef7" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "d29b695612710376734cb5c5b5ae4f2d8afc49ffd640387e1c86010f6c7d2c8a" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "4c90c3c7ee25b5fcc651552e80a9364d22823c863c834c5f43e3344a3a68af78" + }, + "vmlinux": { + "sha256": "69569a0703fcd0a3a492dd1066eb6c3b90ea41e5793a5eac960d27b6f3afa916" + } + }, + + "patches": { + "_comment": ".bsp patches are applied to FILES using bspatch(1); .patch are applied to DIRECTORIES using patch(1)", + "zlinux": [ + "zImage-001-3615xs-42218-ramdisk-and-header.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + "synoinfo": { + "maxdisks": "15", + "internalportcfg": "0x78FF", + "esataportcfg": "0x0", + "usbportcfg": "0x8700" + }, + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS3615xs", + "syno_hdd_powerup_seq": 0, + "HddHotplug": 0, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "withefi": null, + "elevator": "elevator", + "syno_port_thaw": 1, + "syno_hdd_detect": 0, + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS3615xs v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS3615xs v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 1, + "log_buf_len": "32M" + } + } + } + }, + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v3.10.108.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@COMMON@@@/tools": "tools", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS3615xs/7.0.1-42218/zImage-001-3615xs-42218-ramdisk-and-header.bsp b/config/DS3615xs/7.0.1-42218/zImage-001-3615xs-42218-ramdisk-and-header.bsp new file mode 100644 index 000000000..edea27292 Binary files /dev/null and b/config/DS3615xs/7.0.1-42218/zImage-001-3615xs-42218-ramdisk-and-header.bsp differ diff --git a/config/DS3617xs/7.0.1-42218/config.json b/config/DS3617xs/7.0.1-42218/config.json new file mode 100644 index 000000000..d19e367c8 --- /dev/null +++ b/config/DS3617xs/7.0.1-42218/config.json @@ -0,0 +1,113 @@ +{ + "os": { + "id": "ds3617xs_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3617xs_42218.pat", + "sha256": "d65ee4ed5971e38f6cdab00e1548183435b53ba49a5dca7eaed6f56be939dcd2" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "28a75e0b680517d39374260eb981b8ca9ace8810b121a30b8036fa09cfcb77fc" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "1b2e86fbf4006f6aa40dcd674ad449feed8b0b8317a71e2bb8bb986a74e08c57" + }, + "vmlinux": { + "sha256": "74ff31a80a99d42974470a83cea20961bd4e294c525eefd0770fa0575f755ada" + } + }, + + "patches": { + "_comment": ".bsp patches are applied to FILES using bspatch(1); .patch are applied to DIRECTORIES using patch(1)", + "zlinux": [ + "zImage-001-3617xs-42218-ramdisk-and-header.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + "synoinfo": { + "maxdisks": "15", + "internalportcfg": "0x78FF", + "esataportcfg": "0x0", + "usbportcfg": "0x8700" + }, + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS3617xs", + "syno_hdd_powerup_seq": 0, + "HddHotplug": 0, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "withefi": null, + "elevator": "elevator", + "syno_port_thaw": 1, + "syno_hdd_detect": 0, + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS3617xs v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS3617xs v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 1, + "log_buf_len": "32M" + } + } + } + }, + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS3617xs/7.0.1-42218/zImage-001-3617xs-42218-ramdisk-and-header.bsp b/config/DS3617xs/7.0.1-42218/zImage-001-3617xs-42218-ramdisk-and-header.bsp new file mode 100644 index 000000000..8908b6f8c Binary files /dev/null and b/config/DS3617xs/7.0.1-42218/zImage-001-3617xs-42218-ramdisk-and-header.bsp differ diff --git a/config/DS3622xs+/7.0.1-42218/config.json b/config/DS3622xs+/7.0.1-42218/config.json new file mode 100644 index 000000000..7cd1da007 --- /dev/null +++ b/config/DS3622xs+/7.0.1-42218/config.json @@ -0,0 +1,118 @@ +{ + "os": { + "id": "ds3622xsp_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat", + "sha256": "f38329b8cdc5824a8f01fb1e377d3b1b6bd23da365142a01e2158beff5b8a424" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "06964b68e5ccdedd4363dff3986f99686d3c9cb5225e8e4c3d840a1d9cd1330b" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "a95d4ab06189460f3b3d13a33e421887b5f3ea09a10535ae0d4c92beb7ff631d" + }, + "vmlinux": { + "sha256": "0c5e4da2e3745a6ae7d63787442dbd2c3b2239bce857f0451e9e87bbc6456b15" + } + }, + + "patches": { + "_comment": ".bsp patches are applied to FILES using bspatch(1); .patch are applied to DIRECTORIES using patch(1)", + "zlinux": [ + "zImage-001-3622xsp-42218-ramdisk-and-header.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + "maxdisks": "25", + "internalportcfg": "0xffff", + "esataportcfg": "0x0", + "support_bde_internal_10g": "no", + "support_disk_compatibility": "no" + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS3622xs+", + "syno_hdd_powerup_seq": 0, + "HddHotplug": 0, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "withefi": null, + "elevator": "elevator", + "syno_port_thaw": 1, + "syno_hdd_detect": 0, + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS3622xs+ v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS3622xs+ v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 1, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS3622xs+/7.0.1-42218/zImage-001-3622xsp-42218-ramdisk-and-header.bsp b/config/DS3622xs+/7.0.1-42218/zImage-001-3622xsp-42218-ramdisk-and-header.bsp new file mode 100644 index 000000000..7e4c1d2d9 Binary files /dev/null and b/config/DS3622xs+/7.0.1-42218/zImage-001-3622xsp-42218-ramdisk-and-header.bsp differ diff --git a/config/DS918+/6.2.4-25556/config.json b/config/DS918+/6.2.4-25556/config.json index 7ce91bcd6..39e627257 100644 --- a/config/DS918+/6.2.4-25556/config.json +++ b/config/DS918+/6.2.4-25556/config.json @@ -113,7 +113,8 @@ }, "bootp1_copy": { "@@@PAT@@@/GRUB_VER": "GRUB_VER", - "@@@COMMON@@@/EFI": "EFI" + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" }, "bootp2_copy": { "@@@PAT@@@/GRUB_VER": "GRUB_VER", diff --git a/config/DS918+/7.0-41890/config.json b/config/DS918+/7.0-41890/config.json index f77859f36..5f2b2c314 100644 --- a/config/DS918+/7.0-41890/config.json +++ b/config/DS918+/7.0-41890/config.json @@ -113,7 +113,8 @@ }, "bootp1_copy": { "@@@PAT@@@/GRUB_VER": "GRUB_VER", - "@@@COMMON@@@/EFI": "EFI" + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" }, "bootp2_copy": { "@@@PAT@@@/GRUB_VER": "GRUB_VER", diff --git a/config/DS918+/7.0.1-42218/config.json b/config/DS918+/7.0.1-42218/config.json new file mode 100644 index 000000000..22181e621 --- /dev/null +++ b/config/DS918+/7.0.1-42218/config.json @@ -0,0 +1,120 @@ +{ + "os": { + "id": "ds918p_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS918%2B_42218.pat", + "sha256": "a403809ab2cd476c944fdfa18cae2c2833e4af36230fa63f0cdee31a92bebba2" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "338ba514066da01d0c1f770418916b9b96f5355d88a7b55b398d2726db591fdb" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "4b7a7a271a3b2158d9193a4f0e75c59590949ad7b4e26d546f46cc2ee8504d51" + }, + "vmlinux": { + "sha256": "e5eea089bcb76dc6dce6476be43a4e64c8acd52ba8b9c095a7d165acf196c529" + } + }, + + "patches": { + "zlinux": [ + "zImage-001-918p-42218-ramdisk-and-flag-NOP.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + "maxdisks": "16", + "internalportcfg": "0xffff", + "esataportcfg": "0x0", + "HddHotplug": "", + "support_led_brightness_adjustment": "", + "support_leds_lp3943": "", + "buzzeroffen": "0xffff" + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS918+", + "syno_hdd_powerup_seq": 1, + "HddHotplug": 0, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "withefi": null, + "elevator": "elevator", + "syno_port_thaw": 1, + "syno_hdd_detect": 0, + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS918+ v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS918+ v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS918+/7.0.1-42218/zImage-001-918p-42218-ramdisk-and-flag-NOP.bsp b/config/DS918+/7.0.1-42218/zImage-001-918p-42218-ramdisk-and-flag-NOP.bsp new file mode 100644 index 000000000..483b5fc76 Binary files /dev/null and b/config/DS918+/7.0.1-42218/zImage-001-918p-42218-ramdisk-and-flag-NOP.bsp differ diff --git a/config/DS920+/7.0.1-42218/config.json b/config/DS920+/7.0.1-42218/config.json new file mode 100644 index 000000000..240e23720 --- /dev/null +++ b/config/DS920+/7.0.1-42218/config.json @@ -0,0 +1,113 @@ +{ + "os": { + "id": "ds920p_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS920%2B_42218.pat", + "sha256": "fe2a4648f76adeb65c3230632503ea36bbac64ee88b459eb9bfb5f3b8c8cebb3" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "346b68f662b50f47d3ee6c2bc9de6302e4b60436142c24ee88b620c7afd1ba06" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "f7dd1317f24ec6b9bac839e37f66b59030218c7f97c06f73f1f54ed0f892c4aa" + }, + "vmlinux": { + "sha256": "6494b4c4789ed887ddfaf0fe0e45e100cfcc4ec719b7f3ab6bcc26b05e97c829" + } + }, + + "patches": { + "zlinux": [ + "zImage-001-920p-42218-ramdisk-and-flag-NOP.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS920+", + "intel_iommu": "igfx_off", + "HddEnableDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS920+ v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS920+ v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS920+/7.0.1-42218/zImage-001-920p-42218-ramdisk-and-flag-NOP.bsp b/config/DS920+/7.0.1-42218/zImage-001-920p-42218-ramdisk-and-flag-NOP.bsp new file mode 100644 index 000000000..66a7bffb4 Binary files /dev/null and b/config/DS920+/7.0.1-42218/zImage-001-920p-42218-ramdisk-and-flag-NOP.bsp differ diff --git a/config/DS920+/7.1-42550/config.json b/config/DS920+/7.1-42550/config.json new file mode 100644 index 000000000..06e4d12f8 --- /dev/null +++ b/config/DS920+/7.1-42550/config.json @@ -0,0 +1,121 @@ +{ + "os": { + "id": "ds920p_42550", + "pat_url": "file://localhost/root/DSM_DS920%2B_42550.pat", + "sha256": "41d787bc518c24ba2a044fbe7888738c61a719762628af68ad4b81a870b24f82" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "8f99916a0f5ee0c28fe415ff3aa6587efb1dbd25829c5e74de1b7cd1db8d0b54" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "f220a687f37f16a942f53e7d99bbd30ea440d1ce7ad9dd1b77f85df0019a6c61" + }, + "vmlinux": { + "sha256": "6a5a04759407fbcf728b25d4a66229dc37e1ddc3445b5886cefe5cb2b8157480" + } + }, + + "patches": { + "zlinux": [ + "zImage-001-920p-42550-ramdisk-and-flag-NOP.bsp" + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + "rss_server": "http://example.com/autoupdate/genRSS.php", + "rss_server_ssl": "https://example.com/autoupdate/genRSS.php", + "small_info_path": "https://example.com/smallupdate", + "updateurl": "http://example.com/", + "myds_region_api_base_url": "https://example.com/" + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS920+", + "intel_iommu": "igfx_off", + "HddEnableDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "RedPill DS920+ v7.1-42550 Beta (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,msdos1)", + "echo Loading Linux...", + "linux /zImage @@@CMDLINE@@@", + "echo Loading initramfs...", + "initrd /rd.gz /custom.gz", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "RedPill DS920+ v7.1-42550 Beta (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,msdos1)", + "echo Loading Linux...", + "linux /zImage @@@CMDLINE@@@", + "echo Loading initramfs...", + "initrd /rd.gz /custom.gz", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DS920+/7.1-42550/zImage-001-920p-42550-ramdisk-and-flag-NOP.bsp b/config/DS920+/7.1-42550/zImage-001-920p-42550-ramdisk-and-flag-NOP.bsp new file mode 100644 index 000000000..9c332d2c9 Binary files /dev/null and b/config/DS920+/7.1-42550/zImage-001-920p-42550-ramdisk-and-flag-NOP.bsp differ diff --git a/config/DS923+/7.1.1-42962/config.json b/config/DS923+/7.1.1-42962/config.json new file mode 100644 index 000000000..5df9c3f67 --- /dev/null +++ b/config/DS923+/7.1.1-42962/config.json @@ -0,0 +1,112 @@ +{ + "os": { + "id": "ds923p_42962", + "pat_url": "file://localhost/root/DSM_DS923%2B_42962.pat", + "sha256": "a2bcfae34eda13f65bc7ee453b63bab982e2db9891a680968bc24ef5035ae8d8" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "1e54804c84e0b4e7f71eff5b5ec8aad9c6ba8fb4fc200ad92251d7d29155a651" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "0aa3f1b2d00f887aaf0d0e2c8b51ec97bb545bf5f99c40f33d3eaabc32a5ac03" + }, + "vmlinux": { + "sha256": "" + } + }, + + "patches": { + "zlinux": [ + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DS923+", + "intel_iommu": "igfx_off", + "HddEnableDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DS923+ v7.1.1-42962 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DS923+ v7.1.1-42962 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DVA1622/7.1-42661/config.json b/config/DVA1622/7.1-42661/config.json new file mode 100644 index 000000000..a5dafe43c --- /dev/null +++ b/config/DVA1622/7.1-42661/config.json @@ -0,0 +1,112 @@ +{ + "os": { + "id": "dva1622_42661", + "pat_url": "file://localhost/root/content.tar", + "sha256": "99f60f0c2b54c0a2adbc01d79e872273488ba43296a7a74904c462bc423b7dfe" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "a31e91a62ab6f3ff986bc7fcfde0a56a292c15e17735e7b5fad573d333cf7de4" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "32ee25e7a806eb481cc858edd7f1e341c85c7627ea03788f8466716432830d33" + }, + "vmlinux": { + "sha256": "" + } + }, + + "patches": { + "zlinux": [ + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DVA1622", + "intel_iommu": "igfx_off", + "HddEnableDynamicPower": 1, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "synoboot2": null, + "elevator": "elevator", + "syno_ttyS0": "serial,0x3f8", + "syno_ttyS1": "serial,0x2f8", + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DVA1622 v7.1-42661 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DVA1622 v7.1-42661 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/DVA3221/7.0.1-42218/config.json b/config/DVA3221/7.0.1-42218/config.json new file mode 100644 index 000000000..25711ee14 --- /dev/null +++ b/config/DVA3221/7.0.1-42218/config.json @@ -0,0 +1,113 @@ +{ + "os": { + "id": "dva3221_42218", + "pat_url": "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DVA3221_42218.pat", + "sha256": "01f101d7b310c857e54b0177068fb7250ff722dc9fa2472b1a48607ba40897ee" + }, + + "files": { + "zlinux": { + "name": "zImage", + "sha256": "ef97f2d64f3f7f8c5e3f4e8fee613d385d7888826f56e119f1885a722c95c7cc" + }, + "ramdisk": { + "name": "rd.gz", + "sha256": "0825958923a5e67d967389769cff5fb7a04a25b98a2826c4c1e8aa7b8146dc8b" + }, + "vmlinux": { + "sha256": "f9abb018c9e5f05db887c9457703d7a985b85f9e73ea3c20ea0b0b2c0b4134e7" + } + }, + + "patches": { + "_comment": ".bsp patches are applied to FILES using bspatch(1); .patch are applied to DIRECTORIES using patch(1)", + "zlinux": [ + ], + "ramdisk": [ + "@@@COMMON@@@/ramdisk-001-disable-root-pwd.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-002-init-script.patch", + "@@@COMMON@@@/v7.0.1/ramdisk-003-post-init-script.patch" + ] + }, + + "synoinfo": { + }, + + "grub": { + "template": "@@@COMMON@@@/grub-template.conf", + "base_cmdline": { + "sn": "", + "vid": "0x46f4", + "pid": "0x0001", + "mac1": "", + "netif_num": 1, + + "syno_hw_version": "DVA3221", + "syno_hdd_powerup_seq": 0, + "HddHotplug": 0, + "vender_format_version": 2, + "console": "ttyS0,115200n8", + "withefi": null, + "elevator": "elevator", + "syno_port_thaw": 1, + "syno_hdd_detect": 0, + "root": "/dev/md0", + "earlycon": "uart8250,io,0x3f8,115200n8" + }, + + "menu_entries": { + "Yet Another Jun`s Mod x RedPill DVA3221 v7.0.1-42218 (USB, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with USB boot" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "log_buf_len": "32M" + } + }, + "Yet Another Jun`s Mod x RedPill DVA3221 v7.0.1-42218 (SATA, Verbose)": { + "options": [ + "savedefault", + "set root=(hd0,2)", + "echo Loading Linux...", + "linux /bzImage @@@CMDLINE@@@", + "echo Starting kernel with SATA boot", + "echo WARNING: SATA boot support on this platform is experimental!" + ], + "cmdline": { + "earlyprintk": null, + "loglevel": 15, + "synoboot_satadom": 2, + "log_buf_len": "32M" + } + } + } + }, + + "extra": { + "compress_rd": false, + "ramdisk_copy": { + "@@@EXT@@@/rp-lkm/redpill-linux-v4.4.180+.ko": "usr/lib/modules/rp.ko", + "@@@COMMON@@@/iosched-trampoline.sh": "usr/sbin/modprobe" + }, + "bootp1_copy": { + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.conf": "EFI/BOOT/", + "@@@COMMON@@@/EFI/boot/SynoBootLoader.efi": "EFI/BOOT/" + }, + "bootp2_copy": { + "@@@COMMON@@@/bzImage": "bzImage", + "@@@PAT@@@/GRUB_VER": "GRUB_VER", + "@@@COMMON@@@/EFI": "EFI", + "@@@PAT@@@/grub_cksum.syno": "grub_cksum.syno", + "@@@PAT@@@/rd.gz": "rd.gz", + "@@@PAT@@@/zImage": "zImage" + } + } +} + diff --git a/config/_common/bzImage b/config/_common/bzImage new file mode 100644 index 000000000..baa4d90a6 Binary files /dev/null and b/config/_common/bzImage differ diff --git a/config/_common/grub-template.conf b/config/_common/grub-template.conf index 16f6716bf..ad6ec1d59 100644 --- a/config/_common/grub-template.conf +++ b/config/_common/grub-template.conf @@ -45,4 +45,17 @@ set gfxmode=auto insmod vbe insmod vga +# UEFI +insmod efi_gop +insmod efi_uga + +insmod font +if loadfont ${prefix}/unicode.pf2 +then + insmod gfxterm + set gfxmode=auto + set gfxpayload=keep + terminal_output gfxterm +fi + @@@MENU_ENTRIES@@@ diff --git a/config/_common/jun/init b/config/_common/jun/init new file mode 100755 index 000000000..b4dca1135 --- /dev/null +++ b/config/_common/jun/init @@ -0,0 +1,3 @@ +#!/bin/sh +/bin/patch --no-backup-if-mismatch -p1 < /etc/jun.patch +exec /bin/busybox init diff --git a/config/_common/jun/usr/bin/patch b/config/_common/jun/usr/bin/patch new file mode 100755 index 000000000..6a5d10ee0 Binary files /dev/null and b/config/_common/jun/usr/bin/patch differ diff --git a/config/_common/ramdisk-003-post-init-script-LOWER.patch b/config/_common/ramdisk-003-post-init-script-LOWER.patch index 4d176fa35..edccb90dd 100644 --- a/config/_common/ramdisk-003-post-init-script-LOWER.patch +++ b/config/_common/ramdisk-003-post-init-script-LOWER.patch @@ -6,7 +6,7 @@ functions or quotes in v7, to make diffing and management of these patches easie +++ b/usr/sbin/init.post @@ -18,5 +18,28 @@ fi - Mmount $RootDevice /tmpRoot -o barrier=1 + mount $RootDevice /tmpRoot -o barrier=1 +############################################################################################ +SED_PATH='/tmpRoot/usr/bin/sed' diff --git a/config/_common/tools/vmlinux-to-bzImage.sh b/config/_common/tools/vmlinux-to-bzImage.sh new file mode 100755 index 000000000..3ca059ee9 --- /dev/null +++ b/config/_common/tools/vmlinux-to-bzImage.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +#zImage_head 16478 +#payload( +# vmlinux.bin x +# padding 0xf00000-x +# vmlinux.bin size 4 +#) 0xf00004 +#zImage_tail 114538 +#crc32 4 + +# Adapted from: scripts/Makefile.lib +# Usage: size_append FILE [FILE2] [FILEn]... +# Output: LE HEX with size of file in bytes (to STDOUT) +file_size_le () { + printf $( + dec_size=0; + for F in "${@}"; do + fsize=$(stat -c "%s" $F); + dec_size=$(expr $dec_size + $fsize); + done; + printf "%08x\n" $dec_size | + sed 's/\(..\)/\1 /g' | { + read ch0 ch1 ch2 ch3; + for ch in $ch3 $ch2 $ch1 $ch0; do + printf '%s%03o' '\' $((0x$ch)); + done; + } + ) +} + +size_le () { + printf $( + printf "%08x\n" "${@}" | + sed 's/\(..\)/\1 /g' | { + read ch0 ch1 ch2 ch3; + for ch in $ch3 $ch2 $ch1 $ch0; do + printf '%s%03o' '\' $((0x$ch)); + done; + } + ) +} +SCRIPT_DIR=`dirname $0` +VMLINUX_MOD=$PWD/vmlinux.bin +ZIMAGE_MOD=$PWD/zImage +gzip -cd $SCRIPT_DIR/zImage_template_v3.gz > $ZIMAGE_MOD + +dd if=$VMLINUX_MOD of=$ZIMAGE_MOD bs=16478 seek=1 conv=notrunc +file_size_le $VMLINUX_MOD | dd of=$ZIMAGE_MOD bs=15745118 seek=1 conv=notrunc +# cksum $ZIMAGE_MOD # https://blog.box.com/crc32-checksums-the-good-the-bad-and-the-ugly +size_le $(($((16#$(php $PWD/crc32.php $ZIMAGE_MOD))) ^ 0xFFFFFFFF)) | dd of=$ZIMAGE_MOD conv=notrunc oflag=append diff --git a/config/_common/tools/zImage_template_v3.gz b/config/_common/tools/zImage_template_v3.gz new file mode 100644 index 000000000..09af288d2 Binary files /dev/null and b/config/_common/tools/zImage_template_v3.gz differ diff --git a/config/_common/v7.0.1/ramdisk-002-init-script.patch b/config/_common/v7.0.1/ramdisk-002-init-script.patch new file mode 100644 index 000000000..2e125f346 --- /dev/null +++ b/config/_common/v7.0.1/ramdisk-002-init-script.patch @@ -0,0 +1,11 @@ +--- a/linuxrc.syno.impl ++++ b/linuxrc.syno.impl +@@ -155,6 +155,8 @@ fi + # insert basic USB modules for detect f401/FDT + echo "Insert basic USB modules..." + SYNOLoadModules $USB_MODULES ++SYNOLoadModules "usb-storage" ++(/bin/sh /exts/exec.sh load_kmods && /bin/sh /exts/exec.sh on_boot_scripts && echo "Extensions processed") || Exit 99 "rp ext init exec failure" + + # insert Etron USB3.0 drivers + diff --git a/config/_common/v7.0.1/ramdisk-003-post-init-script.patch b/config/_common/v7.0.1/ramdisk-003-post-init-script.patch new file mode 100644 index 000000000..9caf418bc --- /dev/null +++ b/config/_common/v7.0.1/ramdisk-003-post-init-script.patch @@ -0,0 +1,32 @@ +--- a/usr/sbin/init.post ++++ b/usr/sbin/init.post +@@ -18,6 +18,29 @@ if [ "$UniqueRD" = "nextkvmx64" ]; then + fi + Mount "$RootDevice" /tmpRoot -o barrier=1 + ++############################################################################################ ++SED_PATH='/tmpRoot/usr/bin/sed' ++ ++@@@CONFIG-MANIPULATORS-TOOLS@@@ ++ ++@@@CONFIG-GENERATED@@@ ++ ++UPSTART="/tmpRoot/usr/share/init" ++ ++if ! echo; then ++ _replace_in_file '^start on' '#start on' $UPSTART/tty.conf ++ _replace_in_file "console output" "console none" $UPSTART/syno_poweroff_task.conf ++ _replace_in_file "console output" "console none" $UPSTART/burnin_loader.conf ++ _replace_in_file "console output" "console none" $UPSTART/udevtrigger.conf ++ _replace_in_file "console output" "console none" $UPSTART/bs-poweroff.conf ++ _replace_in_file "console output" "console none" $UPSTART/udevd.conf ++else ++ _replace_in_file '^#start on' 'start on' $UPSTART/tty.conf ++fi ++ ++(/bin/sh /exts/exec.sh on_os_load_scripts && echo "OS load extensions processed") || Exit 99 "rp ext post exec failure" ++############################################################################################ ++ + Mkdir -p /tmpRoot/initrd + + Umount /proc >/dev/null 2>&1 diff --git a/config/_common/v7.0.1/ramdisk-004-network-hosts.patch b/config/_common/v7.0.1/ramdisk-004-network-hosts.patch new file mode 100644 index 000000000..b24d8f32b --- /dev/null +++ b/config/_common/v7.0.1/ramdisk-004-network-hosts.patch @@ -0,0 +1,7 @@ +--- a/etc/hosts ++++ b/etc/hosts +@@ -2,3 +2,4 @@ + # that require network functionality will fail. + 127.0.0.1 localhost + ::1 localhost ++127.0.0.1 update7.synology.com diff --git a/ext-manager.sh b/ext-manager.sh index 131fcc6b4..139d28148 100755 --- a/ext-manager.sh +++ b/ext-manager.sh @@ -357,12 +357,16 @@ mrp_fetch_new_ext_recipe() local recipe_url; recipe_url=$(brp_json_get_field "${index_file}" "releases.${2}" 1) if [[ $? -ne 0 ]] || [[ "${recipe_url}" == 'null' ]]; then - pr_err "The extension %s was found. However, the extension index has no recipe for %s platform. It may not be" "${1}" "${2}" - pr_err "supported on that platform, or author didn't updated it for that platform yet. You can try running" - pr_err "\"%s update\" to refresh indexes for all extensions manually. Below are the currently known information about" "${MRP_SRC_NAME}" - pr_err "the extension stored locally:" - mrp_show_ext_info "${1}" - return 1 + pr_warn "Failed to get recipe for %s try fallback to \"_\"" "${2}" + recipe_url=$(brp_json_get_field "${index_file}" "releases._" 1) + if [[ $? -ne 0 ]] || [[ "${recipe_url}" == 'null' ]]; then + pr_err "The extension %s was found. However, the extension index has no recipe for %s platform. It may not be" "${1}" "${2}" + pr_err "supported on that platform, or author didn't updated it for that platform yet. You can try running" + pr_err "\"%s update\" to refresh indexes for all extensions manually. Below are the currently known information about" "${MRP_SRC_NAME}" + pr_err "the extension stored locally:" + mrp_show_ext_info "${1}" + return 1 + fi fi local mrp_tmp_rcp="${RPT_EXTS_DIR}/_ext_new_rcp.tmp_json" diff --git a/ext/boot-image-template.img.gz b/ext/boot-image-template.img.gz index 0be47050e..fc82598dd 100644 Binary files a/ext/boot-image-template.img.gz and b/ext/boot-image-template.img.gz differ diff --git a/ext/build-template-image.txt b/ext/build-template-image.txt index 4beba4744..9f70908f9 100644 --- a/ext/build-template-image.txt +++ b/ext/build-template-image.txt @@ -29,6 +29,14 @@ The following settings were detected by ./configure for the binary release: With stack smashing protector: No ******************************************************* +mkdir build-pc && cd build-pc +../configure --prefix=$PWD/usr -sbindir=$PWD/sbin --sysconfdir=$PWD/etc --disable-werror +make && make install +cd .. +mkdir build && cd build +../configure --prefix=$PWD/usr -sbindir=$PWD/sbin --sysconfdir=$PWD/etc --disable-werror --with-platform=efi --target=x86_64 +make && make install + ######################################################################################################################## ### Create the image ######################################################################################################################## @@ -77,14 +85,18 @@ mkfs.ext2 /dev/loop8p2 ######################################################################################################################## mkdir temp-mount-p1 mount /dev/loop8p1 ./temp-mount-p1 -./grub-2.06/grub-install \ - -d ./grub-2.06/grub-core \ - --target=i386-pc --no-floppy -s \ - --root-directory=$PWD/temp-mount-p1 \ +./grub-2.06/build-pc/grub-install \ + --target=i386-pc --recheck -s \ + --boot-directory=$PWD/temp-mount-p1/boot \ /dev/loop8 -# small note: --root-directory MUST be an absolute path (or it will create it in /) + +./grub-2.06/build/grub-install \ + --target=x86_64-efi \ + --efi-directory=$PWD/temp-mount-p1 \ + --removable --no-nvram -s --no-bootsector --boot-directory=$PWD/temp-mount-p1/boot sync umount /dev/loop8p1 +losetup -d /dev/loop8 ######################################################################################################################## ### Pack image diff --git a/include/boot-image.sh b/include/boot-image.sh index 75bbdbcd0..d9de25669 100644 --- a/include/boot-image.sh +++ b/include/boot-image.sh @@ -145,10 +145,10 @@ brp_generate_grub_conf() pr_dbg "Reading user extra_cmdline entries" local -A extra_cmdline; brp_read_kv_to_array "${2}" 'extra_cmdline' extra_cmdline - if [[ -v ${extra_cmdline['sn']} ]]; then pr_warn "User configuration (%s) doesn't contain unique extra_cmdline.sn" "${2}"; fi - if [[ -v ${extra_cmdline['vid']} ]]; then pr_warn "User configuration (%s) doesn't contain extra_cmdline.vid" "${2}"; fi - if [[ -v ${extra_cmdline['pid']} ]]; then pr_warn "User configuration (%s) doesn't contain extra_cmdline.pid" "${2}"; fi - if [[ -v ${extra_cmdline['mac1']} ]]; then pr_warn "User configuration (%s) doesn't contain at least one MAC (extra_cmdline.mac1)" "${2}"; fi + if [[ -z ${extra_cmdline['sn']-} ]]; then pr_warn "User configuration (%s) doesn't contain unique extra_cmdline.sn" "${2}"; fi + if [[ -z ${extra_cmdline['vid']-} ]]; then pr_warn "User configuration (%s) doesn't contain extra_cmdline.vid" "${2}"; fi + if [[ -z ${extra_cmdline['pid']-} ]]; then pr_warn "User configuration (%s) doesn't contain extra_cmdline.pid" "${2}"; fi + if [[ -z ${extra_cmdline['mac1']-} && -z ${extra_cmdline['macs']-} ]]; then pr_warn "User configuration (%s) doesn't contain at least one MAC (extra_cmdline.mac1 or extra_cmdline.macs)" "${2}"; fi # First generate menu entries pr_dbg "Generating GRUB menu entries" diff --git a/redpill-acpid/acpid.tar.gz b/redpill-acpid/acpid.tar.gz new file mode 100644 index 000000000..e52d2b412 Binary files /dev/null and b/redpill-acpid/acpid.tar.gz differ diff --git a/redpill-acpid/acpid_v6.tar.gz b/redpill-acpid/acpid_v6.tar.gz new file mode 100644 index 000000000..85f6e68d9 Binary files /dev/null and b/redpill-acpid/acpid_v6.tar.gz differ diff --git a/redpill-acpid/button.tgz b/redpill-acpid/button.tgz new file mode 100644 index 000000000..4f2eaa4bf Binary files /dev/null and b/redpill-acpid/button.tgz differ diff --git a/redpill-acpid/recipes/universal.json b/redpill-acpid/recipes/universal.json new file mode 100644 index 000000000..dbf3413aa --- /dev/null +++ b/redpill-acpid/recipes/universal.json @@ -0,0 +1,25 @@ +{ + "files": [ + { + "name": "install-acpid.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/src/install-acpid.sh", + "sha256": "09fb68514f1798af0e3e1bbc51b3169bfc781538d0c6e60843b3b2fbe3a7a8c8", + "packed": false + }, + { + "name": "acpid.tar.gz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/acpid.tar.gz", + "sha256": "4a635465ff75a5481f2d9aa36fbcf26ff302dc29d2de586a14f1f5b50cf37e0c", + "packed": false + }, + { + "name": "button.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/button.tgz", + "sha256": "e8f2eab72236c51c1f708171062e185ffb634872e159c7a74bbe7c3ce1d7b8c3", + "packed": false + } + ], + "scripts": { + "on_os_load": "install-acpid.sh" + } +} diff --git a/redpill-acpid/recipes/universal_v6.json b/redpill-acpid/recipes/universal_v6.json new file mode 100644 index 000000000..d82db79e4 --- /dev/null +++ b/redpill-acpid/recipes/universal_v6.json @@ -0,0 +1,19 @@ +{ + "files": [ + { + "name": "install-acpid_v6.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/src/install-acpid_v6.sh", + "sha256": "d6fff6c18d1c719acd2ee01dee367fd7ee3bfc3f1edb3f9dfb74ab7323bfbad9", + "packed": false + }, + { + "name": "acpid_v6.tar.gz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/acpid_v6.tar.gz", + "sha256": "a25fc3068c9ee1b950bd32c16aa432c40b10602fb234f084a7b9780c18c8bcd3", + "packed": false + } + ], + "scripts": { + "on_os_load": "install-acpid_v6.sh" + } +} diff --git a/redpill-acpid/rpext-index.json b/redpill-acpid/rpext-index.json new file mode 100644 index 000000000..c43a2c8c6 --- /dev/null +++ b/redpill-acpid/rpext-index.json @@ -0,0 +1,29 @@ +{ + "id": "jumkey.acpid2", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/rpext-index.json", + "info": { + "name": "ACPI Daemon v2", + "description": "ACPI Daemon v2 that handles power button events", + "author_url": "https://sourceforge.net/projects/acpid2/", + "packer_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid", + "help_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid" + }, + "releases": { + "_": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "dva3221_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "dva3221_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds3617xs_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds3622xsp_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds3615xs_25556": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal_v6.json", + "ds3615xs_41222": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds3615xs_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds918p_25556": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal_v6.json", + "ds918p_41890": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds918p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json", + "ds918p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-acpid/recipes/universal.json" + } +} diff --git a/redpill-acpid/src/button/4.4.180+/BROADWELL/button.ko b/redpill-acpid/src/button/4.4.180+/BROADWELL/button.ko new file mode 100644 index 000000000..9a543e315 Binary files /dev/null and b/redpill-acpid/src/button/4.4.180+/BROADWELL/button.ko differ diff --git a/redpill-acpid/src/button/4.4.180+/BROADWELLNK/button.ko b/redpill-acpid/src/button/4.4.180+/BROADWELLNK/button.ko new file mode 100755 index 000000000..6a56d3ba5 Binary files /dev/null and b/redpill-acpid/src/button/4.4.180+/BROADWELLNK/button.ko differ diff --git a/redpill-acpid/src/etc/acpi/events/power b/redpill-acpid/src/etc/acpi/events/power new file mode 100644 index 000000000..c86f2dd65 --- /dev/null +++ b/redpill-acpid/src/etc/acpi/events/power @@ -0,0 +1,13 @@ +# /etc/acpi/events/powerbtn +# This is called when the user presses the power button and calls +# /etc/acpi/powerbtn.sh for further processing. + +# Optionally you can specify the placeholder %e. It will pass +# through the whole kernel event message to the program you've +# specified. + +# We need to react on "button power.*" and "button/power.*" because +# of kernel changes. + +event=button[ /]power +action=/etc/acpi/power.sh diff --git a/redpill-acpid/src/etc/acpi/power.sh b/redpill-acpid/src/etc/acpi/power.sh new file mode 100644 index 000000000..b1e5ae28e --- /dev/null +++ b/redpill-acpid/src/etc/acpi/power.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +logger -p err "Shutdown from ACPI" +/usr/syno/sbin/synopoweroff + diff --git a/redpill-acpid/src/etc/init/acpid.conf b/redpill-acpid/src/etc/init/acpid.conf new file mode 100644 index 000000000..6107ea8ce --- /dev/null +++ b/redpill-acpid/src/etc/init/acpid.conf @@ -0,0 +1,26 @@ +description "ACPI daemon" + +author "Virtualization Team" + +start on runlevel 1 +stop on runlevel [06] + +expect fork +respawn +respawn limit 5 10 + +console log + +pre-start script + date + insmod /lib/modules/button.ko + +end script + +post-stop script + rmmod button +end script +exec /usr/sbin/acpid + +# vim:ft=upstart + diff --git a/redpill-acpid/src/install-acpid.sh b/redpill-acpid/src/install-acpid.sh new file mode 100644 index 000000000..d49eef925 --- /dev/null +++ b/redpill-acpid/src/install-acpid.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +SYNOINFO_DEF="/etc.defaults/synoinfo.conf" +UniqueRD=`/bin/get_key_value $SYNOINFO_DEF unique | cut -d"_" -f2` +# check button.ko +if [ ! -f /tmpRoot/lib/modules/button.ko ]; then + tar -zxvf button.tgz + button_dir=$(uname -r)/$UniqueRD + if [ ! -f "${button_dir}/button.ko" ]; then + echo "Error: ${button_dir}/button.ko not found, acpid may not work" + else + cp "${button_dir}/button.ko" /tmpRoot/lib/modules/ + fi +fi + +# download files +#curl -L https://cdn.jsdelivr.net/gh/jumkey/redpill-load@develop/redpill-acpid/acpid.tar.gz -o /tmp/acpid.tar.gz + +# copy file +#tar -zxvf /tmp/acpid.tar.gz -C / +tar -zxvf acpid.tar.gz -C /tmpRoot/ +#install -c -D -m755 acpid -t ${TmpInstDir}/usr/sbin/ +chmod 755 /tmpRoot/usr/sbin/acpid + +# install config files +#install -c -D -m644 SynoFiles/etc/acpi/events/power ${TmpInstDir}/etc/acpi/events/power +#install -c -D -m744 SynoFiles/etc/acpi/power.sh ${TmpInstDir}/etc/acpi/power.sh +#install -c -D -m744 SynoFiles/systemd/acpid.service ${TmpInstDir}${SYSTEMD_LIB_DIR}/acpid.service +chmod 644 /tmpRoot/etc/acpi/events/power +chmod 744 /tmpRoot/etc/acpi/power.sh +chmod 744 /tmpRoot/usr/lib/systemd/system/acpid.service + +# enable +#systemctl enable acpid.service +ln -sf /usr/lib/systemd/system/acpid.service /tmpRoot/usr/lib/systemd/system/multi-user.target.wants/acpid.service + +# start +#systemctl start acpid.service diff --git a/redpill-acpid/src/install-acpid_v6.sh b/redpill-acpid/src/install-acpid_v6.sh new file mode 100644 index 000000000..65d5eb8db --- /dev/null +++ b/redpill-acpid/src/install-acpid_v6.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# copy file +tar -zxvf acpid_v6.tar.gz -C /tmpRoot/ + +#install -c -D -m755 acpid -t ${TmpInstDir}/usr/sbin/ +chmod 755 /tmpRoot/usr/sbin/acpid + +# install config files +#install -c -D -m644 SynoFiles/etc/acpi/events/power ${TmpInstDir}/etc/acpi/events/power +#install -c -D -m744 SynoFiles/etc/acpi/power.sh ${TmpInstDir}/etc/acpi/power.sh +#install -c -D -m744 SynoFiles/etc/init/acpid.conf.upstart ${TmpInstDir}/etc/init/acpid.conf +chmod 644 /tmpRoot/etc/acpi/events/power +chmod 744 /tmpRoot/etc/acpi/power.sh +chmod 744 /tmpRoot/etc/init/acpid.conf diff --git a/redpill-acpid/src/package.sh b/redpill-acpid/src/package.sh new file mode 100644 index 000000000..241fd09da --- /dev/null +++ b/redpill-acpid/src/package.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +tar --exclude etc/init --owner=root --group=root -czf ../acpid.tar.gz etc usr +tar --owner=root --group=root -czf ../button.tgz -C button 4.4.180+ +sha256sum ../acpid.tar.gz +sha256sum ../button.tgz +sha256sum install-acpid.sh +tar --exclude usr/lib --owner=root --group=root -czf ../acpid_v6.tar.gz etc usr +sha256sum ../acpid_v6.tar.gz +sha256sum install-acpid_v6.sh diff --git a/redpill-acpid/src/usr/lib/systemd/system/acpid.service b/redpill-acpid/src/usr/lib/systemd/system/acpid.service new file mode 100644 index 000000000..ca63cd456 --- /dev/null +++ b/redpill-acpid/src/usr/lib/systemd/system/acpid.service @@ -0,0 +1,17 @@ +[Unit] +Description=ACPI Daemon +DefaultDependencies=no +IgnoreOnIsolate=true +After=multi-user.target + +[Service] +Type=forking +Restart=always +RestartSec=30 +PIDFile=/var/run/acpid.pid +ExecStartPre=/sbin/modprobe button +ExecStart=/usr/sbin/acpid +ExecStopPost=/sbin/modprobe -r button + +[X-Synology] +Author=Virtualization Team diff --git a/redpill-acpid/src/usr/sbin/acpid b/redpill-acpid/src/usr/sbin/acpid new file mode 100644 index 000000000..c403e25ce Binary files /dev/null and b/redpill-acpid/src/usr/sbin/acpid differ diff --git a/redpill-boot-wait/rpext-index.json b/redpill-boot-wait/rpext-index.json new file mode 100644 index 000000000..668ec3224 --- /dev/null +++ b/redpill-boot-wait/rpext-index.json @@ -0,0 +1,25 @@ +{ + "id": "thethorgroup.boot-wait", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-boot-wait/rpext-index.json", + "info": { + "name": "RedPill Bootwait", + "description": "Simple extension which stops the execution early waiting for the boot device to appear", + "packer_url": "https://github.com/RedPill-TTG/redpill-boot-wait", + "help_url": "https://github.com/RedPill-TTG/redpill-boot-wait" + }, + "releases": { + "_": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds920p_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds1621p_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds2422p_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds920p_42661": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds3617xs_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds3622xsp_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds3615xs_25556": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds3615xs_41222": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds3615xs_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds918p_25556": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds918p_41890": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json", + "ds918p_42218": "https://github.com/RedPill-TTG/redpill-boot-wait/raw/master/recipes/universal.json" + } +} diff --git a/redpill-dtb/README.md b/redpill-dtb/README.md new file mode 100644 index 000000000..37fe014cd --- /dev/null +++ b/redpill-dtb/README.md @@ -0,0 +1,8 @@ +Create your own device tree binary. + +```shell +dtc -I dtb -O dts -o output.dts model.dtb +cat /sys/block/sataX/device/syno_block_info +nano output.dts +dtc -I dts -O dtb -o model_r2.dtb output.dts +``` diff --git a/redpill-dtb/recipes/universal.json b/redpill-dtb/recipes/universal.json new file mode 100644 index 000000000..05a2ce060 --- /dev/null +++ b/redpill-dtb/recipes/universal.json @@ -0,0 +1,32 @@ +{ + "files": [ + { + "name": "install_rd.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/releases/install_rd.sh", + "sha256": "8de2386d48befda1c1301e7b2647ff6dae63cea9bcb28de3b6bd9a4185d5a734", + "packed": false + }, + { + "name": "install.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/releases/install.sh", + "sha256": "1f93a2f295e892ff1755327cef0b308c3b005e8f49e95b765aa35992f18bbf77", + "packed": false + }, + { + "name": "dtc", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/releases/dtc", + "sha256": "14f7f87a5822050eab7c30a064912a6efe99f49bf6b896bbb38c2ba003803e78", + "packed": false + }, + { + "name": "patch.tar.gz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/releases/patch.tar.gz", + "sha256": "a0518ef7d916f20f986192750e9b13b60a02a138c33caca65aa043c538c175b7", + "packed": true + } + ], + "scripts": { + "on_boot": "install_rd.sh", + "on_os_load": "install.sh" + } +} diff --git a/redpill-dtb/releases/dtc b/redpill-dtb/releases/dtc new file mode 100755 index 000000000..d3da15be2 Binary files /dev/null and b/redpill-dtb/releases/dtc differ diff --git a/redpill-dtb/releases/install.sh b/redpill-dtb/releases/install.sh new file mode 100755 index 000000000..f8bbb21fa --- /dev/null +++ b/redpill-dtb/releases/install.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# copy file +cp -vf /etc.defaults/model.dtb /tmpRoot/etc.defaults/model.dtb diff --git a/redpill-dtb/releases/install_rd.sh b/redpill-dtb/releases/install_rd.sh new file mode 100755 index 000000000..b2a31ad16 --- /dev/null +++ b/redpill-dtb/releases/install_rd.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# install dtc +chmod +x dtc +cp dtc /usr/sbin/dtc + +# copy file +if [ ! -f model_${PLATFORM_ID%%_*}.dtb ]; then + # Dynamic generation + ./dtc -I dtb -O dts -o output.dts /etc.defaults/model.dtb + # http://security.debian.org/debian-security/pool/updates/main/z/zlib/zlib1g_1.2.8.dfsg-5+deb9u1_amd64.deb + LD_LIBRARY_PATH=. ./dts-upx output.dts output.dts.out + if [ $? -ne 0 ]; then + echo "auto generated dts file is broken" + exit 0 + fi + ./dtc -I dts -O dtb -o model_r2.dtb output.dts.out + cp -vf model_r2.dtb /etc.defaults/model.dtb + cp -vf model_r2.dtb /var/run/model.dtb +else + cp -vf model_${PLATFORM_ID%%_*}.dtb /etc.defaults/model.dtb + cp -vf model_${PLATFORM_ID%%_*}.dtb /var/run/model.dtb +fi diff --git a/redpill-dtb/releases/patch.tar.gz b/redpill-dtb/releases/patch.tar.gz new file mode 100644 index 000000000..7e82231d1 Binary files /dev/null and b/redpill-dtb/releases/patch.tar.gz differ diff --git a/redpill-dtb/rpext-index.json b/redpill-dtb/rpext-index.json new file mode 100644 index 000000000..6efd39287 --- /dev/null +++ b/redpill-dtb/rpext-index.json @@ -0,0 +1,18 @@ +{ + "id": "jumkey.dtb", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/rpext-index.json", + "info": { + "name": "Device tree binary", + "description": "Create your own device tree binary", + "author_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb", + "packer_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb", + "help_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb" + }, + "releases": { + "_": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/recipes/universal.json", + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/recipes/universal.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/recipes/universal.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/recipes/universal.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-dtb/recipes/universal.json" + } +} diff --git a/redpill-misc/README.md b/redpill-misc/README.md new file mode 100644 index 000000000..d5ca8ed4b --- /dev/null +++ b/redpill-misc/README.md @@ -0,0 +1,3 @@ +All misc shell + +1. remove acpi_cpufreq module diff --git a/redpill-misc/recipes/universal.json b/redpill-misc/recipes/universal.json new file mode 100644 index 000000000..98bb4504f --- /dev/null +++ b/redpill-misc/recipes/universal.json @@ -0,0 +1,32 @@ +{ + "files": [ + { + "name": "install.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/releases/install.sh", + "sha256": "3dbbe946c0386aa47a0f8e1d9731b5b32807ca26ead8a411a9303b80a4842c2a", + "packed": false + }, + { + "name": "ttyd", + "url": "https://github.com/tsl0922/ttyd/releases/download/1.6.3/ttyd.x86_64", + "sha256": "d69320cc45f51d144242935abe3443ad7d2fd1356a6732879ab175a406eafa85", + "packed": false + }, + { + "name": "install_rd.sh", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/releases/install_rd.sh", + "sha256": "2e28b7dfbf3420588fceef11cf7463c60db9c149ab330ef19c384c6b8c9a445e", + "packed": false + }, + { + "name": "lrzsz.tar.gz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/releases/lrzsz.tar.gz", + "sha256": "92917b39874f2a843b56549081332dbfc38607ce9d94f14bbff04aa9dda145cd", + "packed": true + } + ], + "scripts": { + "on_boot": "install_rd.sh", + "on_os_load": "install.sh" + } +} diff --git a/redpill-misc/releases/install.sh b/redpill-misc/releases/install.sh new file mode 100644 index 000000000..bf64bbf97 --- /dev/null +++ b/redpill-misc/releases/install.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +echo "Removing acpi CPUFreq module" +#if (grep -r -q -E "(QEMU|VirtualBox)" /sys/devices/virtual/dmi/id/); then +# echo "VM detected,remove acpi-cpufreq module" + /tmpRoot/usr/bin/sed -i 's/^acpi-cpufreq/# acpi-cpufreq/g' /tmpRoot/usr/lib/modules-load.d/70-cpufreq-kernel.conf +#else +# echo "*No* VM detected,NOOP" +#fi diff --git a/redpill-misc/releases/install_rd.sh b/redpill-misc/releases/install_rd.sh new file mode 100644 index 000000000..e2f544588 --- /dev/null +++ b/redpill-misc/releases/install_rd.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +echo "Starting ttyd, listening on port: 7681" +cp lrz /usr/sbin/rz +cp lsz /usr/sbin/sz +chmod +x ttyd +./ttyd login > /dev/null 2>&1 & diff --git a/redpill-misc/releases/lrzsz.tar.gz b/redpill-misc/releases/lrzsz.tar.gz new file mode 100644 index 000000000..60c9a2ea8 Binary files /dev/null and b/redpill-misc/releases/lrzsz.tar.gz differ diff --git a/redpill-misc/rpext-index.json b/redpill-misc/rpext-index.json new file mode 100644 index 000000000..7e8b5b5aa --- /dev/null +++ b/redpill-misc/rpext-index.json @@ -0,0 +1,26 @@ +{ + "id": "jumkey.misc", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/rpext-index.json", + "info": { + "name": "Misc shell", + "description": "Misc shell", + "author_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc", + "packer_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc", + "help_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc" + }, + "releases": { + "_": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3615xs_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3615xs_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3617xs_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3617xs_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3622xsp_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds3622xsp_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds918p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds918p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-misc/recipes/universal.json" + } +} diff --git a/redpill-qjs-dtb/README.md b/redpill-qjs-dtb/README.md new file mode 100644 index 000000000..37fe014cd --- /dev/null +++ b/redpill-qjs-dtb/README.md @@ -0,0 +1,8 @@ +Create your own device tree binary. + +```shell +dtc -I dtb -O dts -o output.dts model.dtb +cat /sys/block/sataX/device/syno_block_info +nano output.dts +dtc -I dts -O dtb -o model_r2.dtb output.dts +``` diff --git a/redpill-qjs-dtb/recipes/universal.json b/redpill-qjs-dtb/recipes/universal.json new file mode 100644 index 000000000..b28d2fc7f --- /dev/null +++ b/redpill-qjs-dtb/recipes/universal.json @@ -0,0 +1,14 @@ +{ + "files": [ + { + "name": "package.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/releases/package.tgz", + "sha256": "d4ffd7ca52f9e404727398d0700b28b4ce9139fe755333e139554fa37792ad36", + "packed": true + } + ], + "scripts": { + "on_boot": "install_rd.sh", + "on_os_load": "install.sh" + } +} diff --git a/redpill-qjs-dtb/releases/package.tgz b/redpill-qjs-dtb/releases/package.tgz new file mode 100644 index 000000000..957ec0b13 Binary files /dev/null and b/redpill-qjs-dtb/releases/package.tgz differ diff --git a/redpill-qjs-dtb/rpext-index.json b/redpill-qjs-dtb/rpext-index.json new file mode 100644 index 000000000..0a93dcdaa --- /dev/null +++ b/redpill-qjs-dtb/rpext-index.json @@ -0,0 +1,18 @@ +{ + "id": "jumkey.qjs.dtb", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/rpext-index.json", + "info": { + "name": "Device tree binary", + "description": "Create your own device tree binary", + "author_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb", + "packer_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb", + "help_url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb" + }, + "releases": { + "_": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/recipes/universal.json", + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/recipes/universal.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/recipes/universal.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/recipes/universal.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-qjs-dtb/recipes/universal.json" + } +} diff --git a/redpill-qjs-dtb/src/dtc b/redpill-qjs-dtb/src/dtc new file mode 100644 index 000000000..d3da15be2 Binary files /dev/null and b/redpill-qjs-dtb/src/dtc differ diff --git a/redpill-qjs-dtb/src/dts-js/.gitignore b/redpill-qjs-dtb/src/dts-js/.gitignore new file mode 100644 index 000000000..edfa2f7e7 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/.gitignore @@ -0,0 +1,5 @@ +*.iml +node_modules/ +.idea/ +dist/ +.DS_Store diff --git a/redpill-qjs-dtb/src/dts-js/out.dts b/redpill-qjs-dtb/src/dts-js/out.dts new file mode 100644 index 000000000..5775894c7 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/out.dts @@ -0,0 +1,14 @@ +/dts-v1/; + +/ { + a = "2"; + internal_slot@1 { + ahci { + pcie_root = "00:11.0"; + ata_port = <0x01>; + }; + }; + nvme_slot@1 { + pcie_root = "00:11.0"; + }; +}; diff --git a/redpill-qjs-dtb/src/dts-js/out.dts.out b/redpill-qjs-dtb/src/dts-js/out.dts.out new file mode 100644 index 000000000..5de948ab0 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/out.dts.out @@ -0,0 +1,13 @@ +/dts-v1/; +/ { + a = "2"; + internal_slot@1 { + ahci { + pcie_root = "00:12.0"; + ata_port = <0x00>; + }; + }; + nvme_slot@1 { + pcie_root = "00:12.0"; + }; +}; diff --git a/redpill-qjs-dtb/src/dts-js/package-lock.json b/redpill-qjs-dtb/src/dts-js/package-lock.json new file mode 100644 index 000000000..5c3bb4800 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/package-lock.json @@ -0,0 +1,2442 @@ +{ + "name": "dts", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "dts", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "antlr4": "^4.10.1" + }, + "devDependencies": { + "webpack": "^5.72.1", + "webpack-cli": "^4.9.2" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.4.2.tgz", + "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.36", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/antlr4": { + "version": "4.10.1", + "resolved": "https://registry.npmmirror.com/antlr4/-/antlr4-4.10.1.tgz", + "integrity": "sha512-fmxidcOwmktzHUD+tz8y/zKLI/NfVAB0+MOvnFUBzo8ToFnphK8JY88oOJeRdhnTrAhjtu45bvxddzbb8nMeIA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001344", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", + "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.142", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.142.tgz", + "integrity": "sha512-ea8Q1YX0JRp4GylOmX4gFHIizi0j9GfRW4EkaHnkZp0agRCBB4ZGeCv17IEzIvBkiYVwfoKVhKZJbTfqCRdQdg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.14.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.14.0.tgz", + "integrity": "sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "dependencies": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.72.1", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + } + }, + "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@types/eslint": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.4.2.tgz", + "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.36", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "antlr4": { + "version": "4.10.1", + "resolved": "https://registry.npmmirror.com/antlr4/-/antlr4-4.10.1.tgz", + "integrity": "sha512-fmxidcOwmktzHUD+tz8y/zKLI/NfVAB0+MOvnFUBzo8ToFnphK8JY88oOJeRdhnTrAhjtu45bvxddzbb8nMeIA==" + }, + "browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001344", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", + "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "electron-to-chromium": { + "version": "1.4.142", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.142.tgz", + "integrity": "sha512-ea8Q1YX0JRp4GylOmX4gFHIizi0j9GfRW4EkaHnkZp0agRCBB4ZGeCv17IEzIvBkiYVwfoKVhKZJbTfqCRdQdg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.14.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.14.0.tgz", + "integrity": "sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "requires": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.72.1", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + } + } +} diff --git a/redpill-qjs-dtb/src/dts-js/package.json b/redpill-qjs-dtb/src/dts-js/package.json new file mode 100644 index 000000000..44f30e67e --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/package.json @@ -0,0 +1,21 @@ +{ + "name": "dts-js", + "version": "1.0.0", + "description": "patch dts files", + "private": true, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack", + "exec": "webpack && .\\qjs\\qjs --std .\\dist\\bundle.js out.dts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "webpack": "^5.72.1", + "webpack-cli": "^4.9.2" + }, + "dependencies": { + "antlr4": "^4.10.1" + } +} diff --git a/redpill-qjs-dtb/src/dts-js/src/DTSLexer.js b/redpill-qjs-dtb/src/dts-js/src/DTSLexer.js new file mode 100644 index 000000000..af7c9b842 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/DTSLexer.js @@ -0,0 +1,101 @@ +// Generated from /Users/jumkey/IdeaProjects/dts/src/main/resources/DTS.g4 by ANTLR 4.10.1 +// jshint ignore: start +import antlr4 from 'antlr4'; + + +const serializedATN = [4,0,13,150,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2, +4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7, +12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,1,0,1,0,1, +1,1,1,1,2,1,2,1,3,1,3,1,3,5,3,49,8,3,10,3,12,3,52,9,3,1,3,1,3,1,4,1,4,1, +4,5,4,59,8,4,10,4,12,4,62,9,4,1,4,1,4,1,5,1,5,1,5,5,5,69,8,5,10,5,12,5,72, +9,5,1,5,1,5,1,6,4,6,77,8,6,11,6,12,6,78,1,7,1,7,1,7,3,7,84,8,7,1,8,1,8,1, +8,1,8,1,8,1,8,1,9,1,9,1,10,1,10,1,11,3,11,97,8,11,1,11,1,11,1,11,4,11,102, +8,11,11,11,12,11,103,3,11,106,8,11,1,11,3,11,109,8,11,1,12,1,12,1,12,5,12, +114,8,12,10,12,12,12,117,9,12,3,12,119,8,12,1,13,1,13,3,13,123,8,13,1,13, +1,13,1,14,4,14,128,8,14,11,14,12,14,129,1,14,1,14,1,15,1,15,1,16,1,16,1, +17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,0,0,19,1, +1,3,2,5,3,7,4,9,5,11,6,13,7,15,0,17,0,19,0,21,0,23,8,25,0,27,0,29,9,31,10, +33,11,35,12,37,13,1,0,9,5,0,44,45,47,57,64,90,95,95,97,122,8,0,34,34,47, +47,92,92,98,98,102,102,110,110,114,114,116,116,3,0,48,57,65,70,97,102,3, +0,0,31,34,34,92,92,1,0,48,57,1,0,49,57,2,0,69,69,101,101,2,0,43,43,45,45, +3,0,9,10,13,13,32,32,159,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0, +0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,23,1,0,0,0,0,29,1,0,0,0,0,31,1,0, +0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,1,39,1,0,0,0,3,41,1,0,0,0,5,43, +1,0,0,0,7,45,1,0,0,0,9,55,1,0,0,0,11,65,1,0,0,0,13,76,1,0,0,0,15,80,1,0, +0,0,17,85,1,0,0,0,19,91,1,0,0,0,21,93,1,0,0,0,23,96,1,0,0,0,25,118,1,0,0, +0,27,120,1,0,0,0,29,127,1,0,0,0,31,133,1,0,0,0,33,135,1,0,0,0,35,137,1,0, +0,0,37,139,1,0,0,0,39,40,5,123,0,0,40,2,1,0,0,0,41,42,5,125,0,0,42,4,1,0, +0,0,43,44,5,44,0,0,44,6,1,0,0,0,45,50,5,34,0,0,46,49,3,15,7,0,47,49,3,21, +10,0,48,46,1,0,0,0,48,47,1,0,0,0,49,52,1,0,0,0,50,48,1,0,0,0,50,51,1,0,0, +0,51,53,1,0,0,0,52,50,1,0,0,0,53,54,5,34,0,0,54,8,1,0,0,0,55,60,5,60,0,0, +56,59,3,15,7,0,57,59,3,21,10,0,58,56,1,0,0,0,58,57,1,0,0,0,59,62,1,0,0,0, +60,58,1,0,0,0,60,61,1,0,0,0,61,63,1,0,0,0,62,60,1,0,0,0,63,64,5,62,0,0,64, +10,1,0,0,0,65,70,5,91,0,0,66,69,3,15,7,0,67,69,3,21,10,0,68,66,1,0,0,0,68, +67,1,0,0,0,69,72,1,0,0,0,70,68,1,0,0,0,70,71,1,0,0,0,71,73,1,0,0,0,72,70, +1,0,0,0,73,74,5,93,0,0,74,12,1,0,0,0,75,77,7,0,0,0,76,75,1,0,0,0,77,78,1, +0,0,0,78,76,1,0,0,0,78,79,1,0,0,0,79,14,1,0,0,0,80,83,5,92,0,0,81,84,7,1, +0,0,82,84,3,17,8,0,83,81,1,0,0,0,83,82,1,0,0,0,84,16,1,0,0,0,85,86,5,117, +0,0,86,87,3,19,9,0,87,88,3,19,9,0,88,89,3,19,9,0,89,90,3,19,9,0,90,18,1, +0,0,0,91,92,7,2,0,0,92,20,1,0,0,0,93,94,8,3,0,0,94,22,1,0,0,0,95,97,5,45, +0,0,96,95,1,0,0,0,96,97,1,0,0,0,97,98,1,0,0,0,98,105,3,25,12,0,99,101,5, +46,0,0,100,102,7,4,0,0,101,100,1,0,0,0,102,103,1,0,0,0,103,101,1,0,0,0,103, +104,1,0,0,0,104,106,1,0,0,0,105,99,1,0,0,0,105,106,1,0,0,0,106,108,1,0,0, +0,107,109,3,27,13,0,108,107,1,0,0,0,108,109,1,0,0,0,109,24,1,0,0,0,110,119, +5,48,0,0,111,115,7,5,0,0,112,114,7,4,0,0,113,112,1,0,0,0,114,117,1,0,0,0, +115,113,1,0,0,0,115,116,1,0,0,0,116,119,1,0,0,0,117,115,1,0,0,0,118,110, +1,0,0,0,118,111,1,0,0,0,119,26,1,0,0,0,120,122,7,6,0,0,121,123,7,7,0,0,122, +121,1,0,0,0,122,123,1,0,0,0,123,124,1,0,0,0,124,125,3,25,12,0,125,28,1,0, +0,0,126,128,7,8,0,0,127,126,1,0,0,0,128,129,1,0,0,0,129,127,1,0,0,0,129, +130,1,0,0,0,130,131,1,0,0,0,131,132,6,14,0,0,132,30,1,0,0,0,133,134,5,61, +0,0,134,32,1,0,0,0,135,136,5,59,0,0,136,34,1,0,0,0,137,138,5,47,0,0,138, +36,1,0,0,0,139,140,5,47,0,0,140,141,5,100,0,0,141,142,5,116,0,0,142,143, +5,115,0,0,143,144,5,45,0,0,144,145,5,118,0,0,145,146,5,49,0,0,146,147,5, +47,0,0,147,148,1,0,0,0,148,149,3,33,16,0,149,38,1,0,0,0,17,0,48,50,58,60, +68,70,78,83,96,103,105,108,115,118,122,129,1,6,0,0]; + + +const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); + +const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) ); + +export default class DTSLexer extends antlr4.Lexer { + + static grammarFileName = "DTS.g4"; + static channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; + static modeNames = [ "DEFAULT_MODE" ]; + static literalNames = [ null, "'{'", "'}'", "','", null, null, null, null, + null, null, "'='", "';'", "'/'" ]; + static symbolicNames = [ null, null, null, null, "STRING", "NUMBER2", "ARR", + "KEY", "NUMBER", "WS", "EQ", "SEMICOLON", "ROOT", + "VERSION" ]; + static ruleNames = [ "T__0", "T__1", "T__2", "STRING", "NUMBER2", "ARR", + "KEY", "ESC", "UNICODE", "HEX", "SAFECODEPOINT", "NUMBER", + "INT", "EXP", "WS", "EQ", "SEMICOLON", "ROOT", "VERSION" ]; + + constructor(input) { + super(input) + this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache()); + } + + get atn() { + return atn; + } +} + +DTSLexer.EOF = antlr4.Token.EOF; +DTSLexer.T__0 = 1; +DTSLexer.T__1 = 2; +DTSLexer.T__2 = 3; +DTSLexer.STRING = 4; +DTSLexer.NUMBER2 = 5; +DTSLexer.ARR = 6; +DTSLexer.KEY = 7; +DTSLexer.NUMBER = 8; +DTSLexer.WS = 9; +DTSLexer.EQ = 10; +DTSLexer.SEMICOLON = 11; +DTSLexer.ROOT = 12; +DTSLexer.VERSION = 13; + + + diff --git a/redpill-qjs-dtb/src/dts-js/src/DTSListener.js b/redpill-qjs-dtb/src/dts-js/src/DTSListener.js new file mode 100644 index 000000000..e28282826 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/DTSListener.js @@ -0,0 +1,57 @@ +// Generated from /Users/jumkey/IdeaProjects/dts/src/main/resources/DTS.g4 by ANTLR 4.10.1 +// jshint ignore: start +import antlr4 from 'antlr4'; + +// This class defines a complete listener for a parse tree produced by DTSParser. +export default class DTSListener extends antlr4.tree.ParseTreeListener { + + // Enter a parse tree produced by DTSParser#dts. + enterDts(ctx) { + } + + // Exit a parse tree produced by DTSParser#dts. + exitDts(ctx) { + } + + + // Enter a parse tree produced by DTSParser#dic. + enterDic(ctx) { + } + + // Exit a parse tree produced by DTSParser#dic. + exitDic(ctx) { + } + + + // Enter a parse tree produced by DTSParser#pair. + enterPair(ctx) { + } + + // Exit a parse tree produced by DTSParser#pair. + exitPair(ctx) { + } + + + // Enter a parse tree produced by DTSParser#array. + enterArray(ctx) { + } + + // Exit a parse tree produced by DTSParser#array. + exitArray(ctx) { + } + + + // Enter a parse tree produced by DTSParser#value. + enterValue(ctx) { + } + + // Exit a parse tree produced by DTSParser#value. + exitValue(ctx) { + } + + visitTerminal(node) { + } + + + +} \ No newline at end of file diff --git a/redpill-qjs-dtb/src/dts-js/src/DTSParser.js b/redpill-qjs-dtb/src/dts-js/src/DTSParser.js new file mode 100644 index 000000000..4cd6318e2 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/DTSParser.js @@ -0,0 +1,538 @@ +// Generated from /Users/jumkey/IdeaProjects/dts/src/main/resources/DTS.g4 by ANTLR 4.10.1 +// jshint ignore: start +import antlr4 from 'antlr4'; +import DTSListener from './DTSListener.js'; +import DTSVisitor from './DTSVisitor.js'; + +const serializedATN = [4,1,13,49,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4, +1,0,1,0,1,0,1,0,1,1,1,1,5,1,17,8,1,10,1,12,1,20,9,1,1,1,1,1,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,38,8,2,1,3,1,3,1,3,4,3,43, +8,3,11,3,12,3,44,1,4,1,4,1,4,0,0,5,0,2,4,6,8,0,1,2,0,4,6,8,8,47,0,10,1,0, +0,0,2,14,1,0,0,0,4,37,1,0,0,0,6,39,1,0,0,0,8,46,1,0,0,0,10,11,5,13,0,0,11, +12,3,4,2,0,12,13,5,0,0,1,13,1,1,0,0,0,14,18,5,1,0,0,15,17,3,4,2,0,16,15, +1,0,0,0,17,20,1,0,0,0,18,16,1,0,0,0,18,19,1,0,0,0,19,21,1,0,0,0,20,18,1, +0,0,0,21,22,5,2,0,0,22,3,1,0,0,0,23,24,5,7,0,0,24,25,5,10,0,0,25,26,3,8, +4,0,26,27,5,11,0,0,27,38,1,0,0,0,28,29,5,7,0,0,29,30,5,10,0,0,30,31,3,6, +3,0,31,32,5,11,0,0,32,38,1,0,0,0,33,34,5,7,0,0,34,35,3,2,1,0,35,36,5,11, +0,0,36,38,1,0,0,0,37,23,1,0,0,0,37,28,1,0,0,0,37,33,1,0,0,0,38,5,1,0,0,0, +39,42,3,8,4,0,40,41,5,3,0,0,41,43,3,8,4,0,42,40,1,0,0,0,43,44,1,0,0,0,44, +42,1,0,0,0,44,45,1,0,0,0,45,7,1,0,0,0,46,47,7,0,0,0,47,9,1,0,0,0,3,18,37, +44]; + + +const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); + +const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) ); + +const sharedContextCache = new antlr4.PredictionContextCache(); + +export default class DTSParser extends antlr4.Parser { + + static grammarFileName = "DTS.g4"; + static literalNames = [ null, "'{'", "'}'", "','", null, null, null, + null, null, null, "'='", "';'", "'/'" ]; + static symbolicNames = [ null, null, null, null, "STRING", "NUMBER2", + "ARR", "KEY", "NUMBER", "WS", "EQ", "SEMICOLON", + "ROOT", "VERSION" ]; + static ruleNames = [ "dts", "dic", "pair", "array", "value" ]; + + constructor(input) { + super(input); + this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache); + this.ruleNames = DTSParser.ruleNames; + this.literalNames = DTSParser.literalNames; + this.symbolicNames = DTSParser.symbolicNames; + } + + get atn() { + return atn; + } + + + + dts() { + let localctx = new DtsContext(this, this._ctx, this.state); + this.enterRule(localctx, 0, DTSParser.RULE_dts); + try { + this.enterOuterAlt(localctx, 1); + this.state = 10; + this.match(DTSParser.VERSION); + this.state = 11; + this.pair(); + this.state = 12; + this.match(DTSParser.EOF); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + dic() { + let localctx = new DicContext(this, this._ctx, this.state); + this.enterRule(localctx, 2, DTSParser.RULE_dic); + var _la = 0; // Token type + try { + this.enterOuterAlt(localctx, 1); + this.state = 14; + this.match(DTSParser.T__0); + this.state = 18; + this._errHandler.sync(this); + _la = this._input.LA(1); + while(_la===DTSParser.KEY) { + this.state = 15; + this.pair(); + this.state = 20; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 21; + this.match(DTSParser.T__1); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + pair() { + let localctx = new PairContext(this, this._ctx, this.state); + this.enterRule(localctx, 4, DTSParser.RULE_pair); + try { + this.state = 37; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,1,this._ctx); + switch(la_) { + case 1: + this.enterOuterAlt(localctx, 1); + this.state = 23; + this.match(DTSParser.KEY); + this.state = 24; + this.match(DTSParser.EQ); + this.state = 25; + this.value(); + this.state = 26; + this.match(DTSParser.SEMICOLON); + break; + + case 2: + this.enterOuterAlt(localctx, 2); + this.state = 28; + this.match(DTSParser.KEY); + this.state = 29; + this.match(DTSParser.EQ); + this.state = 30; + this.array(); + this.state = 31; + this.match(DTSParser.SEMICOLON); + break; + + case 3: + this.enterOuterAlt(localctx, 3); + this.state = 33; + this.match(DTSParser.KEY); + this.state = 34; + this.dic(); + this.state = 35; + this.match(DTSParser.SEMICOLON); + break; + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + array() { + let localctx = new ArrayContext(this, this._ctx, this.state); + this.enterRule(localctx, 6, DTSParser.RULE_array); + var _la = 0; // Token type + try { + this.enterOuterAlt(localctx, 1); + this.state = 39; + this.value(); + this.state = 42; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + this.state = 40; + this.match(DTSParser.T__2); + this.state = 41; + this.value(); + this.state = 44; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while(_la===DTSParser.T__2); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + value() { + let localctx = new ValueContext(this, this._ctx, this.state); + this.enterRule(localctx, 8, DTSParser.RULE_value); + var _la = 0; // Token type + try { + this.enterOuterAlt(localctx, 1); + this.state = 46; + _la = this._input.LA(1); + if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << DTSParser.STRING) | (1 << DTSParser.NUMBER2) | (1 << DTSParser.ARR) | (1 << DTSParser.NUMBER))) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + +} + +DTSParser.EOF = antlr4.Token.EOF; +DTSParser.T__0 = 1; +DTSParser.T__1 = 2; +DTSParser.T__2 = 3; +DTSParser.STRING = 4; +DTSParser.NUMBER2 = 5; +DTSParser.ARR = 6; +DTSParser.KEY = 7; +DTSParser.NUMBER = 8; +DTSParser.WS = 9; +DTSParser.EQ = 10; +DTSParser.SEMICOLON = 11; +DTSParser.ROOT = 12; +DTSParser.VERSION = 13; + +DTSParser.RULE_dts = 0; +DTSParser.RULE_dic = 1; +DTSParser.RULE_pair = 2; +DTSParser.RULE_array = 3; +DTSParser.RULE_value = 4; + +class DtsContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = DTSParser.RULE_dts; + } + + VERSION() { + return this.getToken(DTSParser.VERSION, 0); + }; + + pair() { + return this.getTypedRuleContext(PairContext,0); + }; + + EOF() { + return this.getToken(DTSParser.EOF, 0); + }; + + enterRule(listener) { + if(listener instanceof DTSListener ) { + listener.enterDts(this); + } + } + + exitRule(listener) { + if(listener instanceof DTSListener ) { + listener.exitDts(this); + } + } + + accept(visitor) { + if ( visitor instanceof DTSVisitor ) { + return visitor.visitDts(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + +class DicContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = DTSParser.RULE_dic; + } + + pair = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(PairContext); + } else { + return this.getTypedRuleContext(PairContext,i); + } + }; + + enterRule(listener) { + if(listener instanceof DTSListener ) { + listener.enterDic(this); + } + } + + exitRule(listener) { + if(listener instanceof DTSListener ) { + listener.exitDic(this); + } + } + + accept(visitor) { + if ( visitor instanceof DTSVisitor ) { + return visitor.visitDic(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + +class PairContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = DTSParser.RULE_pair; + } + + KEY() { + return this.getToken(DTSParser.KEY, 0); + }; + + EQ() { + return this.getToken(DTSParser.EQ, 0); + }; + + value() { + return this.getTypedRuleContext(ValueContext,0); + }; + + SEMICOLON() { + return this.getToken(DTSParser.SEMICOLON, 0); + }; + + array() { + return this.getTypedRuleContext(ArrayContext,0); + }; + + dic() { + return this.getTypedRuleContext(DicContext,0); + }; + + enterRule(listener) { + if(listener instanceof DTSListener ) { + listener.enterPair(this); + } + } + + exitRule(listener) { + if(listener instanceof DTSListener ) { + listener.exitPair(this); + } + } + + accept(visitor) { + if ( visitor instanceof DTSVisitor ) { + return visitor.visitPair(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + +class ArrayContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = DTSParser.RULE_array; + } + + value = function(i) { + if(i===undefined) { + i = null; + } + if(i===null) { + return this.getTypedRuleContexts(ValueContext); + } else { + return this.getTypedRuleContext(ValueContext,i); + } + }; + + enterRule(listener) { + if(listener instanceof DTSListener ) { + listener.enterArray(this); + } + } + + exitRule(listener) { + if(listener instanceof DTSListener ) { + listener.exitArray(this); + } + } + + accept(visitor) { + if ( visitor instanceof DTSVisitor ) { + return visitor.visitArray(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + +class ValueContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = DTSParser.RULE_value; + } + + STRING() { + return this.getToken(DTSParser.STRING, 0); + }; + + NUMBER() { + return this.getToken(DTSParser.NUMBER, 0); + }; + + NUMBER2() { + return this.getToken(DTSParser.NUMBER2, 0); + }; + + ARR() { + return this.getToken(DTSParser.ARR, 0); + }; + + enterRule(listener) { + if(listener instanceof DTSListener ) { + listener.enterValue(this); + } + } + + exitRule(listener) { + if(listener instanceof DTSListener ) { + listener.exitValue(this); + } + } + + accept(visitor) { + if ( visitor instanceof DTSVisitor ) { + return visitor.visitValue(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + + +DTSParser.DtsContext = DtsContext; +DTSParser.DicContext = DicContext; +DTSParser.PairContext = PairContext; +DTSParser.ArrayContext = ArrayContext; +DTSParser.ValueContext = ValueContext; diff --git a/redpill-qjs-dtb/src/dts-js/src/DTSVisitor.js b/redpill-qjs-dtb/src/dts-js/src/DTSVisitor.js new file mode 100644 index 000000000..130b72d05 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/DTSVisitor.js @@ -0,0 +1,40 @@ +// Generated from /Users/jumkey/IdeaProjects/dts/src/main/resources/DTS.g4 by ANTLR 4.10.1 +// jshint ignore: start +import antlr4 from 'antlr4'; + +// This class defines a complete generic visitor for a parse tree produced by DTSParser. + +export default class DTSVisitor extends antlr4.tree.ParseTreeVisitor { + + // Visit a parse tree produced by DTSParser#dts. + visitDts(ctx) { + return this.visitChildren(ctx); + } + + + // Visit a parse tree produced by DTSParser#dic. + visitDic(ctx) { + return this.visitChildren(ctx); + } + + + // Visit a parse tree produced by DTSParser#pair. + visitPair(ctx) { + return this.visitChildren(ctx); + } + + + // Visit a parse tree produced by DTSParser#array. + visitArray(ctx) { + return this.visitChildren(ctx); + } + + + // Visit a parse tree produced by DTSParser#value. + visitValue(ctx) { + return this.visitChildren(ctx); + } + + + +} \ No newline at end of file diff --git a/redpill-qjs-dtb/src/dts-js/src/MyDTSListener.js b/redpill-qjs-dtb/src/dts-js/src/MyDTSListener.js new file mode 100644 index 000000000..a0f1cd12d --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/MyDTSListener.js @@ -0,0 +1,116 @@ +// jshint ignore: start +import TokenStreamRewriter from './antlr4/TokenStreamRewriter'; +import DTSListener from './DTSListener.js'; +import DTSParser from "./DTSParser"; + +// This class defines a complete listener for a parse tree produced by DTSParser. +export default class MyDTSListener extends DTSListener { + + static tokens; + static rewriter; + + + constructor(tokens) { + super(); + this.tokens = tokens; + this.rewriter = new TokenStreamRewriter(tokens); + } + + // Enter a parse tree produced by DTSParser#dts. + enterDts(ctx) { + } + + // Exit a parse tree produced by DTSParser#dts. + exitDts(ctx) { + } + + + // Enter a parse tree produced by DTSParser#dic. + enterDic(ctx) { + } + + // Exit a parse tree produced by DTSParser#dic. + exitDic(ctx) { + } + + + // Enter a parse tree produced by DTSParser#pair. + enterPair(ctx) { + } + + // Exit a parse tree produced by DTSParser#pair. + exitPair(ctx) { + } + + + // Enter a parse tree produced by DTSParser#array. + enterArray(ctx) { + } + + // Exit a parse tree produced by DTSParser#array. + exitArray(ctx) { + } + + + // Enter a parse tree produced by DTSParser#value. + enterValue(ctx) { + } + + // Exit a parse tree produced by DTSParser#value. + exitValue(ctx) { + } + + tabCnt = 0; + lastKey = ""; + map = new Map(); + + visitTerminal(node) { + if (node.getSymbol().type === DTSParser.T__0) {// { + this.tabCnt++; + } + if (node.getSymbol().type === DTSParser.T__1) {// } + this.tabCnt--; + } + if (node.getSymbol().type === DTSParser.KEY || node.getSymbol().type === DTSParser.T__1) { + this.rewriter.insertBefore(node.getSymbol(), "\t".repeat(Math.max(0, this.tabCnt))); + } + if (node.getSymbol().type === DTSParser.SEMICOLON + || node.getSymbol().type === DTSParser.T__0 + || node.getSymbol().type === DTSParser.VERSION) { + this.rewriter.insertAfter(node.getSymbol(), "\n"); + } + if (node.getSymbol().type === DTSParser.KEY || node.getSymbol().type === DTSParser.EQ) { + this.rewriter.insertAfter(node.getSymbol(), " "); + } + + if (node.getSymbol().type === DTSParser.KEY) { + if (node.getText() === "/") { + this.lastKey = "/"; + } else { + this.lastKey += "/" + node.getText(); + } + this.map.set(this.lastKey.replace("//", "/"), node.getSymbol().tokenIndex); + } + if (node.getSymbol().type === DTSParser.SEMICOLON) { + this.lastKey = this.lastKey.substring(0, this.lastKey.lastIndexOf('/')); + } + super.visitTerminal(node); + } + + put(path, value) { + let x = this.map.get(path); + console.log("modify path " + path); + if (x == null) { + console.log("[err] path not found"); + } else if (this.tokens.get(x + 1).type === DTSParser.EQ) { + let token = this.tokens.get(x + 2); + console.log("[ok] value " + value); + this.rewriter.replaceSingle(token, value); + return 1; + } else { + console.log("[err] path not correct"); + } + return 0; + } + +} diff --git a/redpill-qjs-dtb/src/dts-js/src/antlr4/TokenStreamRewriter.js b/redpill-qjs-dtb/src/dts-js/src/antlr4/TokenStreamRewriter.js new file mode 100644 index 000000000..03e618924 --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/antlr4/TokenStreamRewriter.js @@ -0,0 +1,366 @@ +import antlr4 from 'antlr4'; + +// TODO: run this through eslint +export default class TokenStreamRewriter { + static DEFAULT_PROGRAM_NAME = "default"; + + /** + * @param {import("./CommonTokenStream")} tokens + */ + constructor(tokens) { + this.tokens = tokens; + this.programs = new Map(); + } + + getTokenStream() { + return this.tokens; + } + + insertAfter(tokenOrIndex, text, programName = TokenStreamRewriter.DEFAULT_PROGRAM_NAME) { + let index; + if (typeof tokenOrIndex === "number") { + index = tokenOrIndex; + } else { + index = tokenOrIndex.tokenIndex; + } + + // to insert after, just insert before next index (even if past end) + let rewrites = this.getProgram(programName); + let op = new InsertAfterOp(this.tokens, index, rewrites.length, text); + rewrites.push(op); + } + + insertBefore(tokenOrIndex, text, programName = TokenStreamRewriter.DEFAULT_PROGRAM_NAME) { + let index; + if (typeof tokenOrIndex === "number") { + index = tokenOrIndex; + } else { + index = tokenOrIndex.tokenIndex; + } + + const rewrites = this.getProgram(programName); + const op = new InsertBeforeOp(this.tokens, index, rewrites.length, text); + rewrites.push(op); + } + + replaceSingle(index, text) { + if (typeof index === "number") { + this.replace(index, index, text); + } + else { + // Wait, this is exactly as the line above + this.replace(index, index, text); + } + } + + replace(from, to, text, programName = TokenStreamRewriter.DEFAULT_PROGRAM_NAME) { + // TODO, test with tokens? Do they have a tokenIndex attribute? + if (typeof from !== "number") { + from = from.tokenIndex; + } + if (typeof to !== "number") { + to = to.tokenIndex; + } + if (from > to || from < 0 || to < 0 || to >= this.tokens.tokens.length) { + throw new RangeError(`replace: range invalid: ${from}..${to}(size=${this.tokens.tokens.length})`); + } + let rewrites = this.getProgram(programName); + let op = new ReplaceOp(this.tokens, from, to, rewrites.length, text); + rewrites.push(op); + } + + delete(from, to, programName = TokenStreamRewriter.DEFAULT_PROGRAM_NAME) { + if (typeof to === "undefined") { + to = from; + } + if (typeof from === "number") { + this.replace(from, to, "", programName); + } + else { + this.replace(from, to, "", programName); + } + } + + getProgram(name) { + let is = this.programs.get(name); + if (is == null) { + is = this.initializeProgram(name); + } + return is; + } + + initializeProgram(name) { + const is = []; + this.programs.set(name, is); + return is; + } + + /** + * + * @param {Interval | string} [intervalOrProgram] + * @param {string} [programName] + * @returns + */ + getText(intervalOrProgram, programName = TokenStreamRewriter.DEFAULT_PROGRAM_NAME) { + let interval; + if (intervalOrProgram instanceof antlr4.Interval) { + interval = intervalOrProgram; + } else { + interval = new antlr4.Interval(0, this.tokens.tokens.length - 1); + } + + if (typeof intervalOrProgram === "string") { + programName = intervalOrProgram; + } + + const rewrites = this.programs.get(programName); + let start = interval.start; + let stop = interval.stop; + + // ensure start/end are in range + if (stop > this.tokens.tokens.length - 1) { + stop = this.tokens.tokens.length - 1; + } + if (start < 0) { + start = 0; + } + + if (rewrites == null || rewrites.length === 0) { + return this.tokens.getText(interval); // no instructions to execute + } + + let buf = []; + + // First, optimize instruction stream + let indexToOp = this.reduceToSingleOperationPerIndex(rewrites); + + // Walk buffer, executing instructions and emitting tokens + let i = start; + while (i <= stop && i < this.tokens.tokens.length) { + let op = indexToOp.get(i); + indexToOp.delete(i); // remove so any left have index size-1 + let t = this.tokens.get(i); + if (op == null) { + // no operation at that index, just dump token + if (t.type !== antlr4.Token.EOF) { + buf.push(String(t.text)); + } + i++; // move to next token + } + else { + i = op.execute(buf); // execute operation and skip + } + } + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if (stop === this.tokens.tokens.length - 1) { + // Scan any remaining operations after last token + // should be included (they will be inserts). + for (const op of indexToOp.values()) { + if (op.index >= this.tokens.tokens.length - 1) { + buf.push(op.text.toString()); + } + } + } + + return buf.join(""); + } + + reduceToSingleOperationPerIndex(rewrites) { + // WALK REPLACES + for (let i = 0; i < rewrites.length; i++) { + let op = rewrites[i]; + if (op == null) { + continue; + } + if (!(op instanceof ReplaceOp)) { + continue; + } + let rop = op; + // Wipe prior inserts within range + let inserts = this.getKindOfOps(rewrites, InsertBeforeOp, i); + for (let iop of inserts) { + if (iop.index === rop.index) { + // E.g., insert before 2, delete 2..2; update replace + // text to include insert before, kill insert + rewrites[iop.instructionIndex] = undefined; + rop.text = iop.text.toString() + (rop.text != null ? rop.text.toString() : ""); + } + else if (iop.index > rop.index && iop.index <= rop.lastIndex) { + // delete insert as it's a no-op. + rewrites[iop.instructionIndex] = undefined; + } + } + // Drop any prior replaces contained within + let prevReplaces = this.getKindOfOps(rewrites, ReplaceOp, i); + for (let prevRop of prevReplaces) { + if (prevRop.index >= rop.index && prevRop.lastIndex <= rop.lastIndex) { + // delete replace as it's a no-op. + rewrites[prevRop.instructionIndex] = undefined; + continue; + } + // throw exception unless disjoint or identical + let disjoint = + prevRop.lastIndex < rop.index || prevRop.index > rop.lastIndex; + // Delete special case of replace (text==null): + // D.i-j.u D.x-y.v | boundaries overlap combine to max(min)..max(right) + if (prevRop.text == null && rop.text == null && !disjoint) { + rewrites[prevRop.instructionIndex] = undefined; // kill first delete + rop.index = Math.min(prevRop.index, rop.index); + rop.lastIndex = Math.max(prevRop.lastIndex, rop.lastIndex); + } + else if (!disjoint) { + throw new Error(`replace op boundaries of ${rop} overlap with previous ${prevRop}`); + } + } + } + + // WALK INSERTS + for (let i = 0; i < rewrites.length; i++) { + let op = rewrites[i]; + if (op == null) { + continue; + } + if (!(op instanceof InsertBeforeOp)) { + continue; + } + let iop = op; + // combine current insert with prior if any at same index + let prevInserts = this.getKindOfOps(rewrites, InsertBeforeOp, i); + for (let prevIop of prevInserts) { + if (prevIop.index === iop.index) { + if (prevIop instanceof InsertAfterOp) { + iop.text = this.catOpText(prevIop.text, iop.text); + rewrites[prevIop.instructionIndex] = undefined; + } + else if (prevIop instanceof InsertBeforeOp) { // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + iop.text = this.catOpText(iop.text, prevIop.text); + // delete redundant prior insert + rewrites[prevIop.instructionIndex] = undefined; + } + } + } + // look for replaces where iop.index is in range; error + let prevReplaces = this.getKindOfOps(rewrites, ReplaceOp, i); + for (let rop of prevReplaces) { + if (iop.index === rop.index) { + rop.text = this.catOpText(iop.text, rop.text); + rewrites[i] = undefined; // delete current insert + continue; + } + if (iop.index >= rop.index && iop.index <= rop.lastIndex) { + throw new Error(`insert op ${iop} within boundaries of previous ${rop}`); + } + } + } + + let m = new Map(); + for (let op of rewrites) { + if (op == null) { + // ignore deleted ops + continue; + } + if (m.get(op.index) != null) { + throw new Error("should only be one op per index"); + } + m.set(op.index, op); + } + return m; + } + + catOpText(a, b) { + let x = ""; + let y = ""; + if (a != null) { + x = a.toString(); + } + if (b != null) { + y = b.toString(); + } + return x + y; + } + + /** Get all operations before an index of a particular kind */ + getKindOfOps(rewrites, kind, before) { + let ops = []; + for (let i = 0; i < before && i < rewrites.length; i++) { + let op = rewrites[i]; + if (op == null) { + // ignore deleted + continue; + } + if (op instanceof kind) { + ops.push(op); + } + } + return ops; + } +} + +class RewriteOperation { + constructor(tokens, index, instructionIndex, text) { + this.tokens = tokens; + this.instructionIndex = instructionIndex; + this.index = index; + this.text = text === undefined ? "" : text; + } + + execute(buf) { + return this.index; + } + + toString() { + let opName = this.constructor.name; + const $index = opName.indexOf("$"); + opName = opName.substring($index + 1, opName.length); + return "<" + opName + "@" + this.tokens.get(this.index) + + ":\"" + this.text + "\">"; + } +} + +class InsertBeforeOp extends RewriteOperation { + constructor(tokens, index, instructionIndex, text) { + super(tokens, index, instructionIndex, text); + } + + execute(buf) { + buf.push(this.text.toString()); + if (this.tokens.get(this.index).type !== antlr4.Token.EOF) { + buf.push(String(this.tokens.get(this.index).text)); + } + return this.index + 1; + } +} + +class InsertAfterOp extends InsertBeforeOp { + constructor(tokens, index, instructionIndex, text) { + super(tokens, index + 1, instructionIndex, text); // insert after is insert before index+1 + } +} + +class ReplaceOp extends RewriteOperation { + constructor(tokens, from, to, instructionIndex, text) { + super(tokens, from, instructionIndex, text); + this.lastIndex = to; + } + + execute(buf) { + if (this.text != null) { + buf.push(this.text.toString()); + } + return this.lastIndex + 1; + } + + toString() { + if (this.text == null) { + return ""; + } + return ""; + } +} diff --git a/redpill-qjs-dtb/src/dts-js/src/index.js b/redpill-qjs-dtb/src/dts-js/src/index.js new file mode 100644 index 000000000..c70617eeb --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/src/index.js @@ -0,0 +1,109 @@ +import antlr4 from 'antlr4'; +import DTSLexer from './DTSLexer.js'; +import DTSParser from './DTSParser.js'; +import MyDTSListener from "./MyDTSListener.js"; +// import os from "os"; +// import std from "std"; + +if (!String.format) { + String.format = function (format) { + let args = Array.prototype.slice.call(arguments, 1); + return format.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match + ; + }); + }; +} + +const args = scriptArgs; +if (args.length < 2 || args.length > 3) { + std.out.printf('Usage: qjs dts.js [output path]\n'); + std.exit(1); +} +let filePath = args[1]; + +let outFilePath = args.length > 2 ? args[2] : filePath + ".out"; +const input = std.loadFile(filePath); + +const chars = new antlr4.InputStream(input); +const lexer = new DTSLexer(chars); +const tokens = new antlr4.CommonTokenStream(lexer); +const parser = new DTSParser(tokens); +parser.buildParseTrees = true; +const tree = parser.dts(); + +const walker = new antlr4.tree.ParseTreeWalker(); +const sta = new MyDTSListener(tokens); +walker.walk(sta, tree); + +const block_path = "/sys/block/"; +let data = os.readdir(block_path); + +if (data[1] === 0) { + // success + let prefix = "/sys/block/sata"; + let regex = /\/sys\/block\/nvme(\d{1,2})n(\d{1,2})/i; + for (let dataKey in data[0]) { + let path = block_path + data[0][dataKey]; + try { + std.out.printf("start processing path:%s\n", path); + if (path.toString().startsWith(prefix)) { + let num = Number.parseInt(path.toString().substring(prefix.length)); + let map = readPropertiesFile(path + "/device/syno_block_info"); + //pciepath=00:12.0 + //ata_port_no=0 + //driver=ahci + if (map.get("driver") === "ahci") { + sta.put(String.format("/internal_slot@{0}/ahci/pcie_root", num), String.format("\"{0}\"", map.get("pciepath"))); + sta.put(String.format("/internal_slot@{0}/ahci/ata_port", num), String.format("<0x{0}>", Number.parseInt(map.get("ata_port_no")).toString(16).padStart(2, "0"))); + } else { + std.out.printf("not ahci\n"); + } + } else if (path.toString().startsWith("/sys/block/nvme")) { + let matches; + if ((matches = regex.exec(path.toString()))) { + let num = Number.parseInt(matches[1]); + let map = readPropertiesFile(path + "/device/syno_block_info"); + //pciepath=00:12.0 + sta.put(String.format("/nvme_slot@{0}/pcie_root", num + 1), String.format("\"{0}\"", map.get("pciepath"))); + } else { + std.out.printf("nvme not found\n"); + } + } else { + std.out.printf("unsupported\n"); + } + } catch (err) { + std.out.printf("update path: %s to dts error: %s\n", path, err.message); + std.exit(1); + } + } + const open = std.open(outFilePath, "w"); + open.puts(sta.rewriter.getText()); + open.close(); +} else { + // error + std.out.printf("update dts error:%d\n", data[1]); + std.exit(1); +} + +function readPropertiesFile(path) { + const open = std.open(path, "r"); + let map = new Map(); + while (true) { + let line = open.getline(); + if (line === null) { + break; + } + let index = line.indexOf("="); + if (index > 0) { + let k = line.substring(0, index); + let v = line.substring(index + 1); + map.set(k, v); + std.out.printf("%s = %s\n", k, v); + } + } + open.close(); + return map; +} diff --git a/redpill-qjs-dtb/src/dts-js/webpack.config.js b/redpill-qjs-dtb/src/dts-js/webpack.config.js new file mode 100644 index 000000000..78249ce6c --- /dev/null +++ b/redpill-qjs-dtb/src/dts-js/webpack.config.js @@ -0,0 +1,18 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.js', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'bundle.js', + }, + optimization: { + minimize: true, + }, + resolve: { + fallback: { + fs: false + } + }, + mode: "production", +}; diff --git a/redpill-qjs-dtb/src/dts.js b/redpill-qjs-dtb/src/dts.js new file mode 100644 index 000000000..4d0fca87f --- /dev/null +++ b/redpill-qjs-dtb/src/dts.js @@ -0,0 +1,2 @@ +/*! For license information please see bundle.js.LICENSE.txt */ +(()=>{var t={654:()=>{}},e={};function n(s){var i=e[s];if(void 0!==i)return i.exports;var r=e[s]={exports:{}};return t[s](r,r.exports,n),r.exports}(()=>{"use strict";String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32)),String.prototype.hashCode=function(){const t=this.toString();let e,n;const s=3&t.length,i=t.length-s;let r=String.prototype.seed;const o=3432918353,a=461845907;let l=0;for(;l>>16)*o&65535)<<16)&4294967295,n=n<<15|n>>>17,n=(65535&n)*a+(((n>>>16)*a&65535)<<16)&4294967295,r^=n,r=r<<13|r>>>19,e=5*(65535&r)+((5*(r>>>16)&65535)<<16)&4294967295,r=27492+(65535&e)+((58964+(e>>>16)&65535)<<16);switch(n=0,s){case 3:n^=(255&t.charCodeAt(l+2))<<16;case 2:n^=(255&t.charCodeAt(l+1))<<8;case 1:n^=255&t.charCodeAt(l),n=(65535&n)*o+(((n>>>16)*o&65535)<<16)&4294967295,n=n<<15|n>>>17,n=(65535&n)*a+(((n>>>16)*a&65535)<<16)&4294967295,r^=n}return r^=t.length,r^=r>>>16,r=2246822507*(65535&r)+((2246822507*(r>>>16)&65535)<<16)&4294967295,r^=r>>>13,r=3266489909*(65535&r)+((3266489909*(r>>>16)&65535)<<16)&4294967295,r^=r>>>16,r>>>0},String.prototype.codePointAt||function(){var t=function(){let t;try{const e={},n=Object.defineProperty;t=n(e,e,e)&&n}catch(t){}return t}();const e=function(t){if(null==this)throw TypeError();const e=String(this),n=e.length;let s=t?Number(t):0;if(s!=s&&(s=0),s<0||s>=n)return;const i=e.charCodeAt(s);let r;return i>=55296&&i<=56319&&n>s+1&&(r=e.charCodeAt(s+1),r>=56320&&r<=57343)?1024*(i-55296)+r-56320+65536:i};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}(),String.fromCodePoint||function(){const t=function(){let t;try{const e={},n=Object.defineProperty;t=n(e,e,e)&&n}catch(t){}return t}(),e=String.fromCharCode,n=Math.floor,s=function(t){const s=16384,i=[];let r,o,a=-1;const l=arguments.length;if(!l)return"";let h="";for(;++a1114111||n(t)!==t)throw RangeError("Invalid code point: "+t);t<=65535?i.push(t):(t-=65536,r=55296+(t>>10),o=t%1024+56320,i.push(r,o)),(a+1===l||i.length>s)&&(h+=e.apply(null,i),i.length=0)}return h};t?t(String,"fromCodePoint",{value:s,configurable:!0,writable:!0}):String.fromCodePoint=s}();class t{constructor(){this.source=null,this.type=null,this.channel=null,this.start=null,this.stop=null,this.tokenIndex=null,this.line=null,this.column=null,this._text=null}getTokenSource(){return this.source[0]}getInputStream(){return this.source[1]}get text(){return this._text}set text(t){this._text=t}}function e(t,e){if(!Array.isArray(t)||!Array.isArray(e))return!1;if(t===e)return!0;if(t.length!==e.length)return!1;for(let n=0;n>>17,t*=461845907,this.count=this.count+1;let n=this.hash^t;n=n<<13|n>>>19,n=5*n+3864292196,this.hash=n}}}finish(){let t=this.hash^4*this.count;return t^=t>>>16,t*=2246822507,t^=t>>>13,t*=3266489909,t^=t>>>16,t}static hashStuff(){const t=new s;return t.update.apply(t,arguments),t.finish()}}function i(t){return t?t.hashCode():-1}function r(t,e){return t?t.equals(e):t===e}function o(t){return null===t?"null":t}function a(t){return Array.isArray(t)?"["+t.map(o).join(", ")+"]":"null"}const l="h-";class h{constructor(t,e){this.data={},this.hashFunction=t||i,this.equalsFunction=e||r}add(t){const e=l+this.hashFunction(t);if(e in this.data){const n=this.data[e];for(let e=0;et.startsWith(l))).flatMap((t=>this.data[t]),this)}toString(){return a(this.values())}get length(){return Object.keys(this.data).filter((t=>t.startsWith(l))).map((t=>this.data[t].length),this).reduce(((t,e)=>t+e),0)}}class c{hashCode(){const t=new s;return this.updateHashCode(t),t.finish()}evaluate(t,e){}evalPrecedence(t,e){return this}static andContext(t,e){if(null===t||t===c.NONE)return e;if(null===e||e===c.NONE)return t;const n=new u(t,e);return 1===n.opnds.length?n.opnds[0]:n}static orContext(t,e){if(null===t)return e;if(null===e)return t;if(t===c.NONE||e===c.NONE)return c.NONE;const n=new d(t,e);return 1===n.opnds.length?n.opnds[0]:n}}class u extends c{constructor(t,e){super();const n=new h;t instanceof u?t.opnds.map((function(t){n.add(t)})):n.add(t),e instanceof u?e.opnds.map((function(t){n.add(t)})):n.add(e);const s=p(n);if(s.length>0){let t=null;s.map((function(e){(null===t||e.precedencet.toString()));return(t.length>3?t.slice(3):t).join("&&")}}class d extends c{constructor(t,e){super();const n=new h;t instanceof d?t.opnds.map((function(t){n.add(t)})):n.add(t),e instanceof d?e.opnds.map((function(t){n.add(t)})):n.add(e);const s=p(n);if(s.length>0){const t=s.sort((function(t,e){return t.compareTo(e)})),e=t[t.length-1];n.add(e)}this.opnds=Array.from(n.values())}equals(t){return this===t||t instanceof d&&e(this.opnds,t.opnds)}updateHashCode(t){t.update(this.opnds,"OR")}evaluate(t,e){for(let n=0;nt.toString()));return(t.length>3?t.slice(3):t).join("||")}}function p(t){const e=[];return t.values().map((function(t){t instanceof c.PrecedencePredicate&&e.push(t)})),e}function g(t,e){if(null===t){const t={state:null,alt:null,context:null,semanticContext:null};return e&&(t.reachesIntoOuterContext=0),t}{const n={};return n.state=t.state||null,n.alt=void 0===t.alt?null:t.alt,n.context=t.context||null,n.semanticContext=t.semanticContext||null,e&&(n.reachesIntoOuterContext=t.reachesIntoOuterContext||0,n.precedenceFilterSuppressed=t.precedenceFilterSuppressed||!1),n}}class f{constructor(t,e){this.checkContext(t,e),t=g(t),e=g(e,!0),this.state=null!==t.state?t.state:e.state,this.alt=null!==t.alt?t.alt:e.alt,this.context=null!==t.context?t.context:e.context,this.semanticContext=null!==t.semanticContext?t.semanticContext:null!==e.semanticContext?e.semanticContext:c.NONE,this.reachesIntoOuterContext=e.reachesIntoOuterContext,this.precedenceFilterSuppressed=e.precedenceFilterSuppressed}checkContext(t,e){null!==t.context&&void 0!==t.context||null!==e&&null!==e.context&&void 0!==e.context||(this.context=null)}hashCode(){const t=new s;return this.updateHashCode(t),t.finish()}updateHashCode(t){t.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)}equals(t){return this===t||t instanceof f&&this.state.stateNumber===t.state.stateNumber&&this.alt===t.alt&&(null===this.context?null===t.context:this.context.equals(t.context))&&this.semanticContext.equals(t.semanticContext)&&this.precedenceFilterSuppressed===t.precedenceFilterSuppressed}hashCodeForConfigSet(){const t=new s;return t.update(this.state.stateNumber,this.alt,this.semanticContext),t.finish()}equalsForConfigSet(t){return this===t||t instanceof f&&this.state.stateNumber===t.state.stateNumber&&this.alt===t.alt&&this.semanticContext.equals(t.semanticContext)}toString(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==c.NONE?","+this.semanticContext.toString():"")+(this.reachesIntoOuterContext>0?",up="+this.reachesIntoOuterContext:"")+")"}}class x{constructor(t,e){this.start=t,this.stop=e}clone(){return new x(this.start,this.stop)}contains(t){return t>=this.start&&tthis.addInterval(t)),this),this}reduce(t){if(t=n.stop?(this.intervals.splice(t+1,1),this.reduce(t)):e.stop>=n.start&&(this.intervals[t]=new x(e.start,n.stop),this.intervals.splice(t+1,1))}}complement(t,e){const n=new T;return n.addInterval(new x(t,e+1)),null!==this.intervals&&this.intervals.forEach((t=>n.removeRange(t))),n}contains(t){if(null===this.intervals)return!1;for(let e=0;en.start&&t.stop=n.stop?(this.intervals.splice(e,1),e-=1):t.start"):e.push("'"+String.fromCharCode(s.start)+"'"):e.push("'"+String.fromCharCode(s.start)+"'..'"+String.fromCharCode(s.stop-1)+"'")}return e.length>1?"{"+e.join(", ")+"}":e[0]}toIndexString(){const e=[];for(let n=0;n"):e.push(s.start.toString()):e.push(s.start.toString()+".."+(s.stop-1).toString())}return e.length>1?"{"+e.join(", ")+"}":e[0]}toTokenString(t,e){const n=[];for(let s=0;s1?"{"+n.join(", ")+"}":n[0]}elementName(e,n,s){return s===t.EOF?"":s===t.EPSILON?"":e[s]||n[s]}get length(){return this.intervals.map((t=>t.length)).reduce(((t,e)=>t+e))}}class S{constructor(){this.atn=null,this.stateNumber=S.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null}toString(){return this.stateNumber}equals(t){return t instanceof S&&this.stateNumber===t.stateNumber}isNonGreedyExitState(){return!1}addTransition(t,e){void 0===e&&(e=-1),0===this.transitions.length?this.epsilonOnlyTransitions=t.isEpsilon:this.epsilonOnlyTransitions!==t.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===e?this.transitions.push(t):this.transitions.splice(e,1,t)}}S.INVALID_TYPE=0,S.BASIC=1,S.RULE_START=2,S.BLOCK_START=3,S.PLUS_BLOCK_START=4,S.STAR_BLOCK_START=5,S.TOKEN_START=6,S.RULE_STOP=7,S.BLOCK_END=8,S.STAR_LOOP_BACK=9,S.STAR_LOOP_ENTRY=10,S.PLUS_LOOP_BACK=11,S.LOOP_END=12,S.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],S.INVALID_STATE_NUMBER=-1;class E extends S{constructor(){return super(),this.stateType=S.RULE_STOP,this}}class m{constructor(t){if(null==t)throw"target cannot be null.";this.target=t,this.isEpsilon=!1,this.label=null}}m.EPSILON=1,m.RANGE=2,m.RULE=3,m.PREDICATE=4,m.ATOM=5,m.ACTION=6,m.SET=7,m.NOT_SET=8,m.WILDCARD=9,m.PRECEDENCE=10,m.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"],m.serializationTypes={EpsilonTransition:m.EPSILON,RangeTransition:m.RANGE,RuleTransition:m.RULE,PredicateTransition:m.PREDICATE,AtomTransition:m.ATOM,ActionTransition:m.ACTION,SetTransition:m.SET,NotSetTransition:m.NOT_SET,WildcardTransition:m.WILDCARD,PrecedencePredicateTransition:m.PRECEDENCE};class _ extends m{constructor(t,e,n,s){super(t),this.ruleIndex=e,this.precedence=n,this.followState=s,this.serializationType=m.RULE,this.isEpsilon=!0}matches(t,e,n){return!1}}class C extends m{constructor(e,n){super(e),this.serializationType=m.SET,null!=n?this.label=n:(this.label=new T,this.label.addOne(t.INVALID_TYPE))}matches(t,e,n){return this.label.contains(t)}toString(){return this.label.toString()}}class A extends C{constructor(t,e){super(t,e),this.serializationType=m.NOT_SET}matches(t,e,n){return t>=e&&t<=n&&!super.matches(t,e,n)}toString(){return"~"+super.toString()}}class N extends m{constructor(t){super(t),this.serializationType=m.WILDCARD}matches(t,e,n){return t>=e&&t<=n}toString(){return"."}}class y extends m{constructor(t){super(t)}}class I extends class extends class{}{}{}class k extends I{getRuleContext(){throw new Error("missing interface implementation")}}class O extends I{}class R extends O{}const L={toStringTree:function(t,e,n){e=e||null,null!==(n=n||null)&&(e=n.ruleNames);let s=L.getNodeText(t,e);s=function(t,e){return t=t.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r")}(s);const i=t.getChildCount();if(0===i)return s;let r="("+s+" ";i>0&&(s=L.toStringTree(t.getChild(0),e),r=r.concat(s));for(let n=1;n=0&&e0&&(t+=", "),this.returnStates[e]!==P.EMPTY_RETURN_STATE?(t+=this.returnStates[e],null!==this.parents[e]?t=t+" "+this.parents[e]:t+="null"):t+="$";return t+"]"}}get length(){return this.returnStates.length}}class D extends P{constructor(t,e){let n=0;const i=new s;null!==t?i.update(t,e):i.update(1),n=i.finish(),super(n),this.parentCtx=t,this.returnState=e}getParent(t){return this.parentCtx}getReturnState(t){return this.returnState}equals(t){return this===t||t instanceof D&&this.hashCode()===t.hashCode()&&this.returnState===t.returnState&&(null==this.parentCtx?null==t.parentCtx:this.parentCtx.equals(t.parentCtx))}toString(){const t=null===this.parentCtx?"":this.parentCtx.toString();return 0===t.length?this.returnState===P.EMPTY_RETURN_STATE?"$":""+this.returnState:this.returnState+" "+t}get length(){return 1}static create(t,e){return e===P.EMPTY_RETURN_STATE&&null===t?P.EMPTY:new D(t,e)}}class F extends D{constructor(){super(null,P.EMPTY_RETURN_STATE)}isEmpty(){return!0}getParent(t){return null}getReturnState(t){return this.returnState}equals(t){return this===t}toString(){return"$"}}P.EMPTY=new F;const M="h-";class U{constructor(t,e){this.data={},this.hashFunction=t||i,this.equalsFunction=e||r}set(t,e){const n=M+this.hashFunction(t);if(n in this.data){const s=this.data[n];for(let n=0;nt.startsWith(M))).flatMap((t=>this.data[t]),this)}getKeys(){return this.entries().map((t=>t.key))}getValues(){return this.entries().map((t=>t.value))}toString(){return"["+this.entries().map((t=>"{"+t.key+":"+t.value+"}")).join(", ")+"]"}get length(){return Object.keys(this.data).filter((t=>t.startsWith(M))).map((t=>this.data[t].length),this).reduce(((t,e)=>t+e),0)}}function B(t,e){if(null==e&&(e=w.EMPTY),null===e.parentCtx||e===w.EMPTY)return P.EMPTY;const n=B(t,e.parentCtx),s=t.states[e.invokingState].transitions[0];return D.create(n,s.followState.stateNumber)}function V(t,e,n){if(t.isEmpty())return t;let s=n.get(t)||null;if(null!==s)return s;if(s=e.get(t),null!==s)return n.set(t,s),s;let i=!1,r=[];for(let s=0;se.returnState&&(i[0]=e.returnState,i[1]=t.returnState);const r=new b([n,n],i);return null!==s&&s.set(t,e,r),r}const i=[t.returnState,e.returnState];let r=[t.parentCtx,e.parentCtx];t.returnState>e.returnState&&(i[0]=e.returnState,i[1]=t.returnState,r=[e.parentCtx,t.parentCtx]);const o=new b(r,i);return null!==s&&s.set(t,e,o),o}}(t,e,n,s);if(n){if(t instanceof F)return t;if(e instanceof F)return e}return t instanceof D&&(t=new b([t.getParent()],[t.returnState])),e instanceof D&&(e=new b([e.getParent()],[e.returnState])),function(t,e,n,s){if(null!==s){let n=s.get(t,e);if(null!==n)return n;if(n=s.get(e,t),null!==n)return n}let i=0,r=0,o=0,a=[],l=[];for(;ithis.add(t)),this)}remove(t){delete this.data[t]}has(t){return!0===this.data[t]}values(){return Object.keys(this.data)}minValue(){return Math.min.apply(null,this.values())}hashCode(){return s.hashStuff(this.values())}equals(t){return t instanceof K&&e(this.data,t.data)}toString(){return"{"+this.values().join(", ")+"}"}get length(){return this.values().length}}class q{constructor(t){this.atn=t}getDecisionLookahead(t){if(null===t)return null;const e=t.transitions.length,n=[];for(let s=0;s=this.states.length)throw"Invalid state number.";const s=this.states[e];let i=this.nextTokens(s);if(!i.contains(t.EPSILON))return i;const r=new T;for(r.addSet(i),r.removeOne(t.EPSILON);null!==n&&n.invokingState>=0&&i.contains(t.EPSILON);){const e=this.states[n.invokingState].transitions[0];i=this.nextTokens(e.followState),r.addSet(i),r.removeOne(t.EPSILON),n=n.parentCtx}return i.contains(t.EPSILON)&&r.addOne(t.EOF),r}}Y.INVALID_ALT_NUMBER=0;class z extends S{constructor(){super(),this.stateType=S.BASIC}}class G extends S{constructor(){return super(),this.decision=-1,this.nonGreedy=!1,this}}class W extends G{constructor(){return super(),this.endState=null,this}}class j extends S{constructor(){return super(),this.stateType=S.BLOCK_END,this.startState=null,this}}class Q extends S{constructor(){return super(),this.stateType=S.LOOP_END,this.loopBackState=null,this}}class $ extends S{constructor(){return super(),this.stateType=S.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}}class X extends G{constructor(){return super(),this.stateType=S.TOKEN_START,this}}class J extends G{constructor(){return super(),this.stateType=S.PLUS_LOOP_BACK,this}}class Z extends S{constructor(){return super(),this.stateType=S.STAR_LOOP_BACK,this}}class tt extends G{constructor(){return super(),this.stateType=S.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}}class et extends W{constructor(){return super(),this.stateType=S.PLUS_BLOCK_START,this.loopBackState=null,this}}class nt extends W{constructor(){return super(),this.stateType=S.STAR_BLOCK_START,this}}class st extends W{constructor(){return super(),this.stateType=S.BLOCK_START,this}}class it extends m{constructor(t,e){super(t),this.label_=e,this.label=this.makeLabel(),this.serializationType=m.ATOM}makeLabel(){const t=new T;return t.addOne(this.label_),t}matches(t,e,n){return this.label_===t}toString(){return this.label_}}class rt extends m{constructor(t,e,n){super(t),this.serializationType=m.RANGE,this.start=e,this.stop=n,this.label=this.makeLabel()}makeLabel(){const t=new T;return t.addRange(this.start,this.stop),t}matches(t,e,n){return t>=this.start&&t<=this.stop}toString(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"}}class ot extends m{constructor(t,e,n,s){super(t),this.serializationType=m.ACTION,this.ruleIndex=e,this.actionIndex=void 0===n?-1:n,this.isCtxDependent=void 0!==s&&s,this.isEpsilon=!0}matches(t,e,n){return!1}toString(){return"action_"+this.ruleIndex+":"+this.actionIndex}}class at extends m{constructor(t,e){super(t),this.serializationType=m.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=e}matches(t,e,n){return!1}toString(){return"epsilon"}}class lt extends c{constructor(t,e,n){super(),this.ruleIndex=void 0===t?-1:t,this.predIndex=void 0===e?-1:e,this.isCtxDependent=void 0!==n&&n}evaluate(t,e){const n=this.isCtxDependent?e:null;return t.sempred(n,this.ruleIndex,this.predIndex)}updateHashCode(t){t.update(this.ruleIndex,this.predIndex,this.isCtxDependent)}equals(t){return this===t||t instanceof lt&&this.ruleIndex===t.ruleIndex&&this.predIndex===t.predIndex&&this.isCtxDependent===t.isCtxDependent}toString(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"}}c.NONE=new lt;class ht extends y{constructor(t,e,n,s){super(t),this.serializationType=m.PREDICATE,this.ruleIndex=e,this.predIndex=n,this.isCtxDependent=s,this.isEpsilon=!0}matches(t,e,n){return!1}getPredicate(){return new lt(this.ruleIndex,this.predIndex,this.isCtxDependent)}toString(){return"pred_"+this.ruleIndex+":"+this.predIndex}}class ct extends c{constructor(t){super(),this.precedence=void 0===t?0:t}evaluate(t,e){return t.precpred(e,this.precedence)}evalPrecedence(t,e){return t.precpred(e,this.precedence)?c.NONE:null}compareTo(t){return this.precedence-t.precedence}updateHashCode(t){t.update(this.precedence)}equals(t){return this===t||t instanceof ct&&this.precedence===t.precedence}toString(){return"{"+this.precedence+">=prec}?"}}c.PrecedencePredicate=ct;class ut extends y{constructor(t,e){super(t),this.serializationType=m.PRECEDENCE,this.precedence=e,this.isEpsilon=!0}matches(t,e,n){return!1}getPredicate(){return new ct(this.precedence)}toString(){return this.precedence+" >= _p"}}class dt{constructor(t){void 0===t&&(t=null),this.readOnly=!1,this.verifyATN=null===t||t.verifyATN,this.generateRuleBypassTransitions=null!==t&&t.generateRuleBypassTransitions}}dt.defaultOptions=new dt,dt.defaultOptions.readOnly=!0;class pt{constructor(t){this.actionType=t,this.isPositionDependent=!1}hashCode(){const t=new s;return this.updateHashCode(t),t.finish()}updateHashCode(t){t.update(this.actionType)}equals(t){return this===t}}class gt extends pt{constructor(){super(6)}execute(t){t.skip()}toString(){return"skip"}}gt.INSTANCE=new gt;class ft extends pt{constructor(t){super(0),this.channel=t}execute(t){t._channel=this.channel}updateHashCode(t){t.update(this.actionType,this.channel)}equals(t){return this===t||t instanceof ft&&this.channel===t.channel}toString(){return"channel("+this.channel+")"}}class xt extends pt{constructor(t,e){super(1),this.ruleIndex=t,this.actionIndex=e,this.isPositionDependent=!0}execute(t){t.action(null,this.ruleIndex,this.actionIndex)}updateHashCode(t){t.update(this.actionType,this.ruleIndex,this.actionIndex)}equals(t){return this===t||t instanceof xt&&this.ruleIndex===t.ruleIndex&&this.actionIndex===t.actionIndex}}class Tt extends pt{constructor(){super(3)}execute(t){t.more()}toString(){return"more"}}Tt.INSTANCE=new Tt;class St extends pt{constructor(t){super(7),this.type=t}execute(t){t.type=this.type}updateHashCode(t){t.update(this.actionType,this.type)}equals(t){return this===t||t instanceof St&&this.type===t.type}toString(){return"type("+this.type+")"}}class Et extends pt{constructor(t){super(5),this.mode=t}execute(t){t.pushMode(this.mode)}updateHashCode(t){t.update(this.actionType,this.mode)}equals(t){return this===t||t instanceof Et&&this.mode===t.mode}toString(){return"pushMode("+this.mode+")"}}class mt extends pt{constructor(){super(4)}execute(t){t.popMode()}toString(){return"popMode"}}mt.INSTANCE=new mt;class _t extends pt{constructor(t){super(2),this.mode=t}execute(t){t.mode(this.mode)}updateHashCode(t){t.update(this.actionType,this.mode)}equals(t){return this===t||t instanceof _t&&this.mode===t.mode}toString(){return"mode("+this.mode+")"}}function Ct(t,e){const n=[];return n[t-1]=e,n.map((function(t){return e}))}class At{constructor(t){null==t&&(t=dt.defaultOptions),this.deserializationOptions=t,this.stateFactories=null,this.actionFactories=null}deserialize(t){const e=this.reset(t);this.checkVersion(e),e&&this.skipUUID();const n=this.readATN();this.readStates(n,e),this.readRules(n,e),this.readModes(n);const s=[];return this.readSets(n,s,this.readInt.bind(this)),e&&this.readSets(n,s,this.readInt32.bind(this)),this.readEdges(n,s),this.readDecisions(n),this.readLexerActions(n,e),this.markPrecedenceDecisions(n),this.verifyATN(n),this.deserializationOptions.generateRuleBypassTransitions&&1===n.grammarType&&(this.generateRuleBypassTransitions(n),this.verifyATN(n)),n}reset(t){if(3===(t.charCodeAt?t.charCodeAt(0):t[0])){const e=function(t){const e=t.charCodeAt(0);return e>1?e-2:e+65534},n=t.split("").map(e);return n[0]=t.charCodeAt(0),this.data=n,this.pos=0,!0}return this.data=t,this.pos=0,!1}skipUUID(){let t=0;for(;t++<8;)this.readInt()}checkVersion(t){const e=this.readInt();if(!t&&4!==e)throw"Could not deserialize ATN with version "+e+" (expected 4)."}readATN(){const t=this.readInt(),e=this.readInt();return new Y(t,e)}readStates(t,e){let n,s,i;const r=[],o=[],a=this.readInt();for(let n=0;n0;)i.addTransition(l.transitions[h-1]),l.transitions=l.transitions.slice(-1);t.ruleToStartState[e].addTransition(new at(i)),r.addTransition(new at(a));const c=new z;t.addState(c),c.addTransition(new it(r,t.ruleToTokenType[e])),i.addTransition(new at(c))}stateIsEndStateFor(t,e){if(t.ruleIndex!==e)return null;if(!(t instanceof tt))return null;const n=t.transitions[t.transitions.length-1].target;return n instanceof Q&&n.epsilonOnlyTransitions&&n.transitions[0].target instanceof E?t:null}markPrecedenceDecisions(t){for(let e=0;e=0):this.checkCondition(n.transitions.length<=1||n instanceof E)}}checkCondition(t,e){if(!t)throw null==e&&(e="IllegalState"),e}readInt(){return this.data[this.pos++]}readInt32(){return this.readInt()|this.readInt()<<16}edgeFactory(e,n,s,i,r,o,a,l){const h=e.states[i];switch(n){case m.EPSILON:return new at(h);case m.RANGE:return new rt(h,0!==a?t.EOF:r,o);case m.RULE:return new _(e.states[r],o,a,h);case m.PREDICATE:return new ht(h,r,o,0!==a);case m.PRECEDENCE:return new ut(h,r);case m.ATOM:return new it(h,0!==a?t.EOF:r);case m.ACTION:return new ot(h,r,o,0!==a);case m.SET:return new C(h,l[r]);case m.NOT_SET:return new A(h,l[r]);case m.WILDCARD:return new N(h);default:throw"The specified transition type: "+n+" is not valid."}}stateFactory(t,e){if(null===this.stateFactories){const t=[];t[S.INVALID_TYPE]=null,t[S.BASIC]=()=>new z,t[S.RULE_START]=()=>new $,t[S.BLOCK_START]=()=>new st,t[S.PLUS_BLOCK_START]=()=>new et,t[S.STAR_BLOCK_START]=()=>new nt,t[S.TOKEN_START]=()=>new X,t[S.RULE_STOP]=()=>new E,t[S.BLOCK_END]=()=>new j,t[S.STAR_LOOP_BACK]=()=>new Z,t[S.STAR_LOOP_ENTRY]=()=>new tt,t[S.PLUS_LOOP_BACK]=()=>new J,t[S.LOOP_END]=()=>new Q,this.stateFactories=t}if(t>this.stateFactories.length||null===this.stateFactories[t])throw"The specified state type "+t+" is not valid.";{const n=this.stateFactories[t]();if(null!==n)return n.ruleIndex=e,n}}lexerActionFactory(t,e,n){if(null===this.actionFactories){const t=[];t[0]=(t,e)=>new ft(t),t[1]=(t,e)=>new xt(t,e),t[2]=(t,e)=>new _t(t),t[3]=(t,e)=>Tt.INSTANCE,t[4]=(t,e)=>mt.INSTANCE,t[5]=(t,e)=>new Et(t),t[6]=(t,e)=>gt.INSTANCE,t[7]=(t,e)=>new St(t),this.actionFactories=t}if(t>this.actionFactories.length||null===this.actionFactories[t])throw"The specified lexer action type "+t+" is not valid.";return this.actionFactories[t](e,n)}}class Nt{syntaxError(t,e,n,s,i,r){}reportAmbiguity(t,e,n,s,i,r,o){}reportAttemptingFullContext(t,e,n,s,i,r){}reportContextSensitivity(t,e,n,s,i,r){}}class yt extends Nt{constructor(){super()}syntaxError(t,e,n,s,i,r){console.error("line "+n+":"+s+" "+i)}}yt.INSTANCE=new yt;class It extends Nt{constructor(t){if(super(),null===t)throw"delegates";return this.delegates=t,this}syntaxError(t,e,n,s,i,r){this.delegates.map((o=>o.syntaxError(t,e,n,s,i,r)))}reportAmbiguity(t,e,n,s,i,r,o){this.delegates.map((a=>a.reportAmbiguity(t,e,n,s,i,r,o)))}reportAttemptingFullContext(t,e,n,s,i,r){this.delegates.map((o=>o.reportAttemptingFullContext(t,e,n,s,i,r)))}reportContextSensitivity(t,e,n,s,i,r){this.delegates.map((o=>o.reportContextSensitivity(t,e,n,s,i,r)))}}class kt{constructor(){this._listeners=[yt.INSTANCE],this._interp=null,this._stateNumber=-1}checkVersion(t){"4.10.1"!==t&&console.log("ANTLR runtime and generated code versions disagree: 4.10.1!="+t)}addErrorListener(t){this._listeners.push(t)}removeErrorListeners(){this._listeners=[]}getLiteralNames(){return Object.getPrototypeOf(this).constructor.literalNames||[]}getSymbolicNames(){return Object.getPrototypeOf(this).constructor.symbolicNames||[]}getTokenNames(){if(!this.tokenNames){const t=this.getLiteralNames(),e=this.getSymbolicNames(),n=t.length>e.length?t.length:e.length;this.tokenNames=[];for(let s=0;s";let n=e.text;return null===n&&(n=e.type===t.EOF?"":"<"+e.type+">"),n=n.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"),"'"+n+"'"}getErrorListenerDispatch(){return new It(this._listeners)}sempred(t,e,n){return!0}precpred(t,e){return!0}get state(){return this._stateNumber}set state(t){this._stateNumber=t}}kt.tokenTypeMapCache={},kt.ruleIndexMapCache={};class Ot extends t{constructor(e,n,s,i,r){super(),this.source=void 0!==e?e:Ot.EMPTY_SOURCE,this.type=void 0!==n?n:null,this.channel=void 0!==s?s:t.DEFAULT_CHANNEL,this.start=void 0!==i?i:-1,this.stop=void 0!==r?r:-1,this.tokenIndex=-1,null!==this.source[0]?(this.line=e[0].line,this.column=e[0].column):this.column=-1}clone(){const t=new Ot(this.source,this.type,this.channel,this.start,this.stop);return t.tokenIndex=this.tokenIndex,t.line=this.line,t.column=this.column,t.text=this.text,t}toString(){let t=this.text;return t=null!==t?t.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+t+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"}get text(){if(null!==this._text)return this._text;const t=this.getInputStream();if(null===t)return null;const e=t.size;return this.start"}set text(t){this._text=t}}Ot.EMPTY_SOURCE=[null,null];class Rt extends class{}{constructor(t){super(),this.copyText=void 0!==t&&t}create(t,e,n,s,i,r,o,a){const l=new Ot(t,e,s,i,r);return l.line=o,l.column=a,null!==n?l.text=n:this.copyText&&null!==t[1]&&(l.text=t[1].getText(i,r)),l}createThin(t,e){const n=new Ot(null,t);return n.text=e,n}}Rt.DEFAULT=new Rt;class Lt extends Error{constructor(t){super(t.message),Error.captureStackTrace&&Error.captureStackTrace(this,Lt),this.message=t.message,this.recognizer=t.recognizer,this.input=t.input,this.ctx=t.ctx,this.offendingToken=null,this.offendingState=-1,null!==this.recognizer&&(this.offendingState=this.recognizer.state)}getExpectedTokens(){return null!==this.recognizer?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null}toString(){return this.message}}class vt extends Lt{constructor(t,e,n,s){super({message:"",recognizer:t,input:e,ctx:null}),this.startIndex=n,this.deadEndConfigs=s}toString(){let t="";return this.startIndex>=0&&this.startIndex":"\n"===e?"\\n":"\t"===e?"\\t":"\r"===e?"\\r":e}getCharErrorDisplay(t){return"'"+this.getErrorDisplayForChar(t)+"'"}recover(e){this._input.LA(1)!==t.EOF&&(e instanceof vt?this._interp.consume(this._input):this._input.consume())}get inputStream(){return this._input}set inputStream(t){this._input=null,this._tokenFactorySourcePair=[this,this._input],this.reset(),this._input=t,this._tokenFactorySourcePair=[this,this._input]}get sourceName(){return this._input.sourceName}get type(){return this._type}set type(t){this._type=t}get line(){return this._interp.line}set line(t){this._interp.line=t}get column(){return this._interp.column}set column(t){this._interp.column=t}get text(){return null!==this._text?this._text:this._interp.getText(this._input)}set text(t){this._text=t}}function Pt(t){return t.hashCodeForConfigSet()}function bt(t,e){return t===e||null!==t&&null!==e&&t.equalsForConfigSet(e)}wt.DEFAULT_MODE=0,wt.MORE=-2,wt.SKIP=-3,wt.DEFAULT_TOKEN_CHANNEL=t.DEFAULT_CHANNEL,wt.HIDDEN=t.HIDDEN_CHANNEL,wt.MIN_CHAR_VALUE=0,wt.MAX_CHAR_VALUE=1114111;class Dt{constructor(t){this.configLookup=new h(Pt,bt),this.fullCtx=void 0===t||t,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1}add(t,e){if(void 0===e&&(e=null),this.readOnly)throw"This set is readonly";t.semanticContext!==c.NONE&&(this.hasSemanticContext=!0),t.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);const n=this.configLookup.add(t);if(n===t)return this.cachedHashCode=-1,this.configs.push(t),!0;const s=!this.fullCtx,i=H(n.context,t.context,s,e);return n.reachesIntoOuterContext=Math.max(n.reachesIntoOuterContext,t.reachesIntoOuterContext),t.precedenceFilterSuppressed&&(n.precedenceFilterSuppressed=!0),n.context=i,!0}getStates(){const t=new h;for(let e=0;eYt.MAX_DFA_EDGE)return null;let n=t.edges[e-Yt.MIN_DFA_EDGE];return void 0===n&&(n=null),Yt.debug&&null!==n&&console.log("reuse state "+t.stateNumber+" edge to "+n.stateNumber),n}computeTargetState(t,e,n){const s=new Ut;return this.getReachableConfigSet(t,e.configs,s,n),0===s.items.length?(s.hasSemanticContext||this.addDFAEdge(e,n,Mt.ERROR),Mt.ERROR):this.addDFAEdge(e,n,null,s)}failOrAccept(e,n,s,i){if(null!==this.prevAccept.dfaState){const t=e.dfaState.lexerActionExecutor;return this.accept(n,t,this.startIndex,e.index,e.line,e.column),e.dfaState.prediction}if(i===t.EOF&&n.index===this.startIndex)return t.EOF;throw new vt(this.recog,n,this.startIndex,s)}getReachableConfigSet(e,n,s,i){let r=Y.INVALID_ALT_NUMBER;for(let o=0;oYt.MAX_DFA_EDGE||(Yt.debug&&console.log("EDGE "+t+" -> "+n+" upon "+e),null===t.edges&&(t.edges=[]),t.edges[e-Yt.MIN_DFA_EDGE]=n),n}addDFAState(t){const e=new Ft(null,t);let n=null;for(let e=0;et.startsWith("k-"))).map((t=>this.data[t]),this)}}const Wt={SLL:0,LL:1,LL_EXACT_AMBIG_DETECTION:2,hasSLLConflictTerminatingPrediction:function(t,e){if(Wt.allConfigsInRuleStopStates(e))return!0;if(t===Wt.SLL&&e.hasSemanticContext){const t=new Dt;for(let n=0;n1)return!0;return!1},allSubsetsEqual:function(t){let e=null;for(let n=0;n0&&(r=this.getAltThatFinishedDecisionEntryRule(i),r!==Y.INVALID_ALT_NUMBER)?r:Y.INVALID_ALT_NUMBER}getAltThatFinishedDecisionEntryRule(t){const e=[];for(let n=0;n0||s.state instanceof E&&s.context.hasEmptyPath())&&e.indexOf(s.alt)<0&&e.push(s.alt)}return 0===e.length?Y.INVALID_ALT_NUMBER:Math.min.apply(null,e)}splitAccordingToSemanticValidity(t,e){const n=new Dt(t.fullCtx),s=new Dt(t.fullCtx);for(let i=0;i50))throw"problem";if(t.state instanceof E){if(!t.context.isEmpty()){for(let a=0;a=0&&(s+=1)}this.closureCheckingStopState(u,e,n,c,i,s,o)}}}canDropLoopEntryEdgeInLeftRecursiveRule(t){const e=t.state;if(e.stateType!==S.STAR_LOOP_ENTRY)return!1;if(e.stateType!==S.STAR_LOOP_ENTRY||!e.isPrecedenceDecision||t.context.isEmpty()||t.context.hasEmptyPath())return!1;const n=t.context.length;for(let s=0;s=0?this.parser.ruleNames[t]:""}getEpsilonTarget(e,n,s,i,r,o){switch(n.serializationType){case m.RULE:return this.ruleTransition(e,n);case m.PRECEDENCE:return this.precedenceTransition(e,n,s,i,r);case m.PREDICATE:return this.predTransition(e,n,s,i,r);case m.ACTION:return this.actionTransition(e,n);case m.EPSILON:return new f({state:n.target},e);case m.ATOM:case m.RANGE:case m.SET:return o&&n.matches(t.EOF,0,1)?new f({state:n.target},e):null;default:return null}}actionTransition(t,e){if(this.debug){const t=-1===e.actionIndex?65535:e.actionIndex;console.log("ACTION edge "+e.ruleIndex+":"+t)}return new f({state:e.target},t)}precedenceTransition(t,e,n,s,i){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+a(this.parser.getRuleInvocationStack())));let r=null;if(n&&s)if(i){const n=this._input.index;this._input.seek(this._startIndex);const s=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(n),s&&(r=new f({state:e.target},t))}else{const n=c.andContext(t.semanticContext,e.getPredicate());r=new f({state:e.target,semanticContext:n},t)}else r=new f({state:e.target},t);return this.debug&&console.log("config from pred transition="+r),r}predTransition(t,e,n,s,i){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.ruleIndex+":"+e.predIndex+", ctx dependent="+e.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+a(this.parser.getRuleInvocationStack())));let r=null;if(n&&(e.isCtxDependent&&s||!e.isCtxDependent))if(i){const n=this._input.index;this._input.seek(this._startIndex);const s=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(n),s&&(r=new f({state:e.target},t))}else{const n=c.andContext(t.semanticContext,e.getPredicate());r=new f({state:e.target,semanticContext:n},t)}else r=new f({state:e.target},t);return this.debug&&console.log("config from pred transition="+r),r}ruleTransition(t,e){this.debug&&console.log("CALL rule "+this.getRuleName(e.target.ruleIndex)+", ctx="+t.context);const n=e.followState,s=D.create(t.context,n.stateNumber);return new f({state:e.target,context:s},t)}getConflictingAlts(t){const e=jt.getConflictingAltSubsets(t);return jt.getAlts(e)}getConflictingAltsOrUniqueAlt(t){let e=null;return t.uniqueAlt!==Y.INVALID_ALT_NUMBER?(e=new K,e.add(t.uniqueAlt)):e=t.conflictingAlts,e}getTokenName(e){if(e===t.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(e>=this.parser.literalNames.length&&e>=this.parser.symbolicNames.length))return(this.parser.literalNames[e]||this.parser.symbolicNames[e])+"<"+e+">";console.log(e+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+e}getLookaheadName(t){return this.getTokenName(t.LA(1))}dumpDeadEndConfigs(t){console.log("dead end configs: ");const e=t.getDeadEndConfigs();for(let t=0;t0){const t=n.state.transitions[0];t instanceof it?s="Atom "+this.getTokenName(t.label):t instanceof C&&(s=(t instanceof A?"~":"")+"Set "+t.set)}console.error(n.toString(this.parser,!0)+":"+s)}}noViableAlt(t,e,n,s){return new Qt(this.parser,t,t.get(s),t.LT(1),n,e)}getUniqueAlt(t){let e=Y.INVALID_ALT_NUMBER;for(let n=0;n "+s+" upon "+this.getTokenName(n)),null===s)return null;if(s=this.addDFAState(t,s),null===e||n<-1||n>this.atn.maxTokenType)return s;if(null===e.edges&&(e.edges=[]),e.edges[n+1]=s,this.debug){const e=null===this.parser?null:this.parser.literalNames,n=null===this.parser?null:this.parser.symbolicNames;console.log("DFA=\n"+t.toString(e,n))}return s}addDFAState(t,e){if(e===Mt.ERROR)return e;const n=t.states.get(e);return null!==n?n:(e.stateNumber=t.states.length,e.configs.readOnly||(e.configs.optimizeConfigs(this),e.configs.setReadonly(!0)),t.states.add(e),this.debug&&console.log("adding new DFA state: "+e),e)}reportAttemptingFullContext(t,e,n,s,i){if(this.debug||this.retry_debug){const e=new x(s,i+1);console.log("reportAttemptingFullContext decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(e))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,t,s,i,e,n)}reportContextSensitivity(t,e,n,s,i){if(this.debug||this.retry_debug){const e=new x(s,i+1);console.log("reportContextSensitivity decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(e))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,t,s,i,e,n)}reportAmbiguity(t,e,n,s,i,r,o){if(this.debug||this.retry_debug){const t=new x(n,s+1);console.log("reportAmbiguity "+r+":"+o+", input="+this.parser.getTokenStream().getText(t))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,t,n,s,i,r,o)}},PredictionMode:jt};class Jt{constructor(t,e,n){this.dfa=t,this.literalNames=e||[],this.symbolicNames=n||[]}toString(){if(null===this.dfa.s0)return null;let t="";const e=this.dfa.sortedStates();for(let n=0;n"),t=t.concat(this.getStateString(e)),t=t.concat("\n"))}}}return 0===t.length?null:t}getEdgeLabel(t){return 0===t?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[t-1]||this.symbolicNames[t-1]:String.fromCharCode(t-1)}getStateString(t){const e=(t.isAcceptState?":":"")+"s"+t.stateNumber+(t.requiresFullContext?"^":"");return t.isAcceptState?null!==t.predicates?e+"=>"+a(t.predicates):e+"=>"+t.prediction.toString():e}}class Zt extends Jt{constructor(t){super(t,null)}getEdgeLabel(t){return"'"+String.fromCharCode(t)+"'"}}const te={DFA:class{constructor(t,e){if(void 0===e&&(e=0),this.atnStartState=t,this.decision=e,this._states=new h,this.s0=null,this.precedenceDfa=!1,t instanceof tt&&t.isPrecedenceDecision){this.precedenceDfa=!0;const t=new Ft(null,new Dt);t.edges=[],t.isAcceptState=!1,t.requiresFullContext=!1,this.s0=t}}getPrecedenceStartState(t){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return t<0||t>=this.s0.edges.length?null:this.s0.edges[t]||null}setPrecedenceStartState(t,e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";t<0||(this.s0.edges[t]=e)}setPrecedenceDfa(t){if(this.precedenceDfa!==t){if(this._states=new h,t){const t=new Ft(null,new Dt);t.edges=[],t.isAcceptState=!1,t.requiresFullContext=!1,this.s0=t}else this.s0=null;this.precedenceDfa=t}}sortedStates(){return this._states.values().sort((function(t,e){return t.stateNumber-e.stateNumber}))}toString(t,e){return t=t||null,e=e||null,null===this.s0?"":new Jt(this,t,e).toString()}toLexerString(){return null===this.s0?"":new Zt(this).toString()}get states(){return this._states}},DFASerializer:Jt,LexerDFASerializer:Zt,PredPrediction:zt};class ee{visitTerminal(t){}visitErrorNode(t){}enterEveryRule(t){}exitEveryRule(t){}}class ne{walk(t,e){if(e instanceof R||void 0!==e.isErrorNode&&e.isErrorNode())t.visitErrorNode(e);else if(e instanceof O)t.visitTerminal(e);else{this.enterRule(t,e);for(let n=0;n=0&&t.consume(),this.lastErrorIndex=t._input.index,null===this.lastErrorStates&&(this.lastErrorStates=[]),this.lastErrorStates.push(t.state);const n=this.getErrorRecoverySet(t);this.consumeUntil(t,n)}sync(e){if(this.inErrorRecoveryMode(e))return;const n=e._interp.atn.states[e.state],s=e.getTokenStream().LA(1),i=e.atn.nextTokens(n);if(i.contains(s))return this.nextTokensContext=null,void(this.nextTokenState=S.INVALID_STATE_NUMBER);if(i.contains(t.EPSILON))null===this.nextTokensContext&&(this.nextTokensContext=e._ctx,this.nextTokensState=e._stateNumber);else switch(n.stateType){case S.BLOCK_START:case S.STAR_BLOCK_START:case S.PLUS_BLOCK_START:case S.STAR_LOOP_ENTRY:if(null!==this.singleTokenDeletion(e))return;throw new ie(e);case S.PLUS_LOOP_BACK:case S.STAR_LOOP_BACK:{this.reportUnwantedToken(e);const t=new T;t.addSet(e.getExpectedTokens());const n=t.addSet(this.getErrorRecoverySet(e));this.consumeUntil(e,n)}}}reportNoViableAlternative(e,n){const s=e.getTokenStream();let i;i=null!==s?n.startToken.type===t.EOF?"":s.getText(new x(n.startToken.tokenIndex,n.offendingToken.tokenIndex)):"";const r="no viable alternative at input "+this.escapeWSAndQuote(i);e.notifyErrorListeners(r,n.offendingToken,n)}reportInputMismatch(t,e){const n="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e.offendingToken,e)}reportFailedPredicate(t,e){const n="rule "+t.ruleNames[t._ctx.ruleIndex]+" "+e.message;t.notifyErrorListeners(n,e.offendingToken,e)}reportUnwantedToken(t){if(this.inErrorRecoveryMode(t))return;this.beginErrorCondition(t);const e=t.getCurrentToken(),n="extraneous input "+this.getTokenErrorDisplay(e)+" expecting "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e,null)}reportMissingToken(t){if(this.inErrorRecoveryMode(t))return;this.beginErrorCondition(t);const e=t.getCurrentToken(),n="missing "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames)+" at "+this.getTokenErrorDisplay(e);t.notifyErrorListeners(n,e,null)}recoverInline(t){const e=this.singleTokenDeletion(t);if(null!==e)return t.consume(),e;if(this.singleTokenInsertion(t))return this.getMissingSymbol(t);throw new ie(t)}singleTokenInsertion(t){const e=t.getTokenStream().LA(1),n=t._interp.atn,s=n.states[t.state].transitions[0].target;return!!n.nextTokens(s,t._ctx).contains(e)&&(this.reportMissingToken(t),!0)}singleTokenDeletion(t){const e=t.getTokenStream().LA(2);if(this.getExpectedTokens(t).contains(e)){this.reportUnwantedToken(t),t.consume();const e=t.getCurrentToken();return this.reportMatch(t),e}return null}getMissingSymbol(e){const n=e.getCurrentToken(),s=this.getExpectedTokens(e).first();let i;i=s===t.EOF?"":"";let r=n;const o=e.getTokenStream().LT(-1);return r.type===t.EOF&&null!==o&&(r=o),e.getTokenFactory().create(r.source,s,i,t.DEFAULT_CHANNEL,-1,-1,r.line,r.column)}getExpectedTokens(t){return t.getExpectedTokens()}getTokenErrorDisplay(e){if(null===e)return"";let n=e.text;return null===n&&(n=e.type===t.EOF?"":"<"+e.type+">"),this.escapeWSAndQuote(n)}escapeWSAndQuote(t){return"'"+(t=(t=(t=t.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"}getErrorRecoverySet(e){const n=e._interp.atn;let s=e._ctx;const i=new T;for(;null!==s&&s.invokingState>=0;){const t=n.states[s.invokingState].transitions[0],e=n.nextTokens(t.followState);i.addSet(e),s=s.parentCtx}return i.removeOne(t.EPSILON),i}consumeUntil(e,n){let s=e.getTokenStream().LA(1);for(;s!==t.EOF&&!n.contains(s);)e.consume(),s=e.getTokenStream().LA(1)}}const he={RecognitionException:Lt,NoViableAltException:Qt,LexerNoViableAltException:vt,InputMismatchException:ie,FailedPredicateException:re,DiagnosticErrorListener:class extends Nt{constructor(t){super(),t=t||!0,this.exactOnly=t}reportAmbiguity(t,e,n,s,i,r,o){if(this.exactOnly&&!i)return;const a="reportAmbiguity d="+this.getDecisionDescription(t,e)+": ambigAlts="+this.getConflictingAlts(r,o)+", input='"+t.getTokenStream().getText(new x(n,s))+"'";t.notifyErrorListeners(a)}reportAttemptingFullContext(t,e,n,s,i,r){const o="reportAttemptingFullContext d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new x(n,s))+"'";t.notifyErrorListeners(o)}reportContextSensitivity(t,e,n,s,i,r){const o="reportContextSensitivity d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new x(n,s))+"'";t.notifyErrorListeners(o)}getDecisionDescription(t,e){const n=e.decision,s=e.atnStartState.ruleIndex,i=t.ruleNames;if(s<0||s>=i.length)return""+n;const r=i[s]||null;return null===r||0===r.length?""+n:`${n} (${r})`}getConflictingAlts(t,e){if(null!==t)return t;const n=new K;for(let t=0;t=this._size)throw"cannot consume EOF";this._index+=1}LA(e){if(0===e)return 0;e<0&&(e+=1);const n=this._index+e-1;return n<0||n>=this._size?t.EOF:this.data[n]}LT(t){return this.LA(t)}mark(){return-1}release(t){}seek(t){t<=this._index?this._index=t:this._index=Math.min(t,this._size)}getText(t,e){if(e>=this._size&&(e=this._size-1),t>=this._size)return"";if(this.decodeToUnicodeCodePoints){let n="";for(let s=t;s<=e;s++)n+=String.fromCodePoint(this.data[s]);return n}return this.strdata.slice(t,e+1)}toString(){return this.strdata}get index(){return this._index}get size(){return this._size}}var ue=n(654);const de={fromString:function(t){return new ce(t,!0)},fromBlob:function(t,e,n,s){const i=new window.FileReader;i.onload=function(t){const e=new ce(t.target.result,!0);n(e)},i.onerror=s,i.readAsText(t,e)},fromBuffer:function(t,e){return new ce(t.toString(e),!0)},fromPath:function(t,e,n){ue.readFile(t,e,(function(t,e){let s=null;null!==e&&(s=new ce(e,!0)),n(t,s)}))},fromPathSync:function(t,e){const n=ue.readFileSync(t,e);return new ce(n,!0)}};class pe extends ee{constructor(t){super(),this.parser=t}enterEveryRule(t){console.log("enter "+this.parser.ruleNames[t.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}visitTerminal(t){console.log("consume "+t.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])}exitEveryRule(t){console.log("exit "+this.parser.ruleNames[t.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}}class ge extends kt{constructor(t){super(),this._input=null,this._errHandler=new le,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(t)}reset(){null!==this._input&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),null!==this._interp&&this._interp.reset()}match(t){let e=this.getCurrentToken();return e.type===t?(this._errHandler.reportMatch(this),this.consume()):(e=this._errHandler.recoverInline(this),this.buildParseTrees&&-1===e.tokenIndex&&this._ctx.addErrorNode(e)),e}matchWildcard(){let t=this.getCurrentToken();return t.type>0?(this._errHandler.reportMatch(this),this.consume()):(t=this._errHandler.recoverInline(this),this._buildParseTrees&&-1===t.tokenIndex&&this._ctx.addErrorNode(t)),t}getParseListeners(){return this._parseListeners||[]}addParseListener(t){if(null===t)throw"listener";null===this._parseListeners&&(this._parseListeners=[]),this._parseListeners.push(t)}removeParseListener(t){if(null!==this._parseListeners){const e=this._parseListeners.indexOf(t);e>=0&&this._parseListeners.splice(e,1),0===this._parseListeners.length&&(this._parseListeners=null)}}removeParseListeners(){this._parseListeners=null}triggerEnterRuleEvent(){if(null!==this._parseListeners){const t=this._ctx;this._parseListeners.forEach((function(e){e.enterEveryRule(t),t.enterRule(e)}))}}triggerExitRuleEvent(){if(null!==this._parseListeners){const t=this._ctx;this._parseListeners.slice(0).reverse().forEach((function(e){t.exitRule(e),e.exitEveryRule(t)}))}}getTokenFactory(){return this._input.tokenSource._factory}setTokenFactory(t){this._input.tokenSource._factory=t}getATNWithBypassAlts(){const t=this.getSerializedATN();if(null===t)throw"The current parser does not support an ATN with bypass alternatives.";let e=this.bypassAltsAtnCache[t];if(null===e){const n=new dt;n.generateRuleBypassTransitions=!0,e=new At(n).deserialize(t),this.bypassAltsAtnCache[t]=e}return e}getInputStream(){return this.getTokenStream()}setInputStream(t){this.setTokenStream(t)}getTokenStream(){return this._input}setTokenStream(t){this._input=null,this.reset(),this._input=t}getCurrentToken(){return this._input.LT(1)}notifyErrorListeners(t,e,n){n=n||null,null===(e=e||null)&&(e=this.getCurrentToken()),this._syntaxErrors+=1;const s=e.line,i=e.column;this.getErrorListenerDispatch().syntaxError(this,e,s,i,t,n)}consume(){const e=this.getCurrentToken();e.type!==t.EOF&&this.getInputStream().consume();const n=null!==this._parseListeners&&this._parseListeners.length>0;if(this.buildParseTrees||n){let t;t=this._errHandler.inErrorRecoveryMode(this)?this._ctx.addErrorNode(e):this._ctx.addTokenNode(e),t.invokingState=this.state,n&&this._parseListeners.forEach((function(e){t instanceof R||void 0!==t.isErrorNode&&t.isErrorNode()?e.visitErrorNode(t):t instanceof O&&e.visitTerminal(t)}))}return e}addContextToParseTree(){null!==this._ctx.parentCtx&&this._ctx.parentCtx.addChild(this._ctx)}enterRule(t,e,n){this.state=e,this._ctx=t,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),this.triggerEnterRuleEvent()}exitRule(){this._ctx.stop=this._input.LT(-1),this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx}enterOuterAlt(t,e){t.setAltNumber(e),this.buildParseTrees&&this._ctx!==t&&null!==this._ctx.parentCtx&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(t)),this._ctx=t}getPrecedence(){return 0===this._precedenceStack.length?-1:this._precedenceStack[this._precedenceStack.length-1]}enterRecursionRule(t,e,n,s){this.state=e,this._precedenceStack.push(s),this._ctx=t,this._ctx.start=this._input.LT(1),this.triggerEnterRuleEvent()}pushNewRecursionContext(t,e,n){const s=this._ctx;s.parentCtx=t,s.invokingState=e,s.stop=this._input.LT(-1),this._ctx=t,this._ctx.start=s.start,this.buildParseTrees&&this._ctx.addChild(s),this.triggerEnterRuleEvent()}unrollRecursionContexts(t){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);const e=this._ctx,n=this.getParseListeners();if(null!==n&&n.length>0)for(;this._ctx!==t;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=t;e.parentCtx=t,this.buildParseTrees&&null!==t&&t.addChild(e)}getInvokingContext(t){let e=this._ctx;for(;null!==e;){if(e.ruleIndex===t)return e;e=e.parentCtx}return null}precpred(t,e){return e>=this._precedenceStack[this._precedenceStack.length-1]}inContext(t){return!1}isExpectedToken(e){const n=this._interp.atn;let s=this._ctx;const i=n.states[this.state];let r=n.nextTokens(i);if(r.contains(e))return!0;if(!r.contains(t.EPSILON))return!1;for(;null!==s&&s.invokingState>=0&&r.contains(t.EPSILON);){const t=n.states[s.invokingState].transitions[0];if(r=n.nextTokens(t.followState),r.contains(e))return!0;s=s.parentCtx}return!(!r.contains(t.EPSILON)||e!==t.EOF)}getExpectedTokens(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)}getExpectedTokensWithinCurrentRule(){const t=this._interp.atn,e=t.states[this.state];return t.nextTokens(e)}getRuleIndex(t){const e=this.getRuleIndexMap()[t];return null!==e?e:-1}getRuleInvocationStack(t){null===(t=t||null)&&(t=this._ctx);const e=[];for(;null!==t;){const n=t.ruleIndex;n<0?e.push("n/a"):e.push(this.ruleNames[n]),t=t.parentCtx}return e}getDFAStrings(){return this._interp.decisionToDFA.toString()}dumpDFA(){let t=!1;for(let e=0;e0&&(t&&console.log(),this.printer.println("Decision "+n.decision+":"),this.printer.print(n.toString(this.literalNames,this.symbolicNames)),t=!0)}}getSourceName(){return this._input.sourceName}setTrace(t){t?(null!==this._tracer&&this.removeParseListener(this._tracer),this._tracer=new pe(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)}}ge.bypassAltsAtnCache={};class fe extends O{constructor(t){super(),this.parentCtx=null,this.symbol=t}getChild(t){return null}getSymbol(){return this.symbol}getParent(){return this.parentCtx}getPayload(){return this.symbol}getSourceInterval(){if(null===this.symbol)return x.INVALID_INTERVAL;const t=this.symbol.tokenIndex;return new x(t,t)}getChildCount(){return 0}accept(t){return t.visitTerminal(this)}getText(){return this.symbol.text}toString(){return this.symbol.type===t.EOF?"":this.symbol.text}}class xe extends fe{constructor(t){super(t)}isErrorNode(){return!0}accept(t){return t.visitErrorNode(this)}}class Te extends w{constructor(t,e){super(t=t||null,e=e||null),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}copyFrom(t){this.parentCtx=t.parentCtx,this.invokingState=t.invokingState,this.children=null,this.start=t.start,this.stop=t.stop,t.children&&(this.children=[],t.children.map((function(t){t instanceof xe&&(this.children.push(t),t.parentCtx=this)}),this))}enterRule(t){}exitRule(t){}addChild(t){return null===this.children&&(this.children=[]),this.children.push(t),t}removeLastChild(){null!==this.children&&this.children.pop()}addTokenNode(t){const e=new fe(t);return this.addChild(e),e.parentCtx=this,e}addErrorNode(t){const e=new xe(t);return this.addChild(e),e.parentCtx=this,e}getChild(t,e){if(e=e||null,null===this.children||t<0||t>=this.children.length)return null;if(null===e)return this.children[t];for(let n=0;n=this.children.length)return null;for(let n=0;n=0&&(this.fetchedEOF?this.index0)||this.fetch(e)>=e}fetch(e){if(this.fetchedEOF)return 0;for(let n=0;n=this.tokens.length&&(n=this.tokens.length-1);for(let r=e;r=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[e]}adjustSeekIndex(t){return t}lazyInit(){-1===this.index&&this.setup()}setup(){this.sync(0),this.index=this.adjustSeekIndex(0)}setTokenSource(t){this.tokenSource=t,this.tokens=[],this.index=-1,this.fetchedEOF=!1}nextTokenOnChannel(e,n){if(this.sync(e),e>=this.tokens.length)return-1;let s=this.tokens[e];for(;s.channel!==this.channel;){if(s.type===t.EOF)return-1;e+=1,this.sync(e),s=this.tokens[e]}return e}previousTokenOnChannel(t,e){for(;t>=0&&this.tokens[t].channel!==e;)t-=1;return t}getHiddenTokensToRight(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;const n=this.nextTokenOnChannel(t+1,wt.DEFAULT_TOKEN_CHANNEL),s=t+1,i=-1===n?this.tokens.length-1:n;return this.filterForChannel(s,i,e)}getHiddenTokensToLeft(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;const n=this.previousTokenOnChannel(t-1,wt.DEFAULT_TOKEN_CHANNEL);if(n===t-1)return null;const s=n+1,i=t-1;return this.filterForChannel(s,i,e)}filterForChannel(t,e,n){const s=[];for(let i=t;i=this.tokens.length&&(s=this.tokens.length-1);let i="";for(let e=n;enew me.dfa.DFA(t,e)));class Ae extends me.Lexer{static grammarFileName="DTS.g4";static channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"];static modeNames=["DEFAULT_MODE"];static literalNames=[null,"'{'","'}'","','",null,null,null,null,null,null,"'='","';'","'/'"];static symbolicNames=[null,null,null,null,"STRING","NUMBER2","ARR","KEY","NUMBER","WS","EQ","SEMICOLON","ROOT","VERSION"];static ruleNames=["T__0","T__1","T__2","STRING","NUMBER2","ARR","KEY","ESC","UNICODE","HEX","SAFECODEPOINT","NUMBER","INT","EXP","WS","EQ","SEMICOLON","ROOT","VERSION"];constructor(t){super(t),this._interp=new me.atn.LexerATNSimulator(this,_e,Ce,new me.PredictionContextCache)}get atn(){return _e}}Ae.EOF=me.Token.EOF,Ae.T__0=1,Ae.T__1=2,Ae.T__2=3,Ae.STRING=4,Ae.NUMBER2=5,Ae.ARR=6,Ae.KEY=7,Ae.NUMBER=8,Ae.WS=9,Ae.EQ=10,Ae.SEMICOLON=11,Ae.ROOT=12,Ae.VERSION=13;class Ne extends me.tree.ParseTreeListener{enterDts(t){}exitDts(t){}enterDic(t){}exitDic(t){}enterPair(t){}exitPair(t){}enterArray(t){}exitArray(t){}enterValue(t){}exitValue(t){}visitTerminal(t){}}class ye extends me.tree.ParseTreeVisitor{visitDts(t){return this.visitChildren(t)}visitDic(t){return this.visitChildren(t)}visitPair(t){return this.visitChildren(t)}visitArray(t){return this.visitChildren(t)}visitValue(t){return this.visitChildren(t)}}const Ie=(new me.atn.ATNDeserializer).deserialize([4,1,13,49,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,1,0,1,0,1,0,1,0,1,1,1,1,5,1,17,8,1,10,1,12,1,20,9,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,38,8,2,1,3,1,3,1,3,4,3,43,8,3,11,3,12,3,44,1,4,1,4,1,4,0,0,5,0,2,4,6,8,0,1,2,0,4,6,8,8,47,0,10,1,0,0,0,2,14,1,0,0,0,4,37,1,0,0,0,6,39,1,0,0,0,8,46,1,0,0,0,10,11,5,13,0,0,11,12,3,4,2,0,12,13,5,0,0,1,13,1,1,0,0,0,14,18,5,1,0,0,15,17,3,4,2,0,16,15,1,0,0,0,17,20,1,0,0,0,18,16,1,0,0,0,18,19,1,0,0,0,19,21,1,0,0,0,20,18,1,0,0,0,21,22,5,2,0,0,22,3,1,0,0,0,23,24,5,7,0,0,24,25,5,10,0,0,25,26,3,8,4,0,26,27,5,11,0,0,27,38,1,0,0,0,28,29,5,7,0,0,29,30,5,10,0,0,30,31,3,6,3,0,31,32,5,11,0,0,32,38,1,0,0,0,33,34,5,7,0,0,34,35,3,2,1,0,35,36,5,11,0,0,36,38,1,0,0,0,37,23,1,0,0,0,37,28,1,0,0,0,37,33,1,0,0,0,38,5,1,0,0,0,39,42,3,8,4,0,40,41,5,3,0,0,41,43,3,8,4,0,42,40,1,0,0,0,43,44,1,0,0,0,44,42,1,0,0,0,44,45,1,0,0,0,45,7,1,0,0,0,46,47,7,0,0,0,47,9,1,0,0,0,3,18,37,44]),ke=Ie.decisionToState.map(((t,e)=>new me.dfa.DFA(t,e))),Oe=new me.PredictionContextCache;class Re extends me.Parser{static grammarFileName="DTS.g4";static literalNames=[null,"'{'","'}'","','",null,null,null,null,null,null,"'='","';'","'/'"];static symbolicNames=[null,null,null,null,"STRING","NUMBER2","ARR","KEY","NUMBER","WS","EQ","SEMICOLON","ROOT","VERSION"];static ruleNames=["dts","dic","pair","array","value"];constructor(t){super(t),this._interp=new me.atn.ParserATNSimulator(this,Ie,ke,Oe),this.ruleNames=Re.ruleNames,this.literalNames=Re.literalNames,this.symbolicNames=Re.symbolicNames}get atn(){return Ie}dts(){let t=new Le(this,this._ctx,this.state);this.enterRule(t,0,Re.RULE_dts);try{this.enterOuterAlt(t,1),this.state=10,this.match(Re.VERSION),this.state=11,this.pair(),this.state=12,this.match(Re.EOF)}catch(e){if(!(e instanceof me.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t}dic(){let t=new ve(this,this._ctx,this.state);this.enterRule(t,2,Re.RULE_dic);var e=0;try{for(this.enterOuterAlt(t,1),this.state=14,this.match(Re.T__0),this.state=18,this._errHandler.sync(this),e=this._input.LA(1);e===Re.KEY;)this.state=15,this.pair(),this.state=20,this._errHandler.sync(this),e=this._input.LA(1);this.state=21,this.match(Re.T__1)}catch(e){if(!(e instanceof me.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t}pair(){let t=new we(this,this._ctx,this.state);this.enterRule(t,4,Re.RULE_pair);try{switch(this.state=37,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,1,this._ctx)){case 1:this.enterOuterAlt(t,1),this.state=23,this.match(Re.KEY),this.state=24,this.match(Re.EQ),this.state=25,this.value(),this.state=26,this.match(Re.SEMICOLON);break;case 2:this.enterOuterAlt(t,2),this.state=28,this.match(Re.KEY),this.state=29,this.match(Re.EQ),this.state=30,this.array(),this.state=31,this.match(Re.SEMICOLON);break;case 3:this.enterOuterAlt(t,3),this.state=33,this.match(Re.KEY),this.state=34,this.dic(),this.state=35,this.match(Re.SEMICOLON)}}catch(e){if(!(e instanceof me.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t}array(){let t=new Pe(this,this._ctx,this.state);this.enterRule(t,6,Re.RULE_array);var e=0;try{this.enterOuterAlt(t,1),this.state=39,this.value(),this.state=42,this._errHandler.sync(this),e=this._input.LA(1);do{this.state=40,this.match(Re.T__2),this.state=41,this.value(),this.state=44,this._errHandler.sync(this),e=this._input.LA(1)}while(e===Re.T__2)}catch(e){if(!(e instanceof me.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t}value(){let t=new be(this,this._ctx,this.state);this.enterRule(t,8,Re.RULE_value);var e=0;try{this.enterOuterAlt(t,1),this.state=46,0!=(-32&(e=this._input.LA(1)))||0==(1<e||t<0||e<0||e>=this.tokens.tokens.length)throw new RangeError(`replace: range invalid: ${t}..${e}(size=${this.tokens.tokens.length})`);let i=this.getProgram(s),r=new Be(this.tokens,t,e,i.length,n);i.push(r)}delete(t,e,n=De.DEFAULT_PROGRAM_NAME){void 0===e&&(e=t),this.replace(t,e,"",n)}getProgram(t){let e=this.programs.get(t);return null==e&&(e=this.initializeProgram(t)),e}initializeProgram(t){const e=[];return this.programs.set(t,e),e}getText(t,e=De.DEFAULT_PROGRAM_NAME){let n;n=t instanceof me.Interval?t:new me.Interval(0,this.tokens.tokens.length-1),"string"==typeof t&&(e=t);const s=this.programs.get(e);let i=n.start,r=n.stop;if(r>this.tokens.tokens.length-1&&(r=this.tokens.tokens.length-1),i<0&&(i=0),null==s||0===s.length)return this.tokens.getText(n);let o=[],a=this.reduceToSingleOperationPerIndex(s),l=i;for(;l<=r&&l=this.tokens.tokens.length-1&&o.push(t.text.toString());return o.join("")}reduceToSingleOperationPerIndex(t){for(let e=0;es.index&&e.index<=s.lastIndex&&(t[e.instructionIndex]=void 0);let r=this.getKindOfOps(t,Be,e);for(let e of r){if(e.index>=s.index&&e.lastIndex<=s.lastIndex){t[e.instructionIndex]=void 0;continue}let n=e.lastIndexs.lastIndex;if(null!=e.text||null!=s.text||n){if(!n)throw new Error(`replace op boundaries of ${s} overlap with previous ${e}`)}else t[e.instructionIndex]=void 0,s.index=Math.min(e.index,s.index),s.lastIndex=Math.max(e.lastIndex,s.lastIndex)}}for(let e=0;e=n.index&&s.index<=n.lastIndex)throw new Error(`insert op ${s} within boundaries of previous ${n}`)}else n.text=this.catOpText(s.text,n.text),t[e]=void 0}let e=new Map;for(let n of t)if(null!=n){if(null!=e.get(n.index))throw new Error("should only be one op per index");e.set(n.index,n)}return e}catOpText(t,e){let n="",s="";return null!=t&&(n=t.toString()),null!=e&&(s=e.toString()),n+s}getKindOfOps(t,e,n){let s=[];for(let i=0;i'}}class Me extends Fe{constructor(t,e,n,s){super(t,e,n,s)}execute(t){return t.push(this.text.toString()),this.tokens.get(this.index).type!==me.Token.EOF&&t.push(String(this.tokens.get(this.index).text)),this.index+1}}class Ue extends Me{constructor(t,e,n,s){super(t,e+1,n,s)}}class Be extends Fe{constructor(t,e,n,s,i){super(t,e,s,i),this.lastIndex=n}execute(t){return null!=this.text&&t.push(this.text.toString()),this.lastIndex+1}toString(){return null==this.text?"":"'}}String.format||(String.format=function(t){let e=Array.prototype.slice.call(arguments,1);return t.replace(/{(\d+)}/g,(function(t,n){return void 0!==e[n]?e[n]:t}))});const Ve=scriptArgs;(Ve.length<2||Ve.length>3)&&(std.out.printf("Usage: qjs dts.js [output path]\n"),std.exit(1));let He=Ve[1],Ke=Ve.length>2?Ve[2]:He+".out";const qe=std.loadFile(He),Ye=new Ae(new me.InputStream(qe)),ze=new me.CommonTokenStream(Ye),Ge=new Re(ze);Ge.buildParseTrees=!0;const We=Ge.dts(),je=new me.tree.ParseTreeWalker,Qe=new class extends Ne{static tokens;static rewriter;constructor(t){super(),this.tokens=t,this.rewriter=new De(t)}enterDts(t){}exitDts(t){}enterDic(t){}exitDic(t){}enterPair(t){}exitPair(t){}enterArray(t){}exitArray(t){}enterValue(t){}exitValue(t){}tabCnt=0;lastKey="";map=new Map;visitTerminal(t){t.getSymbol().type===Re.T__0&&this.tabCnt++,t.getSymbol().type===Re.T__1&&this.tabCnt--,t.getSymbol().type!==Re.KEY&&t.getSymbol().type!==Re.T__1||this.rewriter.insertBefore(t.getSymbol(),"\t".repeat(Math.max(0,this.tabCnt))),t.getSymbol().type!==Re.SEMICOLON&&t.getSymbol().type!==Re.T__0&&t.getSymbol().type!==Re.VERSION||this.rewriter.insertAfter(t.getSymbol(),"\n"),t.getSymbol().type!==Re.KEY&&t.getSymbol().type!==Re.EQ||this.rewriter.insertAfter(t.getSymbol()," "),t.getSymbol().type===Re.KEY&&("/"===t.getText()?this.lastKey="/":this.lastKey+="/"+t.getText(),this.map.set(this.lastKey.replace("//","/"),t.getSymbol().tokenIndex)),t.getSymbol().type===Re.SEMICOLON&&(this.lastKey=this.lastKey.substring(0,this.lastKey.lastIndexOf("/"))),super.visitTerminal(t)}put(t,e){let n=this.map.get(t);if(console.log("modify path "+t),null==n)console.log("[err] path not found");else{if(this.tokens.get(n+1).type===Re.EQ){let t=this.tokens.get(n+2);return console.log("[ok] value "+e),this.rewriter.replaceSingle(t,e),1}console.log("[err] path not correct")}return 0}}(ze);je.walk(Qe,We);const $e="/sys/block/";let Xe=os.readdir($e);if(0===Xe[1]){let t="/sys/block/sata",e=/\/sys\/block\/nvme(\d{1,2})n(\d{1,2})/i;for(let n in Xe[0]){let s=$e+Xe[0][n];try{if(std.out.printf("start processing path:%s\n",s),s.toString().startsWith(t)){let e=Number.parseInt(s.toString().substring(t.length)),n=Je(s+"/device/syno_block_info");"ahci"===n.get("driver")?(Qe.put(String.format("/internal_slot@{0}/ahci/pcie_root",e),String.format('"{0}"',n.get("pciepath"))),Qe.put(String.format("/internal_slot@{0}/ahci/ata_port",e),String.format("<0x{0}>",Number.parseInt(n.get("ata_port_no")).toString(16).padStart(2,"0")))):std.out.printf("not ahci\n")}else if(s.toString().startsWith("/sys/block/nvme")){let t;if(t=e.exec(s.toString())){let e=Number.parseInt(t[1]),n=Je(s+"/device/syno_block_info");Qe.put(String.format("/nvme_slot@{0}/pcie_root",e+1),String.format('"{0}"',n.get("pciepath")))}else std.out.printf("nvme not found\n")}else std.out.printf("unsupported\n")}catch(t){std.out.printf("update path: %s to dts error: %s\n",s,t.message),std.exit(1)}}const n=std.open(Ke,"w");n.puts(Qe.rewriter.getText()),n.close()}else std.out.printf("update dts error:%d\n",Xe[1]),std.exit(1);function Je(t){const e=std.open(t,"r");let n=new Map;for(;;){let t=e.getline();if(null===t)break;let s=t.indexOf("=");if(s>0){let e=t.substring(0,s),i=t.substring(s+1);n.set(e,i),std.out.printf("%s = %s\n",e,i)}}return e.close(),n}})()})(); \ No newline at end of file diff --git a/redpill-qjs-dtb/src/install.sh b/redpill-qjs-dtb/src/install.sh new file mode 100644 index 000000000..f8bbb21fa --- /dev/null +++ b/redpill-qjs-dtb/src/install.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# copy file +cp -vf /etc.defaults/model.dtb /tmpRoot/etc.defaults/model.dtb diff --git a/redpill-qjs-dtb/src/install_rd.sh b/redpill-qjs-dtb/src/install_rd.sh new file mode 100644 index 000000000..d0467a9ba --- /dev/null +++ b/redpill-qjs-dtb/src/install_rd.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +tar -zxvf patch.tar.gz +# install dtc +chmod +x dtc +cp dtc /usr/sbin/dtc + +# copy file +if [ ! -f model_${PLATFORM_ID%%_*}.dtb ]; then + # Dynamic generation + ./dtc -I dtb -O dts -o output.dts /etc.defaults/model.dtb + qjs --std ./dts.js output.dts output.dts.out + if [ $? -ne 0 ]; then + echo "auto generated dts file is broken" + exit 0 + fi + ./dtc -I dts -O dtb -o model_r2.dtb output.dts.out + cp -vf model_r2.dtb /etc.defaults/model.dtb + cp -vf model_r2.dtb /var/run/model.dtb +else + cp -vf model_${PLATFORM_ID%%_*}.dtb /etc.defaults/model.dtb + cp -vf model_${PLATFORM_ID%%_*}.dtb /var/run/model.dtb +fi diff --git a/redpill-qjs-dtb/src/package.sh b/redpill-qjs-dtb/src/package.sh new file mode 100644 index 000000000..eefede750 --- /dev/null +++ b/redpill-qjs-dtb/src/package.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +tar --owner=root --group=root -czf patch.tar.gz --mode='+x' dtc dts.js +tar --owner=root --group=root -czf ../releases/package.tgz --mode='+x' install_rd.sh install.sh patch.tar.gz +sha256sum ../releases/package.tgz diff --git a/redpill-qjs-dtb/src/patch.tar.gz b/redpill-qjs-dtb/src/patch.tar.gz new file mode 100644 index 000000000..6cdaae2b5 Binary files /dev/null and b/redpill-qjs-dtb/src/patch.tar.gz differ diff --git a/redpill-runtime-qjs/README.md b/redpill-runtime-qjs/README.md new file mode 100644 index 000000000..7470cd0a4 --- /dev/null +++ b/redpill-runtime-qjs/README.md @@ -0,0 +1 @@ +QuickJS Javascript Engine diff --git a/redpill-runtime-qjs/recipes/universal.json b/redpill-runtime-qjs/recipes/universal.json new file mode 100644 index 000000000..c59099e73 --- /dev/null +++ b/redpill-runtime-qjs/recipes/universal.json @@ -0,0 +1,13 @@ +{ + "files": [ + { + "name": "package.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/releases/package.tgz", + "sha256": "b9cf044131288c295c38841dc8e15d9f5fc51229ae4138713cdeaab96eb615f2", + "packed": true + } + ], + "scripts": { + "on_boot": "install_rd.sh" + } +} diff --git a/redpill-runtime-qjs/releases/package.tgz b/redpill-runtime-qjs/releases/package.tgz new file mode 100644 index 000000000..a37960a48 Binary files /dev/null and b/redpill-runtime-qjs/releases/package.tgz differ diff --git a/redpill-runtime-qjs/rpext-index.json b/redpill-runtime-qjs/rpext-index.json new file mode 100644 index 000000000..b5089cf67 --- /dev/null +++ b/redpill-runtime-qjs/rpext-index.json @@ -0,0 +1,19 @@ +{ + "id": "jumkey.qjs.000", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/rpext-index.json", + "info": { + "name": "QuickJS Javascript Engine", + "description": "QuickJS Javascript Engine", + "author_url": "https://bellard.org/", + "packer_url": "https://bellard.org/quickjs/", + "help_url": "https://bellard.org/quickjs/quickjs.html" + }, + "releases": { + "_": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json", + "ds918p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json", + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-runtime-qjs/recipes/universal.json" + } +} diff --git a/redpill-runtime-qjs/src/install_rd.sh b/redpill-runtime-qjs/src/install_rd.sh new file mode 100644 index 000000000..7e59b1cda --- /dev/null +++ b/redpill-runtime-qjs/src/install_rd.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# download from https://bellard.org/quickjs/binary_releases/quickjs-linux-x86_64-2021-03-27.zip +tar -zxvf qjs.tar.gz +# install qjs +chmod +x qjs +cp qjs /usr/sbin/qjs + +qjs -e 'console.log("hello world from qjs")' diff --git a/redpill-runtime-qjs/src/package.sh b/redpill-runtime-qjs/src/package.sh new file mode 100644 index 000000000..00fb114a7 --- /dev/null +++ b/redpill-runtime-qjs/src/package.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +tar --owner=root --group=root -czf qjs.tar.gz --mode='+x' qjs +tar --owner=root --group=root -czf ../releases/package.tgz --mode='+x' qjs.tar.gz install_rd.sh +sha256sum ../releases/package.tgz diff --git a/redpill-runtime-qjs/src/qjs b/redpill-runtime-qjs/src/qjs new file mode 100644 index 000000000..84a05e4c2 Binary files /dev/null and b/redpill-runtime-qjs/src/qjs differ diff --git a/redpill-runtime-qjs/src/qjs.tar.gz b/redpill-runtime-qjs/src/qjs.tar.gz new file mode 100644 index 000000000..c5c1e8735 Binary files /dev/null and b/redpill-runtime-qjs/src/qjs.tar.gz differ diff --git a/redpill-virtio/recipes/ds1621p_41890.json b/redpill-virtio/recipes/ds1621p_41890.json new file mode 100644 index 000000000..032edf61f --- /dev/null +++ b/redpill-virtio/recipes/ds1621p_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/v1000/virtio-4.4.180p.tgz", + "sha256": "a34ba4c9a859dd6e35c78690fa6fab513dd8bf841f72734a7d60b143f629c167", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/ds3617xs_41890.json b/redpill-virtio/recipes/ds3617xs_41890.json new file mode 100644 index 000000000..81379f8b3 --- /dev/null +++ b/redpill-virtio/recipes/ds3617xs_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/broadwell/virtio-4.4.180p.tgz", + "sha256": "30cfbda0ccd3a4a13f69e0feaa1a96f51b084ffe6a1385a1bef9ffc299be8bc8", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/ds3622xsp_41890.json b/redpill-virtio/recipes/ds3622xsp_41890.json new file mode 100644 index 000000000..c3264f0f4 --- /dev/null +++ b/redpill-virtio/recipes/ds3622xsp_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/broadwellnk/virtio-4.4.180p.tgz", + "sha256": "e4d0ee5ffea113ada7bf7df6d0dec5b671f87c72824e990cbec200daa06f04c3", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/ds918p_41890.json b/redpill-virtio/recipes/ds918p_41890.json new file mode 100644 index 000000000..74a49a268 --- /dev/null +++ b/redpill-virtio/recipes/ds918p_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/apollolake/virtio-4.4.180p.tgz", + "sha256": "2646dd9ba1515f6e321057c3b22c3214d7b243e37ba2264dc864d95c3ea9ebdc", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/ds920p_41890.json b/redpill-virtio/recipes/ds920p_41890.json new file mode 100644 index 000000000..7b2bb4966 --- /dev/null +++ b/redpill-virtio/recipes/ds920p_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/geminilake/virtio-4.4.180p.tgz", + "sha256": "4fb7d2b4a72f100c0c1d3aceeae769dbafd08fcccda6e13a9e02e15582f71ebd", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/ds923p_42962.json b/redpill-virtio/recipes/ds923p_42962.json new file mode 100644 index 000000000..b4639d666 --- /dev/null +++ b/redpill-virtio/recipes/ds923p_42962.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/r1000/virtio-4.4.180p.tgz", + "sha256": "5ad8536b79066f9984b005b379f1afd322564bc4a682359b0ae57c7896d19b72", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/recipes/dva3221_41890.json b/redpill-virtio/recipes/dva3221_41890.json new file mode 100644 index 000000000..ff25e87d7 --- /dev/null +++ b/redpill-virtio/recipes/dva3221_41890.json @@ -0,0 +1,32 @@ +{ + "mod_version": "v1", + + "files": [ + { + "name": "check-virtio.sh", + "url": "https://raw.githubusercontent.com/RedPill-TTG/redpill-virtio/master/src/check-virtio.sh", + "sha256": "cedced0bf29ff691ab6b4a7e2001efa40b2cc5fd31e3a9834d210a4b3408ded8", + "packed": false + }, + { + "name": "virtio-4.4.180p.tgz", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/releases/v1.0.0/denverton/virtio-4.4.180p.tgz", + "sha256": "2898522c4ea162f0050ae07a11a889eabfd09a0369bf4386cfcad69eeed1e89e", + "packed": true + } + ], + + "kmods": { + "virtio.ko": "", + "virtio_ring.ko": "", + "virtio_mmio.ko": "", + "virtio_pci.ko": "", + "virtio_blk.ko": "", + "virtio_net.ko": "", + "virtio_scsi.ko": "" + }, + + "scripts": { + "check_kmod": "check-virtio.sh" + } +} diff --git a/redpill-virtio/releases/v1.0.0/apollolake/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/apollolake/virtio-4.4.180p.tgz new file mode 100644 index 000000000..1f4d1a789 Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/apollolake/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/broadwell/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/broadwell/virtio-4.4.180p.tgz new file mode 100644 index 000000000..e90d36762 Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/broadwell/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/broadwellnk/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/broadwellnk/virtio-4.4.180p.tgz new file mode 100644 index 000000000..cf96bdb1d Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/broadwellnk/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/denverton/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/denverton/virtio-4.4.180p.tgz new file mode 100644 index 000000000..b715d453b Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/denverton/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/geminilake/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/geminilake/virtio-4.4.180p.tgz new file mode 100644 index 000000000..e8cf44258 Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/geminilake/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/r1000/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/r1000/virtio-4.4.180p.tgz new file mode 100644 index 000000000..0c2cdb26c Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/r1000/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/releases/v1.0.0/v1000/virtio-4.4.180p.tgz b/redpill-virtio/releases/v1.0.0/v1000/virtio-4.4.180p.tgz new file mode 100644 index 000000000..629589100 Binary files /dev/null and b/redpill-virtio/releases/v1.0.0/v1000/virtio-4.4.180p.tgz differ diff --git a/redpill-virtio/rpext-index.json b/redpill-virtio/rpext-index.json new file mode 100644 index 000000000..5cb77be4b --- /dev/null +++ b/redpill-virtio/rpext-index.json @@ -0,0 +1,30 @@ +{ + "id": "thethorgroup.virtio", + "url": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/rpext-index.json", + "info": { + "name": "VirtIO", + "description": "Adds VirtIO support for fast network/PCI/SCSI/network/console paravirtualization under QEmu (Proxmox, VirtualBox, virsh, and similar)", + "author_url": "https://www.linux-kvm.org/page/Virtio", + "packer_url": "https://github.com/RedPill-TTG/redpill-virtio", + "help_url": "" + }, + "releases": { + "ds920p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds920p_41890.json", + "ds1621p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds1621p_41890.json", + "ds2422p_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds1621p_41890.json", + "dva3221_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/dva3221_41890.json", + "ds923p_42962": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds923p_42962.json", + "ds920p_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds920p_41890.json", + "dva1622_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds920p_41890.json", + "ds3617xs_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds3617xs_41890.json", + "ds3622xsp_42218": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds3622xsp_41890.json", + "ds3622xsp_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds3622xsp_41890.json", + "rs3621xsp_42661": "https://github.com/jumkey/redpill-load/raw/develop/redpill-virtio/recipes/ds3622xsp_41890.json", + "ds3615xs_25556": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds3615xs_25556.json", + "ds3615xs_41222": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds3615xs_41222.json", + "ds3615xs_42218": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds3615xs_41222.json", + "ds918p_25556": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds918p_25556.json", + "ds918p_41890": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds918p_41890.json", + "ds918p_42218": "https://github.com/RedPill-TTG/redpill-virtio/raw/master/recipes/ds918p_41890.json" + } +} diff --git a/tools/rebuild_all.sh b/tools/rebuild_all.sh index 881fc8b1a..329a4c815 100755 --- a/tools/rebuild_all.sh +++ b/tools/rebuild_all.sh @@ -18,8 +18,10 @@ set -euo pipefail echo "Building images" BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds3615.json ./build-loader.sh 'DS3615xs' '6.2.4-25556' "$PWD/images/rp-3615-v6$IMG_POSTFIX.img" BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds3615.json ./build-loader.sh 'DS3615xs' '7.0-41222' "$PWD/images/rp-3615-v7$IMG_POSTFIX.img" +BRP_JUN_MOD=1 BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds3615.json ./build-loader.sh 'DS3615xs' '7.0.1-42218' "$PWD/images/rp-3615-v7.0.1$IMG_POSTFIX.img" BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds918.json ./build-loader.sh 'DS918+' '6.2.4-25556' "$PWD/images/rp-918-v6$IMG_POSTFIX.img" BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds918.json ./build-loader.sh 'DS918+' '7.0-41890' "$PWD/images/rp-918-v7$IMG_POSTFIX.img" +BRP_JUN_MOD=1 BRP_DEBUG=1 BRP_USER_CFG=$PWD/user_config-ds918.json ./build-loader.sh 'DS918+' '7.0.1-42218' "$PWD/images/rp-918-v7.0.1$IMG_POSTFIX.img" echo "Generating VMDKs" @@ -27,13 +29,17 @@ echo "Generating VMDKs" # Otherwise ESXi panel refuses to see these VMDKs (?!) and none of these work: https://stackoverflow.com/q/37794846 qemu-img convert -f raw -O vmdk "$PWD/images/rp-3615-v6$IMG_POSTFIX.img" "$PWD/images/vrp-3615-v6$IMG_POSTFIX.vmdk" qemu-img convert -f raw -O vmdk "$PWD/images/rp-3615-v7$IMG_POSTFIX.img" "$PWD/images/vrp-3615-v7$IMG_POSTFIX.vmdk" +qemu-img convert -f raw -O vmdk "$PWD/images/rp-3615-v7.0.1$IMG_POSTFIX.img" "$PWD/images/vrp-3615-v7.0.1$IMG_POSTFIX.vmdk" qemu-img convert -f raw -O vmdk "$PWD/images/rp-918-v6$IMG_POSTFIX.img" "$PWD/images/vrp-918-v6$IMG_POSTFIX.vmdk" qemu-img convert -f raw -O vmdk "$PWD/images/rp-918-v7$IMG_POSTFIX.img" "$PWD/images/vrp-918-v7$IMG_POSTFIX.vmdk" +qemu-img convert -f raw -O vmdk "$PWD/images/rp-918-v7.0.1$IMG_POSTFIX.img" "$PWD/images/vrp-918-v7.0.1$IMG_POSTFIX.vmdk" echo "Packing raw images" gzip "$PWD/images/rp-3615-v6$IMG_POSTFIX.img" gzip "$PWD/images/rp-3615-v7$IMG_POSTFIX.img" +gzip "$PWD/images/rp-3615-v7.0.1$IMG_POSTFIX.img" gzip "$PWD/images/rp-918-v6$IMG_POSTFIX.img" gzip "$PWD/images/rp-918-v7$IMG_POSTFIX.img" +gzip "$PWD/images/rp-918-v7.0.1$IMG_POSTFIX.img" echo "OK"